网络服务器上应该保持哪些端口开放?

网络服务器上应该保持哪些端口开放?

我很快就要尝试部署我的第一个 Web 应用程序,所以我的经验不足。我记得在某处读到过,机器人会在暴露于互联网后几分钟内进行端口扫描(也许这就是 Windows 95 系统被入侵所需的时间,我读到这篇文章已经有一段时间了)。此特​​定服务器在 amd64 上运行 Ubuntu 9.10 服务器版本。

根据这个问题,Web 应用程序本身应该完全通过 https我刚刚在这里问此外,该网站还有一个文件上传部分,现在通过 http post 完成,并且该文件最终通过单独的(不幸的是,是无线的)接口传输到另一台计算机来处理实际处理。

因此,在实际暴露给外界的网络接口上,我认为应该暴露端口 80 和 443,其他端口就不要暴露了。正如我之前所说,80 应该重定向到 443。这样合理吗?还有什么我不知道的吗?我应该激活其他端口吗?使用 ruby​​ DRb 通过端口 9000 和 9001 将文件移动到处理系统,因此这些端口也需要打开,但只在第二个接口上打开。

另外,我应该使用什么防火墙程序来处理这样的两个网络接口?这里列出了一些,但我不确定哪种方式适合提供网页,或者这是否是一种特殊情况。

答案1

听起来是对的,如果你只提供 https,那么你需要保持打开状态。但是,只有以 root 帐户启动的应用程序才能监听 1024 以下的端口,因此你在这里有两个选择:

  • 以 root 身份启动 ruby​​ 应用程序 - 这不是个好主意
  • 把它放在 apache 后面——可能会更好,但取决于你想做什么,这可能只是一个额外的开销
  • 以其他用户身份在不同的端口上运行 ruby​​ 应用程序,比如 8443,并让 iptables 将请求从 443 转发到 8443 - 我想这就是你想要做的

以下是如何进行端口转发(例如,您可以将 80 执行到 8080 进行相同操作):

iptables -t nat -A PREROUTING -i $EXT_IF -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443

除此之外,无需打开任何其他到互联网的端口,只需确保在另一个接口上保持 ssh 打开,这样您就可以访问和管理服务器。

至于防火墙应用程序,iptables 随 ubuntu 一起提供,只需使用它,我认为不需要任何其他花哨的工具。

答案2

您说得对,只需要暴露 80/443 端口。其他端口都应该关闭。您需要防火墙来做一些事情。

  1. 连接限制和速率限制。您希望防火墙能够在发生 DDoS 攻击或反复尝试端口敲击等事件时降低速度。
  2. 阻止所有不必要的传出流量。如果您的机器受到攻击,这会有所帮助,因为大多数机器人都需要连接到远程命令和控制服务器。
  3. 阻止所有其他传入端口。你实际上应该阻止所有其他端口,以防攻击者设法安装某个应用程序并打开后门端口。

以上就是我的想法。不过我没有任何具体的软件推荐。也许可以阅读拉拉训练中心可能有帮助。

相关内容