
Estoy intentando bloquear los pings de icmp desde un servidor si el recuento de paquetes es superior a 2 por segundo (el recuento de paquetes se reduce para las pruebas). Probé estas 2 reglas por separado pero no parecen ayudar:
iptables -A INPUT -p icmp --icmp-type echo-request -m recent --update --seconds 1 --hitcount 2 -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT --match limit --limit 2/s --limit-burst 2
¿Qué hay de malo en estas reglas?
Estoy haciendo ping desde otro servidor usando el siguiente comando pero el ping continúa recibiendo respuestas:
ping -n -i 0.2 192.168.2.86
Además, cuando verifico la salida de iptables -nvL, el recuento de paquetes para la regla no aumenta...
La máquina utilizada es centos 6.8.
Algo de progreso: agregué una regla de eliminación predeterminada al final de la tabla:
iptables -A INPUT -p icmp -m icmp -j DROP
y luego al agregar esta regla se eliminaron los pings que excedieron el límite
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 2/second -j ACCEPT -m comment --comment "icmprule1"
Todavía no puedo bloquear el servidor por completo.
Respuesta1
Aquí va, agregando una cadena ICMPSCAN secundaria (y colocando la regla de salto en la primera posición de la cadena INPUT):
iptables -N ICMPSCAN
iptables -I INPUT -p icmp -m icmp --icmp-type echo-request -j ICMPSCAN
iptables -A ICMPSCAN -m recent --set --name badicmp --rsource
iptables -A ICMPSCAN -m recent --update --seconds 1 --hitcount 2 --name badicmp --rsource -j DROP
Nota: ambas reglas de configuración/actualización podrían configurarse en INPUT sin la secundaria, pero prefiero poner dichas reglas en cadenas distintas.
Nota 2: se podría agregar una regla adicional después de --set para registrar el evento...
lista negra dinámica:
Ahora, para agregar una lista negra dinámica permanente basada en el activador reciente del recuento de visitas, podemos aprovechar la función ipset. ipset está disponible para centos 6.x e iptables es compatible con ipset, pero es posible que deba instalarlo primero.
Aquí las reglas de iptables/ipset que se adaptan a sus necesidades:
iptables -F ICMPSCAN
iptables -N ICMPSCAN
ipset -N banned_hosts iphash
iptables -I INPUT -p icmp -m icmp --icmp-type echo-request -j ICMPSCAN
iptables -A ICMPSCAN -m recent --set --name badicmp --rsource
iptables -A ICMPSCAN -m recent --update --seconds 1 --hitcount 2 --name badicmp --rsource -j SET --add-set banned_hosts src
iptables -A ICMPSCAN -m set --set banned_hosts src -j DROP
Puede enumerar el contenido actual de la lista prohibida usando ipset list, por ejemplo:
# ipset list banned_hosts
Name: banned_hosts
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 8284
References: 2
Members:
192.168.122.1
y administrar la lista de configuración, por ejemplo para eliminar una dirección IP como:
# ipset del banned_hosts 192.168.122.1
Vea también esta página:http://www.linuxjournal.com/content/advanced-firewall-configurations-ipset