use*_*171 17 iptables root node.js
我正在运行一个node.js服务器,它将在端口80和其他服务器上提供请求.显然,这需要以root身份运行应用程序(在Linux上).
以这篇文章(http://syskall.com/dont-run-node-dot-js-as-root)为例,很明显有一些简单的方法可以让节点作为非root用户运行,但我想知道是否有人对所建议的不同方法的优点/缺点有任何看法:
代码:在侦听端口80建立后,使用setuid()从root用户下载到非特权用户.
使用某种代理服务器将请求重定向到端口> 1024(因此不需要节点以root身份运行)
使用IP表转发到另一个端口(同上节点不会以root身份运行)
谢谢
Dan*_*iel 22
选项1要求您以root身份启动节点服务器.不理想.
选项2为每个处理的请求增加了开销,并为堆栈添加了另一个故障点.
选项3是最简单,最有效的方法.
要实现选项3,请将以下内容添加到系统初始化脚本中.(/etc/rc.d/rc.local在基于RedHat的系统上,如AWS).
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
Run Code Online (Sandbox Code Playgroud)
这将把请求从端口80重定向到端口3000.
(我没有足够的声誉来添加 Matt Browne 的评论,所以我写这个作为答案。随意编辑。)
有一种在重启后自动加载 iptables 规则的方法比 Matt Browne 的链接中描述的方法更简单:可以使用 apt-get 从存储库安装 iptables-persistent:
apt-get install iptables-persistent
Run Code Online (Sandbox Code Playgroud)
规则仍然需要像这样手动保存:
IPv4:
iptables-save > /etc/iptables/rules.v4
Run Code Online (Sandbox Code Playgroud)
IPv6:
iptables-save > /etc/iptables/rules.v6
Run Code Online (Sandbox Code Playgroud)
(来源:http : //www.thomas-krenn.com/de/wiki/Iptables_Firewall_Regeln_dauerhaft_speichern(德语))
我喜欢这个解决方法的简单性:
sudo setcap 'cap_net_bind_service=+ep' `which node`
Run Code Online (Sandbox Code Playgroud)
顺便说一句,它也适用于除 Nodejs 之外的程序。
基本上,作为第二个参数,您输入程序可执行文件的路径(如/usr/bin/nodejs在 Ubuntu 上),在上述情况下which node应动态提供它,从而使其独立于 Linux 发行版工作。
但请注意,当您升级 Nodejs 或可执行文件因其他原因被覆盖时,您将不得不再次执行相同的命令。
资料来源:
| 归档时间: |
|
| 查看次数: |
9470 次 |
| 最近记录: |