Retourner au contenu. Retourner à la navigation

 

Iptables par l'exemple

by diorf @ 11/10/2005
Netfilter et Iptables de façon claire et simple

Les critères

Filtrage par IP (couche 3 : réseaux)

Les règles peuvent contenir plusieurs critères, nous allons commencer par le plus simple : l’adresse IP. Il est possible de donner une adresse IP ou une adresse de réseau.

iptables -A INPUT -s 10.1.0.1/8 -j ACCEPT
iptables -A OUTPUT -d ! 10.1.0.0/8 -j DROP

Maintenant, nous acceptons les paquets entrants venant de l’hôte 10.1.0.1/8 et nous refusons tous paquets sortants qui ne sont pas à destination d’une machine sur le réseau 10.1.0.0/8 (négation grâce au "!").

Filtrage par interfaces (couche 1 : physique)

Une interface est un dispositif réseau physique ou virtuel possédant une ip (eg : eth0).

La boucle locale (lo) est une interface virtuelle utilisable uniquement par le machin elle-même.

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

Ici, nous acceptons les connexions internes à notre système.

iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i ppp0 -j DROP

Nous acceptons les paquets entrant depuis l’interface eth0 mais pas ceux venant de ppp0. Notez que pour la chaîne FORWARD les deux drapeaux -o et -i peuvent être utilisés.

Combinaison de IP et interfaces.

A présent, nous connaissons deux critères (IP et interfaces) nous allons pouvoir les cumuler. Ceci est très utile pour empêcher, par exemple, l’IP Spoofing (prendre l’IP de quelqu’un d’autre).

iptables -A INPUT -i ppp0 -s 10.1.0.0/8 -j DROP

Si un paquet entrant par l’interface ppp0 (connexion Internet) contient une ip du réseau privé 10.1.0.0/8 c’est forcément un cas d’IP Spoofing. Quelqu’un essai de nous faire croire qu’il vient de notre réseau local.

iptables -A OUTPUT -o eth0 -d 10.1.0.2/8 -j ACCEPT

Nous acceptons les paquets sortants à destination de l’hôte 10.1.0.2/8, si le paquet passe par l’interface eth0.

Filtrage par protocole (couche 4 : transport)

Nous allons introduire un nouveau critère : le protocole utilisé. iptables reconnaît les deux protocoles routés les plus connus : TCP et UDP, ainsi que le protocole ICMP.

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

L’option --dport désigne le port de destination du paquet. Ici, nous acceptons les connexions sortantes vers un serveur DNS et les connexions entrantes sur notre serveur Web.

iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

L’option -sport désigne le port source du paquet, ici nous acceptons que notre serveur Web réponde aux requêtes des clients.

TCP Flags

TCP est un protocole orienté connexion, iptables permet de lire les marqueurs inscrits dans l’ en-tête du paquet.

Il existe six marqueurs: SYN, ACK, FIN, RST, URG, PSH.

iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN SYN -j ACCEPT

L’option -tcp-flags prend deux argument, d’abord une liste des marqueurs à reconnaître puis la liste de leur état (1 ou 0). Ici, on vérifie que c’est un paquet où le marqueur SYN est à 1 et les deux marqueurs ACK et FIN sont à 0.

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

On peut utiliser les mots clef ALL et NONE pour tous les marqueurs ou aucuns. La règle ci-dessus refuse un type de X-mas scan (tous les marqueurs sont à 1).

L’utilisation de cette option est compliqué, il est conseillé d’utiliser le module state (cf. Module State)

ICMP Type

Pour le protocole ICMP, nous allons pouvoir reconnaître les différents types.

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Avec cette règle, notre pare-feu refusera tout les demandes faites via la commande ping.

Module State

iptables est un pare-feu dit "full state", c’est-à-dire que même sur des protocoles, comme udp, qui ne sont pas orientés connexion, on va pouvoir vérifier l’état de la connexion.

iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP

Maintenant nous acceptons les nouvelles connexions (eg : SYN) , les connexions déjà établies (eg : ACK) et les connexions en relation avec une connexion déjà établis (eg : FTP-data, IRC-dcc, …)

Tous les paquets qui ne peuvent pas êtres classés dans les états ci-dessus sont considérés comme invalide donc refusés.

Module Adresse Mac (couche 2 : liaison de données)

Ce module permet de vérifier l’adresse mac de l’expéditeur.

iptables -A INPUT -m mac --mac-source 00:09:99:45:34:34 -j DROP

Nous refusons tous paquets entrant venant du dispositif réseau avec l’adresse physique 00:09:99:45:34:34

Par diorf Dernière modification 22/03/2007 15:41
Navigation
Actualités
03/12/2008 Songbird 1.0
20/10/2008 Société Générale se met au vert
15/09/2008 Sortie de la version VLC 0.9.2
23/06/2008 Opération du libre à Nantes !
23/06/2008 OpenSuse 11
Plus d'actualités...
Articles
22/05/2008 Première approche de Qmail
19/05/2008 Test de la distribution Elive 1.0 Gem
14/05/2008 GNUPG introduction à la cryptographie et utilisation de GnuPG
21/02/2008 GNU / Screen
03/09/2007 The Linux File System Encryption API
More articles
Tips
28/04/2008 Mozilla Firefox : Google Talk et Facebook Chat
22/04/2008 Sed : Rechercher du texte entre deux chaines de caractères
04/04/2008 Gérer son(ses) écran(s) avec xrandr
26/03/2008 Tips sur l'historique de vos commandes
13/02/2008 Linux-Unix Cheat Sheets
More tips
Codes
09/04/2008 Chapitre 13 - Administration DNS et DHCP
09/04/2008 Chapitre 06 - Service web avec Apache
04/04/2008 Chapitre 09 - PureFTPd
04/04/2008 Chapitre 06 - Scripting Bash
01/04/2008 Chapitre 20 - Haute Disponibilité
More codes
Courses
13/09/2006 Module 3
23/02/2006 Module 2
23/02/2006 Module 1
More courses
Formation Linux

Supinfo Training Center has the first Linux Certification. The training is 13 days and allow you to pass the LPI 101 and 102.

more info
 
 
Vous êtes ici :
Articles Iptables par l'exemple Les critères