要約すると、次のようになります。

要約すると、次のようになります。

次のルールを追加すると、すべてiptablesが期待どおりに機能します。違反IPが追加BLACKLISTおよび削除されます。

iptables -A INPUT -m recent --rsource --name BLACKLIST --update -j DROP

iptables私のルールを次のようにリストするときiptables-save

-A INPUT -i eth0 -m recent --update --name BLACKLIST --mask 255.255.255.255 --rsource -j DROP

ただし、ルールに別のマスクを明示的に割り当てると、次に変更されたマスクが表示されますが、iptables-saveサブネット全体をブロックするのに望ましい効果はありません。

-A INPUT -i eth0 -m recent --update --name BLACKLIST --mask 255.255.0.0 --rsource -j DROP

しかし、個々のIPが転送されるのを見ることができます。

128.90.177.13
128.90.177.136
128.90.177.35

私のブラックリストに個別に追加されました。

マスクが有効な場合、最初の IP 128.90.177.13 がブラックリストに追加され、同じサブネット上の他の IP がブロックされます。しかしそれは真実ではない。彼らは私のルールに従った。

iptablesの最新の--maskが機能しないのはなぜですか?

カーネル4.14.274でiptablesモジュールを使用しています。

要約すると、次のようになります。

問題のあるIPをブラックリストに追加し、ネットマスクに基づいてそのIPのサブネット全体をブロックしたいと思います。

ベストアンサー1

完全なnetfilter設定を見ないと、環境で何が起こっているのかを理解するのは難しいかもしれません。しかし、ここでは簡単なものを組み立てることで、それがどのように機能するかを確認できます。

空のnetfilterルールセットから始めて、次のルールを追加してみましょう。

iptables -N bl_add
iptables -A bl_add -j LOG --log-prefix "BL_ADD "
iptables -A bl_add -j DROP
iptables -N bl_update
iptables -A bl_update -j LOG --log-prefix "BL_UPDATE "
iptables -A bl_update -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m recent --name BLACKLIST --update --mask 255.255.0.0 --seconds 20 -j bl_update
iptables -A INPUT -p tcp --dport 80 -m recent --name BLACKLIST -i eth0 --set -j bl_add

これには、パケットがどこに行くかを正確に判断するために使用できる複数のログ/ドロップチェーンがあります。ルール-i loは重要ではありません。ただ私が足に銃を撃つのを防ぐだけです。

内部にマニュアルページ、次の文書を参照してください--update

       [!] --rcheck
              Check if the source address of the packet is currently in
              the list.

       [!] --update
              Like --rcheck, except it will update the "last seen"
              timestamp if it matches.

したがって、--updateオプションは「アドレスがリストにあるかどうかを確認(つまり一致)し、その場合は「最後に見た」タイムスタンプを更新します」を意味します。この例では、これを実際に見ることができます。

192.168.122.1 でこのホストのポート 80 に接続しようとすると、journalctl -kfllog() に次のように表示されます。

[ 4152.729894] BL_ADD IN=eth0 OUT=
MAC=52:54:00:01:89:30:52:54:00:5d:a7:ff:08:00 SRC=192.168.122.1
DST=192.168.122.51 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=22836 DF PROTO=TCP
SPT=41698 DPT=80 WINDOW=64240 RES=0x00 SYN URGP=0
[ 4153.775211] BL_UPDATE IN=eth0 OUT=
MAC=52:54:00:01:89:30:52:54:00:5d:a7:ff:08:00 SRC=192.168.122.1
DST=192.168.122.51 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=22837 DF PROTO=TCP
SPT=41698 DPT=80 WINDOW=64240 RES=0x00 SYN URGP=0

最初のパケットは--updateルールをスキップして(まだブラックリストに登録されていないため)、ルールに到達するため、ログ出力が--set表示されます。BL_ADD次のパケットはルールで停止し、--updateブラックリストにあるため、BL_UPDATEログ出力が表示されます。

この設定では、192.168.122.1から接続すると、次の項目が生成されます/proc/net/xt_recent/BLACKLIST

src=192.168.0.0 ttl: 64 last_seen: 4303109595 oldest_pkt: 13 4303017951, 4303018971, 4303035387, 4303035595, 4303035803, 4303036211, 4303037019, 4303038685, 4303041947, 4303048411, 4303061723, 4303108569, 4303109595

srcアドレスは192.168.0.0です。引数--maskは元の192.168.122.1ソースアドレスを変換するために適用されます。


もし私たちが削除するルール--setは次のとおりです。

iptables -N bl_add
iptables -A bl_add -j LOG --log-prefix "BL_ADD "
iptables -A bl_add -j DROP
iptables -N bl_update
iptables -A bl_update -j LOG --log-prefix "BL_UPDATE "
iptables -A bl_update -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m recent --name BLACKLIST --update --mask 255.255.0.0 --seconds 20 -j bl_update

192.168.122.1からポート80に接続すると、ログ出力は発生せず、.rule/proc/net/xt_recent/BLACKLIST--update何もしなかった以前にルールをBLACKLIST使用してソースアドレスを追加していない場合。--set


有用な場合、iptables-save出力は次のようになります。布材構成は次のとおりです。

*filter
:INPUT ACCEPT [31:2152]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16:1520]
:bl_add - [0:0]
:bl_update - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m recent --update --seconds 20 --name BLACKLIST --mask 255.255.0.0 --rsource -j bl_update
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -m recent --set --name BLACKLIST --mask 255.255.255.255 --rsource -j bl_add
-A bl_add -j LOG --log-prefix "BL_ADD "
-A bl_add -j DROP
-A bl_update -j LOG --log-prefix "BL_UPDATE "
-A bl_update -j DROP
COMMIT

おすすめ記事