Académique Documents
Professionnel Documents
Culture Documents
iptables - introduction
420-T10-SU
Juillet 2018
2|Page
iptables
Le terme iptables est utilisé pour définir le pare-feu du noyau Linux, une partie du projet Netfilter ainsi que les outils
qu'un administrateur peut utiliser pour configurer ce pare-feu. Le framework Netfilter fournit un ensemble de fonctions
utilisées par iptables pour connecter des fonctions qui effectuent des opérations sur des paquets.
La structure d'iptables est basée sur des tables, des chaînes et des règles
La table filter
La table de filtrage est la table la plus utilisée dans iptables. C'est dans cette table que les décisions de laisser passer un
paquet ou de le bloquer. Avec la commande iptables, si vous ne spécifiez pas la table pour la règle, elle sera appliquée à
la table filter par défaut.
IMPORTANT : iptables est sensible aux majuscules et minuscules, il faut vraiment porter une attention à la syntaxe
Les chaines
Les chaines servent à regrouper les règles en fonction des actions à prendre sur le trafic réseau. Si un paquet
INPUT
La chaîne INPUT est utilisée pour tout paquet entrant dans le système, comme pour Windows, est-ce qu'on
autorise un protocole à parler à la machine.
OUTPUT
La chaîne OUTPUT est pour tout paquet quittant le système. Est-ce qu'on autorise ou non la machine à répondre
à une requête.
FORWARD
Et la chaîne FORWARD est pour les paquets qui sont transmis (routés) à travers le système. Est-ce qu'on autorise
la machine à laisser passer un paquet d'une source vers sa destination. Il faut créer une règle par direction dans
la chaine FORWARD. C'est chain ne peut être utilisée que si vous avez deux cartes réseaux ou plus.
3|Page
La table filter vient avec 3 politiques de sécurité (policy rules). Le but de ces politiques est d'appliquer la règle par défaut
dans le cas où aucune chaine ne peut appliquer une règle sur un paquet.
ACCEPT
La valeur par défaut de la règle par défaut est en effet de tout (ACCEPT). Ce qui rend le firewall non sécuritaire
DROP
Un paquet qui est refusé (DROP) ne continuera pas dans aucune chaîne, et aucun avertissement ou erreur ne
sera envoyée.
Exemple de configuration pour iptables. Comme vous pouvez constater, les politiques par défaut sont de toujours
accepter les paquets.
La table nat
La table nat a pour fonction de router le trafic mais aussi de modifie l'adresse IP source et/ou de cible dans les paquets.
Elle est généralement utilisée pour connecter plusieurs ordinateurs dans une plage d'adresses privée avec l'Internet
(public) et permet de cacher les adresses IP internes
Les chaines
Les chaines servent à regrouper les règles en fonction de la redirection à prendre sur le trafic réseau. La table nat vient
aussi avec des politiques par défaut et devraient être laissées à ACCEPT. Au niveau de la table nat, on veut contrôler la
direction du trafic, pas les autorisations.
PREROUTING
Les règles de cette chaîne s'appliquent aux paquets lorsqu'ils arrivent sur l'interface réseau.
POSTROUTING
La règle dans cette chaîne s'applique aux paquets losrqu'ils quittent l'interface réseau.
INPUT
Les règles de cette chaîne s'appliquent aux paquets avant qu'ils ne soient donnés à un processus local
4|Page
OUTPUT
Les règles s'appliquent ici aux paquets après qu'ils ont été produits par un processus
Si on peut simplifier le travail de configuration que vous aurez à faire, lorsque vous allez configurer un NAT pour donner
accès à Internet à vos postes de travail ou serveurs, vous allez ajouter une règle à la chaine POSTROUTING et si vous
publiez des serveurs sur Internet, par exemple exposer un serveur web, vous aller créer une règle dans la chaine
PREROUTING.
Les politiques de sécurité par défaut pour la table nat sont aussi à ACCEPT
Il est à noter que la table ci-dessus ne contient pas de règles, alors même si les politiques par défaut sont à ACCEPT, le
paquet est transféré à la chaine suivante
Il est important de les laisser à ACCEPT sur le firewall car votre réseau se retrouve caché derrière le firewall, donc le
prerouting ou le postrouting doit se faire normalement.
5|Page
La table mangle
La table mangle est utilisée pour modifier les en-têtes IP du paquet. Cette table peut également placer une "marque"
interne de noyau sur le paquet pour le traitement ultérieur dans d'autres tables et par d'autres outils réseaux. Nous
verrons cette table un peu plus tard avec snort.
Les chaines
La table mangle peut appliquer des règles aux cinq chaînes:
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
Les politiques de sécurité par défaut pour la table mangle sont aussi à ACCEPT
6|Page
La table raw
La table Raw est principalement utilisée pour marquer des paquets qui ne doivent pas être vérifiés par le système de
traçage de connexion (conntrack). Cette table ne sera pas utilisée durant le cours mais il est important de savoir qu'elle
existe.
Les chaines
Cette table utilise les chaines :
PREROUTING
OUTPUT
7|Page
La table security
Cette table est utilisée pour les règles de mise en réseau du contrôle d'accès obligatoire (MAC). Le contrôle d'accès
obligatoire est implémenté par les modules de sécurité Linux comme SELinux. La table de sécurité est appelée après la
table de filtrage, permettant à toutes les règles de contrôle d'accès discrétionnaire (DAC) dans la table de filtre de
prendre effet avant les règles MAC. Cette table ne sera pas utilisée durant le cours et il est aussi important de savoir
qu'elle existe aussi.
Les chaines
Cette table utilise les chaines :
INPUT
FORWARD
OUTPUT
Comme pour les autres tables, les politiques de sécurité par défaut doivent être à ACCEPT si vous n'utilisez pas la table
security
8|Page
Exemple de chaines avec les tables filter et nat
Dans le scénario, une requête doit être acheminée au serveur web qui se trouve derrière un firewall. Les tables et les
chaines ont été simplifiées pour la compréhension
Firewall:
La requête arrive au firewall, si la chaine PREROUTING de la table nat contient une règle pour rediriger le trafic vers
le serveur web, elle sera acheminée.
Comme la requête n'est pas pour le firewall, c'est la chaine FORWARD qui sera appliquée. Si le trafic est autorisé à
passer, elle sera acheminée au serveur web.
Serveur Web:
La requête arrive au serveur web. C'est la chaine INPUT de la table filter est appliquée, si le trafic est autorisé à être
donné au processus local, la requête sera donnée au serveur web.
Le serveur va renvoyer une réponse à la requête et cette réponse doit être autorisée dans la chaine OUTPUT
Firewall:
La réponse arrive au firewall, si elle est autorisée dans la chaine FORWARD, elle sera transféré à la chaine
POSTROUTING afin qu'elle puisse se rendre à la bonne destination
9|Page
Les options de commande pour iptables
iptables vient avec une commande du même nom qui permet à l'administrateur de supprimer, ajouter et gérer les règles
du firewall. Ces options permettent de dire à iptables ce qu'il faut faire avec la règle.
10 | P a g e
Enregistrer et restaurer la configuration
Commande Exemple Description
service iptables save /sbin/service iptables save Enregistrer la configuration dans le dossier /etc/sysconfig
iptables-save iptables-save Enregistrer la configuration dans le dossier /etc/sysconfig
Enregistrer la configuration dans le dossier /etc/sysconfig
iptables-save iptables-save > iptables_back
sous un autre nom
iptables-restore iptables-restore < iptables_back Restaurer une configuration enregistrée
Résumé
iptables est composé de 5 tables, soit :
raw
nat
filter
mangle
security
Chacune de ces tables joue un rôle précis pour iptables et sont toujours référés en minuscule
iptables utilise aussi jusqu'à 5 chaines dans les tables selon le besoin. Ces chaines sont :
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
Comme pour les tables, les chaines jouent un rôle bien précis dans iptables et contiennent les règles à appliquer selon la
situation. Elles sont toujours référées en majuscule.
11 | P a g e
Annexe A
Utiliser un script
Pour ce qui touche iptables, c'est possible de faire la gestion à l'aide d'un fichier script. Vous trouverez ci-dessous un
exemple de script.
Il est important de laisser les scripts dans le dossier de root où dans le dossier du compte qui va s'occuper de la gestion
de iptables. Pour les permissions, seulement le compte utilisateur devrait avoir les droits d'exécution. Si vous êtes plus
d'un admin qui doivent modifier iptables, dans ce cas il faut étendre la permission d'exécution au groupe. Mais jamais il
faut donner des permissions aux autres utilisateurs.
Voici un exemple pour changer les permissions sur un script nommé fw01.sh
Exemple de script qui permet d'ouvrir le port 22 pour une session SSH
#!/bin/bash
#nettoyage
iptables -F
iptables –X
#regles ssh
iptables -A INPUT –p tcp -–dport 22 –j ACCEPT
iptables -A OUTPUT -p tcp –-sport 22 –j ACCEPT
#Enregistrer la configuration
/sbin/service iptables save
iptables –F doit être fait avant iptables –X car cette dernière ne peut supprimer que les chaines personnalisées vides
iptables –F supprime toutes les règles de toutes les chaines de la table si une chaine n'est pas spécifiée
la ligne #!/bin/bash est importante car elle dit au système qu'elle interpréteur utiliser. Dans ce cas-ci, il s'agit de Bash.
12 | P a g e