為了簡單起見,在我的伺服器上,我有三個規則:
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 的每個資料包,如果低於,則應RETURN
返回INPUT
並繼續。第二條規則只是丟棄超過此限制的每個資料包,基本上應該充當該鏈的預設策略。
在INPUT
鏈中,大約有 5,700k 個資料包跳入我的RATE-LIMIT
鏈中。但如果我將RATE-LIMIT
鏈中的兩條規則加在一起,我得到的數字會小很多。根據我的理解,它們加起來應該是 5.700k。
為什麼這兩個數字不相等?