Der Einfachheit halber habe ich auf meinem Server drei Regeln:
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
Bei mir funktioniert es wie es soll, aber ich wundere mich über die folgende ausführliche Ausgabe:
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
Die erste Regel trifft auf jedes Paket zu, das weniger als 100 pps von einer bestimmten Quell-IP entfernt ist. Wenn es darunter liegt, sollte es dorthin RETURN
zurückkehren INPUT
und dort fortfahren. Die zweite Regel verwirft einfach jedes Paket, das über diesem Grenzwert liegt, und sollte grundsätzlich als Standardrichtlinie für diese Kette fungieren.
In der INPUT
Kette sind etwa 5.700.000 Pakete, die in meine RATE-LIMIT
Kette gesprungen sind. Wenn ich aber beide Regeln in meiner RATE-LIMIT
Kette zusammenzähle, erhalte ich eine viel kleinere Zahl. Meines Wissens nach sollten sie zusammen 5.700.000 ergeben.
Warum sind diese beiden Zahlen nicht gleich?