我正在使用股票Apache httpd-2.2.3运行CentOS 5.5。
我已在/ server-status位置启用了mod_status。我想通过以下方式允许访问该位置:
- 全部拒绝
- 允许来自子网192.168.16.0/24
- 拒绝IP地址为192.168.16.100的192.168.16.100。
1&2很容易。但是,由于我“允许来自192.168.16.0/24”,是否可以拒绝来自192.168.16.100?
我试图为192.168.16.100添加一个Deny语句,但是它不起作用。这是相关的配置:
<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>
但是,这不会阻止访问该特定页面,如访问日志中所示:
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指令;至少一个必须匹配,否则请求被拒绝。接下来,将评估所有“拒绝”指令。如果有匹配项,则请求被拒绝
IP地址与Deny指令匹配,因此不应拒绝请求吗?
根据mod_authz_host页面上的表,此IP地址应“同时匹配允许和拒绝”,因此应应用“最终匹配控件:拒绝”规则。
比赛允许,拒绝结果拒绝,允许结果 仅匹配允许允许请求允许请求 仅匹配拒绝请求被拒绝请求被拒绝 无匹配项默认为第二个指令:拒绝默认为第二个指令:允许 同时匹配“允许”和“拒绝最终匹配”控件:拒绝最终匹配控件:“允许”
Allow from 192.168.16.0/24
。据我了解的文档,192.168.16.0 / 24网络中的任何请求者IP都将匹配此Allow语句,该请求被允许。