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 pcre-devel.x86_64
- yum install httpd-devel.x86_64
Descargamos el mod: http://www.mediafire.com/?i35mnrrgzvc5mxk
Descomprimimos tar -zxvf mod_qos-10.15.tar.gz
Directorio
cd mod_qos-10.5
Se ingresa al directorio apache2
cd apache2
Se ingresa al directorio apache2
cd apache2
Se ejecuta la compilación, y se obtendrá una salida como la siguiente;
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
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>
<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>
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
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
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.
ResponderEliminarHola, 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 !,
Eliminargracias por leer un saludo ..
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?
ResponderEliminarahora 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 !
Eliminarusen cpanel y problemas resuelto
ResponderEliminarcpanel si esta con apache es lo mismo, no soluciona nada
Eliminar