Retourner au contenu. Retourner à la navigation

 

Module 3

by civ @ 13/09/2006

Chapitre 04 - Firewalling

Mise en place d'une solution de firewalling avec netfilter et iptables.

1. Introduction

1.1 Concepts

1.1.1 Notion de firewall

Un firewall est un processus qui analyse le trafic. Il y a 3 types de trafic distincts : entrant, sortant, traversant.

firewall1.png

Un trafic est une chaîne à laquelle on peut appliquer un ensemble de règles.

Une règle est une ou plusieurs instructions auxquelles le trafic va correspondre ou non.

S'il n'y a pas correspondance, le paquet sera transmis à la règle suivante, mais s'il correspond, il est redirigé vers la cible pointé par la règle.

Une cible est une action effectuée sur le paquet. Les cibles les plus simples sont : accepter ou rejeter le paquet. Mais il est possible de faire d'autre action prédéfinis comme rediriger le paquet vers un autre hôte.

1.1.2 Principe de translation d'adresse

Le NAT (Network Address Translation) vous permet d'utiliser des adresses IP privées sur votre LAN et de translater ces adresses afin de les rendre accessible depuis un réseau public comme Internet.

Le réseau privé est défini sur l'interface intérieure et l'adresse publique sur l'interface extérieure de votre routeur.

Dans sa forme la plus simple ; appelé NAT statique ; une adresse privée unique est redirigée, vers une adresse publique unique.

La forme la plus utilisée de NAT est un groupe d'adresse privées translaté en une seule et unique adresse publique. Cette forme de NAT est appelée "overloading".

1.2 Netfilter

Netfilter est un pare-feu complet fonctionnant sous Linux (noyaux 2.4 et 2.6), il remplace ipchains qui fonctionnait sur les noyaux 2.2.

Les chaînes de Netfilter sont reparties dans 3 tables :

  • FILTER : c'est la table par défaut, elle filtre les 3 trafics principaux.
  • NAT : table dédiée à la redirection de paquets.
  • MANGLE : table utilisée pour les services réseaux additionnels.

Netfilter fonctionne au niveau du noyau, pour l'administrer, iptables est utilisé.

2. Installation

2.1 Partie noyau : Netfilter

Netfilter agit au niveau du noyau, il est donc nécessaire d'activer certaines options à la compilation (en dur ou en modules). Voici la procédure à suivre pour une noyaux 2.6 (pour un noyau 2.4, la manipulation est fortement semblable).

bash-2.05b$ cd /usr/src/linux
bash-2.05b$ make menuconfig
Device drivers --->
Networking support --->
Networking options --->
[*] Network packet filtering (replaces ipchains) --->
IP : Netfilter configuration --->

Dans ce dernier menu, vous trouverez toutes les options de Netfilter.

bash-2.05b$ make
.....compilation....
bash-2.05b$ make modules_install
.....installation des modules.....

2.2 Partie administration : iptables

iptables doit être installé dans /sbin/iptables si ce n'est pas le cas (iptables est installé de base dans les distributions récentes) il faut télécharger iptables sur www.netfilter.org/download.html et prendre la dernière version.

Il faut ensuite se placer dans le répertoire où iptables a été téléchargé et exécuter les commandes suivantes :

bash-2.05b$ tar jxvf iptables-x.y.z.tar.bz2
bash-2.05b$ cd iptables-x.y.z

bash-2.05b$ make KERNEL_DIR=<chemin_vers_les_sources_du_noyaux>
bash-2.05b$ make install KERNEL_DIR=<chemin_vers_les_sources_du_noyaux>

Par défaut les sources se trouvent dans /usr/src/linux (lien symbolique).

Exemple :

bash-2.05b$ make KERNEL_DIR=/usr/src/linux-2.6.6/
.....compilation....
bash-2.05b$ make install KERNEL_DIR=/usr/src/linux-2.6.6/
.....installation.....

3. Utilisation d'iptables

3.1 La table FILTER

C'est la table par défaut lorsqu'on ne spécifie aucune table. Elle contient toutes les règles de filtrage :

  • INPUT : pour les paquets entrants.
  • OUPUT : pour les paquets sortants.
  • FORWARD : pour les paquets traversants le firewall.

3.1.1 Les cibles de la table Filter

Lorsqu'un paquet correspond au motif de reconnaissance d'une règle, une décision est prise.

  • ACCEPT : Permet d'accepter un paquet si la règle est vérifiée.
  • REJECT : Permet de rejeter le paquet avec un retour d'erreur à l'expéditeur si la règle est vérifiée.
    • --reject-with : Spécifier le type d'erreur a retourné. (icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited, icmp-host-prohibited)
  • DROP : Permet de rejeter le paquet sans retour d'erreur à l'expéditeur si la règle est vérifiée.
  • LOG : Permet de logguer le passage du paquet si la règle est vérifiée.
    • --log-level : Spécifie le level des logs
    • --log-prefix : Spécifie un préfix placer devant l'evenement, utile pour identifier les evenements different (29 charateres max).

Un exemple de règle illustrant cela serait :

bash-2.05b$ iptables   -A               INPUT             -j DROP
commande Ajout de règles chaine concernée cible

Cette règle aura pour effet de bloquer tout le trafic entrant

3.1.2 Les cibles personnalisées

Il est également possible de créer ses propres cibles. De la même manière qu'une fonction permet de regrouper des taches en un seul groupe, la création d'une nouvelle chaîne permet de définir un jeu de règles pouvant être appelées en une fois.

3.1.2.1 Création de chaîne :

Syntaxe : -N --new-chain : Permet de créer une nouvelle chaîne.

Exemple :

bash-2.05b$ iptables -N LOG_DROP	# On crée une nouvelle chaîne 
bash-2.05b$ iptables -A LOG_DROP -j LOG --log-prefix ' DROPING PAQUET : '
bash-2.05b$ iptables -A LOG_DROP -j DROP

A présent nous avons créé une nouvelle chaîne que nous pouvons utiliser de la manière suivante ;

bash-2.05b$ iptables -A INPUT -j LOG_DROP
bash-2.05b$ iptables -A OUTPUT -j LOG_DROP
bash-2.05b$ iptables -A FORWARD -j LOG_DROP

3.1.2.2 Suppression de chaîne

Syntaxe : -X --delete-chain : Supprime la chaîne spécifiée.

Exemple :

bash-2.05b$ iptables -X LOG_DROP	# Supprime la chaîne LOG_DROP.

3.2 Enregistrement et chargement de règles

Toutes les règles que l'on définit avec iptables sont stockées en mémoire. Si l'on éteint ou redemare la machine on pert les règles. Voici comment les sauvegarder puis les réutiliser.

3.2.1 Sauvegarder les règles

Syntaxe : iptables-save

Exemple :

bash-2.05b$ iptables-save > fichier.bak	# il est necessaire de rediriger le flux dans un fichier.

3.2.2 Charger les règles

Syntaxe : iptables-reload

Exemple :

bash-2.05b$ iptables-relaod < fichier.bak

3.3 Les commandes principales

iptables est un logiciel qui fonctionne uniquement en ligne de commande, nous allons donc présenter les principales commandes :


ArgumentDescription
-L --listAffiche les règles d'une chaîne.
-A --appendAjoute une règle à la fin de la chaîne spécifie.
-I --insertPermet d'insérer une règle dans une chaîne.
-D --deleteSupprime une chaîne.
-R --replaceRemplace la règle spécifiée par une autre règle.
-F --flushPermet d'effacer toutes les règles d'une chaîne.
-P --policySpécifie au noyau la cible à appliquer par défaut à une chaîne.
bash-2.05b$ iptables -L		# Affiche toutes les règles de toutes les chaînes de la table FILTER.
bash-2.05b$ iptables -L OUTPUT # Affiche toutes les règles de la chaîne OUTPUT.
bash-2.05b$ iptables -A OUTPUT -j DROP # Ajoute la règle -j DROP à la fin de la chaîne OUTPUT.
bash-2.05b$ iptables -I OUTPUT 1 -j DROP	# Insère la règle -j DROP avant la règle 1 (cette règle devient donc la première) .
bash-2.05b$ iptables -D OUTPUT -j DROP       # Supprime la règle OUTPUT -j DROP
bash-2.05b$ iptables -D OUTPUT 1 # Supprime la première règle de la chaîne OUTPUT
bash-2.05b$ iptables -R OUTPUT 1 -j DROP	# Remplace la première règle de la chaîne OUTPUT par -j DROP.
bash-2.05b$ iptables -F		#  Efface toutes les règles de toutes les chaînes.
bash-2.05b$ iptables -F INPUT # Efface toutes les règles de la chaîne INPUT.
bash-2.05b$ iptables -P OUTPUT DROP	# utilise la target DROP par défaut si aucune règle ne s'applique au paquet

3.4 Options

Note:

Le "!" signifie le contraire (comme en programmation).

3.4.1 Options globales


ArgumentDescription
-s --sourceSpécifie une adresse source à traiter.
-d --destinationSpécifie une adresse de destination.
-i --in-interfaceSpécifie une interface d'entrée.
-o --out-interfaceSpécifie une interface de sortie.
bash-2.05b$ iptables -A INPUT -s !192.168.1.8 -j ACCEPT 	# Autorise tout sauf l'hôte 192.168.1.8 à entrer sur la machine.
bash-2.05b$ iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # Autorise le sous-réseaux 192.168.1.0 à entrer sur la machine.
bash-2.05b$ iptables -A FORWARD -d 192.168.1.1 -j ACCEPT	# Autorise la transmition de paquet vers l'hôte 192.168.1.1
bash-2.05b$ iptables -A INPUT -i eth0 -j DROP	# Refuse le trafic en entrée sur l'interface eth0.
bash-2.05b$ iptables -A OUTPUT -o eth0 -j DROP	# Refuse les paquets qui sort par eth0

3.4.2 Options protocoles

l'option -p peut prendre plusieurs sous options, elles ne peuvent être utilisées qu'après l'utilisation de l'option -p.


ArgumentDescription
-p --protocolspécifie un protocole udp, tcp, icmp ou all (pour tous les protocoles)
--sport --source-portSpécifie le port source (ou une plage de 15 ports maximum avec l'option -m multiport)
--dport --destination-portSpécifie le port de destination (ou une plage de 15 ports maximum avec l'option -m multiport).
--icmp-typeSpécifie un type de paquet ICMP à traiter (Option utilisable uniquement pour le protocole icmp).
bash-2.05b$ iptables -A INPUT -p icmp -j ACCEPT	# Autorise le protocole ICMP (ping) en entrée.
bash-2.05b$ iptables -A INPUT -p tcp --sport 80 -j ACCEPT 	# Accepte les données envoyer par un site web.
bash-2.05b$ iptables -A INPUT -p tcp -m multiport --sport 80,21,22 -j ACCEPT # Accepte les données envoyer par un site web, un ftp et un serveur SSH.
bash-2.05b$ iptables -A INPUT -p tcp --dport 21 -j ACCEPT	 # Accepte le port 21 (FTP) en entrée.
bash-2.05b$ iptables -A OUPUT -p tcp -m multiport --dport 6667,6668 -j DROP # Refuse les ports 6667 et 6668 en sortie (impossible de se connecter à IRC).
bash-2.05b$ iptables -A INPUT -p icmp --icmp-type 8 -j DROP	# Refuse les icmp echo-request

3.4.3 Options de correspondance

l'option -m marche sur le même principe que l'option -p. Elle doit être suivi d'une et une seule option : mac , state, limit ou multiport vu ci-dessus.

--mac-source : spécifie une adresse MAC à traiter

Exemple :

bash-2.05b$ iptables -A INPUT -m mac --mac-source 00-08-6C-E0-1B-BE -j DROP	# Interdit l'adresse MAC 00-08-6C-E0-1B-BE en entrée.

--state : spécifie l'état du paquet à traiter dont voici les état possibles :

  • NEW : Paquet demandant une nouvelle connexion (SYN)
  • ESTABLISHED : Paquet associé à une connexion déjà établie (ACK)
  • RELATED : Nouvelle connexion liée (FTP ou message d'erreur envoyer par ICMP)
  • INVALID : Connexion inconnue.

Exemple :

bash-2.05b$ iptables -A INPUT -p tcp -m state --state NEW -j DROP		#Refuse les nouvelles connetions entrante.

--limit : Spécifie une limite par rapport au temps.

Les valeurs temporels utilisable sont :

  • /second
  • /minute
  • /hour
  • /day

Exemple :

bash-2.05b$ iptables -A INPUT -p icmp -m limit --limit 3/second -J ACCEPT	# accpetera 3 icmp par seconde, le 4eme sera rejeter.

3.5 NAT (Network Address Translation)

Table NAT : Table utilisée pour la translation d'adresse ou de port.

Il y a 2 types de chaînes :

  • PREROUTING : paquets entrants sur le firewall.
  • POSTROUTING : paquets sortants du firewall.

3.5.1 Les cibles pour NAT

MASQUERADE (uniquement POSTROUTING)

La passerelle (la machine où est installée iptables) transforme les paquets sortants pour donner l'illusion qu'ils sortent de celle-ci par un port alloué dynamiquement ; lorsque la passerelle reçoit une réponse (d'Internet par exemple) sur ce port, elle utilise une table de correspondance entre le port et les machines du réseau local qu'elle gère pour lui faire suivre le paquet.

Exemple :

bash-2.05b$ iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE		# tout les paquet sortant par eth0 auront l'ip de eth0.

DNAT (uniquement PREROUTING)

Permet de modifier l'adresse de destination du paquet.

--to-destination : Utiliser avec la cible DNAT, permet de spécifier l'adresse de destination de la translation.

Exemple :

bash-2.05b$ iptables -t nat -A PREROUTING -p tcp --dport 5660 -j DNAT --to-destination 192.168.0.7:5660
Route les paquets tcp à destination du port 5660 vers l'adresse privée 192.168.0.7 (port 5660 également).

SNAT (uniquement POSTOUTING)

Permet de modifier l'adresse source du paquet.

--to-source : Utiliser avec la cible SNAT, permet de spécifier l'adresse source de la translation.

S'utilise de la même manière que "--to-destination".

4. Options noyau

Il est possible de changer des options du noyau via le pseudo-systeme de fichier : /proc. iptables est composé en 2 partie. Une partie d'administration par ligne de commande comme on vient de le voir, mais la plus grosse partie du travail se fait au niveau du le noyau.

Comment modifier une option ? Sous Linux, tout est fichier, il faudra seulement changer la valeur de ce fichier. 1 actif, 0 inactif.

echo "1" > /proc/sys/net/ipv4/ip_forward

Pourquoi utiliser les options noyaux à la place de règles iptables ? Tous simplement car cela demande moins de ressources. Lorsqu'un paquet arrive, il est d'abord analysé par le noyau puis il passe par toutes les règles de iptables. Plus tôt un paquet non désiré est rejeté moins de ressources seront utilisées.

L'inconvénient, c'est que les options du noyau ne sont pas aussi précises que pourrait l'être des règles iptables.

4.1 Options relatives aux ICMP

/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts :

Ignore les ping envoyés par broadcasts ou multicasts. Souvent utilisé pour eviter les "Ping Scanning"

/proc/sys/net/ipv4/icmp_echo_ignore_all :

Ignore tous les ping envoyés par broadcasts, multicasts ou ceux destiné à la machine directement.

/proc/sys/net/ipv4/conf/all/accept_redirects :

Accepte la redirection de ping dans le cas d'un routeur ou d'une passerelle.

4.2 Options relatives aux IP

/proc/sys/net/ipv4/ip_forward :

Cette option est indispensable pour faire passerelle.n Elle autorise le transfert de paquet entre 2 interfaces.

/proc/sys/net/ipv4/conf/all/rp_filter :

Empêche l' "ip spoofing". Le noyau vérifie que la concordance IP/Interface soit cohérente. Par exemple une IP privée ne sera pas accepter si elle vient par l'interface connecter à internet.

Par civ Dernière modification 22/03/2007 15:53
Navigation
Actualités
16/05/2008 Linux intégré sur les cartes mères Asus
15/05/2008 L'association culture-libre est née
14/05/2008 Peerfuse 0.0 - Le système de fichier distribué pair-à-pair
14/05/2008 Sortie de Fedora 9
10/05/2008 Vidéo - Richard Stallman
Plus d'actualités...
Articles
21/02/2008 GNU / Screen
03/09/2007 The Linux File System Encryption API
11/08/2007 Surveillance réseau avec Snort
10/08/2007 Première approche de Xen
10/08/2007 Première approche sur LVM
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 :
Cours Module 3 Chapitre 04 - Firewalling