Ubuntu 14.04 中忽略 /etc/hosts.deny

Ubuntu 14.04 中忽略 /etc/hosts.deny

我在 Ubuntu 14.04LTS 上运行 Apache2。为了开始保护对机器的网络访问,我希望先阻止所有内容,然后为特定子网制定特定的允许语句,以浏览托管在 Apache 中的站点。

Ubuntu 服务器在安装过程中未选择任何软件包,安装后仅添加以下软件包:apt-get update;apt-get install apache2、php5(附加 php5 模块)、openssh-server、mysql-client

以下是我的/etc/hosts.deny&/etc/hosts.allow设置:

  • /etc/hosts.deny

    ALL:ALL
    
  • /etc/hosts.allow 根本没有允许条目。

我期望所有网络协议都被拒绝。症状是,即使 /etc/hosts.deny 中有拒绝所有语句,我仍然可以浏览托管在 Apache Web 服务器上的站点

添加拒绝条目后,系统重新启动。

为什么带有 ALL:ALL 的 /etc/hosts.deny 会被忽略,并允许 http 浏览托管在 apache 网络服务器上的站点?

答案1

为了使 tcp 包装器生效,您需要从 xinetd 启动相应的服务,或者让应用程序链接到库包. xinetd 守护进程是一个 TCP 包装的超级服务。

在此处输入图片描述

tcpwrappers 兼容性

首先要记住的是,并非您机器上的所有基于网络的应用程序都与 tcpwrappers 兼容。hosts.allow 或 hosts.deny 上的限制仅在引用 tcpwrappers 库时才有效。如何确定您的应用程序是否兼容?使用以下命令:

ldd /path/to/binary | grep libwrap (general example)

ldd /usr/sbin/sshd | grep libwrap (shows that the sshd refers to libwrap)

ldd /usr/sbin/apache2 | grep libwrap (show that apache does not refer to libwrap)

在上面的基本示例中,我们看到 sshd(ssh 服务器)引用了 libwrap.so,因此我们可以知道 hosts.allow 和 hosts.deny 中的任何限制都适用于该服务。我们还看到apache2 不引用 libwrap.so,因此那里列出的任何限制都不适用于 apache2 连接。(即,您可以锁定 ssh,但 apache2 仍然开放)

答案2

hosts.allow 和 hosts.deny 文件的作用有限。它不适用于 apache 应用程序。

但是,apache 配置指令中存在访问控制指令来做出这些类型的限制。

答案3

要限制你的 Apache 服务器,请在 httpd.conf 中添加以下内容

<Directory />
Order Deny, Allow
Deny from all
#Allow from your ip
</Directory>

如果我没记错的话,您需要启用 mod_access,但它大多是默认的。

注意!您必须重新启动 apache。

答案4

https://stackoverflow.com/questions/19445686/ubuntu-server-apache-2-4-6-client-denied-by-server-configuration-php-fpm从 Apache 2.2 升级到 Apache 2.4

在 Ubuntu 14.04 中,Apache 配置已发生一些变化。您必须进行以下修改:更改

Order Deny,Allow
Deny from all

进入

Require all denied

相关内容