Seguridad en CentOS (Apache) [Mod_qos]

21:59 0 Comments A+ a-

Hace un tiempo me mude a CentOS, despues de pasar por varias distros GNU/LINUX, lo primero que hice fue montarme mi servidor web Apache, y todo andaba muy bien, hasta que llegamos a la parte de la seguridad... Aqui me encontré con un problema, el servidor Apache es facilmente derribado, a pesar de tener algunas reglas iptables que en internet son facilmente encontradas, y si no podemos leer un poco sobre configuraciones iptables en este post, ya que con Mod Security y Mod Evasive no era suficiente para detener un ataque del poderoso Slowloris, del cual Apache es victima desde el 2009, y lo sigue siendo hasta el dia de hoy ya que no se ha encontrado una solucion concreta al problema.

En la busqueda de una posible solucion, me encontre con un mod muy interesante y el cual "mitigo" en gran magnitud un ataque de Slowloris a mi servidor Apache, este mod se llama "MOD_QOS, y a continuación voy a detallar los pasos para instalarlo:
yum install openssl-devel.x86_64
yum install pcre-devel.x86_64
yum install httpd-devel.x86_64
Descargamos el mod desde acá y una vez descargado, lo descomprimimos:
tar -zxvf mod_qos-10.15.tar.gz
Y luego vamos a su contenido escribiendo lo siguiente:
cd mod_qos-10.5
Luego ingresamos al directorio de apache
cd apache2
Ejecutamos la compilación
apxs -i -c  mod_qos.c


Ahora editamos el archivo de configuracion de Apache
vim /etc/httpd/conf/httpd.conf
Y se inserta la siguiente línea para el módulo del mod_qos:
LoadModule qos_module /usr/lib64/httpd/modules/mod_qos.so
Creamos un archivo de configuración de nombre mod_qos.conf:
touch /etc/httpd/conf.d/qos.conf
Insertamos las siguientes líneas en el archivo de configuración recién creado:
vim /etc/httpd/conf.d/qos.conf
    ## QoS Configuracion
    
    #Manejo de conexiones hasta 100000 IPs diferentes
    QS_ClientEntries 100000
    # Se permite solamente 50 connexiones por IP
    QS_SrvMaxConnPerIP 50
    # Maximo numero de conexiones TCP activas 256
    MaxClients              256
    # Desactivar la directiva keep-alive cuando el 70% de las conexiones TCP estan ocupadas:
    QS_SrvMaxConnClose      70%
    # Minimo de velocidad para peticiones / respuestas (niega a los clientes lentos que bloquean el servidor ,
    #Ejemplo; el script slowloris mantiene las peticiones HTTP :
    QS_SrvMinDataRate       150 1200
    # Limite de peticiones de encabezados y cuerpo (con cuidado, limita las cargas y las peticiones POST):
    # LimitRequestFields      30
    # QS_LimitRequestBody     102400
    
Finalmente reiniciamos el servicio con el siguiente comando:
service httpd restart
A demás vamos a agregar esta regla iptables:
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 40 -j DROP
Con esto podremos disminuir considerablemente los ataques que se reciban al servidor. Este labs fue montado en una VPS con la siguiente velocidad:


Este post fue realizado por ZanGetsu