9 votes

Combien d'instructions peut-on fourrer dans iptables sans perdre la raison du système ?

Supposons que l'on souhaite disposer d'une liste d'adresses IP bloquées.

J'ai vu l'exemple suivant script :

BLOCKDB="/path/to/ip.blocked.file"
# omit comments lines
IPS=$(grep -Ev "^#" $BLOCKDB)
for i in $IPS
do
    iptables -A INPUT -s $i -j DROP
    iptables -A OUTPUT -d $i -j DROP
done

Est-ce que plusieurs milliers de lignes, qui se transforment en plusieurs milliers d'entrées iptables, sont raisonnables ?

Quelle est la limite supérieure, au-delà de laquelle l'efficacité du système sera affectée de manière significative ?

8voto

tsellon Points 1152

Je pense avoir trouvé une solution via cet article et IPSet semble être la réponse.

En résumé :

Si un ensemble d'adresses IP contient des milliers d'éléments, les performances d'iptables diminuent (en fait, les performances de netfilter, dès lors qu'iptables n'est qu'un outil de gestion de pare-feu). La charge de votre CPU peut également augmenter. Heureusement, il existe une solution parfaite : les ipsets.

IPSet est l'outil idéal si vous souhaitez le faire :

  • Enregistrez plusieurs adresses IP ou numéros de port et comparez-les à la base de données collection par iptables en un seul coup ;
  • Mise à jour dynamique d'iptables par rapport aux adresses IP ou aux ports sans perte de performance ;
  • Exprimez des ensembles de règles complexes basées sur les adresses IP et les ports avec une seule règle iptables. iptables et bénéficiez de la rapidité des jeux d'adresses IP.

L'installation d'ipset est simple sudo apt-get install ipset

Ensuite, exécutez ce qui suit

ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50

Ajoutez-le à votre chaîne iptables. Elle peut être différente selon les paramètres de votre pare-feu. Ici, nous utilisons la chaîne ethin.

iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP

Maintenant vous pouvez ajouter toutes les mauvaises IP à votre ipset. Par exemple, vous avez un fichier texte appelé bots.txt avec une IP par ligne. Donc vous pouvez les ajouter à ipset en utilisant un simple bash script :

for i in $( cat /tmp/bots.txt ) ; do ipset -A autoban $i ; done

Pour vérifier l'exécution :

ipset -L autoban

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X