我正在尝试解决如何限制 IP 访问我们 Ubuntu 服务器的问题。如果有人过于频繁地请求我们的 API 端点,或者一般来说过于频繁地访问服务的端口,我很乐意阻止他们。我试图了解如何使用 iptables 解决这个问题,但我不知道更好的配置来阻止谁请求过多的资源/API:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --dport 6000 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
你能帮我吗?谢谢
答案1
您的上述规则对我来说看起来正确但不完整。
可能是您在允许规则后没有默认的删除规则,或者可能是这些规则是在接受规则之后添加的,因此它们从未被命中。(规则排序在 iptables 中非常重要)。
使用“iptables -vnL”可能很有用,因为它可以显示每个规则匹配的流量量以及规则的顺序。
答案2
iptables -t mangle -A INPUT -s 192.168.1.103 -m limit --limit 128k -j ACCEPT
iptables -t mangle -A INPUT -s 192.168.1.131 -m limit --limit 128k -j ACCEPT
iptables -t mangle -A INPUT -s 192.168.1.126 -m limit --limit 128k -j ACCEPT
iptables -t mangle -A INPUT -s 192.168.1.103 -j DROP
iptables -t mangle -A INPUT -s 192.168.1.131 -j DROP
iptables -t mangle -A INPUT -s 192.168.1.126 -j DROP
iptables -t mangle -A FORWARD -s 192.168.1.103 -j LIMIT_DOWNLOAD
iptables -t mangle -A FORWARD -s 192.168.1.131 -j LIMIT_DOWNLOAD
iptables -t mangle -A FORWARD -s 192.168.1.126 -j LIMIT_DOWNLOAD
iptables-save