10 mẹo cấu hình Nginx giúp tăng cường bảo mật WordPress

Dưới đây là 10 mẹo cấu hình Nginx giúp tăng cường bảo mật WordPress để giảm thiểu nguy cơ bị tấn công, mất dữ liệu và nội dung quan trọng trên website.

10 mẹo cấu hình Nginx giúp tăng cường bảo mật WordPress

Hạn chế quyền truy cập XMLRPC

Điểm cuối XMLRPC trong WordPress được sử dụng để cho phép một ứng dụng bên ngoài tương tác với dữ liệu WordPress. Ví dụ, nó có thể cho phép thêm, tạo hoặc xóa một bài đăng. Tuy nhiên, XMLRPC cũng là một vectơ tấn công phổ biến, nơi kẻ tấn công có thể thực hiện các hoạt động đó mà không cần sự cho phép. Tốt hơn hết là cho phép yêu cầu XMLRPC từ IP được ủy quyền mà bạn tin tưởng, như sau:

location ~* /xmlrpc.php$ {
allow 172.0.1.1;
deny all;
}

Sau khi thêm đoạn code trên, bạn sẽ thấy phản hồi mã lỗi 403 khi load xmlrpc.php trong trình duyệt.

Giới hạn các loại yêu cầu

Hầu hết thời gian trang web chỉ có thể thực hiện hai loại yêu cầu, tức là GET để lấy dữ liệu từ trang web và POST để tải dữ liệu lên trang web. Giới hạn loại yêu cầu mà trang web có thể xử lý chỉ hai điều này là một ý tưởng tốt.

if ($request_method !~ ^(GET|POST)$ ) {
return 444;
}

Truy cập file PHP trực tiếp

Nếu bằng cách nào đó, một hacker đã thành công trong việc truy cập file PHP vào trang web, thì chúng sẽ có thể chạy file này bằng cách load file, có hiệu quả trở thành backdoor để xâm nhập vào trang web đó. Bạn nên vô hiệu hóa quyền truy cập trực tiếp vào bất kỳ file PHP nào bằng cách thêm các quy tắc sau:

location ~* /(?:uploads|files|wp-content|wp-includes|akismet)/.*.php$ {
deny all;
access_log off;
log_not_found off;
}

Dotfiles

Tương tự như file PHP, một dotfile như .htaccess, .user.ini và .git có thể chứa thông tin nhạy cảm. Để an toàn hơn, tốt hơn hết là bạn nên vô hiệu hóa quyền truy cập trực tiếp vào các file này.

location ~ /\.(svn|git)/* {
deny all;
access_log off;
log_not_found off;
}
location ~ /\.ht {
deny all;
access_log off;
log_not_found off;
}
location ~ /\.user.ini {
deny all;
access_log off;
log_not_found off;
}

Ẩn phiên bản Nginx và PHP

Một số thông tin tốt nhất không nên được tiết lộ như phiên bản Nginx cũng như phiên bản PHP. Bản thân điều này không ngăn chặn cuộc tấn công. Tuy nhiên, giả sử phiên bản Ningx hoặc PHP cụ thể có lỗ hổng bị lộ, kẻ tấn công sẽ không nhận biết dễ dàng từ trang web. Để ẩn phiên bản Nginx, hãy làm như sau:

#Hide the nginx version.
server_tokens off;
#Hide the PHP version.
fastcgi_hide_header X-Powered-By;
proxy_hide_header X-Powered-By;

Tiêu đề bảo mật

Các tiêu đề bảo mật cung cấp thêm một lớp bảo mật bằng cách ra lệnh cho hành vi của trình duyệt. Ví dụ, X-Frame-Options sẽ ngăn trang web load từ một iframe, trừ khi nó xuất phát từ trang web của chính bạn. Strict-Transport-Security sẽ buộc trình duyệt load trang web từ HTTPS.

add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

Chặn quyền truy cập thư mục con

Nếu trang web chạy trên một thư mục con như /blog, thì tốt hơn là cho phép truy cập vào thư mục con này. Điều đó có nghĩa là mọi quyền truy cập mờ ám vào các thư mục khác mà kẻ tấn công luôn tìm kiếm, ví dụ, /82jdkj/?.php đều bị chặn.

location ~ ^/(?!(blog)/?) {
deny all;
access_log off;
log_not_found off;
}

Giảm spam

Bình luận spam, mặc dù có thể không phá vỡ trang web của bạn, nhưng sẽ làm tràn ngập cơ sở dữ liệu với nội dung rác hoặc nội dung độc hại, có thể tận dụng như một vectơ. Để giảm các mục spam, bạn có thể thêm những quy tắc sau vào cấu hình Nginx cùng với plugin bảo vệ Spam như Akismet.

set $comment_flagged 0;
set $comment_request_method 0;
set $comment_request_uri 0;
set $comment_referrer 1;
if ($request_method ~ "POST"){
set $comment_request_method 1;
}
if ($request_uri ~ "/wp-comments-post\.php$"){
set $comment_request_method 1;
}
if ($http_referer !~ "^https?://(([^/]+\.)?site\.com|jetpack\.wordpress\.com/jetpack-comment)(/|$)"){
set $comment_referrer 0;
}
set $comment_flagged "${comment_request_method}${comment_request_uri}${comment_referrer}";
if ($comment_flagged = "111") {
return 403;
}

Giới hạn yêu cầu

Trang đăng nhập WordPress, wp-login.php, là điểm cuối chung cho một cuộc tấn công brute-force. Kẻ tấn công sẽ cố gắng “hạ gục” trang web bằng cách gửi nhiều kết hợp tên người dùng và mật khẩu. Điều này thường được thực hiện nhiều lần trong một giây.

Đối với điều này, bạn có thể áp dụng quy tắc giới hạn số lượng yêu cầu mà trang có thể xử lý mỗi giây. Ở đây, ví dụ đặt giới hạn là 2 yêu cầu mỗi giây. Nếu không, yêu cầu sẽ bị chặn.

limit_req_zone $binary_remote_addr zone=WPRATELIMIT:10m rate=2r/s;
location ~ \wp-login.php$ {
limit_req zone=WPRATELIMIT;
}

Vô hiệu hóa việc lập danh sách thư mục

Cuối cùng nhưng không kém phần quan trọng, bạn nên vô hiệu hóa việc lập danh sách thư mục để kẻ tấn công không nhận biết được những gì trong thư mục. Có rất ít lý do mà việc lập danh sách thư mục hữu ích trên trang web WordPress.

autoindex off;
Chúc bạn thành công!

Nguồn: quantrimang