为啥在端口 80 上运行 node.js 可能不安全?
Posted
技术标签:
【中文标题】为啥在端口 80 上运行 node.js 可能不安全?【英文标题】:Why is running node.js on port 80 might not be safe?为什么在端口 80 上运行 node.js 可能不安全? 【发布时间】:2013-10-24 22:35:28 【问题描述】:我知道 nodejs 可以在 80 端口上运行:
使用 apache/nginx 设置代理 使用 iptables 规则设置端口重定向 在应用内的端口 80 上进行快速侦听第一个选项不是最简单的,并且需要比我需要的更多的依赖项。第二个可以工作,但在我的 OpenVZ VPS 上它不会(而且我无法编译自定义的 linux 内核)。
我也需要处理一些子域,在阅读了*** answer 之后,我尝试了第三种解决方案。 它运行良好且非常容易执行。
我想知道直接在 80 端口上运行 nodejs 时是否可能存在一些安全问题?我该如何修复/找到这些?
我想使用 pm2 来处理进程,它可能会运行 not as root (Goodbye node-forever hello pm2)。
【问题讨论】:
为什么会比其他端口安全? @dystroy:它可能不如通过 nginx 代理安全,以防有人发现 Node 的 HTTP 解析器中的漏洞。 @dystroy 好问题,所以使用代理、iptable 或直接在端口 80 上运行它会导致相同的安全问题? 如果您的防火墙没有屏蔽原始端口,那是肯定的。如果确实如此并且您使用了代理并且 Node 的 http 解析器中存在被代理掩盖的漏洞,那么此解决方案可能会更快。但我对此表示严重怀疑,在考虑这样的解决方案之前,我需要一个指向该漏洞的链接。 【参考方案1】:第一个选项不是最简单的,需要更多的依赖项然后我需要
请查看why should one use a http server in front of a framework web server 有很多正当理由您实际上应该这样做。
使用 iptables 规则设置端口重定向
这可能比直接让你的节点进程监听端口 80 更好,尽管我还没有看到生产中使用过这种类型的配置。
在应用内的端口 80 上进行快速侦听
这在功能上是一个糟糕的选择,因为您没有获得上面链接答案中概述的好处,但是,从严格的安全角度来看,要记住的关键是 您不能以 root 身份运行您的节点进程,这将是一个可怕的安全问题。您必须是 root 才能绑定到端口 80,因为这是 unix 的规则,但您可以而且必须在绑定到该端口后立即更改为权限较低的用户。
【讨论】:
我正在使用pm2,我认为他们正在努力以用户身份运行它。感谢您的链接非常有趣! 在端口重定向和使用像HAProxy 这样的重定向代理之间有一个很好的界限。正如您所指出的,以root
运行几乎总是一个非常糟糕的主意。以上是关于为啥在端口 80 上运行 node.js 可能不安全?的主要内容,如果未能解决你的问题,请参考以下文章
即使没有其他进程阻塞该端口,Node.js 应用程序也无法在端口 80 上运行
如何使用 Amazon Elastic Beanstalk 在端口 80 上安全地运行 Node.js 服务器?
如何在 openSUSE 上使用 NGINX 或 Apache2 将我的端口 80 重新路由到 localhost:3000 以便我可以运行我的 Node.js 应用程序