我正在使用 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