![使用 iptables 阻止对 nginx 上的某些 URL 的访问](https://linux22.com/image/704341/%E4%BD%BF%E7%94%A8%20iptables%20%E9%98%BB%E6%AD%A2%E5%AF%B9%20nginx%20%E4%B8%8A%E7%9A%84%E6%9F%90%E4%BA%9B%20URL%20%E7%9A%84%E8%AE%BF%E9%97%AE.png)
我们正在使用 nginx,需要阻止访问服务器上不存在的某些 URL 或 URL 部分,这些 URL 或 URL 部分正在被黑客用来探测服务器。
为了有效阻止这些 URL,我们决定将它们放在防火墙上。以下是一些阻止措施:
iptables -I INPUT -p tcp -m string --string "/myaccount" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/login" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string ".action" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string ".asp" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/admin" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/connectors/" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/default/" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/filemanager/" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/editor/" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/include/" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/convert/" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "wp-json" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/wp-admin" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/administrator" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/wp/" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/modules/" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/new/" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/old/" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/wordpress/wp-admin" --algo kmp -j DROP
iptables -I INPUT -p tcp -m string --string "/test/" --algo kmp -j DROP
缺点是设置这些规则后,nginx 变得无法访问。它要么给出 402 错误,要么给出 403 错误。
任何想法?
编辑
问题可能出在规则本身而不是放置规则的地方。尝试将它们放在 nginx 下,但它停止响应:
location ~ ^/(wp-admin|wp-login|old/|new/|modules/|wp/|administrator|wordpress/wp-admin|test/|wp-json|convert/|include/|editor/|filemanager/|default/|connectors/|admin|login|myaccount) {
deny all;
}