Iptables

ipset iptables 丟棄所有排除埠,但通過速率限制

  • October 1, 2019

我有簡單的 ipset 地圖來跟踪可疑的 ip。

這些我的命令:

ipset flush
ipset -q destroy banlists
ipset create banlists hash:ip comment family inet hashsize 2048 maxelem 1048576 timeout 300

如果在 ipset 中匹配,我會告訴 iptables 丟棄:

iptables -I INPUT 1 -m set -j DROP --match-set banlists src
iptables -I FORWARD 1 -m set -j DROP --match-set banlists src

這是有效的,但我想

  • 所有埠都必須丟棄
  • 排除埠 80 和 443
  • 速率限制匹配 ipset 以防止 ddos​​ 但可接受

如果要允許埠 80 和 443,可以為INPUT鏈添加一條規則:

iptables -I INPUT 1 -m set -j DROP --match-set banlists src
iptables -I INPUT 1 -p tcp -m multiport --dports 80,443 -j ACCEPT

還有一條FORWARD鏈規則:

iptables -I FORWARD 1 -m set -j DROP --match-set banlists src
iptables -I FORWARD 1 -p tcp -m multiport --dports 80,443 -j ACCEPT

之前的規則將允許所有 IP 訪問埠 80 和 443。要對禁止列表 ipset 應用速率限制,您可以使用:

iptables -I INPUT 1 -m set --match-set banlists src -j DROP
iptables -I INPUT 1 -p tcp -m multiport --dports 80,443 -m state --state NEW -m set --match-set banlists src -m recent --update --seconds 120 --hitcount 10 -j DROP
iptables -I INPUT 1 -p tcp -m multiport --dports 80,443 -m state --state NEW -m set --match-set banlists src -m recent --set -j ACCEPT

一種更簡單的方法(IMO)是使用-Aswitch 而不是-I. 當然,您需要查看完整的規則集以確保它是按要求設置的(按順序檢查規則)。這樣,規則在編寫時以正常順序出現:

iptables -A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -m set --match-set banlists src -m recent --set -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -m set --match-set banlists src -m recent --update --seconds 120 --hitcount 10 -j DROP
iptables -A INPUT -m set --match-set banlists src -j DROP

相同的規則需要應用於FORWARD鏈。您可以根據recent需要自定義模組參數,即hitcountseconds

引用自:https://serverfault.com/questions/986348