GNU/Linux >> LINUX-Kenntnisse >  >> Linux

nginx:So blockieren Sie Exploits, SQL-Injektionen, Datei-Injektionen, Spam, Benutzeragenten usw.

Dieser kurze Artikel erklärt, wie Sie die häufigsten Exploits, SQL-Injektionen, Datei-Injektionen, Spam und Benutzeragenten, die von Hackern und Bandbreitenfressern verwendet werden, mit einigen einfachen Konfigurationsanweisungen von Ihren nginx-Vhosts blockieren können. Diese Konfiguration ist noch lange nicht vollständig, aber sie ist ein guter Ausgangspunkt. Sie müssen Ihre Protokolle auf versuchte Einbruchsversuche überwachen und dann versuchen, den Regelsatz zu ändern/zu vervollständigen.

Ändern Sie Ihre Nginx-Vhosts

Der Regelsatz, den ich hier verwende, muss in jeden nginx-Vhost (innerhalb eines Server-{}-Containers) eingefügt werden, wo Sie ihn verwenden möchten. Leider kann es nicht global verwendet werden, da die set-Direktive nicht innerhalb des http {}-Containers erlaubt ist.

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;
    }
[...]
}

Immer wenn eine der Regeln mit einer Anfrage übereinstimmt, wird ein 403 Forbidden-Fehler an den Client zurückgegeben. Ich habe die wget-Regel hier auskommentiert, da dies auch Cron-Jobs blockieren würde, die wget verwenden, was bei modernen CMS-Anwendungen recht häufig vorkommt. Wenn Ihre Anwendung wget nicht verwendet, können Sie diese Regel auch auskommentieren.

Vergessen Sie nicht, nginx neu zu laden:

service nginx reload

ISPConfig Nginx-Server

Diese Regeln können auch im Feld Nginx-Anweisungen in ISPConfig verwendet werden. Fügen Sie einfach die Regeln in das Feld Nginx-Richtlinien auf der Registerkarte Website-Optionen in ISPConfig ein, ohne den umgebenden Serverblock { ... }. Das Neuladen von nginx wird von ISPConfig automatisch angewendet, wenn Sie die Änderungen speichern.

  • nginx:http://nginx.org/

Über den Autor

Falko Timme ist Der Besitzer von Timme Hosting (ultraschnelles Nginx-Webhosting). Er ist der Hauptbetreuer von HowtoForge (seit 2005) und einer der Kernentwickler von ISPConfig (seit 2000). Er hat auch zum O'Reilly-Buch "Linux System Administration" beigetragen.


Linux
  1. So richten Sie einen Nginx-Reverse-Proxy ein

  2. nginx - 413 Anforderungsentität zu groß

  3. So ändern oder setzen Sie Benutzerpasswörter in Linux

  4. So richten Sie SSH-Schlüssel unter Debian ein

  5. CentOS / RHEL:So stellen Sie eine gelöschte /etc/passwd-Datei wieder her

So stellen oder ändern Sie den Benutzeragenten mit Curl

Verstehen der /etc/passwd-Datei

So ändern oder setzen Sie das Benutzerkennwort in Linux

So blockieren Sie XML-RPC in WordPress mit Nginx/Apache

Was ist die Datei /etc/passwd unter Linux?

So richten Sie einen Seafile-Server mit Nginx unter Ubuntu 18.04 ein