阻止其他应用程序绑定到端口80和443

上个星期,我接到了一个害怕的客户的电话,因为他认为他的网站被黑客攻击了。 当我查看他的网站时,我看到了apache2默认页面。 那天晚上我的服务器( Ubuntu 16.04 LTS )已经升级并重新启动。 通常当出现问题时,我会在晚上收到警报。 这次不是,因为监控系统检查HTTP状态码200,并且apache2默认页面带有状态码200。

发生了什么事是,在启动期间, apache2绑定到端口80和443比我的实际networking服务器nginx更快。 我没有自己安装apache2。 通过aptitude why apache2我发现php7.0包需要它。

简单地删除apache2将无法正常工作,因为显然php7.0需要它。 是否有可能创build一个限制,只有nginx允许绑定到端口80和443?

其他的解决scheme也是值得欢迎的。

您不能阻止端口被错误的服务绑定。 在你的情况下,只需从autostart中删除apache,你应该是好的。

16.04和更新:

 sudo systemctl disable apache2 

对于较旧的Ubuntu版本:

 sudo update-rc.d apache2 disable 

如果你真的没有使用apache2 ,并且它是需要它的PHP 7.0,那么看起来你已经安装了libapache2-mod-php7.0 。 没有Apache,这个软件包就没用了。 既然你使用的是nginx,你也可能安装了php7.0-fpmphp7.0-cgi ,其中任何一个都足以满足php7.0的依赖需求:

 $ apt-cache depends php7.0 php7.0 |Depends: php7.0-fpm |Depends: libapache2-mod-php7.0 Depends: php7.0-cgi Depends: php7.0-common Conflicts: <php5> 

如果您安装了php7.0-{fpm,cgi} ,则可以继续并卸载Apache。

要回答你的问题,你可以使用SElinux来限制一个端口到一个特定的应用程序。 我自己并没有使用它,只是对它的能力有了一些肤浅的了解,但是这里有一个指针,我在这个站点find了:

https://serverfault.com/a/257056/392230

在这个答案中,wzzrd似乎展示了如何赋予特定的应用程序(foo)权限来绑定到特定的端口(803)。 您只需要设置策略,以便只有您的应用程序(nginx)被允许指定的端口(80和443)。

根据wzzrd的回答,这可能就像将此添加到策略一样简单

 allow nginx_t nginx_port_t:tcp_socket name_bind; 

并运行这个

 semanage port -a -t nginx_port_t -p tcp 80 semanage port -a -t nginx_port_t -p tcp 443 

虽然,我想你还需要在策略中指定没有其他程序可以绑定到这些端口的一行。

最后,我只是猜测什么是合适的configuration。

无论如何,我不认为有一个Ubuntu的SElinux安装和默认启用。 因为我认为它需要对各种实用程序和内核选项应用某些修补程序,所以简单地使用安装并启用了SElinux的Centos可能更容易。

对不起,我没有更多的帮助。 也许有些时候,我会下载一个Centos的图像,试试这个; 这将是一个很好的学习步骤。 我会更新这个答案,如果我这样做。

我还没有看到答案,但仍然是一个可能性:

以防万一,更改Apacheconfiguration以侦听另一个端口。 您可以通过打开Apacheconfiguration文件并将具有Listen 80的行更改为另一个端口来完成此操作。

我没有回答你确切的问题,但也许你需要看看你的发行版。 我会考虑任何使安装中的服务(apache2)不安全的发行版。 考虑看一下不这样做的发行版。 我不能说我在Archlinux上看到过这种行为,我敢肯定还有其他的。