私のサーバーでは、簡単にするために 3 つのルールを設けています。
iptables -t mangle -N RATE-LIMIT
iptables -t mangle -A RATE-LIMIT -m hashlimit --hashlimit-mode srcip --hashlimit-upto 100/sec --hashlimit-burst 20 --hashlimit-name conn_rate_limit -j RETURN
iptables -t mangle -A RATE-LIMIT -j DROP
iptables -t mangle -A INPUT -p tcp --dport 25565 ! -i lo -j RATE-LIMIT
これは私の環境では期待通りに動作しますが、次のような詳細な出力については疑問に思いました。
Chain INPUT (policy ACCEPT 11M packets, 921M bytes)
pkts bytes target prot opt in out source destination
5699K 264M RATE-LIMIT tcp -- !lo * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25565
...
Chain RATE-LIMIT (1 references)
pkts bytes target prot opt in out source destination
3060K 158M RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 limit: up to 100/sec burst 20 mode srcip
84990 3882K DROP all -- * * 0.0.0.0/0 0.0.0.0/0
最初のルールは、特定の送信元 IP からの 100 pps 未満のすべてのパケットに一致します。100 pps 未満の場合、パケットはそこにRETURN
戻ってINPUT
続行されます。2 番目のルールは、この制限を超えるすべてのパケットをドロップするだけで、基本的にこのチェーンのデフォルト ポリシーとして機能します。
チェーンにはINPUT
、私のチェーンに飛び込んだパケットが約 5,700k ありますRATE-LIMIT
。ただし、チェーンの両方のルールを合計するとRATE-LIMIT
、数値は大幅に小さくなります。私の理解では、合計は 5,700k になるはずです。
なぜこれら 2 つの数字は等しくないのでしょうか?