我试图将 HTTP 请求限制为最大 20 个请求/秒(如果超过该数量则拒绝),但我想从此规则中排除对 (.png、.js、.css) 文件的请求,我使用了以下代码
iptables -N RATELIMITING
iptables -I INPUT -p tcp --dport 80 -m string --algo bm --string "/" -j RATELIMITING
iptables -A RATELIMITING -p tcp --dport 80 -m string --algo bm --string "\.(jpe?g|png|gif|js|css|woff)$" -j RETURN
iptables -A RATELIMITING -p tcp --dport 80 -m state --state NEW -m recent --set
iptables -A RATELIMITING -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 1 --hitcount 20 -j REJECT --reject-with tcp-reset
iptables -A RATELIMITING -j RETURN
它确实会阻止超过 20 个请求,但不会从规则中排除 (.png、.js、.css) 文件,如果我向这些文件发送 20 个请求,您也会被阻止,我在这里做错了什么?
答案1
我的iptables-extensions
手册页没有提到这里允许使用正则表达式,所以我想它们是不允许的。您必须为您的选择创建单独的规则。 (顺便说一句,您无需重复链-p tcp --dport 80
中的部分RATELIMITING
:在您的设置中始终如此。)