GNU/Linux >> Linux Esercitazione >  >> Linux

nginx:come bloccare exploit, iniezioni SQL, iniezioni di file, spam, agenti utente, ecc.

Questo breve articolo spiega come bloccare gli exploit più comuni, iniezioni SQL, iniezioni di file, spam e user agent utilizzati da hacker e hogger di larghezza di banda dai tuoi vhost nginx con alcune semplici direttive di configurazione. Questa configurazione è tutt'altro che completa, ma è un buon punto di partenza. Dovrai controllare i tuoi registri per i tentativi di effrazione e quindi provare a modificare/completare il set di regole.

Modifica i tuoi Vhost Nginx

Il set di regole che uso qui deve essere inserito in ogni vhost nginx (all'interno di un contenitore del server {}) in cui si desidera utilizzarlo. Sfortunatamente, non può essere utilizzato a livello globale perché la direttiva set non è consentita all'interno del contenitore 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;
    }
[...]
}

Ogni volta che una delle regole corrisponde a una richiesta, al client viene restituito un errore 403 Forbidden. Ho commentato qui la regola wget perché ciò bloccherebbe anche i lavori cron che usano wget, il che è abbastanza comune tra le moderne applicazioni CMS. Se la tua applicazione non usa wget, puoi anche decommentare quella regola.

Non dimenticare di ricaricare nginx:

service nginx reload

Server ISPConfig Nginx

Queste regole possono essere utilizzate anche nel campo Direttive Nginx in ISPConfig. Basta incollare le regole nel campo Direttive Nginx nella scheda delle opzioni del sito Web in ISPConfig, senza il blocco del server { ... } circostante. La ricarica di nginx viene applicata automaticamente da ISPConfig quando salvi le modifiche.

  • nginx:http://nginx.org/

Informazioni sull'autore

Falko Timme è il proprietario di Timme Hosting (hosting web nginx ultra veloce). È il principale manutentore di HowtoForge (dal 2005) e uno dei principali sviluppatori di ISPConfig (dal 2000). Ha anche contribuito al libro di O'Reilly "Linux System Administration".


Linux
  1. Come rimuovere le voci indesiderate nel file /etc/shadow

  2. Come impedire a utenti non root di creare voci crontab in Linux

  3. Come impostare i file aperti max nginx?

  4. Come impostare un file come NON eseguibile?

  5. Come si imposta un file di scambio crittografato in Linux?

Come impostare o modificare l'agente utente con curl

Comprendere il file /etc/passwd

Come modificare o impostare la password utente in Linux

Come bloccare XML-RPC in WordPress usando Nginx/Apache

Che cos'è il file /etc/passwd in Linux?

Come configurare un server Seafile con Nginx su Ubuntu 18.04