web-dev-qa-db-ja.com

ApacheはCIDR範囲を拒否しますが、その範囲内のIPからは許可します

長いCIDRブラックリストを使用してサイトから複数の国をブロックしていますが、ブロックされたCIDR範囲内で特定のIPアドレスを許可する必要があります。これが私のconfファイルの抜粋です(これは私が現在試している順序ですが、「許可」行を「拒否」行の上に移動しようとしました):

order allow,deny
deny from 27.116.56.0/22
deny from 58.147.128.0/19
deny from 61.5.192.0/20
deny from 83.140.0.0/16
# ...
allow from 83.140.19.38

ブラックリストは正常に機能しますが、「許可」行を「拒否」セクションの上に配置するか下に配置するかに関係なく、「許可」行は尊重されません。これを機能させるために必要な他の構成はありますか? Apacheのドキュメントから、「許可」は「拒否」の後に来るべきだと私は信じましたが、どちらの方法でもこの質問に直接答えているようには見えませんでした。

2
Chase

mod_authz_HostのApacheマニュアルセクション ここで参考になります。許可ステートメントと拒否ステートメントの順序は重要ではありません。 order allow,deny、リクエストを受け入れるには、少なくとも1つの許可および拒否ディレクティブに一致する必要があります。私はあなたが欲しいと思いますorder deny,allow

6
justarobert

Apacheは最初に、すべてのDenyおよびすべてのAllowディレクティブを処理します。次に、Orderステートメントに基づいてルールを照合します-last matchwins。これは、deny from 83.140.0.0/16ルールが一致することを意味しますafterallow from 83.140.19.38ルールであり、アクセスが拒否されます。これを解決するには、順序をOrder Deny,Allowに変更します。

1
user9517