GNU/Linux >> Belajar Linux >  >> Linux

nginx:Cara Memblokir Eksploitasi, Injeksi SQL, Injeksi File, Spam, Agen Pengguna, Dll.

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.

  • 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".


Linux
  1. Cara Mengatur Proksi Terbalik Nginx

  2. nginx - 413 Permintaan Entitas Terlalu Besar

  3. Cara menghapus entri yang tidak diinginkan di file /etc/shadow

  1. Cara Membuat Virtual Host Nginx (Blok Server)

  2. Bagaimana Cara Menggunakan Jenis File Di Vim?

  3. Cara memblokir pengguna non-root dari membuat entri crontab di Linux

  1. Cara Mengubah atau Mengatur Kata Sandi Pengguna di Linux

  2. Cara Mengatur Kunci SSH di Debian

  3. CentOS / RHEL :Cara Memulihkan dari file /etc/passwd yang dihapus