iptables - hashlimits,为什么它会将所有计算都计算到秒数

iptables - hashlimits,为什么它会将所有计算都计算到秒数

我尝试使用 hashlimits 设置“synflood”限制,这些是我的规则片段:

iptables -A SYNFLOOD_CHECK -p tcp --syn -m hashlimit --hashlimit-above 10/s --hashlimit-burst 6 \
--hashlimit-htable-expire $HTABLE_EXPIRE --hashlimit-mode $HASH_MODE --hashlimit-name synflood_s -j SYNFLOOD_DETECTED

iptables -A SYNFLOOD_CHECK -p tcp --syn -m hashlimit --hashlimit-above 25/min --hashlimit-burst 6 \
--hashlimit-htable-expire $HTABLE_EXPIRE --hashlimit-mode $HASH_MODE --hashlimit-name synflood_s -j SYNFLOOD_DETECTED

iptables -A SYNFLOOD_CHECK -p tcp --syn -m hashlimit --hashlimit-above 500/h --hashlimit-burst 6 \
--hashlimit-htable-expire $HTABLE_EXPIRE --hashlimit-mode $HASH_MODE --hashlimit-name synflood_m -j SYNFLOOD_DETECTED

我想做什么?我想匹配一个源 IP 超出此限制的 SYN 数据包:

> 10 Packets per second -j SYNFLOOD_DETECTED rule 
> 25 packets per minute -j SYNFLOOD_DETECTED rule 
> 500 packets per day -j SYNFLOOD_DETECTED rule

为什么我需要这个限制?假设我从 10k 个 IP 获得 1pps,即每秒有 10k 个数据包,但从一个源 IP 每秒只有一个数据包,我可以通过规则 25/分钟 ( = 0.41 p/s) 匹配这些数据包,但这会影响我到 Web 服务器的正常流量。

我看到的是,如果我设置 --hashlimit-above 25/min,则计算结果为 25/60 = 0.41 pps。因此,此规则在“--hashlimit-above 10/s”之前覆盖,是否可以按我的意愿设置此限制?

相关内容