IP範囲をブロックしたいのですが、同時にその範囲内では1つのIPしか許可しません。検索してみると次のようになります。
$ sudo iptables -A INPUT -s <ALLOWED_IP> -j ACCEPT
$ sudo iptables -A OUTPUT -d <ALLOWED_IP> -j ACCEPT
$ sudo iptables -I INPUT -m iprange --src-range <NOT_ALLOWED_RANGE> -j DROP
しかし、うまくいきません。また、順序を変更しようとしましたが、まだ動作していませんでした。
$ sudo iptables -I INPUT -m iprange --src-range <NOT_ALLOWED_RANGE> -j DROP
$ sudo iptables -A INPUT -s <ALLOWED_IP> -j ACCEPT
$ sudo iptables -A OUTPUT -d <ALLOWED_IP> -j ACCEPT
私たちが何を間違えたのでしょうか?
答え1
だからコメントでも言及したように、順序が重要です!
セキュリティ上の理由から、netfilterは必要なIPアドレスまたは範囲のみを許可するようにチェーン削除iptables
ポリシーを変更することをお勧めします。INPUT
-I
質問に答えるには、まずルールを一番上に置くフラグを使用して目的のIPアドレスを許可する必要があります。
iptables -I INPUT -s SOURCE_IP -j ACCEPT
iptables -A INPUT -m iprange --src-range SRC_RANGE/CIDR -j DROP
最初iptables
のルールが適用されます。つまり、一番上の人が常に勝利するという意味です。
DENY (this rule wins)
|
ALLOW
答え2
-I
一般的に言えば、この状況ではオプションを実際に使用する必要はありません。次の順序でルールを作成します。
-A INPUT -s ALLOWED_IP -j ACCEPT
-A INPUT -s FORBIDDEN_IP_RANGE -j DROP
での接続のみを許可し、ALLOWED_IP
他のアドレスからの接続は拒否しますFORBIDDEN_IP_RANGE
。
問題は、テーマランチャーがジョブ-I
の間違った場所でオプションを使用するため、DROP
どちらの場合もDROP
ジョブが一番上に配置されることです。
内容は次のとおりですman iptables
。
-I, --insert chain [rulenum] ルール仕様
選択したチェーンに1つ以上のルールを指定されたルール番号として挿入します。したがって、ルール番号が1の場合、チェーンの先頭に1つ以上のルールが挿入されます。ルール番号が指定されていない場合でも、これはデフォルトです。
したがって-I
、ルール番号を使用しない場合、デフォルトではルール番号1が使用されます。より複雑なファイアウォール構成のロジックを壊す可能性があるため、この使用には注意が必要です。