web-dev-qa-db-ja.com

Apache httpd:どのようにしてすべてを拒否し、サブネットから許可し、そのサブネット内のIPから拒否することができますか?

CentOS 5.5を標準のApache httpd-2.2.3で実行しています。

ロケーション/ server-statusで mod_status を有効にしました。次の方法でこの単一の場所へのアクセスを許可したいと思います。

  1. すべてから拒否
  2. サブネット192.168.16.0/24から許可
  3. 192.168.16.0/24サブネット内にあるIP 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ディレクティブが評価されます。少なくとも1つが一致する必要があります。一致しない場合、要求は拒否されます。次に、すべてのDenyディレクティブが評価されます。一致する場合、リクエストは拒否されます

IPアドレスはDenyディレクティブと一致するので、要求を拒否しないでください。

Mod_authz_Hostページの表によると、このIPアドレスは「許可と拒否の両方に一致」する必要があるため、「最終一致コントロール:拒否」ルールが適用されます。

一致の許可、結果の拒否、結果の拒否、許可
一致の許可のみの要求の許可要求の許可
一致の拒否のみの要求の拒否要求の拒否拒否デフォルトから2番目のディレクティブ:許可
許可と拒否の両方の最終一致コントロールに一致:拒否最終一致コントロール:許可
26

私はテストしていませんが、あなたはほとんどそこにいると思います。

<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のOrderAllowおよびDenyディレクティブがわかりにくいので、常にテーブルで視覚化します( the docs から取得):

一致|許可、拒否結果|拒否、結果を許可
 ----------------------------------------- -------------- 
許可のみ|許可|許可
拒否のみ|拒否されました|拒否されました
一致なし|デフォルト:拒否|デフォルト:許可
両方に一致|最終一致:拒否|最終一致:許可

上記の設定で:

  • 192.168.16.100からのリクエストは「両方に一致」するため拒否されます。
  • 192.168.16.12からのリクエストは「許可のみ」を取得し、許可されます。
  • 123.123.123.123からのリクエストは「一致しない」ため、拒否されます。
35
phunehehe

私はおそらく、ポート80の単一のホストを拒否し、すべてを拒否し、サブネットを許可するためのIPTablesルールを追加することも検討します。

サブネットを許可した後、特定のアドレスから拒否ルールを設定しても問題はありません。この順序で実行してください。

1
Mike