Chapter 61. Ipchains

Revision History
Revision 0.110 Octobre 2004

Table of Contents

Langage d'Ipchains

Abstract

Résumé des commandes et exemples Ipchains.

Langage d'Ipchains

Ipchains est utilisable avec les anciennes versions de netfilter sur les versions des noyaux 2.2.

D'après la page de man d'ipchains :

ipchains -[ADC] chain rule-specification [options]
ipchains -[RI] chain rulenum rule-specification [options]
ipchains -D chain rulenum [options]
ipchains -[LFZNX] [chain] [options]
ipchains -P chain target [options]
ipchains -M [ -L | -S ] [options] 

Ipchains est utilisé pour configurer, maintenir et surveiller les règles du firewall IP du noyau Linux. Ces règles sont stockées dans quatre catégories de chaînes différentes, la chaîne input, la chaîne output, la chaîne forward, les chaînes utilisateurs. Pour chacune de ces catégories une table de règles propre à la chaîne est maintenue.

target : une règle de firewall spécifie un ensemble de critères à appliquer pour un paquet et une destination. Si le paquet ne peut être traité, la règle suivante est examinée, si le paquet peut être traité, alors la règle est appliquée. Cette règle peut être :

* JUMP RegleUtilisateur, le paquet sera traité par une règle d'une chaîne utilisateur,
* une des valeurs ACCEPT, DENY, REJECT, MASQ, REDIRECT, RETURN.
* ACCEPT laisse le paquet traverser la chaîne,
* DENY jette purement et simplement le paquet,
* MASQ est utilisé pour masquer les adresses sources des paquets.

Commandes : ces options spécifient les actions à réaliser. Il est possible d'en spécifier qu'une seule à la fois sur la ligne de commande.

-A, --append Ajoute une règle à la fin de la chaîne.
-D, --delete Supprime une ou n règles dans une chaîne.
-I, --insert Insère une ou plusieurs règles dans la chaîne mentionnée. 
-L, --list Donne une liste des règles en cours d'application.
-Z, --zero Initialise un compteur de paquet et de bytes des règles. 
-p, --protocol[!] protocol Spécifie le protocole à traiter dans la règle. 
      tcp, udp, icmp, all. 
-s, --source [!] address[/mask] [!] [port[:port]] permet de définir la source. 
      Exemple -s 192.168.1.0/24 port 80 signifie tous les paquets adressés 
      sur le port 80 et en provenance des machines du réseau d'adresse 192.168.1.0. 
      Si le port est précisé, la règle doit préciser à quel protocole elle s'applique 
      (icmp, tcp, udp, all).
-d, --destination [!] address[/mask] [!] [port[:port]] 
      Même remarque que pour le paramètre "--source" mais appliqué à la destination.
-j, --jump target  utilisé dans une règle pour définir une autre chaîne 
      de traitement du paquet (chaîne utilisateur) ou pour indiquer le traitement
      à réaliser.
-i, --interface [!] name Paramètre optionnel. 
      Permet de spécifier une règle qui va traiter les paquets entrants 
      ou à destination d'une interface réseau.

Attention à l'écriture. Les cibles (target) sont sensibles à la casse.

Exemples d'écriture :

Voir toutes les règles actives : 
    ipchains -L ou ipchains -n -L (mode numérique sans résolution de nom)

Supprimer les règles du firewall et fermer maintenant toutes les portes 
avec les commandes :

ipchains -A input -p all -j DENY ou ipchains -A input -j DENY
ipchains -A output -p all -j DENY
ipchains -A forward -p all -j DENY

La première chaîne signifie que pour tous les protocoles qui entrent les paquets seront détruits. Pour modifier les règles par défaut des chaînes input, output ou forward, utiliser -P

ipchains -P forward -j DENY  
#par défaut les paquets seront refusés sur la chaîne forward.

; Supprime la première règle de la chaîne input
ipchains -D input 1

; Refuser tous les paquets sur la chaîne input
ipchains -I input -j DENY ou alors ipchains -P input DENY

; Crée une nouvelle chaîne utilisateur "machaine"
ipchains -N machaine

; Ajoute à la chaîne "machaine" une autorisation pour tous les paquets 
; de type HTTP à destination de la machine 192.168.90.1
ipchains -A machaine -s 0.0.0.0/0 www -d 192.168.90.1 -j ACCEPT

; Redirige tous les paquets sur le port 8080 (service mandataire)
ipchains -A input  -p tcp -s 192.168.1.1/24 -d 0.0.0.0/0 80 -j redirect 8080

; Accepter les requêtes DNS sur la machine 192.168.1.1
ipchains -A input -p udp -s 0/0 dns -d 192.168.1.1/24 -j ACCEPT

; Les deux règles suivantes permettent de se protéger de 
; l'ip-spoofing si eth0 est l'interface du réseau privé.
ipchains -A input -i eth0 -s ! 192.168.1.0/255.255.255.0 -j DENY 
ipchains -A input  -i ! eth0  -s 192.168.1.0/255.255.255.0 -j DENY  

-- Configuration du Firewall - masquage  :

; Ouvrez toutes les portes du firewall à l'aide des commandes suivantes :
ipchains -A input -j ACCEPT
ipchains -A output -j ACCEPT
ipchains -A forward -j ACCEPT 
# Pensez à vérifiez l'état des chaînes à l'aide de la commande" ipchains -n -L"

; Activer l'ip masquerading à l'aide de la commande :
ipchains -A forward -p all -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ 

; Cela signifie qu'il faudra masquer (effectuer une translation 
; d'adresse -j MASQ) pour tous les paquets qui proviennent (-s source) 
; du réseau 192.168.1.0 et vont à destination de n'importe quelle adresse.

; Autres exemples commentés de règles.
; Autoriser la circulation des protocoles FTP, HTTP et refuser tous les autres.
ipchains -A output -p tcp -s 192.168.1.0/24 -d 0.0.0.0/0  80 -j ACCEPT 
# pour les requêtes HTTP
ipchains -A output -p tcp -s 192.168.1.0/24 -d 0.0.0.0/0  21 -j ACCEPT 
# pour les requêtes FTP
ipchains -A output -p tcp -s 192.168.1.0/24 -d 0.0.0.0/0  20 -j ACCEPT 
# pour les requêtes FTP-DATA
ipchains -A output -p tcp -s 192.168.1.0/24 -d 0.0.0.0/0  113 -j
; ACCEPT 
# pour les requêtes AUTH
ipchains -A output -s 192.168.1.0/24 -d 0.0.0.0/0 -j DENY

; Le port tcp/80 permet de laisser sortir les requêtes HTTP,
; Le port tcp/21 permet d'ouvrir une session sur un hôte distant,
; Le port tcp/20 permet l'échange de donnée (put/get),
; Le port tcp/113 permet l'authentification.
; On refuse d'envoyer tout le reste.


; Interdire toutes les requêtes qui sortent vers l'extérieur, 
; sauf celles qui vont sur un port 80 (requêtes http),
; Ici, on utilise les noms de protcoles définis dans /ets/services
ipchains -A input -p tcp -d 0.0.0.0/0 ! www -j DENY

; Créer une nouvelle chaîne qui aura en charge les paquets icmp. 
; Tous les paquets icmp seront détruits,
ipchains -N ch-icmp
ipchains -I ch-icmp -j DENY 
# détruire les paquets 
ipchains -I input -p icmp -j ch-icmp 
# si c'est un paquet icmp alors, traiter dans ch-icmp

; Remarque : Le traitement des paquets icmp demande une 
; attention particulière. Voir ipchains-HOWTO pour cela.

; Créer une nouvelle chaîne qui aura en charge les paquets provenant 
; du réseau interne et qui passent sur l'interface eth0,
ipchains -N int-ext /* paquets qui vont de l'intérieur vers l'extérieur */
ipchains -I int-ext -j ACCEPT /* on accepte tout c'est juste pour tester */
ipchains -I input -i eth0 -j int-ext /* si c'est un paquet qui vient du réseau 
                                      interne alors, traiter dans int-ext */

; Interdire la sortie de tous les protocoles sauf le protocole HTTP, 
; (deux formes d'écriture possible),

; Première solution : 
ipchains -A output -p tcp -s 192.168.1.0/24 -d 0.0.0.0/0 80 -j ACCEPT 
ipchains -A output -s 192.168.1.0/24 -d 0.0.0.0/0 -j DENY 

; Deuxième solution 
ipchains -A output -p tcp -s 192.168.1.0/24 -d 0.0.0.0/0  !80 -j DENY 
; /* Rejette tout ce qui n'est pas à destination d'un port 80.

; Scénario, on souhaite : 
; 1 - pour toutes les machines d'un réseau privé sauf les machines 
; " .1 " et " .2 ",  laisser sortir tous les paquets par translation 
; d'adresse sur les ports 25, 110 et 53 (smtp, pop3 et DNS) interdire tout le reste.
; 2 - interdire pour toutes les machines, tout passage des protocoles MS.

#Règles IPCHAINS du FW en date du 24/10/2000
# On ferme d'abord tout
ipchains -P forward  DENY
#SMTP on laisse passer
ipchains -A forward -j MASQ -p tcp -s 192.168.90.0/24 -d 0.0.0.0/0 25 
g
ipchains -A forward -j MASQ -p tcp -s 192.168.90.0/24 -d 0.0.0.0/0 110

#DNS oui avec les protocoles de transport UDP et TCP
ipchains -A forward -j MASQ -p tcp -s 192.168.90.0/24 -d 0.0.0.0/0 53
ipchains -A forward -j MASQ -p udp -s 192.168.90.0/24 -d 0.0.0.0/0 53

#machines .1 et .2 
ipchains -A forward -j MASQ  -s 192.168.90.1/32 -d 0.0.0.0/0
ipchains -A forward -j MASQ  -s 192.168.90.2/32 -d 0.0.0.0/0

#Les protocoles de MS (transport UDP et TCP)
ipchains -A input -j DENY -p udp -s 192.168.90.0/24 -d 0.0.0.0/0  137
ipchains -A input -j DENY -p udp -s 192.168.90.0/24 -d 0.0.0.0/0  138
ipchains -A input -j DENY -p tcp -s 192.168.90.0/24 -d 0.0.0.0/0  137
ipchains -A input -j DENY -p tcp -s 192.168.90.0/24 -d 0.0.0.0/0  138