Page suivantePage précédenteTable des matières

7. Configuration du filtrage IP (IPchains)

Les ipchains Linux sont une réécriture du code pare-feu IPv4 de Linux (en grande partie inspiré de BSD) ainsi que de ipfwadm qui était lui-même une réécriture du ipfw de BSD, je crois. Il est indispensable d'administrer les filtres de paquets IP dans les noyaux Linux versions 2.1.102 et au-delà.

L'ancien code ne gère pas les fragments, a des compteurs sur 32 bits (sur Intel en tout cas), ne permet aucune autre spécification de protocole que TCP, UDP ou ICMP, ne peut réaliser de vastes modifications de manière atomique, ne peut spécifier de règles inversées, a quelques défauts et peut se révéler dur à administrer (ce qui le rend vulnérable aux erreurs d'utilisation). Ou du moins c'est ce qu'en dit l'auteur.

Je ne vais pas entrer en détail sur la manière de contrôler un pare-feu IPchains, car il existe un _BON !!_ HOWTO qui en parle sur http://www.rustcorp.com/linux/ipchains/HOWTO.html. Je finirais juste par le recopier ici. En voici les bases.

On travaille avec les chaînes par noms. Il existe au début trois chaînes prédéfinies input, output et forward, qu'il est impossible de supprimer. On peut créer des chaînes personnelles. Des règles peuvent ensuite être ajoutées et supprimées de ces ensembles de règles.

Les opérations nécessaires pour travailler sur les chaînes sont les suivantes :

  1. création d'une nouvelle chaîne (-N) ;
  2. suppression d'une chaîne vide (-X) ;
  3. modification de la spécification pour une chaîne prédéfinie (-P) 
  4. liste des règles d'une chaîne (-F) ;
  5. remise à zéro des compteurs de paquets et d'octets de toutes les règles d'une chaîne (-Z).

Il existe différentes méthodes pour manipuler les règles à l'intérieur des chaînes :

  1. ajout d'une nouvelle règle dans une chaîne (-A) ;
  2. insertion d'une nouvelle règle à une position donnée d'une chaîne (-I) ;
  3. remplacement d'une règle à une position donnée d'une chaîne (-R) ;
  4. suppression d'une règle à une position donnée d'une chaîne (-D) ;
  5. suppression de la première règle correspondante dans une chaîne (-D).

Il existe quelques opérations pour le masquage qui se trouvent dans ipchains dans l'attente d'un bon emplacement pour les placer :

  1. liste des connexions actuellement masquées (-M -L) ;
  2. positionnement du temps d'expiration du masquage (-M -S).

Il y a quelques détails de chronologie qui interviennent dans la modification des règles de pare-feu. Si l'on n'est pas suffisamment prudent, il est possible de laisser passer quelques paquets pendant la mise en place des modifications. Une approche simpliste est la suivante :

 # ipchains -I input 1 -j DENY
 # ipchains -I output 1 -j DENY
 # ipchains -I forward 1 -j DENY

... réalisation des modification ...

 # ipchains -D input 1
 # ipchains -D output 1
 # ipchains -D forward 1
 #

Cela interdit tout passage de paquet durant les modifications.

Voici une copie des règles de pare-feu qui précèdent dans IPChains :

#!/bin/sh
#
# rc.firewall
#
## Tout vider et repartir du debut
 /sbin/ipchains -F input
 /sbin/ipchains -F output
 /sbin/ipchains -F forward
## Redirection pour le mandatement transparent de HTTP
 #$IPCHAINS  -A input -p tcp -s 192.1.2.0/24 -d 0/0 80 -j REDIRECT 8080
## Creation de nos propres chaines
 /sbin/ipchains -N ma-chaine
 # On autorise le courriel entrant vers le serveur
 /sbin/ipchains -A ma-chaine -s 0.0.0.0/0 smtp -d 192.1.2.10 1024:-j ACCEPT
 # On autorise les connexions courriel vers l'extérieur
 /sbin/ipchains -A ma-chaine -s 192.1.2.10 -d 0.0.0.0/0 smtp -j ACCEPT
 # On autorise les connexions web entrantes vers le serveur
 /sbin/ipchains -A ma-chaine -s 0.0.0.0/0 www -d 192.1.2.11 1024: -j ACCEPT
 # On autorise les connexions web vers l'extérieur
 /sbin/ipchains -A ma-chaine -s 192.1.2.0/24 1024: -d 0.0.0.0/0 www -j ACCEPT
 # On autorise le trafic DNS
 /sbin/ipchains -A ma-chaine -p UDP -s 0.0.0.0/0 dns -d 192.1.2.0/24 -j ACCEPT
## Si on utilise le masquage
 # On ne masque pas le trafic interne
 /sbin/ipchains -A forward -s 192.1.2.0/24 -d 192.1.2.0/24 -j ACCEPT
 # On ne masque pas l'interface externe directe
 /sbin/ipchains -A forward -s 199.1.2.0/24 -d 0/0 -j ACCEPT
 # On masque tout paquet interne qui sort
 /sbin/ipchains -A forward -s 192.1.2.0/24 -d 0/0 -j MASQ
## On interdit tout le reste
 /sbin/ipchains -P my-chains input DENY

Il ne faut pas s'arrêter là. Ce n'est pas un pare-feu très puissant et je suis sûr qu'il y a d'autres services que vous souhaiteriez fournir. À nouveau, lisez le IPCHAINS-HOWTO.


Page suivantePage précédenteTable des matières