Artikel singkat ini menjelaskan bagaimana Anda dapat memblokir eksploitasi paling umum, injeksi SQL, injeksi file, spam, dan agen pengguna yang digunakan oleh peretas dan pembobol bandwidth dari nginx vhosts Anda dengan beberapa arahan konfigurasi sederhana. Konfigurasi ini masih jauh dari sempurna, tetapi ini adalah titik awal yang baik. Anda harus melihat log Anda untuk percobaan pembobolan dan kemudian mencoba untuk mengubah/menyelesaikan set aturan.
Ubah Nginx Vhosts Anda
Aturan yang saya gunakan di sini harus disisipkan di setiap nginx vhost (di dalam wadah {} server) tempat Anda ingin menggunakannya. Sayangnya, ini tidak bisa digunakan secara global karena set directive tidak diperbolehkan di dalam container http {}.
server { [...] ## Block SQL injections set $block_sql_injections 0; if ($query_string ~ "union.*select.*\(") { set $block_sql_injections 1; } if ($query_string ~ "union.*all.*select.*") { set $block_sql_injections 1; } if ($query_string ~ "concat.*\(") { set $block_sql_injections 1; } if ($block_sql_injections = 1) { return 403; } ## Block file injections set $block_file_injections 0; if ($query_string ~ "[a-zA-Z0-9_]=http://") { set $block_file_injections 1; } if ($query_string ~ "[a-zA-Z0-9_]=(\.\.//?)+") { set $block_file_injections 1; } if ($query_string ~ "[a-zA-Z0-9_]=/([a-z0-9_.]//?)+") { set $block_file_injections 1; } if ($block_file_injections = 1) { return 403; } ## Block common exploits set $block_common_exploits 0; if ($query_string ~ "(<|%3C).*script.*(>|%3E)") { set $block_common_exploits 1; } if ($query_string ~ "GLOBALS(=|\[|\%[0-9A-Z]{0,2})") { set $block_common_exploits 1; } if ($query_string ~ "_REQUEST(=|\[|\%[0-9A-Z]{0,2})") { set $block_common_exploits 1; } if ($query_string ~ "proc/self/environ") { set $block_common_exploits 1; } if ($query_string ~ "mosConfig_[a-zA-Z_]{1,21}(=|\%3D)") { set $block_common_exploits 1; } if ($query_string ~ "base64_(en|de)code\(.*\)") { set $block_common_exploits 1; } if ($block_common_exploits = 1) { return 403; } ## Block spam set $block_spam 0; if ($query_string ~ "\b(ultram|unicauca|valium|viagra|vicodin|xanax|ypxaieo)\b") { set $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; } ## Block user agents set $block_user_agents 0; # Don't disable wget if you need it to run cron jobs! #if ($http_user_agent ~ "Wget") { # set $block_user_agents 1; #} # Disable Akeeba Remote Control 2.5 and earlier if ($http_user_agent ~ "Indy Library") { set $block_user_agents 1; } # Common bandwidth hoggers and hacking tools. 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; } [...] }
Setiap kali salah satu aturan cocok dengan permintaan, kesalahan 403 Terlarang dikembalikan ke klien. Saya telah mengomentari aturan wget di sini karena ini juga akan memblokir pekerjaan cron yang menggunakan wget yang cukup umum di antara aplikasi CMS modern. Jika aplikasi Anda tidak menggunakan wget, Anda juga dapat membatalkan komentar pada aturan itu.
Jangan lupa untuk memuat ulang nginx:
service nginx reload
Server Nginx ISPConfig
Aturan ini juga dapat digunakan di kolom Nginx Directive di ISPConfig. Cukup tempel aturan ke bidang Nginx Directives pada tab opsi situs web di ISPConfig, tanpa blok server { ... } di sekitarnya. Muat ulang nginx diterapkan oleh ISPConfig secara otomatis saat Anda menyimpan perubahan.
Tautan
- nginx:http://nginx.org/
Tentang Penulis
Falko Timme adalah pemilik dari Timme Hosting (hosting web nginx ultra-cepat). Dia adalah pengelola utama HowtoForge (sejak 2005) dan salah satu pengembang inti ISPConfig (sejak 2000). Dia juga berkontribusi pada buku O'Reilly "Linux System Administration".