如何使这些规则适用于每个 IP 而不是全局?如果一个IP每秒发送超过2个数据包,所有IP的所有数据包都会被丢弃,我需要它只丢弃每秒发送超过2个数据包的IP的数据包。
我首先应用这些规则:
/sbin/iptables -t mangle -A PREROUTING -p udp --dport 7778 -m string --hex-string "|5341 4d50|" --algo kmp -m limit --limit 1/sec --limit-burst 2 -j ACCEPT
/sbin/iptables -I INPUT -p udp --dport 7778 -m string --hex-string "|5341 4d50|" --algo kmp -m limit --limit 1/sec --limit-burst 2 -j ACCEPT
然后我应用这些:
/sbin/iptables -I INPUT -p udp --dport 7778 -m string --hex-string "|5341 4d50|" --algo kmp -j DROP
/sbin/iptables -t mangle -A PREROUTING -p udp --dport 7778 -m string --hex-string "|5341 4d50|" --algo kmp -j DROP
谢谢
答案1
您需要使用 hashlimit 模块。
iptables -I PREROUTING -t mangle -p udp --dport 7778 -m string --hex-string "|5341 4d50|" --algo kmp -m hashlimit --hashlimit-mode srcip --hashlimit-above 2/sec --hashlimit-burst 1 --hashlimit-name foo -j DROP
这里 --hashlimit-mode 就可以了。请参阅下面的手册
--hashlimit-mode {srcip|srcport|dstip|dstport},...
要考虑的对象的逗号分隔列表。如果没有给出 --hashlimit-mode 选项,hashlimit 的作用类似于 limit,但代价是进行哈希管理。
例如,您可以为每个源 ip - 目标端口对设置速率,例如
--hashlimit-mode srcip,dstport