Skip Navigation Links
Accueil
Java Standard EditionExpand Java Standard Edition
Java EE 5Expand Java EE 5
Visual Basic .Net 2005Expand Visual Basic .Net 2005
Visual C++ .Net 2005Expand Visual C++ .Net 2005
Visual C# .Net 2005Expand Visual C# .Net 2005
Cours ASP .Net 2.0Expand Cours ASP .Net 2.0
PostgresqlExpand Postgresql
LinuxExpand Linux
Visual Studio 2008Expand Visual Studio 2008
ASP 3.0 ClassiqueExpand ASP 3.0 Classique
Cours Javascript - DOM - DHTMLExpand Cours Javascript - DOM - DHTML
Cours AjaxExpand Cours Ajax
VBAExpand VBA
AssembleurExpand Assembleur
PerlExpand Perl
MembresExpand Membres
L'auteur du site
Nouveautés sur le site
Contacts
Plan du site
Accueil > Linux > Les iptables
____________________________________________________________________________________________________
Connexion

LA COMMANDE IPTABLES

28/12/07
MANUEL IPTABLES EN FRANCAIS

I) Packages nécessaires

I.1)Fedora Core 8

Pour avoir accès à iptables, il faut, sous Fedora Core 8, le package iptables-ipv6( par exemple iptables-ipv6 – 1.3.8-6.fc8.i386), et le package iptables( par exemple iptables – 1.3.8 - 6.fc8.i386). Ces 2 paquetages sont installés par défaut sous fedora core 8.

II) Généralités

Une table est un ensemble de chaînes. Une table par défaut existe. Mais on peut en créer d’autres.
Une chaîne est un ensemble de règles. Extrait man : « Chaque chaîne est une liste de règles. ».
Le système iptables permet un filtrage des paquets, c'est-à-dire une sélection des paquets. Le paquet est l’unité élémentaire pour désigner quelque chose qu’on a reçu, ou qu’on veut envoyer. On peut le comparer à un paquet pour La Poste !
iptables est donc un système de pare-feu. Son avantage est qu’il est paramétrable en langage de commande, ce qui apporte de la puissance et de la souplesse.

Extrait man : « Chaque table contient plusieurs chaînes prédéfinies et peut aussi contenir des chaînes définies par l’utilisateur. ». INPUT est un exemple de chaîne prédéfinie. Les chaînes définies par l’utilisateur sont ce que j’appelerai par la suite les chaînes utilisateur.

II.1) Les règles :

Extrait man : « Une règle de pare-feu spécifie des critères de correspondance pour un paquet, et une cible ».
Les critères de concordance, c’est-à-dire qu’on précise une situation, un contexte hypothétique dans lequel le paquet courant se trouve, par exemple « INPUT », ou, plus précis, un INPUT sur une certaine interface réseau.
Qu’est-ce que la cible ? Extrait man : « La cible peut être le nom d’une chaîne définie par l’utilisateur ou l’une des valeurs spéciales suivantes : ACCEPT, DROP, QUEUE, ou RETURN ». La cible est donc une décision qu’on prend, dans le cas où la correspondance a lieu, par exemple DROP( on rejète le paquet).

RETURN signifie qu'il faut arrêter d'exécuter les règles de cette chaîne, donc ne pas exécuter la suite. Utile par exemple dans les cas où la syntaxe limitée ne nous permet pas certaines choses. Exemple: pour une interface réseau inter1, on veut faire un DROP de tout ce qui ne vient pas de deux de nos réseaux locaux. On rajoute à une chaîne utilisateur:
iptables -A maChaine -i inter1 -s $ad_reseau_1 -j RETURN
iptables -A maChaine -i inter1 -s $ad_reseau_2 -j RETURN
iptables -A maChaine -i inter1 DROP

Dans le cas présent, la syntaxe ne nous permettait pas de mettre plusieurs adresses derrière le -s, sinon on aurait mis -s !$ad_reseau_1 !$ad_reseau_1 -j DROP( FAUX)
On est donc obligé de s'en sortir avec le RETURN.
Le return prouve bien qu'une chaîne est comme un sous-programme qui est exécuté ligne par ligne. L'ordre des lignes a de l'importance. Et on peut arrêter l'exécution du sous-programme quand on veut.

II.2) Les cibles

Extrait man : « ACCEPT signifie que le paquet est autorisé à passer. DROP signifie que le paquet est détruit. ».

Différence entre une chaîne utilisateur et une chaîne prédéfinie :
Le seul point commun entre une chaîne utilisateur et une chaîne prédéfinie, est que toutes les deux sont un ensemble de règles.
Une chaîne utilisateur, c’est un ensemble de règles, et c’est tout. C’est donc une ou plusieurs règles. Il n’y a aucune notion en plus de la notion de règle. C’est un simple regroupement de règles. On peut donner un nom à cet ensemble de règles, c’est un des avantages. Une chaîne utilisateur s’utilise comme cible, c’est-à-dire comme décision. Cela veut dire qu’on décide d’appliquer cet ensemble de règles comme décision. La notion de chaîne utilisateur est donc on ne peut plus simple.

Une chaîne prédéfinie est un ensemble de règles, mais en plus une sémantique est rattachée à cet ensemble de règles. Par exemple « INPUT » : un sens est rattaché, qui est « pour chaque paquet entrant ». Donc l’ensemble des règles de cette chaîne s’applique sous cette condition-là. C’est comme un déclencheur( trigger) en base de données : lorsqu’un certain évènement( INPUT ici) a lieu, une exécution automatique de l’ensemble des règles a lieu( c’est donc la décision prise !). Le point commun avec les chaînes utilisateurs, c’est que la décision prise, c’est finalement toujours l’exécution de l’ensemble des règles de la chaîne.

II.3) Principaux paramètres iptables

iptables –F
supprime toutes les règles de la chaîne. Si aucune chaîne n’est spécifiée, toutes les chaînes de la table sont vidées.

Exemple de chaîne( prédéfinie ici) : INPUT

-L : affiche toutes les règles de la chaîne indiquée

-N : crée une nouvelle chaîne utilisateur avec le nom passé en paramètre

-X : supprime la chaîne utilisateur. Si aucun nom n’est spécifié, toutes les chaînes utilisateurs seront supprimées.

-P Modifie la politique par défaut de la chaîne. Il faut indiqué en plus comme paramètre la cible à utiliser.

-A ajoute une règle à la fin de la chaîne spécifiée.

-I Insère la règle avant celle indiquée. Cette place est précisée par un numéro qui fait suite au nom de la chaîne. La première porte le numéro 1. Si aucun numéro n’est indiqué, la règle est insérée au début.

-D Supprime une règle de la chaîne. Soit un numéro peut être précisé, soit la définition de la règle à supprimer( ses tests de concordance et sa cible).

--destination-ports port[,port[,port...]]
Man: "Établit la correspondance si le port destination est l’un des
ports spécifiés. Et --dports est un synonyme commode pour cette
option."

-p, --protocol [!] protocole
Man: "Protocole de la règle ou du paquet à vérifier. Le protocole
spécifié est l’un des suivants : tcp, udp, icmp ou all, ou bien
sous forme d’une valeur numérique, représentant un de ces proto-
coles ou un protocole différent. Un nom de protocole issu du
fichier /etc/protocols est aussi autorisé. Un «!» avant le pro-
tocole inverse le test. La valeur zéro est équivalente à all.
Le protocole all correspond à tous les protocoles ; c’est aussi
la valeur par défaut lorsque cette option est omise."

 -s, --source [!] adresse[/masque]
Man: "
Spécification de la source. L’adresse peut être un nom de
réseau, un nom d’hôte (attention : spécifier un nom à résoudre
avec une requête distante de type DNS est vraiment une mauvaise
idée), une adresse de réseau IP (avec /masque) ou une simple
adresse IP. Le masque peut être un masque de réseau ou un nom-
bre entier spécifiant le nombre de bits égaux à 1 dans la partie
gauche du masque de réseau (bits de poids fort). Par conséquent,
un masque de 24 est équivalent à 255.255.255.0. Un «!» avant la
spécification d’adresse inverse la sélection d’adresse.
L’option --src est un synonyme de --source.
"

-d, --destination [!] adresse[/masque]
Man: "
Spécification de la destination. Voir la description du
paramètre -s (source) pour une description détaillée de la syn-
taxe. L’option --dst est un synonyme de --destination."

-j, --jump cible
Man: "
Ceci détermine la cible de la règle ; c’est-à-dire ce qu’il faut
faire si le paquet correspond à la règle. La cible peut être une
chaîne définie par l’utilisateur (autre que celle dans laquelle
se situe cette règle), une des cibles prédéfinies qui décide
immédiatement du sort du paquet, ou une extension (voir EXTEN-
SIONS ci-dessous). Si cette option est omise dans une règle, la
correspondance d’un paquet avec la règle n’aura aucun effet sur
le sort du paquet, mais les compteurs seront incrémentés."

-i, --in-interface [!] [nom]
Man : "
Nom de l’interface qui reçoit les paquets (seulement pour les
paquets passant par les chaînes INPUT, FORWARD et PREROUTING).
Lorsqu’un «!» est utilisé avant le nom d’interface, la sélection
est inversée. Si le nom de l’interface se termine par un «+», il
désigne toutes les interfaces commençant par ce nom. Si cette
option est omise, toutes les interfaces réseau sont désignées."

-o, --out-interface [!] [nom]
Man: "
Nom de l’interface qui envoie les paquets (seulement pour les
paquets passant par les chaînes FORWARD, OUTPUT et POSTROUTING).
Lorsqu’un «!» est utilisé avant le nom d’interface, la sélection
est inversée. Si le nom de l’interface se termine par un «+», il
désigne toutes les interfaces commençant par ce nom. Si cette
option est omise, toutes les interface réseau sont désignées."

RETOUR HAUT