我在Ubuntu 14.04LTS上运行Apache2。 要开始保护对机器的networking访问,我想先阻止一切,然后为特定子网制定特定的允许语句,以浏览Apache中托pipe的站点。
Ubuntu服务器安装时没有select安装包,安装后添加的唯一包是:apt-get update; apt-get安装apache2,php5(带有额外的php5模块),openssh-server,mysql-client
以下是我的/etc/hosts.allow
设置:
的/etc/hosts.deny
ALL:ALL
/etc/hosts.allow根本没有允许条目。
我希望所有的networking协议被拒绝。 症状是,即使在/etc/hosts.deny中存在拒绝所有语句,我仍然可以通过Web浏览到Apache Web服务器上托pipe的站点
添加拒绝条目后系统重新启动。
为什么会使用ALL:ALL忽略/etc/hosts.deny并允许http浏览Apache服务器上托pipe的站点?
为了让tcp wrapper有效,你需要从xinetd启动相应的服务,或者把应用程序链接到libwrap 。 xinetd守护程序是TCP包装的超级服务。
tcpwrappers兼容性
首先要记住的是,并不是所有基于networking的应用程序都与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连接。 (即;你可以lockingssh,但apache2仍然是开放的)
hosts.allow和hosts.deny文件只有有限的效果。 它不适用于apache应用程序。
但是,在apacheconfiguration指令中有访问控制指令来做这些types的限制。
限制你的apache服务器向httpd.conf添加以下内容
<Directory /> Order Deny, Allow Deny from all #Allow from your ip </Directory>
如果我记得正确你需要mod_access启用,但它主要是默认情况下。
NB! 您必须重新启动Apache。
请参阅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中,Apacheconfiguration已经改变了一些。 您必须进行此修改:更改
Order Deny,Allow Deny from all
成
Require all denied