Bài viết ngắn này giải thích cách bạn có thể chặn các khai thác phổ biến nhất, SQL injection, file injection, spam và user agent được tin tặc và kẻ chiếm dụng băng thông sử dụng từ máy chủ ảo nginx của bạn bằng một số chỉ thị cấu hình đơn giản. Cấu hình này còn lâu mới hoàn chỉnh, nhưng là điểm khởi đầu tốt. Bạn sẽ phải theo dõi nhật ký của mình để tìm các nỗ lực đột nhập và sau đó cố gắng sửa đổi/hoàn thiện bộ quy tắc.
Bất cứ khi nào một trong các quy tắc khớp với yêu cầu, lỗi 403 Forbidden sẽ được trả về cho máy khách. Tôi đã chú thích quy tắc wget ở đây vì điều này cũng sẽ chặn các tác vụ cron sử dụng wget, một lỗi khá phổ biến trong các ứng dụng CMS hiện đại. Nếu ứng dụng của bạn không sử dụng wget, bạn cũng có thể bỏ chú thích cho quy tắc đó.
Đừng quên tải lại nginx:
Giới thiệu về tác giả
Falko Timme là chủ sở hữu của https://timmehosting.de/?utm_source=diendancongnghe.comTimme Hosting (dịch vụ lưu trữ web nginx cực nhanh). Ông là người bảo trì chính của HowtoForge (từ năm 2005) và là một trong những nhà phát triển cốt lõi của ISPConfig (từ năm 2000). Ông cũng đã đóng góp cho cuốn sách "Linux System Administration" của O'Reilly.
Sửa đổi Nginx Vhost của bạn
Bộ quy tắc tôi sử dụng ở đây phải được chèn vào mỗi nginx vhost (bên trong một vùng chứa máy chủ {}) mà bạn muốn sử dụng. Thật không may, nó không thể được sử dụng trên toàn cầu vì lệnh set không được phép bên trong vùng chứa http {}.
Mã:
server {[...] ## Chặn lệnh tiêm SQL set $block_sql_injections 0; nếu ($query_string ~ "union.*select.*\(") { đặt $block_sql_injections 1; } nếu ($query_string ~ "union.*all.*select.*") { đặt $block_sql_injections 1; } nếu ($query_string ~ "concat.*\(") { đặt $block_sql_injections 1; } nếu ($block_sql_injections = 1) { trả về 403; } ## Chèn tệp khối đặt $block_file_injections 0; nếu ($query_string ~ "[a-zA-Z0-9_]=http://") { đặt $block_file_injections 1; } nếu ($query_string ~ "[a-zA-Z0-9_]=http://") { đặt $block_file_injections 1; } nếu ($query_string ~ "[a-zA-Z0-9_]=(\.\.//?)+") { đặt $block_file_injections 1; } nếu ($query_string ~ "[a-zA-Z0-9_]=/([a-z0-9_.]//?)+") { đặt $block_file_injections 1; } nếu ($block_file_injections = 1) { trả về 403; } ## Chặn các khai thác phổ biến đặt $block_common_exploits 0; nếu ($query_string ~ "(|%3E)") { đặt $block_common_exploits 1; } nếu ($query_string ~ "GLOBALS(=|\[|\%[0-9A-Z]{0,2})") { đặt $block_common_exploits 1; } nếu ($query_string ~ "_REQUEST(=|\[|\%[0-9A-Z]{0,2})") { đặt $block_common_exploits 1; } nếu ($query_string ~ "proc/self/environ") { đặt $block_common_exploits 1; } if ($query_string ~ "mosConfig_[a-zA-Z_]{1,21}(=|\%3D)") { đặt $block_common_exploits 1; } if ($query_string ~ "base64_(en|de)code\(.*\)") { đặt $block_common_exploits 1; } if ($block_common_exploits = 1) { trả về 403; } ## Chặn thư rác đặt $block_spam 0; if ($query_string ~ "\b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo)\b") { đặt $block_spam 1; } if ($query_string ~ "\b(erections|hoodia|huronriveracres|impotence|levitra|libido)\b") { set $block_spam 1; } if ($query_string ~ "\b(ambien|blue\spill|cialis|cocaine|ejaculation|erectile)\b") { set $block_spam 1; } if ($query_string ~ "\b(lipitor|phentermin|pro[sz]ac|sandyauer|tramadol|troyhamby)\b") { set $block_spam 1; } if ($block_spam = 1) { return 403; } ## Chặn tác nhân người dùng set $block_user_agents 0; # Không tắt wget nếu bạn cần nó để chạy các tác vụ cron! #if ($http_user_agent ~ "Wget") { # set $block_user_agents 1; #} # Vô hiệu hóa Akeeba Remote Control 2.5 và các phiên bản trước đó if ($http_user_agent ~ "Indy Library") { set $block_user_agents 1; } # Các công cụ hack và chiếm dụng băng thông phổ biến. if ($http_user_agent ~ "libwww-perl") { set $block_user_agents 1; } if ($http_user_agent ~ "GetRight") { set $block_user_agents 1; } if ($http_user_agent ~ "GetWeb!") { set $block_user_agents 1; } if ($http_user_agent ~ "Go!Zilla") { set $block_user_agents 1; } if ($http_user_agent ~ "Download Demon") { set $block_user_agents 1; } if ($http_user_agent ~ "Go-Ahead-Got-It") { set $block_user_agents 1; } if ($http_user_agent ~ "TurnitinBot") { set $block_user_agents 1; } if ($http_user_agent ~ "GrabNet") { set $block_user_agents 1; } if ($block_user_agents = 1) { return 403; }[...]}
Đừng quên tải lại nginx:
Mã:
service nginx reload
ISPConfig Nginx Servers
Những quy tắc này cũng có thể được sử dụng trong trường Nginx Directives trong ISPConfig. Chỉ cần dán các quy tắc vào trường Nginx Directives trên tab tùy chọn trang web trong ISPConfig, không có khối server { ... } xung quanh. Nginxreload được ISPConfig tự động áp dụng khi bạn lưu các thay đổi.Liên kết
- nginx: http://nginx.org/
Giới thiệu về tác giả
Falko Timme là chủ sở hữu của https://timmehosting.de/?utm_source=diendancongnghe.comTimme Hosting (dịch vụ lưu trữ web nginx cực nhanh). Ông là người bảo trì chính của HowtoForge (từ năm 2005) và là một trong những nhà phát triển cốt lõi của ISPConfig (từ năm 2000). Ông cũng đã đóng góp cho cuốn sách "Linux System Administration" của O'Reilly.