Optimiser les performances de netfilter en utilisant ipset
Si vous écrivez un lote de règles similaires basées sur une simple IP, un port, ou les deux, envisagez l'utilisation de ipset
pour optimiser les performances de netfilter.
Par exemple :
iptables -s 192.168.1.11 -j ACCEPT
iptables -s 192.168.1.27 -j ACCEPT
iptables -s 192.168.1.44 -j ACCEPT
... hundreds of similar rules ...
iptables -s 192.168.251.177 -j ACCEPT
Cela signifie qu'un paquet avec l'adresse source de 192.168.251.177 doit d'abord traverser des centaines de règles avant de pouvoir obtenir son verdict d'ACCEPTATION.
Bien sûr, les administrateurs système expérimentés diviseront les règles par sous-réseau. Mais cela toujours signifie des centaines de règles.
ipset
à la rescousse !
Tout d'abord, définissez un ensemble IP de ipmap
type :
ipset -N Allowed_Hosts ipmap --network 192.168.0.0/16
Ensuite, remplissez-le avec les adresses :
for ip in $LIST_OF_ALLOWED_IP; do ipset -A Allowed_Hosts $ip; done
Enfin, remplacez les centaines de règles iptables ci-dessus par 一 règle :
iptables -m set --match-set Allowed_Hosts src -j ACCEPT
Lorsqu'un paquet arrive, netfilter va effectuer un très rapide recherche bitmap de l'IP source (src) du paquet par rapport au Allowed_Hosts
Set IP. Tous les paquets en provenance de 192.168.0.0/16 vont connaître 一 règle. Et croyez-moi, la recherche d'un bitmap est au moins deux ordres de grandeur plus rapide que la vérification de centaines de règles iptables.
ipset
ne se limite pas aux adresses IP. Elle peut aussi se baser sur les ports, le n-uplet IP-port, les adresses de réseau/sous-réseau, le n-uplet IP-MAC, et ainsi de suite. Et il peut faire correspondre ces critères en tant que source ou destination ou un mélange des deux (dans le cas des tuples).
Et enfin, avec ipset
vous pouvez placer automatiquement des adresses IP dans des listes noires/blanches. Ces listes noires/blanches peuvent également "vieillir", c'est-à-dire supprimer automatiquement l'adresse IP après un laps de temps configurable.
Veuillez vous référer à ipset
Page de manuel de l'utilisateur pour plus de détails.
NOTE TRÈS IMPORTANTE :
Certaines distributions Linux peuvent no ont un support "prêt à l'emploi" pour ipset
(par exemple, Ubuntu 10.04 avait ce problème). Sur ces systèmes, une méthode consiste à installer ipset
à partir du code source.
Au lieu de cela, téléchargez ipset
de son site web : http://ipset.netfilter.org/install.html
Alternativement, si vous utilisez xtables-addons
, ipset est inclus dans sa source : http://xtables-addons.sourceforge.net/