« Iptables » : différence entre les versions

De Wiki doc

(→‎Exemple de configuration : Correction d'une erreur dans le fichier d'exemple + Ajout de sources/fichiers.)
 
(2 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Category:pare feux]]
[[Category:pare feux]]
=Généralités=
=Généralités=
Contrairement à PF ([https://fr.wikipedia.org/wiki/BSD_Packet_Filter Packet Filter]) sous BSD, Iptables n'a aucune règle par défaut et accepte tout type de trafic sans aucune restriction.
Contrairement à PF ([https://fr.wikipedia.org/wiki/BSD_Packet_Filter Packet Filter]) sous BSD, Iptables n'a aucune règle par défaut et accepte tout type de trafic sans aucune restriction.
==Lister des règles==
==Lister des règles==
Lister les règles des chaînes de la table ''filter''
Lister les règles des chaînes de la table ''filter''
  iptables -L
  iptables -L
''l'argument -n permet de ne pas résoudre les noms de domaine.''
Lister les règles des chaînes de la table ''nat''
Lister les règles des chaînes de la table ''nat''
  iptables -t nat -L
  iptables -t nat -L
Ligne 11 : Ligne 15 :
Lister les règles telle qu'elles ont été renseignés (permet de les sauvegarder)
Lister les règles telle qu'elles ont été renseignés (permet de les sauvegarder)
  iptables-save
  iptables-save
==Supprimer des règles==
==Supprimer des règles==
Purger la table ''filter''
Purger la table ''filter''
Ligne 18 : Ligne 23 :
Supprimer une règle particulière (ici la numéro 3 de la chaîne ''POSTROUTING'' de la table ''nat'')
Supprimer une règle particulière (ici la numéro 3 de la chaîne ''POSTROUTING'' de la table ''nat'')
  iptables -t nat -D POSTROUTING 3
  iptables -t nat -D POSTROUTING 3
===Source de la section===
===Source de la section===
* http://naeh.net/iptables-supprimer-une-regle-specifique/
* http://naeh.net/iptables-supprimer-une-regle-specifique/
Ligne 24 : Ligne 30 :
==Filter==
==Filter==
Filter est la table par défaut d'iptables. Nous n'avons donc pas besoin de taper ''-t filter'' pour agir avec ses chaînes.
Filter est la table par défaut d'iptables. Nous n'avons donc pas besoin de taper ''-t filter'' pour agir avec ses chaînes.
===INPUT===
===INPUT===
Il est possible d'interdire à une IP distante, l'accès à notre machine.
iptables -A INPUT -s 10.10.10.1/32 -j DROP
On peut également spécifier tout un réseau
iptables -A INPUT -s 10.0.0.0/8 -j DROP
===FORWARD===
===FORWARD===
Bloquer le port 22 (SSH) des machines derrières notre routeur ([https://www.inetdoc.net/guides/iptables-tutorial/rejecttarget.html source])
Bloquer le port 22 (SSH) des machines derrières notre routeur ([https://www.inetdoc.net/guides/iptables-tutorial/rejecttarget.html source])
  iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
  iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
===OUTPUT===
===OUTPUT===
==Nat==
==Nat==
'''Comme une box ADSL'''
'''Comme une box ADSL'''


Dans cet exemple notre réseau est comme chez tati Chantal. Elle a un réseau privé qui doit pouvoir communiqué avec Internet. Sont IP publique est 1.1.1.1 et son réseau privé est 192.168.1.0/24.
Dans cet exemple notre réseau est comme chez tati Chantal. Elle a un réseau privé qui doit pouvoir communiqué avec Internet. Sont IP publique est 1.1.1.1 (eth0 - WAN) et son réseau privé est 192.168.1.0/24.


Activation de la traduction d'adresse à partir de l'adresse IP publique
Activation de la traduction d'adresse à partir de l'adresse IP publique
Ligne 43 : Ligne 57 :
Ce mode permet, lorsque vous ajoutez un réseau chez vous et que votre box ne permet pas d'ajouter une route, d'avoir quand même accès à Internet depuis ce réseau.
Ce mode permet, lorsque vous ajoutez un réseau chez vous et que votre box ne permet pas d'ajouter une route, d'avoir quand même accès à Internet depuis ce réseau.
  iptables -t nat -A POSTROUTING -s 192.168.180.0/24 -o eth0 -j MASQUERADE
  iptables -t nat -A POSTROUTING -s 192.168.180.0/24 -o eth0 -j MASQUERADE
===PREROUTING===
===PREROUTING===
===INPUT===
===INPUT===
Ligne 53 : Ligne 68 :
===OUTPUT===
===OUTPUT===
===POSTROUTING===
===POSTROUTING===
=Persistance des règles=
Iptables ne garde pas les règles après un redémarrage. Pour y remédier, il existe un service dédié.
apt install iptables-persistent
{{info|C'est le service <source lang="bash" inline>netfilter-persistent.service</source> qui gère ça.}}
On peut sauvegarder les règles actuelles avec les commande suivante:
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
=Exemple de configuration=
Une bonne pratique consiste à interdire tout les flux sur toute les tables et à n'activer que le nécessaire pour limiter les surfaces d'attaques.
Voici un exemple de fichier:
<source lang="bash">
*filter
:INPUT DROP
:FORWARD DROP
:OUTPUT DROP
# Bloquer la pollution de Windows
-A INPUT -p udp -d 255.255.255.255 -j DROP
-A INPUT -p udp -d 192.168.1.255 -j DROP
-A INPUT -p udp -m multiport --dport netbios-ns,netbios-dgm,netbios-ssn -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport ssh -j ACCEPT
-A INPUT -p tcp -m tcp --dport http -j ACCEPT
-A INPUT -p tcp -m tcp --dport https -j ACCEPT
-A INPUT -p tcp -m tcp --dport smtp -j ACCEPT
-A INPUT -p tcp -m tcp --dport submission -j ACCEPT
-A INPUT -p tcp -m tcp --dport imaps -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
COMMIT
</source>
{{astuce|Ces règles pourront être converties en règles [[Nftables#Utilisation_par_conversion|Nftables]] par la suite.}}
{{Info|J'ai utilisé les règles de la [https://root66.net/index.php?post/2017/04/17/La-s%C3%A9curit%C3%A9-pour-les-Administrateurs-Syst%C3%A8mes-en-herbe présentation de Aeris]. Voici le lien vers le [https://{{SERVERNAME}}/fichiers/réseaux/sécurité/iptables/conf-aeris-root66.mp3 fichier audio] et la présentation [https://confs.imirhil.fr/20170513_root66_securite-admin-sys/#1 en ligne]/[https://{{SERVERNAME}}/fichiers/réseaux/sécurité/iptables/aeris_slides.zip hors ligne] ainsi que l'[https://hoper.dnsalias.net/atdc/index.php/2017/05/30/securiser-son-serveur-par-aeris/ article source] qui m'a permit de tomber dessus.}}

Dernière version du 11 septembre 2019 à 19:29


Généralités

Contrairement à PF (Packet Filter) sous BSD, Iptables n'a aucune règle par défaut et accepte tout type de trafic sans aucune restriction.

Lister des règles

Lister les règles des chaînes de la table filter

iptables -L

l'argument -n permet de ne pas résoudre les noms de domaine.

Lister les règles des chaînes de la table nat

iptables -t nat -L

Lister avec les numéros de lignes

iptables -L --line-numbers

Lister les règles telle qu'elles ont été renseignés (permet de les sauvegarder)

iptables-save

Supprimer des règles

Purger la table filter

iptables -F

Purger la table nat

iptables -F -t nat

Supprimer une règle particulière (ici la numéro 3 de la chaîne POSTROUTING de la table nat)

iptables -t nat -D POSTROUTING 3

Source de la section

Tables

Filter

Filter est la table par défaut d'iptables. Nous n'avons donc pas besoin de taper -t filter pour agir avec ses chaînes.

INPUT

Il est possible d'interdire à une IP distante, l'accès à notre machine.

iptables -A INPUT -s 10.10.10.1/32 -j DROP

On peut également spécifier tout un réseau

iptables -A INPUT -s 10.0.0.0/8 -j DROP

FORWARD

Bloquer le port 22 (SSH) des machines derrières notre routeur (source)

iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

OUTPUT

Nat

Comme une box ADSL

Dans cet exemple notre réseau est comme chez tati Chantal. Elle a un réseau privé qui doit pouvoir communiqué avec Internet. Sont IP publique est 1.1.1.1 (eth0 - WAN) et son réseau privé est 192.168.1.0/24.

Activation de la traduction d'adresse à partir de l'adresse IP publique

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 1.1.1.1

Redirection de port (car le petit fils de Chantal a acheté un NAS qu'il veux pouvoir administrer depuis chez lui)

iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 443 -j DNAT --to-destination 192.168.1.1:443
iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 80 -j DNAT --to-destination 192.168.1.1:80

Traduction d'adresse transparentes

Ce mode permet, lorsque vous ajoutez un réseau chez vous et que votre box ne permet pas d'ajouter une route, d'avoir quand même accès à Internet depuis ce réseau.

iptables -t nat -A POSTROUTING -s 192.168.180.0/24 -o eth0 -j MASQUERADE

PREROUTING

INPUT

OUTPUT

POSTROUTING

Mangle

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING

Persistance des règles

Iptables ne garde pas les règles après un redémarrage. Pour y remédier, il existe un service dédié.

apt install iptables-persistent

INFORMATION

C'est le service netfilter-persistent.service qui gère ça.

On peut sauvegarder les règles actuelles avec les commande suivante:

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

Exemple de configuration

Une bonne pratique consiste à interdire tout les flux sur toute les tables et à n'activer que le nécessaire pour limiter les surfaces d'attaques.

Voici un exemple de fichier:

*filter
:INPUT DROP
:FORWARD DROP
:OUTPUT DROP

# Bloquer la pollution de Windows
-A INPUT -p udp -d 255.255.255.255 -j DROP
-A INPUT -p udp -d 192.168.1.255 -j DROP
-A INPUT -p udp -m multiport --dport netbios-ns,netbios-dgm,netbios-ssn -j DROP

-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport ssh -j ACCEPT
-A INPUT -p tcp -m tcp --dport http -j ACCEPT
-A INPUT -p tcp -m tcp --dport https -j ACCEPT
-A INPUT -p tcp -m tcp --dport smtp -j ACCEPT
-A INPUT -p tcp -m tcp --dport submission -j ACCEPT
-A INPUT -p tcp -m tcp --dport imaps -j ACCEPT

-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT

COMMIT

ASTUCE

Ces règles pourront être converties en règles Nftables par la suite.

INFORMATION

J'ai utilisé les règles de la présentation de Aeris. Voici le lien vers le fichier audio et la présentation en ligne/hors ligne ainsi que l'article source qui m'a permit de tomber dessus.