Petites astuces rapides pour éviter deux-trois problèmes de flood (pouvant mener à un DDOS) avec iptables.
Attention, il faut que le module "limit" soit activé dans le kernel, soit en dur, soit en module!!
ICMP
Tout le monde sait lancer un ping -f, aka
ping flood (à ne pas confondre avec
Pink Floyd ;) ).
C'est simple, mais peut être embêtant. Avec cette petite règle, vous serez un peu plus tranquille:
$ipt -A INPUT -i eth0 -p icmp -m limit --limit 30/minute -j ACCEPT
En gros, on accepte que 30 pings par minute. Dans le cas d'un ping normal, environ une requête sur deux sera balancée loin :
41 packets transmitted, 24 received, 41% packet loss, time 40153ms
rtt min/avg/max/mdev = 33.459/36.091/38.764/1.796 ms
Par contre, dans le cas d'un ping -f, c'est de suite plus drôle :
201 packets transmitted, 6 received, 97% packet loss, time 2664ms
rtt min/avg/max/mdev = 34.533/35.892/38.487/1.276 ms, pipe 4, ipg/ewma 13.324/35.603 ms
Flood UDP
Tout d'abord, il faut savoir un petit détail : quand on passe par UDP, la bande passante ne peut pas être partagée équitablement. La trame UDP prend le pas sur TCP, et pour finir, bin TCP passe plus du tout. Simple, efficace, radical.
Pour parer à ce problème, on peut imaginer bloquer l'UDP. Seulement, tout ce qui est DNS passe justement par UDP.
C'est là qu'une petite règle iptables intervient encore :
$ipt -A INPUT -i eth0 -p udp -m limit --limit 5/s -j ACCEPT
Si on test avec un hping :
hping2 -i u10000 -2 nimo.internux.ch
HPING nimo.internux.ch (eth0 78.46.64.14): udp mode set, 28 headers + 0 data bytes
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
ICMP Port Unreachable from ip=78.46.64.14 name=dns.akemi.internux.ch
^C
--- nimo.internux.ch hping statistic ---
704 packets tramitted, 12 packets received, 99% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms
En gros, ça ralentit les scans, et surtout, ça drop à fond dès qu'on tape la limite. ça permet d'éviter quelques problèmes, au final.
Je n'ai pas remarqué de problème au niveau de mon DNS, donc je suppose que tout est ok avec cette limite.
Voili-voilou.
++
Tengu