Ipset

De Avided.info
Aller à : navigation, rechercher


Source du document: [http://bignole.50webs.com/ipset.html]

Ipset par l’exemple

Ipset est un outil Linux qui permet de stocker des adresses IP, des numéros de port, ou des

adresses IP avec des Mac adresses associées. Il garantie des performances élevées pour la recherche de correspondances (matching) dans ces tables. Ipset sera utile pour :

  • stocker de nombreuses adresses ou numéro de port qui peuvent ensuite être utilisées par iptables
  • effectuer de nombreux ajout/suppression sans pénaliser les performances d’iptables
  • utiliser des listes complexes d’adresses IP avec des ports associés

2. Syntaxe et utilisattion d’ipset

L’utilisation est semblable à celle d’iptables.

Création d’une table :

ipset -N mes_ports  [portmap|ipmap|...]

Ajout dans la table :

ipset -A mes_ports 25
ipset -A mes_ports 110

Suppression de la table :

ipset -D mes_ports 110

Vidage de la table :

ipset -F mes_ports

Suppresion de la table :

ipset -X mes_ports

Listage :

ipset -n -s -L
ipset -n -L mes_ports

Sauvegarde/restauration :

ipset -S mes_ports > mes_ports_sauvegarde.dat
ipset -R mes_ports < mes_ports_sauvegarde.dat

Aide :

ipset -H
ipset -H [iphash | ipmap | nethash |...]

3. Types de hachage

Les contenaires sont de différents types. Il peuvent stocker des adresses IP, des ports, des association adresses IP, MAC adresses.

3.1. portmap

Le set portmap permet d’enregistrer des ports, jusqu'à 65535. La création indique la tranche de port utilisée ( from → to )

Un exemple:

ipset -N portsconnus portmap --from 1 --to 1024
ipset -A portsconnus 25
ipset -A portsconnus 80
ipset -A portsconnus 110

Ensuite on peut l’utiliser ainsi :

iptables -A OUTPUT -m set --set portsconnus dst -j ACCEPT

Ce qui pourrait se faire ainsi avec iptables:

iptables   -A OUTPUT -p tcp -multiport --dports 25,80,110 -j ACCEPT
iptables   -A OUTPUT -p udp -multiport --dports 25,80,110 -j ACCEPT

Idem pavec les ports sources :

iptables -A INPUT -m set --set portsconnus src -j ACCEPT

Le coté pratique est qu’on ne déclare qu’un règle iptables et ensuite on ajouter ou supprimer des ports avec ipset:

ipset -A mes_ports 443
ipset -D mes_ports 110

3.2. ipmap

Avec le type ipmap on peut enregistrer des plages d’adresses IP.

La création se fait en utilisant des plages sous diverses formes:

--from @IP --to @IP

--network IP/masque --netmask CIDR-netmask(0-32) exemple:

ipset -N chezmoi ipmap --from 192.168.3.0 --to 192.168.3.128

ipset -A chezmoi 192.168.3.1 ipset -A chezmoi 192.168.3.2 Ici on supprime au plus tot les @IP non connus d’ipset :

iptables -t raw -A PREROUTING -i eth0 -m set ! --set chezmoi src -j DROP

3.3. macipmap

Permet d’associer la MAC adresse avec l’adresse IP.

La création se fait en utilisant des plages sous diverses formes:

--from @IP --to @IP

--network IP/masque --matchunset example:

ipset -N MACconnues macipmap --from 192.168.1.0 --to 192.168.1.128

ipset -A MACconnues 192.168.1.1%00:12:34:56:78:9a ipset -A MACconnues 192.168.1.2%00:12:34:56:78:9b On vire au plus tot ce qui n’est pas connu :

iptables -t raw -A PREROUTING -i eth0 -m set ! --set MACconnues src -j DROP

3.4. iphash

Le type iphash utilise une table de hachage pour stocker les @IP .

Les conflicts sont résolus par double hachage, et en dernier ressort par une croissance du hash. La taille initiale est définie par (defaut = 1024)

--hashsize taille

Le réglage du traitement des collisions se fait avec :

--probes nombre

Ceci permet de définir le nombre maximum de résolution de collisions à

l’ajout d’adresse (défaut = 8). Un faible nombre (1-3) optimise la vitesse, un grand nombre (4-8) optimise le remplissage de la table de hachage. Le taux d’accroissemnt de la table (en cas de collision non résolus) :

--resize nombre

Par défaut ce nombre est de 50, pour bloquer la croissance on peux le mettre à 0.

On peut définir un filtre sur les adresses ajoutées à la table de hachage:

--netmask CIDR-netmask (0-32)

Exemple de blacklist :

ipset -N blacklist iphash --probes 8

ipset -A blacklist 200.103.189.202 ipset -A blacklist 211.22.99.250

ipset -A blacklist 80.59.214.22
iptables -t raw    -A PREROUTING  -i eth0 -m set --set blacklist src -j DROP
iptables -t mangle -A POSTROUTING -o eth0 -m set --set blacklist dst -j DROP

Avec l’option netmask on peux traiter des plages réservées par l’IANA:

ipset -N reserveIANA iphash --netmask 8

ipset -A reserveIANA 1.0.0.0 ipset -A reserveIANA 2.0.0.0

ipset -A reserveIANA 77.0.0.0
iptables -t raw -A PREROUTING -i eth0 -m set --set reserveIANA src -j DROP

3.5. nethash

Le type nethash utilise des tables de hachage pour stocker les différentes tailles d’adresses réseau.

Les adresses doivent être dans la forme @IP/masque. Les ajout et suppression sont rélaaisée par le module SET du kernel. Paramétrage de la taille initiale du hachage (défaut = 1024)

--hashsize taille

Nombre de fois de tentative de résolution de collision de hachage lors de l’ajout (défaut = 2)

--probes nombre

Pourcentage d’accroissement de la table de hachage si les collisions ne sont pas résolues (défaut = 50)

--resize pourcentage

Exemple:

ipset -N adressesPrivee nethash

ipset -A adressesPrivee 10.0.0.0/8 ipset -A adressesPrivee 169.254.0.0/16 ipset -A adressesPrivee 172.16.0.0/12 ipset -A adressesPrivee 192.0.2.0/24 ipset -A adressesPrivee 192.88.99.0/24 ipset -A adressesPrivee 192.168.0.0/16 ipset -A adressesPrivee 198.18.0.0/15 Utilisation de cette table de hachage:

iptables -t raw    -A PREROUTING  -i eth0 -m set --match-set adressesPrivee src -j DROP
iptables -t mangle -A POSTROUTING -o eth0 -m set --match-set adressesPrivee dst -j DROP

¨

3.6. iptree

Avec iptree on peut éventuellement associer des desi délais.

Valeur globale en secondes (défaut = 0)

--timeout temps

On peut affiner les timeout par @IP

-A ipname IP[%timeout]

Exemple:

ipset -N indesirable iptree --timeout 3600

ipset -A indesirable 123.123.123.123 ipset -A indesirable 169.254.1.2 ipset -A indesirable 192.0.2.1%500

ipset -A indesirable 192.88.99.2%300

3.7. ipporthash

Le type ipporthash pemet d’enregistrer des paires @IP-port. La taille maximale est de 65536 @IP. La syntaxe utilisée est @IP%port .

Lors de la création de la table de hachage il faut indiquer les bornes des adresses IP/

--from @IP1 --to @IP2
--network IP/masque

Paramétrage de la taille initiale de la table de hachage (défaut = 1024)

--hashsize taille

Nombre de teentatives de résolutions lors de collisions (défaut = 8)

--probes tentatives

Taux d’acroissement de la table lors d'échec de résolus de collisions (défaut = 50 pourcent)

--resize pourcentage

Exemple:

ipset -N serveurs ipporthash --network 192.168.5.0/29

ipset -A serveurs 192.168.5.1%25 ipset -A serveurs 192.168.5.1%110 ipset -A serveurs 192.168.5.2%80 ipset -A serveurs 192.168.5.2%443 Utilisation:

iptables -A FORWARD -i eth0 -m set --match-set serveurs dst,dst -j ACCEPT

4. Action sur les tables

4.1. binding

On peut lier deux tables de hachage.

Exemple: On crée une première table de serveurs :

ipset -N serveurs ipmap --network 192.168.1.0/24
ipset -A serveurs 192.168.1.1
ipset -A serveurs 192.168.1.2

Puis une table de ports:

ipset -N portsOK portmap --from 1 --to 1024

ipset -A portsOK 25 ipset -A portsOK 80 On lie les tables serveurs et ports :

ipset -B serveurs 192.168.1.1 -b portsOK
ipset -B serveurs 192.168.1.2 -b portsOK

Utilisation du tableau lié:

iptables -A FORWARD -i eth0 -m set --match-set serveurs dst,dst -j ACCEPT

On peut définir une liaison par défaut:

ipset -B serveurs :default: -b portsOK

Suppression des liens avec --unbind ou -U

ipset -U serveurs :all:

ipset -U serveurs :default: ipset -U serveurs 192.168.1.1 ipset -D serveurs 192.168.1.1 Supprime tous les liens, le lien par défaut, ou seulement une adresse.

4.2. Utilisation de --match-set

Avec iptables on vérifie si la table de hachage correspond

iptables -A OUTPUT -o eth0 -m set --match-set adressesOK dst -j ACCEPT
iptables -A INPUT  -i eth0 -m set --match-set adressesOK src -j ACCEPT
iptables -A FORWARD -i eth0 -m set --match-set serveurs dst,dst -j ACCEPT
iptables -A FORWARD -o eth0 -m set --match-set serveurs src,src -j ACCEPT

4.3. SET

On ajouter/supprimer des @IP/ports directement iptables :

iptables -A INPUT -i eth0 -s 192.168.66.66 -j SET --add-set blacklist src
iptables -A INPUT -i eth0 -s 192.168.66.66 -j SET --del-set blacklist src

Exemple bidirectionnel

iptables -A INPUT ...  -j SET --del-set blacklist src,dst

4.4. Vérification si un élément est dans une table de hachage

Exemple:

ipset -T mesadresses 192.168.2.1
 192.168.2.1 is NOT in set

192.168.2.1 is in set Idem avec un port :

ipset -T mesports 111
 111 is NOT in set
111 is in set
ipset -T serveurs 192.168.2.1 -b mesadresses
ipset -T serveurs :default: --binding mesadresses

4.5. Permutation de tables de hachage

Permuttation des deux tables:

ipset -W ancien nouveau

Exemple:

ipset -N nouveau ....

ipset -A nouveau .... ipset -B nouveau .... ipset -W enFonction nouveau ipset -X nouveau Après avoir créé et provisionné une table, on la permute avec

la table en fonction, puis on détruit l’ancienne table (permutée

avec la nouvelle).

5. Installation sous Debian

Installation des modules (et plein d’autre) ip_set du kernel.

aptitude install module-assistant xtables-addons-source ipset-source
module-assistant prepare
module-assistant --verbose --text-mode auto-install xtables-addons