我使用Apache httpd-2.2.3运行CentOS 5.5。
我在位置/服务器状态启用了mod_status 。 我想以下面的方式允许访问这个单一的位置:
1和2很容易。 但是,由于我“允许从192.168.16.0/24”,是否有可能拒绝从192.168.16.100?
我试图添加192.168.16.100拒绝语句,但它不起作用。 这里是相关的configuration:
<Location /server-status> SetHandler server-status Order Allow,Deny Deny from all Deny from 192.168.16.100 # This does not deny access from 192.168.16.100 Allow from 192.168.16.0/24 </Location>
要么:
<Location /server-status> SetHandler server-status Order Allow,Deny Deny from all Deny from 192.168.16.100 # This does not deny access from 192.168.16.100 Allow from 192.168.16.0/24 </Location>
但是,这不会阻止访问此特定页面,如Access日志中所示:
www.example.org 192.168.16.100 - - [11/Mar/2011:16:01:14 -0800] "GET /server-status HTTP/1.1" 200 9966 "-" "
根据mod_authz_host的手册:
允许否认
首先,评估所有Allow指令; 至less一个必须匹配,否则请求被拒绝。 接下来,所有Deny指令都被评估。 如果有任何匹配,请求被拒绝
IP地址与Deny指令相匹配,所以请求不应该被拒绝?
根据mod_authz_host页面上的表格,该IP地址应该“匹配允许和拒绝”,因此应该应用“最终匹配控制:拒绝”规则。
匹配允许,拒绝结果拒绝,允许结果 匹配仅允许允许请求请求 只匹配拒绝请求拒绝请求被拒绝 不匹配默认第二个指令:拒绝默认第二个指令:允许 匹配允许和拒绝最终匹配控件:拒绝最终匹配控件:允许
我还没有testing过,但是我觉得你已经快到了。
<Location /server-status> SetHandler server-status Order Allow,Deny Deny from 192.168.16.100 Allow from 192.168.16.0/24 </Location>
Deny from all
是不需要的。 事实上,它会搞砸了,因为一切都会匹配all
东西,从而被拒绝(我认为阿帕奇正在努力变得聪明,做一些愚蠢的事情)。 我总是发现Apache的Order
, Allow
和Deny
指令令人困惑,所以总是把事情想象成表格(从文档中获取 ):
匹配| 允许,拒绝结果| 拒绝,允许结果 -------------------------------------------------- ----- 只允许| 允许| 允许 只拒绝| 被拒绝| 被拒绝 不匹配| 默认:拒绝| 默认值:允许 匹配| | 最终匹配:拒绝| 最终匹配:允许
通过以上设置:
我可能会考虑添加IPTables规则来拒绝80端口上的单个主机,拒绝所有主机,并允许子网。
在允许子网之后,从特定地址设置拒绝规则应该没有问题。 只要按照这个顺序
你可以使用PHP? 如果是这样,添加一个PHP语句退出/redirect该特定的IP地址
例:
$ deny = array(“111.111.111”,“222.222.222”,“333.333.333”);
if(in_array($ _SERVER ['REMOTE_ADDR'],$ deny))
{header(“location: http : //www.google.com/ ”);
出口();
参考: http : //perishablepress.com/press/2007/07/03/how-to-block-ip-addresses-with-php/