Htaccessを使用してIP範囲全体をブロックする良い方法を探しています。
私が抱えている問題は、禁止する必要があるブロックが100個のIP範囲であることです。プログラマーの観点からは、簡単に実行できるはずですが、htaccessに100行を追加せずに実行できず、他の手法を試してもうまくいきませんでした。
ブロックする必要があるIPアドレスの範囲はHUAWEIクラウド用です:159.138.100。*-159.138.199。*
基本的に159.138.1の鋭いアイスポットで十分にブロックできます。
私は成功せずに以下を試しました:
Order Allow,Deny
Deny from 159.138.1
Allow from all
私も試しました:
Order Allow,Deny
Deny from 159.138.1*
Allow from all
.htaccessを使用してこのiprangeを効果的にブロックするにはどうすればよいですか?
IP範囲は、.- htaccessで CIDR表記 を使用して指定されます。あなたが使用できる最も簡単なルールは
Deny from 159.138.0.0/16
少しブロックしすぎます:
CIDR Range 159.138.0.0/16
Netmask 255.255.0.0
Wildcard Bits 0.0.255.255
First IP 159.138.0.0
Last IP 159.138.255.255
Total Host 65536
159.138.100.0
〜159.138.199.255
の正確な範囲をブロックするには、いくつかのルールが必要です。
Deny from 159.138.100.0/22
Deny from 159.138.104.0/21
Deny from 159.138.112.0/20
Deny from 159.138.128.0/18
Deny from 159.138.192.0/21
出典: CIDR計算機へのIP範囲
使用しているIP範囲をどこで取得したかわかりません。 このサイトにはHuawaiクラウドサービスの74のCIDR範囲がリストされています
Deny from 159.138.1
部分的なIPアドレスを指定できますが、これまではバイト単位です。だから、あなたは書くことができます:
Deny from 159.138
これは、CIDR表記を使用した159.138.0.0/16
と同じです-「少しブロックしすぎる」(前述のとおり)。
それに失敗すると、@ Stephenが彼の回答で述べているように、複数のCIDR範囲を使用することがおそらく進むべき道です。
159.138.100.*
-159.138.199.*
ただし、これは、IPアドレスの比較的単純な正規表現の一致に役立ちます。例えば:
SetEnvIf Remote_Addr ^159\.138\.1\d\d BLOCKIT
Deny from env=BLOCKIT
SetEnvIf
ディレクティブは、リモートIPアドレスが指定された正規表現と一致する場合にBLOCKIT
環境変数を設定します。そして、この環境変数が設定されている場合、Deny
ディレクティブがトリガーされます。 \d
は、0〜9の任意の数字に一致する省略文字クラスです。
基本的に159.138.1でブロックできます。
そのため、正規表現を^159\.138\.1
に簡略化できます(つまり、末尾の\d\d
を削除します)。ただし、これにより11個の追加のIPアドレスがブロックされます。
彼らが使用しているApacheのバージョンがわからないが、彼らは物事を最新に保つ会社です。だから私は彼らが最新バージョンの1つを持っていることを期待しています。
その場合、Apache 2.4を使用する可能性がはるかに高くなります。 「問題」は、Deny
が実際にはApache 2.2ディレクティブであることです。これは、Apache 2.4でも引き続き利用できます-後方互換性のためだけに(そして別のモジュールに移動されました)-以前は非推奨です(将来のバージョンでは完全に削除される予定です)。
さらに複雑なのは、システム全体で古いOrder
、Deny
、Allow
ディレクティブのすべてのインスタンスを新しいRequire
ディレクティブに実際に更新する必要があることです。予期しない競合が発生する可能性があります(一方が必ずしも他方をオーバーライドするわけではないため)。
参照:
https://httpd.Apache.org/docs/2.4/mod/mod_access_compat.html
たとえば、@ Stephenの回答から複数のDeny
CIDRディレクティブを変換してApache 2.4 Require
を使用すると、次のようになります。
<RequireAll>
Require all granted
Require not ip 159.138.100.0/22
Require not ip 159.138.104.0/21
Require not ip 159.138.112.0/20
Require not ip 159.138.128.0/18
Require not ip 159.138.192.0/21
</RequireAll>
(少し直感的には、negatedディレクティブ(例:Require not ...
)自体はアクセスを許可または拒否できないため、上記を囲む必要があります。 <RequireAll>
ディレクティブを含むRequire all granted
ディレクティブ内)
または、Apache 2.4以降の式を使用して、正規表現を使用してIPアドレスを照合することもできます(上記と同様)。例えば:
<If "%{REMOTE_ADDR} =~ /^159\.138\.1\d\d/">
Require all denied
</If>
または、CIDR表記を使用して「過度に一般的な」IP範囲に一致させます。
<If "-R '159.138.0.0/16'">
Require all denied
</If>
参照: