Flood ou déni de service

Ce genre d’attaque vise à surcharger la machine de requête. Il est possible de s’en prémunir pas mal directement au niveau du firewall :

 iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT

Le flags TCP syn engendre des demandes de connexions, et le but de cette règle est donc de les limiter à une par seconde (champs limit). Il est cependant déconseillé de monter au-delà de la seconde (sous peine de gêner le contrôle de flux et la récupération d’erreur de TCP).

On peut faire de même avec les protocoles UDP et ICMP :

iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT

Notez cependant que ce type d’attaque permet de faire tomber le serveur, mais pas d’en prendre l’accès. C’est pourquoi le risque d’en être la cible est assez mince (sauf si l’on s’appelle Google). En général, un logiciel simple anti-intrusion comme fail2ban (cf partie 2) est suffisant, suivant le niveau de sécurité recherché.

On peut aussi limiter un tant soit peu le scan de ports (qui consiste à tester tous vos ports afin de détecter ceux qui sont ouverts). Pour cela, une règle de ce genre irait :

iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

C’est un peu le même principe que ci-dessus. Sachant qu’une connexion TCP en bon et due forme requiert trois paquets avec trois flags différents, on voit tout de suite la finesse de cette règle qui peut travailler paquet par paquet. Pour plus d’infos sur les flags TCP, cf Wikipédia.

Notez que cette règle basique n’est pas très efficace, c’est une protection de base. La partie 2 ira plus loin dans le blocage des scans de ports.

Si vous repérez dans les logs ou autre une adresse IP suspecte, vous pouvez la bannir aisément au niveau du firewall via la commande : Code : Console

iptables -A INPUT -s adresse_ip -j DROP

Notez cependant qu’il n’est pas conseillé de bannir les IP à tour de bras.

À partir de maintenant, observons plus en détail les paramètres de iptables :

* -t : vaudra par défaut « filter » ;
* -A : servira à indiquer le sens du trafic : INPUT (entrant) ou OUTPUT (sortant) ;
* -p : indique le protocole (TCP ou UDP en principe) ;
* --dport et --sport : respectivement port destination et port source (comme nous sommes le serveur, nous utiliserons principalement dport) ;
* -j : comment traiter le paquet (nous nous servirons d'ACCEPT et de DROP pour respectivement accepter et refuser le paquet).

Plus nous serons précis, plus nous serons sécurisés. Renseigner ces quelques options est donc le minimum.

Ainsi, une règle simple aura la forme suivante :

iptables -t filter -A INPUT/OUTPUT -p protocole --dport port_a_ouvrir -j ACCEPT