使用 iptables 限制每个 IP 的最大 UDP 带宽?

使用 iptables 限制每个 IP 的最大 UDP 带宽?

我正在使用 VPS 托管 VPN 以进行 DDoS 保护,但我一直想找到一种方法来限制每个 IP 的 UDP 流量以防止 UDP 泛洪。我正在寻找一种方法来仅允许每个 IP 的 X MBPS 流量,并且如果流量超过 X MBPS 则忽略此 IP

我主要想防止 perl/shell 脚本的 DoS 攻击,因为这些脚本似乎仍然能够有效地破坏 VPN 的运行

这可能吗?

如果是这样,有人可以帮我使用 iptables 实现这个方法吗?

答案1

您尝试执行的操作不会阻止 DDos 攻击,相反,它会限制带宽,这意味着网络性能低下,因此我建议您限制每秒接收的 UDP 数据包的数量:

1- 观察通过网卡

iptables -I INPUT -p udp -i <nic> -m state --state NEW -m recent --set

2- 丢弃超过 n 通过你的网卡期间秒:

iptables -I INPUT -p udp -i <nic> -m state --state NEW -m recent --update --seconds <t> --hitcount <n> -j DROP

答案2

我自己找到了一种方法。高每秒数据包数 (pps) 是(根据我的经验) DDoS 攻击的最大因素。这组 iptables 规则将限制每个 ip 的 UDP pps:
iptables -N UDPLIMIT # New chain called UDPLIMIT

iptables -A UDPLIMIT --match hashlimit --hashlimit-upto 300/second --hashlimit-mode srcip --hashlimit-name udp_rate_limit -j ACCEPT # Only accept 300/second, ignore the rest

iptables -A UDPLIMIT --match limit --limit 5/min -j LOG --log-prefix "UDP Flood DROP: " # Log the attacker (optional)

iptables -A UDPLIMIT -j DROP # Drop anything over 300 pps

相关内容