iptables détecte les clients derrière le NAT?

1

Je configure un serveur que je souhaite protéger contre les attaques par déni de service en définissant une limite à l'aide d'iptables:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
(default policy DROP) # of course

Le fait est que mon site Web sera utilisé par de nombreux ordinateurs, tous derrière le même routeur, faisant du NAT. Disons qu'ils sont 100 ordinateurs.

Iptables détecte-t-il ces 100 ordinateurs en tant que clients différents ou pense-t-il qu'ils sont tous identiques parce que NAT remplace l'adresse source par l'adresse publique? (et change le port source en "aléatoire")?

S'il les considère comme un seul client, je devrais alors augmenter les 25 / minute à 2500 / minute ...

Victor Oliva
la source

Réponses:

2

Vous faites correspondre les paquets par ces lignes, ce qui signifie que vous n'autorisez que 25 paquets / minute.

Au lieu de cela, vous devez faire correspondre le nombre de sessions. Dans ce cas, vous ne vous souciez pas du nombre de clients utilisant la même adresse IP, car vous ne comptez que les nouvelles sessions, à savoir les paquets SYN TCP.

Si 100 clients utilisent la même adresse IP, ils doivent toujours ouvrir 100 nouvelles sessions. Par conséquent, si vous n'acceptez que les 25 premières nouvelles sessions, les 75 sessions restantes seront supprimées.

Vous pouvez utiliser --limit pour éviter diverses attaques par déni de service (DoS) avec une vitesse plus rapide afin d'accroître la réactivité.

Protection contre les inondations:

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

Scanner de port furtif:

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

Ping de la mort:

# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

Pour plus de détails, visitez http://www.netfilter.org/documentation/HOWTO//packet-filtering-HOWTO-7.html .

Aseaudi
la source
Excellent! Merci beaucoup. Et pour correspondre au nombre de sessions, je devrais ajouter "--state NEW" dans la règle "--limit", puis un autre permettant les paquets dans "--state ESTABLISHED", n'est-ce pas? Bien que pour http car chaque demande est une nouvelle connexion, cela n'a pas vraiment d'importance ...
Victor Oliva
Le nombre de nouvelles sessions = le nombre de SYN reçus par votre hôte, chaque nouvelle session commence par un paquet SYN. Donc, vous n'avez besoin que de la correspondance --syn indiquée ci-dessus, essayez ceci en premier.
Aseaudi
Ok, merci pour la clarification!
Victor Oliva