Mon réseau d’entreprise
13.2 Le vieux Firewall : iptables
Le firewall permet prinicipalement de filtrer le trafic pour protéger des ordinateurs contre des attaques issues de l’extérieur. Linux dispose de deux versions du firewal : iptables et nftables. La première version est périmée et n’est plus utilisée dans des Linux récents. Néanmoins la commande iptables est compatible avec la version moderne. Elle est encore utilisée par de nombreux scripts et logiciels tiers, il est donc utile de la connaître.
La figure 13.1 permet de comprendre le fonctionnement du firewall.
Il y a deux tables : une table qui ne modifie pas le paquet et la table nat qui permet de mofifier les paquets. Quand un paquet arrive depuis l’extérieur, il arrive par une interface. Selon la destination du paquet, soit il devrait ressortir par une interface (la même ou une autre), soit il est à destination du routeur. Si la destination du paquet est le routeur, alors ce paquet va être évalué par la chaîne INPUT ; si la destination est distante, alors il sera évalué par la chaîne FORWARD.
Si le paquet est émis depuis le firewall, alors, c’est la chaîne OUTPUT qui sera évaluée.
La table nat permet de modifier le paquet. Soit par la chaîne PREROUTING qui modifie le paquet avant la décision de routage, soit par la chaîne POSTROUTING qui modifie le paquet après la décision de routage. La première chaîne permet ainsi de modifier la destination (adresse IP et/ou port TCP ou UDP). Cela permet ainsi d’atteindre un serveur qui ne dispose pas d’adresse publique. La seconde chaîne permet, par exemple, de modifier l’adresse source du paquet pour indiquer l’adresse publique du routeur et autoriser les adresses privées à aller sur Internet. Il s’agit de PAT : Port Adress Translation ou NAT : Network Adress Translation.
13.2.1 Politique de routage
Chaque chaîne peut définir une politique qui sera utilisée si aucune règle n’est exécutée. Les politiques sont soit ACCEPT soit DROP.
Les règles sont de la forme suivante :
iptables -A|I chaîne spécification ACTION
- A|I
-
Les règles peuvent être soit ajoutées après (-A) les règles existantes, soit avant (-I).
- chaîne
-
l’une des trois règles INPUT, FORWARD ou OUTPUT.
- spécification
-
un critère qui doit être respecté par le paquet pour que l’action soit effectuée.
- ACTION
-
Principalement ACCEPT, DROP ou REJECT.
Le comportement des actions est le suivant :
- ACCEPT
-
le paquet est accepté.
- REJECT
-
le paquet est refusé, un paquet ICMP d’erreur est envoyé à la source.
- DROP
-
Le paquet est refusé, aucune autre action n’est effectuée. Cela permet de ralentir la détection par un éventuel attaquant.
Les spécifications peuvent concerner :
- Adresse IP
-
source : -s 10.1.2.3 ou destination -d 10.2.4.5, avec un masque il est possible de spécifier une plage d’adresse : 10.33.0.0/16.
- protocole
-
en général TCP (-p tcp) ou UDP (-p udp)
- port
-
le port de destination (--dport 80) ou source (--sport 80)
- état
-
l’état de la connexion. Une règle particulièrement importante est la suivante :
-m state --state ESTABLISHED
Cette règle autorise toutes les réponses. Après qu’un premier paquet ait été autorisé, tous les autres seront acceptés.
