Nginx:阻止除一个IP地址外的所有URL访问(wp-admin/wp-login.php)
时间:2020-01-09 10:42:46 来源:igfitidea点击:
在nginx Web服务器中阻止WordPress URL(例如example.com/blog/wp-login.php和example.com/blog/wp-admin/)的最佳方法是什么?
但是,最近许多新闻媒体报道说,在多台主机上的WordPress用户上发生了相当大的暴力攻击。
攻击者使用用户名admin并尝试使用数千个密码,从而强行攻击WordPress管理门户(example.com/wp-admin/)。
Nginx阻止访问WordPress管理门户
编辑文件nginx.conf,执行:
# vi /etc/nginx/nginx.conf
在服务器上下文中追加以下所有内容并拒绝所有nginx config伪指令:
location ~ ^/(wp-admin|wp-login\.php) { allow 1.2.3.4; deny all; }
如果您的博客位于/blog /子目录中,请尝试:
location ~ ^/blog/(wp-admin|wp-login\.php) { allow 1.2.3.4; deny all; }
用您的实际静态IP地址替换1.2.3.4。
这是一个示例配置文件
upstream apachebackend { server 192.168.1.10:8080 weight=6; server 192.168.1.11:8080 weight=5; server 192.168.1.12:8080 weight=5; server 192.168.1.13:8080 weight=5; #server 127.0.0.1:8080 weight=1; } server { access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; index index.html; listen 75.126.153.206:80 default; root /usr/share/nginx/html; server_name theitroad.local www.theitroad.local; ## PROXY - Web location / { proxy_pass http://apachebackend; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ~ ^/(wp-admin|wp-login\.php) { allow 1.2.3.4; deny all; proxy_pass http://apachebackend; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
重新启动/重新加载Nginx Web服务器,执行:
# /etc/init.d/nginx reload
测试一下
访问您的博客URL,例如http://www.theitroad.local/cms/wp-login.php或者http://bash.theitroad.local/wp-admin/示例输出:
Nginx阻止WordPress Admin Portal
如何自定义403错误页面?
有关更多信息,请参见创建自定义静态HTTP 404或者HTTP 403错误页面。
其他建议
首先,在nginx上设置SSL证书。
编辑文件wp-config.php并追加以下指令:
define('FORCE_SSL_ADMIN', true);
保存并关闭文件。
FORCE_SSL_ADMIN
选项强制WordPress保护登录名和管理区域的安全,从而使密码和cookie永远不会通过http干净地发送。
使用curl命令查看http标头,执行:
$ curl -I http://www.theitroad.local/cms/wp-admin/
HTTP/1.1 302 Found Server: nginx Date: Sun, 14 Apr 2013 09:01:44 GMT Content-Type: text/html Connection: keep-alive Keep-Alive: timeout=60 Vary: Cookie Expires: Wed, 11 Jan 1984 05:00:00 GMT Cache-Control: no-cache, must-revalidate, max-age=0 Pragma: no-cache Location: https://www.theitroad.local/cms/wp-admin/
我还建议您添加以下防火墙规则,以便您只能访问SSL部分:
## Open port 443 to you only ## ## Allow your home/office static IP 1.2.3.4 at port 443 /sbin/iptables -A INPUT -s 1.2.3.4 -m state --state NEW -p tcp --dport 443 --destination YOUR-Web-Server-SSL-IP-HERE -j ACCEPT ## Make sure you DROP the rest of the world for 75.126.153.203 for TCP port 443 ### ##/sbin/iptables -A INPUT -s 0/0 -m state --state NEW -p tcp --dport 443 --destination YOUR-Web-Server-SSL-IP-HERE -j DROP