Skip to main content

[Pare-feu] IPTables

Introduction

Certainement l'outil le plus complet et le plus fiable sur Linux pour créer vos règles de pare-feu et de routage, iptables remplira ses missions sans broncher.

Toutefois, sa multitude d'options fait  qu'il est assez rugueux à prendre en main.

image.png

Sources

Installation

Debian

apt install -y iptables

Configuration pare-feu

Afficher les règles actives

iptables -L

N'affiche que la table "filter". Ajoutez l'option -t suivie de "nat", "mangle" ou "raw"  pour voir les tables correspondantes.

Politiques par défaut

  • Bloquer le trafic entrant :
iptables -P INPUT DROP
  • Bloquer le trafic sortant :
iptables -P OUTPUT DROP
  • Autoriser le trafic entrant :
iptables -P INPUT ACCEPT
  • Autoriser le trafic sortant :
iptables -P OUTPUT ACCEPT

Autoriser un flux entrant

Permettre les connexions entrantes sur un port spécifique, lancez la commande suivante :

iptables -A INPUT -p [tcp|udp] -i <IFACE> --dport <PORT> -j ACCEPT

Autoriser un flux sortant

Permettre les connexions sortantes sur un port spécifique, lancez la commande suivante :

iptables -A OUTPUT -p [tcp|udp] -i <IFACE> --dport <PORT> -j ACCEPT

Politique ICMP

  • Autoriser le ping sortant :
iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
  • Autoriser le ping entrant :
iptables -A INPUT -p icmp -j ACCEPT
  • Bloquer le ping sortant :
iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j DROP
  • Bloquer le ping entrant :
iptables -A INPUT -p icmp -j DROP

Supprimer une règle

Tout d'abord affichez la table avec les numéros de ligne :

iptables -L --line-numbers

Admettons la table ci-dessous :

Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    DROP       icmp --  anywhere             anywhere
2    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
3    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
4    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:webmin

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  anywhere             anywhere            tcp spt:www
2    ACCEPT     tcp  --  anywhere             anywhere            tcp spt:12345

Dans le cas où on souhaite supprimer la deuxième ligne de la chaîne OUTPUT, on devrait taper cette commande :

iptables -D OUTPUT 2

Sauvegarde de la table

sudo -s iptables-save -c

Persistence des règles après redémarrage

SaisissezInstallez d'abordle paquet netfilter-persistent :

apt install -y netfilter-persistent

Ensuite, exportez vos règles IPv4 dans le fichier /etc/iptables/rules.v4 et vos règles IPv6 dans le fichier /etc/iptables/rules.v6 si vous en avez.avez :

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

Vous pouvez ensuite utiliser le service fournit par iptables avec ses différentes options :

servicesystemctl iptables-enable --now netfilter-persistent [save|flush|reload]

Configuration NAT

Tout d'abord, activez la fonctionnalité de port forwarding dans le fichier /etc/sysctl.conf en décommentant la ligne suivante :

net.ipv4.ip_forward=1

Puis créez les règles de routage suivantes :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Remplacez eth0 par le nom de l'interface de votre premier réseau et faites de même pour eth1 avec le deuxième réseau.