martes, 18 de junio de 2013

Seguridad en CentOS (Mod_qos)


Bueno, hace un par de semanas me mude a centos, despues de pasar por varias distros GNU/LINUX, lo primero que hize fue montarme mi servidor web Apache, todo andaba de 10 hasta que llegamos a la parte de la seguridad, e aqui un problema, el servidor apache es facilmente derribado, ademas de un par de reglas iptables que en internet son facilmente encontradas y si no podemos leer un poco sobre configuraciones iptables ( http://systemcrime.org/foro/index.php?topic=47.msg63;topicseen#msg63 ), ya con mod security y evasive no era suficiente para un ataque de el poderoso Slowloris, de el cual ya apache desde el año 2009 es victima y lo sige siendo hasta el dia de hoy, ya que no se ha encontrado una solucion concreta al problema. 


En la busqueda 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), instalacion: 

para instalarnos este mod instalaremos lo siguiente 

- yum install openssl-devel.x86_64

- yum install pcre-devel.x86_64

- yum install httpd-devel.x86_64



Descomprimimos tar -zxvf mod_qos-10.15.tar.gz

Directorio

cd mod_qos-10.5

Se ingresa al directorio apache2

cd apache2

Se ejecuta la compilación, y se obtendrá una salida como la siguiente;
apxs -i -c  mod_qos.c
Se edita el archivo de configuración 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

Se crea el archivo de configuración de nombre mod_qos.conf;

touch /etc/httpd/conf.d/qos.conf

Se inserta las siguientes líneas en el archivo de configuración recién creado;

vim /etc/httpd/conf.d/qos.conf

## QoS Configuracion
<IfModule mod_qos.c>
#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
</IfModule>

service httpd restart

ademas de eso me agrege esta regla iptables:

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 40 -j DROP


NOTA: las pruebas de ataques fueron realizadas en un servidor vps el cual alcanza una velocidad considerable:

y mi pc 1 mb de velocidad...


Posibles errores en la instalacion :  undefined symbol: EVP_DecryptFinal

Solucion : yum install libtool openssl*
yum install mod_ssl

Y luego agregamos estos 2 modulos juntos en httpd.conf : 

LoadModule ssl_module modules/mod_ssl.so
LoadModule qos_module /usr/lib64/httpd/modules/mod_qos.so

Recuerden ese orden, primero el mod_ssl y con esto reiniciamos 
apache y listo !


Saludos y disfruten :D 


Share:

6 comentarios:

  1. Que tal, gracias por la información, estoy aprendiendo de seguridad informática y esta es una de mis primeras clases, espero puedas orientarme hasta que numero de paquetes es considerado razonable y no se ve afectado el rendimiento del servidor, actualmente en un vps de pruebas me ha dado 426-550 paquetes enviados satisfactoriamente y el servidor ha seguido funcionando sin problemas. Uso apache aunque he visto que nginx soporta mejor Slowloris.

    ResponderEliminar
    Respuestas
    1. Hola, em ciertamente existen mucho mejores alternativas que apache, como la que mencionas u otras como lighttpd, con la cual he tenido muy buenas experiencias. En cuanto a los paquetes los que indicas me parece un poco excesivo, aunque si tienes buena seguridad no sera un problema, prueba tu servidor en modo "beta o de prueba" para ir testeando que tal van las conexiones, y como consejo, si encuentras otra opcion que no sea apache, tomala !,

      gracias por leer un saludo ..

      Eliminar
  2. Hola de nuevo y gracias por responder, bueno he realizado una serie de pruebas sobre el puerto 80 y he logrado reducir por mucho el numero de paquetes enviados exitosamente pero cuando audito el puerto 443 se cae totalmente el servidor, creo que lo ideal para un entorno real sera usar una alternativa a apache aunque la idea no me convence del todo ya que según he leído nginx esta en pañales con IPv6 y lighttpd (lighty) no es compatible con webmin nativamente ni con mod_pagespeed aunque he de decir que si no son indispensables facilitan mucho el tiempo de despegue de los sitios. ¿Tu que alternativa recomiendas para un entorno real tomando en cuenta aspectos como seguridad, estabilidad y rendimiento?

    ResponderEliminar
    Respuestas
    1. ahora mismo ando probando nginx, y no me ha dado ningun problema, lo recomiendo en lo absoluto, solo que con muchas reglas iptables y modificando los FD, funciona correcto, un saludo !

      Eliminar
  3. Respuestas
    1. cpanel si esta con apache es lo mismo, no soluciona nada

      Eliminar

FOLLOWME


Translate

Followers