GNU/Linux >> Tutoriales Linux >  >> Linux

nginx:cómo bloquear exploits, inyecciones de SQL, inyecciones de archivos, spam, agentes de usuario, etc.

Este breve artículo explica cómo puede bloquear los exploits más comunes, las inyecciones de SQL, las inyecciones de archivos, el correo no deseado y los agentes de usuario utilizados por los piratas informáticos y los acaparadores de ancho de banda de sus vhosts nginx con algunas directivas de configuración simples. Esta configuración está lejos de ser completa, pero es un buen punto de partida. Tendrá que ver sus registros en busca de intentos de robo y luego intentar modificar/completar el conjunto de reglas.

Modifique sus Nginx Vhosts

El conjunto de reglas que uso aquí debe insertarse en cada vhost nginx (dentro de un servidor {} contenedor) donde desee usarlo. Desafortunadamente, no se puede usar globalmente porque la directiva set no está permitida dentro del contenedor 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;
    }
[...]
}

Cada vez que una de las reglas coincide con una solicitud, se devuelve al cliente un error 403 Prohibido. He comentado la regla wget aquí porque esto también bloquearía los trabajos cron que usan wget, que es bastante común entre las aplicaciones CMS modernas. Si su aplicación no usa wget, también puede descomentar esa regla.

No olvides recargar nginx:

service nginx reload

Servidores ISPConfig Nginx

Estas reglas también se pueden usar en el campo Directivas de Nginx en ISPConfig. Simplemente pegue las reglas en el campo Directivas de Nginx en la pestaña de opciones del sitio web en ISPConfig, sin el bloque {...} del servidor circundante. ISPConfig aplica automáticamente la recarga de nginx cuando guarda los cambios.

Enlaces

  • nginx:http://nginx.org/

Sobre el autor

Falko Timme es el propietario de Timme Hosting (alojamiento web nginx ultrarrápido). Es el mantenedor principal de HowtoForge (desde 2005) y uno de los principales desarrolladores de ISPConfig (desde 2000). También ha contribuido al libro de O'Reilly "Administración del sistema Linux".


Linux
  1. Cómo configurar un proxy inverso Nginx

  2. nginx - 413 Entidad de solicitud demasiado grande

  3. Cómo crear un host virtual Nginx (bloque de servidor)

  4. CentOS / RHEL:cómo recuperarse de un archivo /etc/passwd eliminado

  5. ¿Cómo configurar un archivo como NO ejecutable?

Cómo configurar o cambiar el agente de usuario con curl

Comprender el archivo /etc/passwd

Cómo cambiar o establecer la contraseña de usuario en Linux

Cómo bloquear XML-RPC en WordPress usando Nginx/Apache

¿Qué es el archivo /etc/passwd en Linux?

Cómo configurar un servidor Seafile con Nginx en Ubuntu 18.04