Vous êtes sur la page 1sur 12

Sécurité avancée

iptables - introduction
420-T10-SU

Équipe des professeurs – réseau et sécurité

Juillet 2018

255 Crémazie Est, bureau 100, Montréal (Québec) H2M 1M2


Téléphone : (514) 842-2426, télécopieur : (514) 842-2084
www.isi-mtl.com
Table des matières
iptables .................................................................................................................................................................................... 3
La table filter ....................................................................................................................................................................... 3
INPUT .............................................................................................................................................................................. 3
OUTPUT ........................................................................................................................................................................... 3
FORWARD ....................................................................................................................................................................... 3
La table nat.......................................................................................................................................................................... 4
PREROUTING ................................................................................................................................................................... 4
POSTROUTING................................................................................................................................................................. 4
INPUT .............................................................................................................................................................................. 4
OUTPUT ........................................................................................................................................................................... 5
La table mangle ................................................................................................................................................................... 6
La table raw ......................................................................................................................................................................... 7
La table security .................................................................................................................................................................. 8
Exemple de chaines avec les tables filter et nat ................................................................................................................. 9
Les options de commande pour iptables .............................................................................................................................. 10
Commandes de gestion de chaine .................................................................................................................................... 10
Commande de création / suppression de chaine personnalisée ...................................................................................... 10
Commande de création / suppression de chaine personnalisée ...................................................................................... 10
Commande pour afficher les informations d'un table ...................................................................................................... 10
Enregistrer et restaurer la configuration .......................................................................................................................... 11
Résumé.................................................................................................................................................................................. 11
Annexe A ............................................................................................................................................................................... 12
Utiliser un script ................................................................................................................................................................ 12

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.

Voici deux exemples où la règle sera appliquée à la table filter

iptables -A INPUT -i eth0 -d 192.168.100.5 -j DROP


iptables -t filter -A INPUT -i eth0 -d 192.168.100.5 -j DROP

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

Les chaines qui se retrouvent sous la table filter sont :

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.

Les politiques par défaut peuvent être :

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.

[root@localhost ~]# iptables -L


Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)


target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)


target prot opt source destination

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.

Les chaines qui se retrouvent sous la table nat sont :

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

[root@localhost ~]# iptables -t nat -L


Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)


target prot opt source destination

Chain OUTPUT (policy ACCEPT)


target prot opt source destination

Chain POSTROUTING (policy ACCEPT)


target prot opt source destination
[root@localhost ~]#

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

[root@localhost ~]# iptables -t nat -L


Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)


target prot opt source destination

Chain OUTPUT (policy ACCEPT)


target prot opt source destination

Chain POSTROUTING (policy ACCEPT)


target prot opt source destination
[root@localhost ~]#

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

[root@localhost ~]# iptables -t raw -L


Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)


target prot opt source destination

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

[root@localhost ~]# iptables -t security -L


Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)


target prot opt source destination

Chain OUTPUT (policy ACCEPT)


target prot opt source destination

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.

Commandes de gestion de chaine


Commande Exemple Description
Ajouter une règle à la fin d'une chaine. Cette règle sera
-A, --append iptables –A INPUT --dport 80 -j ACCEPT
comparée en dernier
iptables –D INPUT --dport80 –j ACCEPT
Supprimer une règle dans une chaine. Il faut soit spécifier la
-D, --delete ou
iptables –D INPUT 3 règle complète ou en indiquant le numéro de la règle
-R, --replace iptables –R INPUT 3 --dport 443 -j ACCEPT Remplacer la règle spécifiée par une nouvelle règle
Insérer la règle à l'emplacement indiquée. La règle initiale
-I, --insert iptables –I INPUT 2 --dport 80 –j ACCEPT qui se trouvait à cette position descend d'une position dans
la liste
-F, --flush iptables –F INPUT Supprimer toutes les règles que la chaine spécifiée contient
-Z, --zero iptables –Z INPUT Remettre les compteurs de la chaine à zéro

Commande de création / suppression de chaine personnalisée


Commande Exemple Description
Créer une nouvelle chaine personnalisée. Dans l'exemple la
-N, --new-chain iptables –N PERMIT nouvelle chaine va se nommer PERMIT. Vous pouvez le
nom que vous voulez
Supprimer une chaine personnalisée. La chaine doit être
vide avant de pouvoir la supprimer. Si vous ne spécifier pas
-X, --delete-chain iptables –X PERMIT
le nom de la chaine, c'est toutes les chaines personnalisées
qui seront supprimées
Renommer une chaine personnalisée. Dans l'exemple,
-E. --rename-chain iptable –E PERMIT PERMIT_TCP
chaine PERMIT est renommée PERMIT_TCP

Commande de création / suppression de chaine personnalisée


Commande Exemple Description
iptables –P INPUT DROP
Permet de configurer la cible par défaut pour une chaine.
-P, --policy iptables –P OUTPUT DROP
iptables –P FORWARD ACCEPT Les valeurs devraient être ACCEPT ou DROP

Commande pour afficher les informations d'un table


Commande Exemple Description
iptables –L INPUT
-L, --list ou Afficher le contenu d'une table ou d'une chaine
iptables –L –t nat
Afficher le contenu d'une table en utilisant les adresses IP,
-n, --numeric iptables –nL les numéros de port. Par défaut, le programme va tenter de
les afficher avec leur nom.
Cette option permet d'afficher les statistiques pour les
-v, --verbose iptables -vnL
règles et les politiques par défaut
Afficher le numéro de la ligne au début de chaque règle ce
--line-number iptables –L --line-number
qui correspond à la position de la règle dans la chaine
Afficher toutes les règles dans la chaine spécifiée. Si aucune
iptables –S INPUT
règle n'est spécifiée, les règles de toutes les chaines sont
-S, --list-rules ou
iptables --list-rules affichées. La table filter est la table par défaut si elle n'est
pas spécifiée

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.

Voici une liste d'implémentation des chaines en fonction de la table

Table PREROUTING INPUT FORWARD OUTPUT POSTROUTING


raw X X
mangle X X X X X
nat X X X X
filter X X X
security X X X

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.

Les permissions peuvent être données avec la commande chmod

Voici un exemple pour changer les permissions sur un script nommé fw01.sh

chmod 700 fw01.sh


ou
chmod u=rwx g= o=

Exemple de script qui permet d'ouvrir le port 22 pour une session SSH

#!/bin/bash
#nettoyage
iptables -F
iptables –X

#politique par defaut de la table filter


iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

#regles d'initialisation de la table nat


iptables -t nat -F
iptables -t nat -X
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

#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

Vous aimerez peut-être aussi