Apache httpd:我如何拒绝所有,允许来自子网,但拒绝来自该子网内的IP?

Modified on: Sun, 21 Jul 2019 06:00:02 +0800

我使用Apache httpd-2.2.3的股票运行CentOS 5.5。

我已在位置/服务器状态启用mod_status。我想以下列方式允许访问此单个位置:

  1. 拒绝所有
  2. 允许来自子网192.168.16.0/24
  3. 拒绝来自IP 192.168.16.100,这是在192.168.16.0/24子网内。
  4. 醇>

    1& 2很容易。但是,由于我“允许从192.168.16.0/24”,是否有可能从192.168.16.100拒绝?

    我尝试为192.168.16.100添加拒绝语句,但它不起作用。以下是相关配置:

    <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指令;至少一个必须匹配,否则请求被拒绝。接下来,评估所有Deny指令。如果有任何匹配,则拒绝该请求

    IP地址与拒绝指令匹配,因此请求不应被拒绝吗?

    根据mod_authz_host页面上的表格,此IP地址应“匹配允许和拒绝”,因此应该应用“最终匹配控件:拒绝”规则。

        Match                       Allow,Deny result                   Deny,Allow result
        Match Allow only            Request allowed                     Request allowed
        Match Deny only             Request denied                      Request denied
        No match                    Default to second directive: Denied Default to second directive: Allowed
        Match both Allow & Deny     Final match controls: Denied        Final match controls: Allowed
    

最佳答案

我没有测试过,但我认为你几乎就在那里。

<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正试图变得聪明并做一些愚蠢的事情)。我总是发现Apache的OrderAllowDeny指令令人困惑,因此总是可视化表中的内容(取自文档):

Match      | Allow,Deny result   | Deny,Allow result
-------------------------------------------------------
Allow only | Allowed             | Allowed
Deny only  | Denied              | Denied
No match   | Default: Denied     | Default: Allowed
Match both | Final match: Denied | Final match: Allowed

使用以上设置:

  • 来自192.168.16.100的请求获得“匹配”并因此被拒绝。
  • 来自192.168.16.12的请求获得“仅允许”,因此允许。
  • 来自123.123.123.123的请求获得“不匹配”,因此被拒绝。
作者:phunehehe

相关问答

添加新评论