Vấn đề: Cách tốt nhất để ngăn chặn các URL WordPress như example.com/blog/wp-login.php và example.com/blog/wp-admin/ trong nginx web-server là gì? Tấn công vào các trang web WordPress không phải là mới. Tuy nhiên, gần đây nhiều hãng tin báo cáo rằng có một cuộc tấn công brute force khá lớn xảy ra trên nhiều người sử dụng WordPress ở nhiều máy chủ. Những hacker tấn công brute force vào cổng quản trị của WordPress (example.com/wp-admin/), sử dụng tên người dùng "admin" và cố gắng hàng ngàn mật khẩu. Nginx chặn truy cập cổng quản trị WordPress Chỉnh sửa tập tin nginx.conf, hãy nhập: Mã: vi /etc/nginx/nginx.conf Thêm đoạn mã này vào tập tin: Mã: location ~ ^/(wp-admin|wp-login\.php) { allow 1.2.3.4; deny all; } Nếu blog của bạn nằm trong /blog/ sub-directory, hãy thử: Mã: location ~ ^/blog/(wp-admin|wp-login\.php) { allow 1.2.3.4; deny all; } Thay 1.2.3.4 với địa chỉ IP tĩnh thực tế của bạn. Đây là một tập tin cấu hình mẫu Mã: 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 aluhost.com www.aluhost.com; ## 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; } } Reload lại nginx để áp dụng thay đổi, nhập lệnh sau: Mã: /etc/init.d/nginx reload Kiểm tra Ghé thăm địa chỉ blog của bạn như http://www.aluhost.com/cms/wp-login.php hoặc http://bash.aluhost.com/wp-admin/ Ví dụ kết quả đầu ra: Các đề nghị khác Đầu tiên, thiết lập chứng chỉ SSL trên nginx. Chỉnh sửa tập tin wp-config.php và thêm chỉ thị sau đây: Mã: define('FORCE_SSL_ADMIN', true); Lưu lại và đóng tập tin. Tùy chọn FORCE_SSL_ADMIN sẽ giúp WordPress đảm bảo thông tin đăng nhập và khu vực admin , cả mật khẩu và cookie không bao giờ được gửi trong http. Sử dụng lệnh curl để xem http headers, hãy nhập Mã: curl -I http://www. aluhost.com /cms/wp-admin/ Ví dụ kết quả đầu ra: Mã: 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.aluhost.com/cms/wp-admin/ Tôi cũng đề nghị bạn thêm các quy tắc tường lửa sau đây đến phần SSL: Mã: ## 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