miércoles, 3 de agosto de 2011

Los ataques DoS a apache,como prevenir


Hola a todos, antes de nada me voy a presentar, mi nombre es Jose Antonio y como ya sabrán soy editor de Todobytes.es , aunque anteriormente he escrito algún que otro artículo, realmente no he llegado a escribir ninguno importante debido a mi falta de ideas y tiempo.
Pues hoy mismo os traigo un nuevo artículo muy interesante y importante para cualquier SYSADMIN debido a su importancia y complicidad, no es otro que el famoso talón de aquiles de internet: “Los ataques de denegación de servicios”.
En este artículo vamos a aprender que son, como detectarlos y como protegernos de ellos.
¿Qué es un ataque DoS ó DDoS?
Como su propio nombre indica, un ataque DoS es un ataque de denegación de servicios, consiste en que un atacante comienza a lanzar peticiones o paquetes de datos hacia un socket llegando a colapsar (o incluso tumbar) algún servicio ó incluso la propia máquina debido a la incapacidad de esta para resolver tantas peticiones.
Es un tipo de ataque muy común entre servidores que ofrecen servicios a internet, como puede ser un servidor web.
La variante de este son los ataques DDoS, la diferencia respecto a los anteriormente dichos es que son distribuidos, lo cual quiere decir que son varios los atacantes.
Como podréis imaginar, con todos los recursos que se tienen hoy día en la informática es casi misión imposible detener o protegernos de dichos ataques, pero en este artículo voy a dar unas pautas a seguir para poder detectarlos a tiempo, protegernos en la medida de lo posible y bloquearlos.
¿Cómo detectar un ataque DoS ó DDoS?
La única forma real que tenemos de localizar un ataque es estudiando el número de conexiones reales que tiene nuestro ordenador con Internet.
Para ello disponemos del programa netstat, el cual junto con algunos parámetros del mismo nos va a ayudar a identificar las IPS y número de conexiones que realiza un sistema remoto con nuestro ordenador.
netstat -alpn | grep :80 | awk ‘{print $5}’ |awk -F: ‘{print $(NF-1)}’ |sort | uniq -c | sort -n
Como podemos ver en la imagen nos muestra los resultados de la siguiente forma:
y             XX.XX.XX.XX
Donde Y es el número de peticiones y XX.XX.XX.XX es la IP origen.
Si en esa imagen detectáramos que una ó varias ip están enviando más de 50 peticiones a nuestra máquina, estaríamos frente al inicio de un ataque de denegación de servicio.
Cabe decir que este comando sólo valdría para detectar el número de conexiones con el puerto 80 (Http), si se desea monitorizar otras conexiones bastará con cambiar el parámetro grep:80 por el puerto en cuestión.
¿Cómo protegernos de un ataque DoS ó DDoS?
En este punto, vamos a centrarnos en detener un ataque de denegación de servicios Http.
Antes de nada, lo más importante es tener el sistema operativo correctamente actualizado, ya que muchos de los ataques DoS y DDoS son lanzado mediante vulnerabilidades producidas en el sistema.
En segundo lugar vamos a configurar el apache para que así pueda aceptar más peticiones sin que esto provoque una caída del sistema ó colapso de este.
Vamos a proceder a configurar apache:
1- paramos apache: /etc/init.d/httpd stop
2- nano /etc/httpd/conf/httpd.conf
3- buscamos el módulo: prefork.c
4- Vamos a editar el contenido de este:
StartServers       6
MinSpareServers    6
MaxSpareServers   10
ServerLimit      160
MaxClients       160
MaxRequestsPerChild  10000
Por defecto es posible que usted tenga otros valores en el mismo, vamos a explicar uno a uno estos valores, personalmente recomiendo ampliar el número “MaxRequestsPerChild” el cual es el número de peticiones máximo y los parámetros “StartServers” y “MinSpareServers/MaxSpareServers”.
5- Una vez modificado esto procedemos a arrancar de nuevo apache: /etc/init.d/httpd stop
Módulos de seguridad de apache:
Vamos a proceder a instalar un módulo de seguridad para apache:
- Mod_Security:
Actualizar el paquete rpmforge (y por si ya existe);
rpm -Uvh paquete.rpm
Y  el repositorio de jasonlitka;
cd /etc/yum.repos.d
vim CentOS-Base.repo
y por ultimo se agrega el contenido del repositorio;
[utterramblings]
name=Jason’s Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
Ahora se instala y configura el modulo mod_security y reiniciamos apache.
yum -y install mod_security
Se verifica que el modulo del mod_security este activo;
httpd -M
Debe mostrar como salida: security2_module (shared)
Listo, tienen su modulo de seguridad activado y corriendo, si desean conocer todos los parámetros y reglas del modulo recuerden visitar el sitio web oficial.
- Mod_Evasive : redirigir el tráfico de peticiones ilegítimas a un error prohibido (error 403)
Instalamos el módulo:
yum -y install mod_evasive
Configuramos las reglas de este en el fichero: /etc/httpd/conf.d/mod_evasive.conf
Y modificamos los siguientes parámetros:
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50                       // número de peticiones
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10                  // tiempo de bloqueo
DOSEmailNotify correo@dominio.com  // correo donde se enviarán los log
Vamos a crear un pequeño script que lanza un pequeño ataque de DoS para comprobar el funcionamiento de los módulos ya instalados, tendrá que crear este fichero y guardarlo como NOMBRE.pl modificando “DireccionIP” por la dirección de nuestro servidor donde hemos instalado los módulos:
#!/usr/bin/perl
use IO::Socket;
use strict;
for(0..100) {
  my($response);
  my($SOCKET) = new IO::Socket::INET( Proto   => "tcp",
                                      PeerAddr=> "DireccionIP:80");
  if (! defined $SOCKET) { die $!; }
  print $SOCKET "GET /?$_ HTTP/1.0\n\n";
  $response = <$SOCKET>;
  print $response;
  close($SOCKET);
}
Lo ejecutamos: perl NOMBRE.pl.
Si todo va bien, nos deberá de aparecer algo parecido a esto:
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
Eso es señal de que nuestro servidor ha bloqueado las peticiones mandándolas a un 403 a partir de la que ajustamos en el fichero.
Instalación de un firewalls
Todo no es tener el sistema actualizado, configurado y protegido… ¡También tenemos que tener un cortafuegos!.
En este caso voy a instalar un Firewall CSF.
Se llama CSF+LFD. No solo bloquea y evita conexiones altas, sino que ademas es un Firewall totalmente personalizable.
La herramienta se instala de forma facilísima siguiendo estos comandos:
rm -fv csf.tgz
wget http://www.configserver.com/free/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
Es tremendamente interesante instalarlo con el Webmin instalado, por lo tanto, ¡Vamos a instalarlo!.
yum install perl openssl openssl-devel perl-Net-SSLeay
Creamos una carpeta donde vamos a instalar webmin.
mkdir /usr/local/webmin
Nos posicionamos en la carpeta /usr/src y escribimos el siguiente comando:
cd /usr/src
wget http://downloads.sourceforge.net/project/webadmin/webmin/1.530/webmin-1.530.tar.gz?r=http%3A%2F%2Fwww.webmin.com%2Fdownload.html&ts=1299424310&use_mirror=ufpr
Decomprimimos el programa:
tar -xf webmin-1.530.tar.gz
entramos en la carpeta creada:
cd webmin-1.530
y iniciamos la instalación
 ./setup.sh /usr/local/webmin
Una vez instalado, entramos en este (http/https://ip:10000) y nos vamos a:
Webmin > Webmin Configuration > Webmin Modules > From local file > /etc/csf/csfwebmin.tgz > Install Module
Después en Webmin > System te habrá aparecido ConfigServer Security & Firewall.
Desde aquí deberemos de configurar las IPTABLES, arrancar el firewall en modo normal y modificar los parámetros de seguridad.
Espero que la guia haya servido de ayuda, he omitido algunos pasos como la configuración del firewall ya que esto depende del administrador de cada sistema y de su propia red.

Fuente:http://todobytes.es/el-punto-flaco-de-internet-los-ataques-dos/

No hay comentarios:

Publicar un comentario