ENSA de Tanger
Département Math-Info
Module GSTR52
Responsable : S. Lazaar
2014-2015
TP 1. Sécurité des systèmes d'information
Conception d'un pare feu basé sur Netfilter de linux
Objectifs : Ce TP propose la mise en place d’un Firewall Netfilter sur une machine Linux afin de
sécuriser les segments d’un réseau en mettant en place la politique de sécurité nécessaire.
Pour ce faire, nous procédons par les étapes suivantes :
- Mise en place des différents segments du réseau ;
- Configuration des paramètres réseaux des trois machines virtuelles local, distant et
firewall ;
- Réalisation d’un ensemble de tests avec la configuration par défaut du firewall,
notamment des tests des protocoles ICMP, FTP et HTTP ;
- Mise en place de la politique de sécurité au niveau du Firewall Iptables en
configurant les règles d’accès.
Outils de travail :
Afin de réaliser ce travail, on se sert de la virtualisation pour avoir différents environnements de
travail, pour cela on installe 3 machines virtuelles avec un système d’exploitation (Redhat par
exemple) et tous les tests seront faits par la suite sur les 3 machines.
1
Présentation de Netfilter
Netfilter est un filtre de paquets intégré dans le noyau Linux. Il est composé de tables qui indi-
quent les traitements qui doivent être appliqués sur les paquets passant par les interfaces réseau.
La commande "iptables" sert à manipuler ces tables et donc à configurer Netfilter.
Netfilter permet essentiellement d'effectuer deux types de traitements différents :
le filtrage, géré par la table filter (table par défaut), qui permet d'accepter ou de rejeter des
paquets en fonction de la politique de sécurité de la machine
la translation d'adresses, (NAT) qui permet de modifier l'adresse source ou destination des
paquets, généralement pour partager des adresses IP entre plusieurs machines, et qui est
gérée par la table nat.
Netfilter possède par ailleurs cinq points d'ancrage (hooks) au niveau de la pile IP :
PREROUTING, qui intercepte tous les paquets entrants par les interfaces ;
INPUT, en coupure des paquets destinés à la machine locale ;
FORWARD, en coupure du trafic à router d'une interface vers une autre ;
OUTPUT, en coupure des paquets émis depuis la machine locale ;
POSTROUTING, qui intercepte tous les paquets sur le point de sortir par une interface.
Netfilter s'insère parfaitement dans la pile TCP/IP du noyau. Il y a une implémentation cohérente de
la NAT.
Les grandes Fonctionnalités :
* Gestion dynamique sur les ports
* Analyse des numéros de séquence permettant d'éviter les TCP session hijacking.
* Anti-Spoofing (par "reverse route lookups").
* La modification des flags à la volée (= mangling)
* Limitation du nombre de paquets / sec (évite les dos)
Le fonctionnement des trois tables netfilter
* La table de filtrage Filter est composée des règles INPUT, OUTPUT , FORWARD
* la table de translation d'adresse avec les règles : PREROUTING, OUTPUT,
POSTROUTING
* mangle pour altérer les paquets sortants
Utilisation de iptables
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X ( shoot les règles types )
Pour celui qui souhaite tout interdire par défaut, les règles sont simples :
iptables -P INPUT DROP
iptables -P OUTPUT DROP
2
iptables -P FORWARD DROP
ou bien au contraire vous êtes super confiant
iptables -A OUTPUT -j ACCEPT
A noter que la commande DROP va ignorer le paquet, alors que la commande REJECT va signaler
que la communication est impossible. Sachez aussi que selon vos besoins vous aurez besoin de
charger des modules. Par conséquent placez ces lignes au début de votre script de firewall.
modprobe iptable_nat
modprobe iptable_filter
Voici un exemple concret d'un firewall possédant trois interfaces:
* eth0 : l'interface externe connectée au web
* eth1: l'interface de la DMZ (la zone où se trouve les serveurs accessibles depuis Internet,
* eth2: Relie le firewall au réseau interne.
rso = réseau interne
dmz = la DMZ
web = Internet
fw = firewall
Les règles Netfilter
iptables -N rso-web (rso interne > web)
iptables -N rso-dmz (rso interne > dmz)
iptables -N rso-fw (rso interne > firewall)
iptables -N dmz-rso (dmz > rso interne)
iptables -N dmz-web (dmz > web)
iptables -N dmz-fw (dmz >firewall)
iptables -N web-dmz (web > dmz)
iptables -N web-fw (web > firewall)
Toute communication TCP doit commencer par un paquet comportant le flag SYN et uniquement
celui-ci, si ce n'est pas le cas, on rejette la connexion. Enfin, on trie les connexions entrantes selon
les interfaces.
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -p TCP --tcp-flags ! ALL SYN -j DROP
iptables -A INPUT -i eth0 -j web-fw
iptables -A INPUT -i eth1 -j dmz-fw
iptables -A INPUT -i eth2 -j rso-fw
iptables -A INPUT -j DROP
Logger les tentatives d'intrusion et les scans de ports
Pour par exemple enregistrer les scans de ports TCP, il suffit d'ajouter la ligne suivante avant la
règle rejetant le paquet. (Notez tout de même que cette fonctionnalité peut ralentir votre machine)
3
iptables -A INPUT --state NEW -p TCP --tcp-flags ! ALL SYN -m limit --limit 3/s -j LOG --log-
prefix "BAD INPUT "
Chaque ligne du log sera préfixée par BAD INPUT. Aussi, on limite le temps du packet et c'est
complètement paramétrable.
Exemples de filtrage avec une dmz qui contient
- un relais de messagerie sur 192.168.1.1
- un serveur web sur 192.168.1.2
- un cache Internet sur 192.168.1.3 port 3128
- Le serveur de messagerie interne sur 10.0.0.1. Depuis Internet, seuls les serveurs de messagerie et
le serveur web sont joignables.
iptables -A web-dmz -p TCP -d 192.168.1.1 --dport smtp -j ACCEPT
iptables -A web-dmz -p TCP -d 192.168.1.2 --dport http -j ACCEPT
Maintenant on limite les connexions du réseau interne > DMZ mais on va autoriser le ping.
iptables -A rso-dmz -p TCP -d 192.168.1.1 --dport smtp -j ACCEPT
iptables -A rso-dmz -p TCP -d 192.168.1.2 --dport http -j ACCEPT
iptables -A rso-dmz -p TCP -d 192.168.1.3 --dport squid -j ACCEPT
iptables -A rso-dmz -p ICMP --icmp-type echo-request -m limit --limit 3/s -j ACCEPT
Communication messagerie > serveur de mail
iptables -A dmz-rso -p TCP -s 192.168.1.1 -d 10.0.0.1 --dport smtp -j ACCEPT
Maintenant passons aux communications DMZ> Web.
* La passerelle de mail peut envoyer des messages
* Le proxy peut utiliser les ports 80 et 443
* Toutes les machines de la DMZ peuvent faire des requêtes DNS
iptables -A dmz-web -p TCP -s 192.168.1.1 --dport smtp -j ACCEPT
iptables -A dmz-web -p TCP -s 192.168.1.3 --dport http -j ACCEPT
iptables -A dmz-web -p TCP -s 192.168.1.3 --dport https -j ACCEPT
iptables -A dmz-web -p TCP --dport domain -j ACCEPT
iptables -A dmz-web -p UDP --dport domain -j ACCEPT
Références : http://www.blocus-zone.com, http://www.formation.ssi.gouv.fr/