如何在 IPTables 上应用每个 IP 的规则?

如何在 IPTables 上应用每个 IP 的规则?

如何使这些规则适用于每个 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

相关内容