IPTABLES 3 : Parando un ataque DOS

IPTABLES DOS

Esta es nuestra 3 incursión dentro de iptables, esta vez vamos a intentar simular un ataque dos, el cual intentaremos detener mediante nuestro firewall iptables.

Para realizar esta práctica contaremos con 3 maquinas.2 de ellas serian Debian y una Ubuntu. La maquina Ubuntu hará de firewall mientras que un debían será un servidor apache y el otro será el atacante.

A continuación presentaremos las maquinas y su configuración de red. Vamos a construir una infraestructura para poder simular nuestro entorno.

Para que sea más fácil entender nuestra infraestructura, nos fijaremos en la imagen inferior.

clip_image002

Como podemos observar disponemos de un firewall entre la red 10.0.0.0/24 y la red 192.168.0.0/24 que da salida a internet. Tendremos que hacer que nuestro firewall sea además un router, haciendo nat y reenviando las tramas de una red a la otra. Podríamos pensar que el servidor apache que está en la red 10.0.0.0/24 tiene una intranet que da servicio a los usuarios internos.

CONFIGURACION DE RED

En primer lugar tendremos que configurar las tarjetas de red para montar nuestra pequeña red local.

Debian -Servidor Apache

Como podemos ver en la imagen superior este equipo dispone de una sola tarjeta de red, como es un servidor le daremos un direccionamiento ip estático y no lo guardaremos en memoria. Para realizar esta operación tendremos que editar el fichero de configuración /etc/network/interfaces.

Teclearemos en la Shell nano /etc/network/interfaces

clip_image004

Al pulsar intro nos aparecerá la configuración actual de la tarjetas de red que haya en ese fichero.

clip_image006

Tendremos que modificar la línea iface eth0 inet dhcp por iface eth0 inet staticà De esta manera indicamos que nuestra dirección ip será estática.

Pondremos la dirección ip que queremos tener de la siguiente manera

Address 10.0.0.1

Escribiremos también la máscara de red

Netmask 255.255.255.0

Además tendremos que escribir también la red y el broadcast

Network 10.0.0.0

Broadcast 10.0.0.255

Finalmente escribiremos la puerta de enlace

Gateway 10.0.0.2

Nuestro fichero debería de quedar tal y como vemos en la imagen inferior, una vez terminado de modificar lo guardaremos con control +x.

clip_image008

Si una vez guardado el fichero realizamos un ifconfig debería de salirnos esta configuración para la tarjeta de red eth0

clip_image010

clip_image012

Ya hemos configurado la tarjeta de red del equipo que hará de servidor web

Firewall Ubuntu

Podemos intuir que la maquina más compleja en cuanto a configuración se refiere va a ser nuestra maquina Ubuntu que hace de firewall.

Como esta máquina realiza la función de firewall creo que es importante que sus dos direcciones ip también sean estáticas.

Vamos a configurar las tarjetas de la misma manera que lo hemos hecho anteriormente

Editaremos el fichero /etc/network/interfaces de nuestra maquina Ubuntu.

En la Shell debemos de escribir la siguiente instrucción

Sudo nano /etc/network/interfaces

clip_image014

clip_image016

clip_image018

El contenido del fichero es tal y como lo podemos ver en la imagen superior

Tendremos que escribir los siguientes párrafos dentro de este fichero para realizar una configuración estática y optima de nuestras tarjetas de red. Si realizamos un sudo ifconfig veremos que las tarjetas de red son eth1 y eth2 como podemos observar en la captura inferior.

clip_image020

Como hemos dicho tendremos que escribir los siguientes párrafos en este fichero

# Estas es la configuración para la eth1

Auto eth1

Iface eth1 inet static

Address 10.0.0.2

Netmask 255.255.255.0

Network 10.0.0.0

Broadcast 10.0.0.255

# Estas es la configuración para la eth2

Auto eth2

Iface eth2 inet static

Address 192.168.0.10

Netmask 255.255.255.0

Network 192.168.0.0

Broadcast 192.168.0.255

Gateway 192.168.0.1

Dns-nameservers 80.58.61.250

clip_image022

Mediante esta configuración lo que estamos indicando es que la tarjeta de red eth1 va a ser la dirección ip 10.0.0.2 y que la eth2 será la 192.168.0.10 con mascara 255.255.255.0 que el Gateway es 192.168.0.1 y que los dns son los de telefónica.

Una vez guardado este fichero de configuración reiniciaremos el servicio mediante la siguiente orden que escribiremos en nuestra Shell.

Sudo /etc/init.d/networking restart

clip_image024

clip_image026

Si escribimos en nuestra Shell sudo ifconfig debería de salirnos toda la configuración que acabamos de escribir para las tarjetas de red

clip_image027

Debian atacante

En este equipo vamos a hacer una configuración de la tarjeta de red en memoria para ver así otra manera de configurarla.

Lo hacemos de esta manera para después realizar comprobaciones.

Tendremos que abrir una Shell y teclearemos lo siguiente, aunque antes nos validaremos de la siguiente manera, teclearemos su en nuestra Shell y pondremos nuestra contraseña

clip_image029

ifconfig eth0.192.168.0.30 netmask 255.255.255.0

clip_image031

ahora introduciremos la puerta de enlace por defecto de la siguiente manera:

route add default Gateway 192.192.168.01

clip_image033

Ahora configuraremos la ruta para llegar a firewall y escribiremos lo siguiente en nuestra Shell:

route add –net 10.0.0.0/24 Gateway 192.168.010

clip_image035

De esta manera tendremos configurada nuestra tarjeta de red para el equipo que realizara las funciones de ataque.

Ahora vamos a hacer las comprobaciones pertinentes para asegurar que nuestras maquinas funcionan perfectamente.

Para ello vamos a tirar un ping desde el servidor apache a su puerta de enlace, para ello abrimos una Shell y escribimos lo siguiente

ping 10.0.0.2

clip_image037

Como podemos observar en las capturas ha funcionado correctamente. Ahora vamos a probar nuestro firewall, volveremos a lanzar un ping de la misma forma que antes pero esta vez hacia la maquina apache, para ello teclearemos lo siguiente en la shell

ping 10.0.0.1

clip_image039

Ahora comprobaremos que nuestro firewall también se ve con los equipos de la pata externa para ello lanzaremos otro ping y esta vez lo haremos a la pagina debian que hará de atacante.

Escribiremos lo siguiente en la Shell: ping 192.168.0.30

clip_image041

Como podemos comprobar esta máquina nos responde correctamente.

Nuestra última prueba para comprobar que nuestra red funciona bien es comprobar mediante ping que la maquina debían atacante se comunica con el firewall para ello teclearemos ping 192.168.0.10

clip_image043

Podemos observar que todo nos funciona correctamente. En este momento sería una tontería probar la comunicación desde el atacante a apache, porque aunque las rutas estén puestas el firewall todavía no está configurado para enrutar.

CONFIGURACION IPTABLES

Vamos a reutilizar la configuración de nuestro firewall de nuestra práctica anterior, el código es el siguiente:

#!/bin/bash

# Este firewall esta diseñado por Ivan Uterga

# Nuestro firewall hará también de router,estara entre la red e internet

# Vamos a utilizar la función case para iniciar, parar y resetear el fw

# En primer lugar estableceremos el modulo de arranque estableciendo la

# configuracion inicial,borrando reglas,aplicando politicas y nuestras propias reglas

echo «Esta seguro que quiere modificar el comportamiento del Firwall (si/no): \c»

read RES

while [ «$RES» = «si» ]

do

clear

echo «Teclee iniciar,parar,reiniciar, informe o salir»

read OPCION

case $OPCION in

iniciar)

clear

echo «Iniciando Firewall…!!!!»

echo «————————-»

sleep 3

# x borra reglas,z borra contdor tramas,f borra reglas usuario,-t todo firewall$

#reseteamos lo que hubiera en primer lugar

iptables -X && echo «borrando reglas…»

iptables -Z && echo «borrando contadores…»

iptables -F && echo «borrando reglas usuario….»

iptables -t nat -F && echo «haciendo nat»

#estas son las politicas,en este caso abrimos todo

iptables -P INPUT ACCEPT && echo «acepto entrada»

iptables -P OUTPUT ACCEPT && echo «acepto salida»

iptables -P FORWARD ACCEPT && echo «acepto reenvio»

# Habilitamos nat en este firewall hacia la otra red

iptables -A POSTROUTING -t nat -s 10.0.0.0/8 -o eth1 -j MASQUERADE

# Habilitamos el reenvio de tramas

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -i eth0 -s 10.0.0.0/8 -p tcp –dport 80 -m state –state NEW,RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio al 80 desde eth0»

iptables -A FORWARD -i eth1 -d 10.0.0.0/8 -p tcp –sport 80 -m state –state RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio desde el 80 por eth1»

iptables -A FORWARD -i eth1 -d 10.0.0.0/8 -p udp –sport 53 -m state –state RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio desde el 53 por eth1»

iptables -A FORWARD -i eth0 -s 10.0.0.0/8 -p udp –dport 53 -m state –state NEW,RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio al puerto 53 desde eth0»

iptables -A INPUT -j DROP && echo «Cerrando entrada»

iptables -A OUTPUT -j DROP && echo «Cerrando salida»

iptables -A FORWARD -j DROP && echo «Cerrando reenvio»

sleep 1

echo «*************************************************»

echo «Su sistema es mas SEGURO a partir de este momento»

echo «*************************************************»

sleep 3

clear

;;

parar)

clear

echo “Parando Firewall…!!!”

echo «————————»

sleep 3

#reseteamos lo que hubiera en primer lugar

iptables -X && echo «borrando reglas…»

iptables -Z && echo «borrando contadores…»

iptables -F && echo «borrando reglas usuario….»

iptables -t nat -F && echo «haciendo nat»

# Deshabilitamos el reenvio de tramas

echo 0 > /proc/sys/net/ipv4/ip_forward

#estas son las politicas,en este caso abrimos todo

iptables -P INPUT ACCEPT && echo «acepto entrada»

iptables -P OUTPUT ACCEPT && echo «acepto salida»

iptables -P FORWARD ACCEPT && echo «acepto reenvio»

sleep 2

echo «*************************************************»

echo «Su sistema es VULNERABLE a partir de este momento»

echo «*************************************************»

sleep 3

clear

;;

reiniciar)

clear

echo «reiniciando»

echo «—————————————————————»

./$0 stop

./$0 start

;;

informe)

clear

echo «El estado del filtro del firewall aparecera en breves momentos»

echo «—————————————————————»

sleep 3

iptables -L -n

;;

salir)

echo «*************************************»

echo «Muchas Gracias por usar este programa»

echo «Saludos»

echo «*************************************»

sleep 1

clear

;;

*)

echo » No ha introducido ninguna accion valida»

sleep 1

clear

;;

esac

echo «Quieres realizar alguna otra operacion? \c»

read RES

done

Con este script conseguíamos que una maquina interna saliese a Internet perfectamente por lo tanto cómo funcionaba vamos a considerar que todos los módulos del case están bien. Así que vamos a centrar el modulo iniciar que contiene la configuración de iptables. Podemos ver este trozo de código tras estas líneas

iniciar)

clear

echo «Iniciando Firewall…!!!!»

echo «————————-»

sleep 3

# x borra reglas,z borra contdor tramas,f borra reglas usuario,-t todo firewall$

#reseteamos lo que hubiera en primer lugar

iptables -X && echo «borrando reglas…»

iptables -Z && echo «borrando contadores…»

iptables -F && echo «borrando reglas usuario….»

iptables -t nat -F && echo «haciendo nat»

#estas son las politicas,en este caso abrimos todo

iptables -P INPUT ACCEPT && echo «acepto entrada»

iptables -P OUTPUT ACCEPT && echo «acepto salida»

iptables -P FORWARD ACCEPT && echo «acepto reenvio»

# Habilitamos nat en este firewall hacia la otra red

iptables -A POSTROUTING -t nat -s 10.0.0.0/8 -o eth1 -j MASQUERADE

# Habilitamos el reenvio de tramas

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -i eth0 -s 10.0.0.0/8 -p tcp –dport 80 -m state –state NEW,RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio al 80 desde eth0»

iptables -A FORWARD -i eth1 -d 10.0.0.0/8 -p tcp –sport 80 -m state –state RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio desde el 80 por eth1»

iptables -A FORWARD -i eth1 -d 10.0.0.0/8 -p udp –sport 53 -m state –state RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio desde el 53 por eth1»

iptables -A FORWARD -i eth0 -s 10.0.0.0/8 -p udp –dport 53 -m state –state NEW,RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio al puerto 53 desde eth0»

iptables -A INPUT -j DROP && echo «Cerrando entrada»

iptables -A OUTPUT -j DROP && echo «Cerrando salida»

iptables -A FORWARD -j DROP && echo «Cerrando reenvio»

sleep 1

echo «*************************************************»

echo «Su sistema es mas SEGURO a partir de este momento»

echo «*************************************************»

sleep 3

clear

;;

Podemos ver como en primer lugar realizamos un reseteo de las reglas

iptables -X && echo «borrando reglas…»

iptables -Z && echo «borrando contadores…»

iptables -F && echo «borrando reglas usuario….»

iptables -t nat -F && echo «haciendo nat»

Después vemos las políticas que en este caso están en aceptar

#estas son las politicas,en este caso abrimos todo

iptables -P INPUT ACCEPT && echo «acepto entrada»

iptables -P OUTPUT ACCEPT && echo «acepto salida»

iptables -P FORWARD ACCEPT && echo «acepto reenvio»

Ahora vemos como hacemos nat y el reenvio de tramas

# Habilitamos nat en este firewall hacia la otra red

iptables -A POSTROUTING -t nat -s 10.0.0.0/8 -o eth1 -j MASQUERADE

# Habilitamos el reenvio de tramas

echo 1 > /proc/sys/net/ipv4/ip_forward

Y por último las reglas de uso, que en este caso son muy restrictivas para que no nos ataquen.

iptables -A FORWARD -i eth0 -s 10.0.0.0/8 -p tcp –dport 80 -m state –state NEW,RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio al 80 desde eth0»

iptables -A FORWARD -i eth1 -d 10.0.0.0/8 -p tcp –sport 80 -m state –state RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio desde el 80 por eth1»

iptables -A FORWARD -i eth1 -d 10.0.0.0/8 -p udp –sport 53 -m state –state RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio desde el 53 por eth1»

iptables -A FORWARD -i eth0 -s 10.0.0.0/8 -p udp –dport 53 -m state –state NEW,RELATED,ESTABLISHED -j ACCEPT && echo «acepto reenvio al puerto 53 desde eth0»

Como ya disponemos de nuestro fichero fwlan en este equipo, haremos una copia del mismo llamado antidos. Tendremos que teclear en nuestra Shell lo siguiente

Cp fwlan antidos

clip_image045

Si realizamos un ls veremos que hemos copiado perfectamente el script

clip_image047

Sustituiremos este código que hemos visto por el que vamos a presentar a continuación, además modificaremos las politicas y las pondremos en drop.

En este caso vamos a permitir que todo lo que venga de fuera mediante tcp y con puerto destino el 80 y cuyo destino sea 10.0.0.1/24 y que venga por la tarjeta de red eth2 se acepte.

Escribiremos lo siguiente en nuestro fichero de configuración de firewall llamado antidos

iptables -A FORWARD -i eth1 -s 10.0.0.1/24 -p tcp –sport 80 -j ACCEPT

Que todo lo que salga de la red 10.0.0.0 hacia el exterior mediante tcp desde el puerto 80 y por la red eth 0 se acepte.

iptables -A FORWARD -i eth2 -d 10.0.0.1/24 -p tcp –dport 80 -j ACCEPT && echo «acepto reenvio al 80 por eth2»

Además y aunque en este caso no lo vamos a utilizar dejaremos que pasen los dns, para ello escribiremos el siguiente código

iptables -A FORWARD -i eth2 -d 10.0.0.0/24 -p udp –sport 53 -j ACCEPT && echo «acepto reenvio desde el 53 por eth2»

iptables -A FORWARD -i eth1 -s 10.0.0.0/24 -p udp –dport 53 -j ACCEPT && echo «acepto reenvio al puerto 53 desde »

Para que veamos que esto es real y que realmente lo tenemos todo escrito vamos a realizar una captura del mismo.

Escribiremos lo siguiente

clip_image049

clip_image051

clip_image053

Una vez que nuestro fichero antidos este de la siguiente manera pulsaremos control+c para guardar nuestro fichero.

Ahora es el momento de arrancar el servidor apache. Tendremos que posicionarnos en nuestra maquina apache y escribiremos lo siguiente en la Shell

/etc/ init.d/apache start.

clip_image055

clip_image057

Si todo está bien configurado y abrimos un navegador en esta máquina nos mostrara lo que haya escrito en la página de bienvenida de apache. Tenemos que recordar que para que nos aparezca escribiremos localhost en la barra de direcciones.

clip_image059

clip_image061

Parece que funciona perfectamente nuestro apache.

Si ahora iniciamos nuestro firewall en ubuntu mediante la siguiente orden

Sudo ./antidos

clip_image063

clip_image065

clip_image067

clip_image069

Veremos ahora un informe para ver que se permite.

clip_image071

clip_image073

Como podemos observar todo está bloqueado a excepción del paso a la dirección ip del apache por el puerto 80 para ambos lados y dependiendo del puerto de destino u origen y de las ips de destino y origen, también se permiten los DNS.

Es el momento perfecto para probar si funciona nuestras reglas de routing implementadas en el script y ver si llegamos a ver la pagina web de nuestra intranet.

Desde la maquina atacante abrimos un navegador y tecleamos en la barra de direcciones 10.0.0.1 nos debería de aparecer nuestra página de servidor apache, como podemos comprobar esto funciona correctamente.

clip_image075

clip_image077

clip_image079

El objeto de esta práctica consiste en intentar bloquear un ataque DOS que consiste en agotar los recursos de una maquina enviando muchas peticiones al servidor.

Escribiremos el siguiente código detrás de las políticas y antes de las reglas

#bloqueamos ataques dos

iptables -N ataque && echo «Generamos Cadena»

iptables -A FORWARD -p tcp –dport 80 -m state –state NEW -j ataque && echo «Generamos etiqueta y comparamos»

iptables -A ataque -m recent –set –name dos

iptables -A ataque -m recent –update –seconds 60 –hitcount 4 –name dos -j LOG –log-prefix ‘DOS: ‘ && echo «Generamos LOG»

iptables -A ataque -m recent –update –seconds 60 –hitcount 4 –name dos -j DROP && echo «Cortamos trafico»

En nuestro script debería de quedar de la siguiente manera

clip_image081

clip_image083

Este código quiere decir lo siguiente:

Iptables –N ataque: con esta regla creamos una cadena nueva llamada ataque.

Iptables –A FORWARD –i eth2 –d 10.0.0.1/32 –p tcp – dport 80 –m state – state NEW –j ataque: mediante esta regla estamos diciendo que se reenvíe todo lo que venga por la eth2 con destino 10.0.0.1 por tcp al puerto 80 de apache y cuyas conexiones sean nuevas se manden a la cadena nueva que acabamos de generar llamada ataque.

Iptables –A ataque –m recent – set –name dos: establecemos una etiqueta a los paquetes que entran aquí.

Iptables –A ataque –m recent –update –seconds 60 –hitcount 4 –name dos –j LOG — log – prefix “DOS” : aquí comparamos los paquetes que hemos etiquetado como dos y si pulsan en menos de 60 segundos 4 veces la pagina de apache generamos un log.

Iptables –A ataque –m recent –update –seconds 60 –hit count 4 –name dos –j DROP: bloqueamos los que antes hemos metido en el log.

Guardaremos nuestro script tecleando ctrl +x y volveremos a ejecutarlo

clip_image063[1]

clip_image065[1]

clip_image085

Ahora vamos a pedir un informe de que esta filtrando este script

clip_image071[1].

clip_image087

Teóricamente nuestro servidor apache está a salvo de ataques dos o por lo menos lo bloquea durante 60 segundos.

Vamos a comprobar la siguiente afirmación, desde nuestra maquina debían atacante abriremos 4 navegadores pidiendo la pagina de apache.

clip_image089

clip_image091

clip_image091[1]

clip_image093Como podemos comprobar funcionan las tres primeras pero no la ultima.

Si esperamos 60 segundos o mas podremos volver a navegar esto es así porque se van haciendo las medias entre los hitcount y los segundos.

Podríamos probar a cambiar nuestra dirección ip y funcionaria perfectamente antes de 60 segundos.

Si revisamos el fichero /var/log/messages tecleando en la Shell nano /var/log/messages nos aparece la imagen inferior.

clip_image095

Podemos comprobar perfectamente cómo se detectan en el log debido a la regla que hemos puesto en iptables los intentos de acceso.

Tengo una maquina en la cual tengo instalado kubuntu

clip_image097

Su dirección ip es 192.168.0.50

Podemos ver esta información si realizamos un sudo ifconfig (habremos configurado la tarjeta de la manear que deseemos. Hemos visto un par de ellas)

A continuación vemos una captura de la red

clip_image099

Podemos comprobar que la tarjeta de red que tiene esta reconocida como eth2

Ahora volveremos a abrir 4 navegadores,

clip_image101

clip_image101[1]

clip_image102

clip_image104

clip_image106

Como podemos observar el 4 navegador no funciona.

Veamos ahora nuestro fichero /var/log/messages del firewall.

clip_image108

Podemos observar claramente como nuestro firewall nos bloquea perfectamente las entradas desde esta ip.

Si dejamos que pase un tiempo, como podemos volver a observar nuestro firewall volverá a permitir el paso de esta dirección ip, si nos fijamos en la hora vemos que el último intento de acceso es a las 14.11.25

Si realizamos un date desde kubuntu veremos qué hora tenemos.

clip_image110

Y volemos a probar nuestra intranet debería de dejarnos ver la web.

clip_image112

Funciona perfectamente.

FORTIFICANDO NUESTRO FIREWALL ANTE ATAQUES DOS

Como podemos ver hemos cumplido perfectamente el objetivo de esta práctica.

Como somos malvados y un poco rencorosos todo aquel que haya intentado generar un ataque dos contra nuestra intranet no volverá a acceder a ella hasta que nosotros queramos.

Para realizar esta operación realizaremos los siguientes pasos:

En primer lugar vamos a cambiar el lugar donde se generan los logs, para ello tendremos que modificar el fichero /etc/rsyslog.conf

Teclearemos en la Shell la siguiente orden

Sudo nano /etc/rsyslog.conf

clip_image114

Introduciremos al final del documento las líneas que vemos a continuación

clip_image116

Kern.warnig /var/log/iptables.log quiere decir que las incidencias a partir de nivel 4 (advertencia hasta el 7) van a ir a parar al fichero /var/log/iptables.log

Touch /var/log/iptables. Log modifica la hora de acceso al fichero

Una vez guardado este fichero reiniciaremos el servicio mediante la siguiente orden

Sudo /etc/init.d/rsyslog. start

clip_image118

Al pulsar intro

Nos aparece el siguiente error

clip_image120

Haremos caso al mensaje y escribiremos lo siguiente para reiniciar el servicio de log

clip_image122

clip_image124

Una vez que hayamos cambiado el log de lugar creamos una tarea programada para que se mire este fichero cada minuto y se metan en otro fichero las direcciones ip bloqueadas.

En primer lugar vamos a modificar la contraseña de root de la siguiente manera

clip_image126

Nos validamos como root mediante su

clip_image128

Y ahora vamos a probar el siguiente comando

Sudo cat /var/log/iptables.log|awk ‘{print $11}’|cut –f2 –d “=”>>/root/ipsbloqueadas.txt

Mediante estos comandos que están entre pipes podemos ver que la salida de mirar el fichero /var/log/iptables.log va a la entrada del comando awk que en este caso coge las direcciones ip que estén repetidas, son el parámetro 11 en cada línea.A su vez esta salida que se produce va a parar a la entrada del cut que establece límites que no son la tabulación y coge el segundo campo.

clip_image130

Si revisamos el fichero que acabamos de generar mediante la opción

Cat /root/ipsbloqueadas.txt

clip_image132

Como podemos observar ahí tenemos todas las direcciones ip que hemos bloqueado con anterioridad.

Nuestra orden funciona correctamente para recopilar todas las direcciones ip que bloqueamos así que crearemos una tarea programada, para que automáticamente se revise este fichero y las direcciones ip vaya al fichero host.deny y así no puedan volver a entrar más a nuestra intranet mientras nosotros no quitemos las direcciones ip del fichero que acabamos de generar.

Para generar una tarea programada utilizaremos cron

Tendremos que editar nuestro fichero /etc/crontab, así que teclearemos en una Shell

Nano /etc/crontab

clip_image134

Como podemos observar en la siguiente imagen se nos abre nuestro fichero de configuración de tareas programadas.

clip_image136

Crearemos una nueva línea con la siguiente información

*/1 * * * * * root cat /var/log/iptables.log|awk ‘{print $11}’|cut –f2 –d “=”>>/root/ipsbloqueadas.txt

clip_image138

Y guardamos nuestro fichero crontab

Imaginemos que otro equipo con dirección ip 192.168.0.40 realiza un ataque de este tipo, esta dirección ip deberá de pasar del fichero iptables.log al de ipsbloqueadas.

Si revisamos el fichero iptables.log debería de quedarnos un log como este

clip_image140

Y si nuestro cron ha funcionado como debería si realizamos un cat de nuestro fichero /root/ipsbloqueadas.txt

clip_image142

clip_image144

Parece que nuestra tarea programada está funcionando correctamente.

Meteremos ahora estas direcciones ip en el fichero de sistema host.deny que se encuentra dentro del directorio /etc

Para ello editaremos este fichero de la siguiente manera

Nano /etc/host.deny

clip_image146

Nos aparecerá un fichero como el siguiente, donde escribiremos SSHD: /root/ipsbloqueadas.txt para que interprete todas las ips que haya en ese fichero como invalidas

clip_image148

Guardaremos ahora nuestro fichero.

De esta manera estamos denegando las direcciones ip que haya en ese fichero.

Si realizamos un date veremos la hora actual del sistema

clip_image150

Son las 16:41, si nos fijamos en la hora del ataque podemos ver que el log dice que ha sido a las 15.56 por lo tanto casi ha pasado una hora. Tal y como estaba antes configurado iptables una vez pasados un par de minutos volvíamos a tener acceso a la web. Ahora no debería de funcionar a no ser que quitemos la ip del fichero /root/ipsbloqueadas.txt

clip_image152

clip_image154

Ha funcionado correctamente, esta es una manera de bloquear las direcciones ip desde las que nos atacan de manera permanente, seguramente haya muchas otras maneras de hacerlo y seguramente mejor pero esta manera me parece bastante correcta de hacerlo.

3 respuesta a “IPTABLES 3 : Parando un ataque DOS”

  1. Estimado,
    Por favor necesito ayuda, mi servidor esta siendo atacado por DDOS, pero has ahora no encontramos la solución. Por favor ayudame.
    Esta es la dirección IP 204.93.167.83.

    1. Buenas noches,

      He visto tu comentario y he probado la ip 204.93.167.83 y la web que indicas campustrilce.edu.pe
      Tiene pinta que esta direccion ip se corresponde con un hosting de un isp, ya que si entras en la web a pelo(con la ip) sale un cpanel, habitual de estos sitios y si buscas la ip de capustrilce.edu.pe se corresponde con 204.93.167.83, parece un hosting compartido. Yo si estuviera en tu lugar, hablaria con el isp directamente y que sea este el que mitigue el ataque DDOS, tienen dispositvos especificos y muy eficientes. Si no se que existen complementos de apache que intentan parar estos ataques ddos. En cuanto pueda lo busco y te pego un enlace. Espero que te pueda servir mi respuesta. Ya me diras. Muchas Gracias por contactar conmigo

  2. Me encantó, magnífico, me ha tomado tiempo recordar algunas pautas y analizar el script, pero aún estoy estudiando jaja, lo emplearé en mis practicas con unas máquinas virtuales. Saludos, gran trabajo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Time limit is exhausted. Please reload the CAPTCHA.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.