Vous êtes sur la page 1sur 37

www.udivers.

com
IPTABLES
FIREWALL
Plan

Présentation générale

Firewall avec IPChains

Firewall avec IPTables


(NetFilter)
Partie 1

Présentation générale

Firewall avec IPChains

Firewall avec IPTables


(NetFilter)
Définition théorique
Firewall
Logiciel de contrôle d’accès au niveau du
réseau

Divers niveaux de filtrage


Liaison (adresse MAC, …)
Réseau (en têtes IP, IPX, … et type/code ICMP)
Transport (ports TCP/UDP)
Filtrage adaptatif (« statefull inspection ») ou
dynamique
Session (« circuit level gateway », SOCKS)
Application (relais applicatifs – « application
proxys »)….
Définition pratique
Mais pratiquement :
Fonctionnalité principale : filtrage IP
Fonctionnalité supplémentaire : traduction d’adresses et de
ports

Filtrage IP
Idée : contrôler les paquets IP autorisés à atteindre un hôte
Intérêt : sécuriser un hôte de façon globale (au niveau
réseau)

Traduction d’adresses et de ports


Idée : réécrire les en-têtes des paquets
Intérêt : faire face à la pénurie d’adresses routables sur
l’Internet.
Avantages des firewalls
Gestion de la sécurité concentrée

Configuration peu sensible à l’échelle du


périmètre de sécurité

Capacité d’audit du trafic réseau

Traces supplémentaires pour certains incidents

Concentrer la maintenance à quelques


heures/jours sur une ou plusieurs machines
plutôt qu’un parc
Inconvénients des firewalls
Goulet d’étranglement réseau

Point névralgique de l’architecture de


sécurité

Complexe :
Connaissance nécessaire des protocoles
filtrés (TCP/IP, HTTP, … mais aussi FTP, SQL,
…)

Compréhension du fonctionnement du pare-


feu (interface entre les divers niveaux de
filtrage, traduction d’adresse…)
Firewalls libres
Netfilter
Filtre de paquets du noyau Linux 2.4
Successeur d’IPChains (Linux 2.2)
Développé par Paul Russell

IP Filter
Filtre de paquets fonctionnant sous Unix libres et
propriétaires
Intégré dans FreeBSD et NetBSD
Conçu et développé par Darren Reed

Packet Filter
Filtre de paquets dans OpenBSD (à partir de la version 3.0)
Conçu par Daniel Hartmeier
Filtrage IP standard
Critères
Interface réseau : entrée ou sortie
Adresses IP (source et destination) : hôte ou sous-réseau
Champs de l’en-tête IP :
Fragmentation
TOS et TTL
Options IP
Protocoles de niveau 4 : TCP, UDP et ICMP
Ports source et destination (TCP et UDP)
Drapeaux (TCP)
Types et codes (ICMP)

Actions
Laisser passer (ACCEPT)
Bloquer (DENY ou DROP)
Rejeter (REJECT) => message ICMP ou segment TCP avec
drapeau RST
Filtrage à états (statefull)
Principe :
Filtrage dynamique, en conservant des états pour les
connexions en cours
Seuls des paquets correspondants à un état pré-existant
sont acceptés

Intérêt :
Simplifie l’écriture des règles de filtrage
Améliore la sécurité, en n’autorisant que le trafic
effectivement licite

Protocoles :
TCP
Segments appartenant à une connexion TCP en cours
UDP
Datagrammes en réponse à un datagramme UDP émis
Messages ICMP d’erreur
ICMP
Messages ICMP en réponse à un message ICMP émis
Filtrage à états : mise en
oeuvre
Mise en œuvre :
Création d’un état lors de la traversée du premier paquet
Mémorisation de paramètres identifiant de façon unique une
connexion
Validation des paquets par comparaison des états courants
Expiration des états après un temps paramétrable

Paramètres conservés :
Adresses source et destination
Ports source et destination
Type, code, identifiant et numéro de séquence (ICMP)

TCP :
S’assurer que des segments TCP font partie d’une connexion en
cours est complexe
Real Stateful TCP Packet Filtering in IPFilter
=> http://home.iae.nl/users/guido/papers/tcp_filtering.ps.gz
Traduction d’adresses et de
ports (NAT)
Traduction d’adresses
Uni-directionnelle
Traduction en sortie d’adresses (typiquement) privées en adresse(s)
publique(s)
Possibilité de changer le port source
Bi-directionnelle
Traduction d’une adresse (typiquement) publique en une phrase
(typiquement) privée et réciproquement

Redirection de ports
Redirection d’un port en entrée vers un autre, en modifiant
l’adresse de destination ou non

Mise en oeuvre :
Fonctionnalités présentes dans Netfilter, IPFilter, Packet Filter
Ne sont pas détaillées ici
Partie 2

Présentation générale

Firewall avec IPChains

Firewall avec IPTables


(NetFilter)
FireWall avec IP-Chains

Possibilités

Principe de base

Options

Mise en service
IPChains : possibilités
(1/2)
ipchains est l'un des systèmes de filtrage utilisable
sur les noyaux 2.2

Il est dérivé de ipfw un système présent sur


d'autres Unix

Il est très puissant :


Comptage de traffic
Blocage de traffic non souhaité
Masquage d'adresses
Détournement vers un service local
IPChains : possibilités
(2/2)

Chaque règle sélectionne les paquets sur les critères :


Adresse IP source du paquet
Adresse IP destination du paquet
Type de protocole (TCP, UDP, ICMP)
Port de protocle adressé (source, destination)
Interface IP traversée
Type de paquet (connexion, transfert)

Chaque règle permet les actions suivantes :


Autorisation du paquet
Destruction du paquet
Rejet du paquet avec message d'erreur
Détournement du paquet sur un serveur local
IPChains : principe de
base

ipchains s'organise par chaînes


Une chaîne est un ensemble de règles, qui déterminent ce qui
devrait arriver à un certain type de paquet réseau.
Il existe 3 chaînes fixes :
Input : pour les paquets arrivant
Forward : pour les paquets redirigés vers un autre hôte
Output : pour les paquets transmis par la filtre
Les règles de chaque chaîne dépendent de leur ordre. Quand
un paquet arrive, il est comparé aux règles de la chaîne
pertinente, depuis la première jusqu’à la dernière.

Ipchains CMD [chain] [rule-spec|num] [options]

=>Ex : ipchains –A input –i eth0 -s 192.168.0.1 –p TCP –j DENY


IPChains : options
Cibles (option –j => paquet envoyé sur cible) :
ACCEPT
DENY
REJECT (=> icmp)
MASQ (option CONFIG_IP_MASQUERADE nécessaire)
Commandes :
-A (= ajouter)
-D (= supprimer)
-R (= remplacer)
-C (= vérifier)
Options :
-p [!] protocol =>icmp, tcp, udp, all
-s [!] addr ([!] port) => adresse source (-d pour destination)
-i [!] interface
-j target => s’il y a correspondance, paquet envoyé vers cette cible
IPChains : mise en service

Un support noyau est obligatoire (présent de base


maintenant)
Il faut insérer des options :
"Network firewalls" ( CONFIG_FIREWALL=y )
"IP: firewalling" ( CONFIG_IP_FIREWALL=y )
En standard sur noyaux 2.1.x et 2.2.x

Les règles peuvent être éditées dynamiquement


Il faut sauvegarder une version de filtrage
Il faut installer la version sauvegardée au boot
Ne pas oublier :
De mettre les filtres avant d'activer les interfaces réseau
De mettre les filtres avant d'activer le routage de paquets IP
Partie 3

Présentation générale

Firewall avec IPChains

Firewall avec IPTables


(NetFilter)
FireWall avec IP-Tables

Définition

IPChains vs IPTables

Principe de base

Options

Nouveauté

Exemple
Définition:
IPTables est un outil Linux
(exclusivement) pour gérer le pare-feu qui
est intégré au noyau Linux 2.4 (et
supérieur). L'architecture du noyau pour le
système de pare-feu s'appelle 'netfilter'.
Netfilter a de très nombreuses
fonctionnalités: filtrage de paquets, suivi
de connexions, NAT1, ....
Le principe de fonctionnement est
simple, lorsque la carte réseau recoit un
paquet celui-ci est transmis à la partie
netfilter du noyau. Netfilter va ensuite
étudier ce paquet (les entêtes et le
contenu) et en se basant sur des règles
que l'administrateur aura défini, il va
choisir de laisser passer le paquet intact,
de modfier ce paquet, de le transmettre à
IPTables vs IPChains

iptables est l'un des systèmes de filtrage utilisable


sur les noyaux 2.4 (et les dernières versions du
noyau 2.3)

Il est une évolution de la commande ipchains afin de


clarifier certains points (comme le forwarding entre
interfaces).

Il incorpore les fonctionnalités de différentes


commandes issues de ipchains et ipfwadm =>
regroupe toutes les fonctionnalités Linux relatives au
filtrage de paquets.
IPTables : principe de base
iptables s'organise par tables
Chaque table contient une série de chaînes de règles.
Il existe 3 tables principales :
Filtre :correspond aux notions de filtrage réseaux (accepter/refuser un
paquet) contient les chaînes INPUT, FORWARD et OUTPUT (table par défaut)
NAT : correspond à des fonctions de routage (pour monter une passerelle
par exemple) s’occupe de la conversion d’adresse de réseau. Contient les
chaînes PREROUTING, OUTPUT et POSTROUTING.
Mangle : est utilisée pour modfier les paquets permet une modification des
paquets à la volée. Contient les chaînes PREROUTING et OUTPUT.
Les règles de chaque chaîne dépendent de leur ordre. Quand
un paquet arrive, il est comparé aux règles de la chaîne
pertinente appartenant à la table pertinente, depuis la première
jusqu’à la dernière.

iptables [-t table] CMD [chain] [rule-spec|num] [options]


=>Ex : iptables –t filter –A input –i eth0 -s 192.168.0.1 –p TCP –j
DENY
Filtrage de ports

Quand un paquet arrive (par la carte réseau par exemple), le noyau


regarde
la destination de ce paquet : c'est appelé le routage.
Si ce paquet est destiné à cette machine, le paquet passe dans la chaine
INPUT. les processus qui attendent le paquet le recevront.
Autrement, si le noyau n'a pas le forwarding autorisé (machine qui n'est
pas
configurée en routeur), ou qu'il ne sait pas comment forwarder le
paquet, le
paquet est supprimé.
Si le forwarding est autorisé et que le paquet est destiné à un autre
réseau,
le paquet va directement à la chaine FORWARD. S'il est accepté, il sera
Chacune de ces chaînes peut donner plusieurs
réponses possibles pour paquet :
ACCEPT : le paquet est accepté
DROP : le paquet est refusé , on l'efface et on ne
répond rien
REJECT : le paquet est refusé et on signale le rejet
à l'expéditeur
Chaque chaîne possède une règle par défaut
policy qui définit si l'on accepte ou refuse les
paquets par défaut. Par défaut, les policy sont à
ACCEPT.
Nous verrons par la suite que l'administrateur
peut créer des chaînes personnalisées en plus des
3 chaînes par défaut qui lui permettent
d'organiser ses règles de filtrage de manière plus
propre et optimisée (lorsqu'on a plusieurs milliers
des règles, c'est vraiment très utile).
IPTables : options
Cibles (option –j => paquet envoyé sur cible) :
Cibles de ipchains…
SNAT (=> adresse source convertie => dans chaîne POSTROUTING de table
NAT)
DNAT (=> adresse dest. Convertie => dans chaîne PREROUTING de table NAT)
LOG (nécessité d’avoir chargé le module concerné dans le noyau)
Commandes :
Commandes de ipchains…
-N (--new-chain), -X (--delete-chain)
-F (--flush) => supprime toutes les règles de la chaîne et de la table concernée
Options :
Options de ipchains…
-i [!] interface =>spécifie l’interface de réception => chaînes INPUT, FORWARD
et PREROUTING
-o [!] interface =>spécifie l’interface d’expédition => chaînes OUTPUT,
FORWARD et POSTROUTING
[!] –syn =>spécifie que cette règle ne devrait satisfaire que des paquets TCP
que s’ils initient la connexion
IPTables : nouveauté
Capacité de créer des règles de comparaison fondées sur les états
des paquets => due au module state

Syntaxe : iptables –m state –state [!] [state, state,…]

Etats possibles :
NEW : compare les paquets n’appartenant à aucune connexion en cours
ESTABLISHED : compare les paquets appartenant à une connexion déjà ouverte
RELATED : compare les paquets qui appartiennent à une autre connexion, par
exemple les messages ICMP d’erreur, ou le trafic lié au fonctionnement d’un
protocole applicatif (ftp data => modes passif ou actif)…
INVALID : compare les paquets qui n’ont aucun sens dans le contexte de la
connexion existante, ou ceux qui n’ont pu être reçus pour une raison quelconque.
IPTables :
exemple
DEMONSTRATIONS
1er exemple:

Protection de la machine locale :


Nous allons maintenant voir comment mettre en place
un firewall sur la machine locale.
Executez la commande :
# iptables -L -v
(-L == liste les règles et -v demande le mode 'verbeux')
Vous devriez voir quelque chose qui ressemble à :
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
Pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Vous voyez donc pour chaque chaîne, la policy


(comportement par défaut), le nombre de paquets qui a
traversé les règles de la chaîne et le nombre d'octets
correspondants.
DEMONSTRATIONS
Nous allons maintenant interdire les connexions
sur le port 80, pour cela , il faut interdire les
paquets dans la chaîne INPUT sur le port 80 :
# iptables -A INPUT -p tcp --dport 80 -j DROP
Cette commande signife :
-A INPUT => ajoute en bas de la liste des règles
de la chaîne INPUT
-p tcp => pour les paquets qui utilisent les
protocole TCP
dport => pour les paquets qui sont à destination
du port 80
-j DROP => l'action : DROP les paquets (on e ace
les paquets), le -j peut également servir à
rediriger sur une autre chaîne et/ou à
effectuer différentes actions
DEMONSTRATIONS
2éme exemple:
Nous allons maintenant autoriser uniquement un adresse qlq
à se connecter sur votre machine a travers port 80.
Pour cela, nous allons insérer une règle pour cet adresse
avant la règle qui DROP les paquets.
Il est important de la placer avant, car les règles sont
exécutées dans l'ordre ou elles ont été placées dans la liste,
donc si la première règle rejette le paquet, celui-ci
n'atteindra jamais la 2ème règle qui l'autorise. Gardez bien
toujours en mémoire que l'ordre compte.
On récupérez l'adresse IP puis exécutez :
# iptables -I INPUT 1 -p tcp --dport 22 -s adresse_ip -j
ACCEPT
le '-I INPUT 1' signife insère en première position dans la
liste.
l'option -s permet de choisir la source des paquets, on
choisit donc les paquets provenant de la machine voisine
(on peut également spécifer des réseaux entiers au format
193.54.241.0/24 par exemple).
DEMONSTRATIONS
Essayez de vous connecter sur votre machine
depuis la machine dont l’adresse IP est autorisé!!,
et depuis une autre machine!
N'hésitez pas à utiliser la commande 'iptables -L
-v' pour voir les compteurs de paquets qui
évoluent en fonction de vos tests.
(NB: vous pouvez utiliser la commande
'iptables -Z' pour remettre à zéro les compteurs
de paquets et d'octets)

Nous avons vu comment ajouter et insérer des


règles, on peut aussi les effacer en utilisant
l'option -D, par exemple en faisant :
# iptables -D INPUT 1
vous effacez la première règle de la chaîne
INPUT.
Il peut être pratique de voir les numéros de
chaque règle lorsqu'on liste les règles, cela se fait
avec l'option line-numbers :
DEMONSTRATIONS
3éme exemple:
Imaginons par exemple que l'on veuille gérer
plusieurs règles pour contrôler l'accès au service
web. On pourrait procéder de la manière suivante
:
1 - Création d'une chaîne spécifque
# iptables -N web
2 - On indique à la chaîne INPUT que tout ce
qui concerne web doit être transmis à cette
nouvelle chaîne
# iptables -A INPUT -p tcp --dport 80 -j web
3 - On rajoute nos règles de ltrages dans la chaîne
web
- on accepte que le voisin se connecte
# iptables -A ssh -s ip_machine_du_voisin -j
ACCEPT
DEMONSTRATIONS
4éme exemple:
Nous allons essayer de créer une chaîne de toutes les machines de la
salle
et d'avoir une seule machine qui se connecte directement sur le routeur
pour la connexion internet.
La machine csci1 sera la seule machine qui se connectera
directement au routeur.

L'objectif est d'obtenir une chaîne de machines de telle sorte que csci4
traverse csci3 puis csci2 puis csci1 avant que la connexion soit transmise
au routeur et que de l'extérieur seule csci1 soit visible.
Chaque machine sera donc une passerelle pour la machine voisine.
L'objectif est que tout le monde voit l'IP de csci1 sur la page http ://www-
fourier.ujf-grenoble.fr/~mmarcha/ip.php de son navigateur.
Commencez par tous redémarrer vos machines (pour nettoyer tous les
tests précédents).
- sur la machine csci1 :
Activez le forwarding puis activez la fonction de masquerading pour tout
le réseau :
# iptables -t nat -A POSTROUTING -s 193.54.241.0/24 -j
MASQUERADE
Rien d'autre à faire à votre niveau.
- Toutes les autres machines : Activez le forwarding puis activez la
fonction de masquerading.
Tuez ensuite le client DHCP qui prend les infos de connexion sur le
serveur DHCP
# killall dhclient
pour qu'il ne modfie pas les paramètres que vous allez mettre
DEMONSTRATIONS
5éme exemple:

Le firewall et le réseau interne peuvent tout faire.


Les adresses du réseau interne sont masquées pour sortir vers Internet.
IFACE=eth0
# Masque en sortie l’interface eth0
iptables -t nat -A POSTROUTING -o $IFACE -j MASQUERADE
# Crée une chaîne qui bloque tout tentative de connexion de l’extérieur
iptables -N block
iptables -A block -m state --state INVALID -j DROP
iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A block -m state --state NEW -i ! $IFACE -p icmp --icmp-type echo-request -j ACCEPT
iptables -A block -m state --state NEW -i ! $IFACE -p udp -j ACCEPT
iptables -A block -m state --state NEW -i ! $IFACE -p tcp --syn -j ACCEPT
iptables -A block -i $IFACE -m limit --limit 3/s -j LOG --log-prefix "Bad packet from $IFACE:"
iptables -A block -i ! $IFACE -m limit --limit 3/s -j LOG --log-prefix "Bad packet not from $IFACE: "  
iptables -A block -j DROP
# Fais correspondre les chaînes INPUT et FORWARD avec cette chaîne
iptables -A INPUT -j block
iptables -A FORWARD -j block
# Active le forwarding IP : echo 1 > /proc/sys/net/ipv4/ip_forward
Je vous remercie
pour votre attention
Questions!
!?

Visite le site
www.udivers.com