# Script proteccion para DoS
# La detección se realiza en un frame de 5 segundos, pasando al atacante
# a un ban(DROP) por 15 minutos autorenobables
iptables -F DoS
iptables -X DoS
iptables -F blacklist
iptables -X blacklist
# Creo mis chains para DoS defense
iptables -N DoS #--jump "todo lo que quiero defender contra DoS"
iptables -N blacklist #--jump "ban a attackers"
# LOG && DROP de los hosts blockeados por DoS
# tiempo de ban en segundos
ban_time=$((60*15)) #15 minutos
# 1 de cada cuantos paquetes del ataque logueo para no floodear syslog
probability=0.001 #1 en 1000
# una vez que un atacante entro en blacklist, lo mantengo en DROP a menos que se calle absolutamente por $ban_time (15 minutos x defecto)
# estas reglas tienen que ir en el top de su chain
iptables -A INPUT -m recent --update --name blocked --seconds $ban_time --hitcount 1 -m statistic --mode random --probability 0.001 -j LOG --log-prefix "DROP_DoS "
iptables -A INPUT -m recent --update --name blocked --seconds $ban_time --hitcount 1 -j DROP
iptables -A FORWARD -m recent --update --name blocked --seconds $ban_time --hitcount 1 -m statistic --mode random --probability 0.001 -j LOG --log-prefix "DROP_DoS "
iptables -A FORWARD -m recent --update --name blocked --seconds $ban_time --hitcount 1 -j DROP
# Que cosas chekeo contra DoS?
# ejemplo DNS si entra via wan0
iptables -A INPUT -i wan0 -p udp --dport 53 -j DoS
iptables -A FORWARD -i wan0 -p udp --dport 53 -j DoS
# ejemplo para un apache
iptables -A INPUT -p tcp --syn --dport 80 -j DoS
# DoS
# si hay mas de 255 paquetes en 5 segundos pasa a blacklist
# para tener 255 paqutes de backlog hay que pasar parametro en el modprobe de xt_recent (por default es 20 sino)
# modprobe xt_recent ip_pkt_list_tot=255
iptables -A DoS -m recent --name seen --set
iptables -A DoS -m recent --rcheck --name seen --seconds 5 --hitcount 255 -j blacklist
iptables -A DoS -m recent --rcheck --name seen --seconds 5 --hitcount 255 -j LOG --log-prefix "Blocked_DoS "
# blacklist
iptables -A blacklist -m recent --name blocked --set