Configuration de pare-feu simple

De ArchwikiFR
Attention : Cette page et en cours de traduction, et n'est pas terminée

Cette page vous explique comment configurer un pare-feu simple en utilisant iptables. Cette page explique aussi le sens des règles et pourquoi elles sont nécessaires. Pour plus de simplicité, ce document est constitué de deux sections, la première traite de l'installation des règles pour une machine unique, et le second de la mise en place d'une passerelle NAT.

Attention : L'ordre d'après lesquelles les règles sont exécutées a un effet sur le fonctionnement du pare-feu. Si vous êtes connecté par SSH, vous pouvez interrompre votre connexion. Il est donc recommandé de configurer votre pare-feu dans une session locale.


Préambule

Note : Votre noyau doit être compilé avec le support pour iptables. Les noyaux 'stock' viennent déjà avec ce support

Premièrement, installer les utilitaires nécessaires pour manipuler le pare-feu: iptables, ou vérifier qu'ils sont déjà installeé avec la commande :

iptables --version

Cette article suppose que vous n'avez aucune règle dans votre système. Pour vérifier que c'est le cas, la commande suivante liste toutes les règles actives :

# iptables-save
 # Generated by iptables-save v1.4.19.1 on Thu Aug  1 19:28:53 2013
 *filter
 :INPUT ACCEPT [50:3763]
 :FORWARD ACCEPT [0:0]
 :OUTPUT ACCEPT [30:3472]
 COMMIT
 # Completed on Thu Aug  1 19:28:53 2013

ou

# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 156 packets, 12541 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 82 packets, 8672 bytes)
num   pkts bytes target     prot opt in     out     source               destination

S'il y a déjà des règles, vous pouvez les retirer en chargeant le fichier exemplaire d'un iptables vierge.

iptables-restore < /etc/iptables/empty.rules

Pare-feu pour une machine unique

Note : Parce que iptables traite les règles en ordre du premier dans un chaîne jusqu'au dernier, il est avisé de mettre règles qui sont utilisés le plus souvent sont en haut. Bien sûr il y a une limite, dépendent de la complexité des règles. Il y a un coût associé à chaque règle dans une chaîne, donc les règles ne doivent être réorganisées qu'après avoir vu les compteurs byte/trafic.

Créer les chaînes nécessaires

Pour cette configuration simple, on va créer deux chaînes qu'on va utiliser pour ouvrir les ports sur le pare-feu.

iptables -N TCP
iptables -N UDP

Ces chaînes peuvent avoir les noms de votre choix, ici on les choisit pour représenter les paquets TCP et UDP pour ce qu'on veut écrire des règles.

La chaîne FORWARD

Comme cette machine ne veut pas envoyer les paquets pour les autres machines, on ne veut pas accepter les paquets dans la chaîne FORWARD. Donc on peut définir la stratégie défaut de ne pas accepter ces paquets:

iptables -P FORWARD DROP 

La chaîne OUTPUT

On n'a pas l'intention de filtrer le trafic qui sort de notre machine, donc nous définissions par défaut la stratégie qui consiste à accepter tous les paquets qui sont destinés à l'extérieur.

iptables -P OUTPUT ACCEPT

La chaîne INPUT

Cette chaîne est responsable pour les paquets qui viennent de l'extérieur de notre système et forme la mise au point de nos efforts pour sécuriser le système. Pour commencer, comme les exemples précédents on va définir la stratégie défaut de ne pas accepter et en suite définir les exemptions. Cette stratégie de définir ce qui est permis et de rejeter tout le reste est la façon le plus fiable pour construire les pare-feux.


Attention : Si vous êtes connecté par SSH, la commande suivante va vous déconnecter et vous ne pourrez pas vous reconnecter ! Pour éviter cette problème: (1) Ajoutez la règle pour permettre les connections déjà établies (pour que votre session reste ouverte), (2) Ajoutez une règle pour permettre les connections SSH (pour que vous puissiez vous reconnecter), (3) définissez la stratégie par défaut


iptables -P INPUT DROP

Chaque paquet qui est reçu par la carte de réseau passera à travers la chaîne INPUT avant tout, s'il est destiné à cette machine. Dans cette chaîne on choisit quels paquets vont être acceptés.

La première règle qu'on va ajouter à cette chaîne autoriserait les paquets qui font partie d'une connexion qui est déjà établie ou les paquets qui sont liés à des connexions qui sont déjà établies comme les erreurs ICMP, ou des réponses ICMP. ICMP signifie Internet Control Message Protocol et peut être très important pour gérer la congestion et ajuster la taille maximale des paquets qui peuvent être transmis (MTU). Ces messages sont acceptés par cette règle.

L’état de connexion ESTABLISED implique que soit une autre règle a autorisé la connexion initiale --cstate NEW, soit la connexion était déjà en cours quand la règle a été ajoutée.

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

La seconde règle acceptera tout le trafic qui vient de l'interface "loopback" (lo), qui est nécessaire pour le fonctionnement de beaucoup de services.

Note : Vous pouvez ajouter d'autres interfaces qui acceptent tous les paquets, si vous ne voulez pas que le pare-feu bloque les communications sur ces interfaces. Soyez averti que si vous avez une configuration NAT qui envoie du trafic à cette interface, les autres règles n'auront pas d'effet et tout le trafic passera à travers le pare-feu
iptables -A INPUT -i lo -j ACCEPT