Firewall : iptables
Éditer des règles de firewalling avec iptables
iptables
permet de filtrer les connexions entrantes et/ou sortantes. Utilisé comme pare-feu, iptables
permet également de faire de la translation d’adresse (NAT).
Lister les règles en cours.
root@debian~#: iptables -L
sortie
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
La sortie précédente donne accès à quiconque de importe où.
Supprimer toutes les règles en cours incluant les règles NAT.
root@debian~#: iptables -F root@debian~#: iptables -X root@debian~#: iptables -F -t nat root@debian~#: iptables -X -t nat
Les chaînes
INPUT : règle entrante
OUTPUT : règle sortant
FORWARD : règle de transite.
Les “policy” (politique)
ACCEPT : accepte les paquets
REJECT : refuse les paquets avec notification
DROP : refuse/jette les paquets sans notification
Gestions des policy de connexions pour tout refuser.
: à ne pas faire sur une machine distante.
root@debian~#: iptables -P INPUT DROP root@debian~#: iptables -P OUTPUT DROP root@debian~#: iptables -P FORWARD DROP
: les commandes iptables -F
suivi de iptables -X
n’affectent pas les “policy”.
Options courantes
Option | Description |
---|---|
-F , --flush |
Nettoie la règle passé en paramètre. Vide toutes la table si aucun paramètre est passée. |
-X , --zero |
Nettoie la règle de l’utilisateur passée en paramètre. Vide toutes la table si aucun paramètre est passé. |
-t , --table |
Définie le type de “table” sur lequel l’utilisateur veut agir : filter , nat , mangle , […] |
-P , --policy |
Change le type de “policy” |
-A , --append |
Ajoute une ou plusieurs règles. |
-p --protocol |
Le protocole de la règle ou du paquet. |
-i , --in-interface |
Nom l’interface qui reçoit les paquets pour les chaînes : INPUT, FORWARD et PREROUTING. |
-o , --out-interface |
Nom de l’interface qui envoie les paquets pour les chaînes FORWARD, OUTPUT et POSTROUTING. |
--dport , --destination-port |
Port ou intervalle de port de destination. |
--sport , --source-port |
Port ou intervalle de port source. |
-j , --jump |
Spécifie la cible de la règle, action à effectuer si le paquet correspond à la règle |
Création d’une règle
Autoriser à comminiquer via SSH.
root@debian~#: iptables -A INPUT -p tcp -i eth0 -d 172.16.0.10 --dport ssh -j ACCEPT #1 root@debian~#: iptables -A OUTPUT -p tcp -o eth0 -d 172.16.0.0/16 --sport ssh -j ACCEPT #2
La règle #1 va autoriser l’interface eth0 à recevoir (–dport) via le protocol ssh.
La règle #2 va autoriser l’interface eth0 à emettre (–sport) via le protocol ssh.
Cette règle n’est pas permanante.
Sauvegarder une règle
Pour sauvegarder une règle il faut utiliser la commande iptables-save
.
root@debian~#: iptables-save > /etc/iptables.up.rules
Restaurer une règle
Pour restaurer une règle il faut utiliser la commande iptables-restore
.
root@debian~#: iptables-restore < /etc/iptables.up.rules
: dans l’exemple les règles sont sauvegarder puis restaurer depuis le dossier /etc mais elles peuvent être stockées ailleurs.
Appliquer les règles au démarrage
Enfin, toujours via la commande iptables-restore
il est possible d’appliquer des règles iptables dès le démarrage.
Créer le fichier d’appel des règles
root@debian~#: vim /etc/network/if-pre-up.d/iptables
contenu du fichier
#!/bin/sh /sbin/iptables-restore < /etc/iptables.up.rules
Ce fichier doit être executable.
root@debian~#: chmod +x /etc/network/if-pre-up.d/iptables
Exemple d’application
Accéder à Internet depuis une VM derrière un hyperviseur
Supposons que l’on souhaites accéder, via ssh, à des VMs sans passer par l’hyperviseur.
Voici la règle.
root@debian~#: iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 23980 -j DNAT --to 10.0.0.15:22
Cette règle va NATer une connexion entrante de l’interface eth0 sur le port 29980 vers l’IP 10.0.0.15 sur son port 22.
Natter tout traffic
root@debian~#: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Supprimer une règle
Identifier la règle à supprimer, dans le cas présent, la régle précédement ajouter pour rediriger un flux SSH.
root@debian~#: iptables -L -t nat --line-numbers
aperçu du contenu du fichier
[…]
order lb-ord inf: IP-nginx Nginx-rsc
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DNAT tcp -- anywhere anywhere tcp dpt:28091 to:10.0.0.12:9091
2 DNAT tcp -- anywhere anywhere tcp dpt:http to:10.0.0.13:80
[…]
8 DNAT tcp -- anywhere anywhere tcp dpt:28900 to:10.0.0.20:80
9 DNAT tcp -- anywhere anywhere tcp dpt:23980 to:10.0.0.15:22
[…]
La règle est identifiée, c’est la ligne 9.
Supprimer la règle.
root@debian~#: iptables -D INPUT 9
: si la sortie indique « iptables: Index of deletion too big. » la règle n’est supprimée, dans ce cas faire un export (iptables-save > rules
), éditer cet export en supprimant la ligne et ré-importer (iptables-restore < rules
).
Scripts
Faire un « safe flush » des règles iptables
.
: à placer dans /usr/local/sbin/ de façon à pouvoir l'appeler de façon transparente.
script : iptable-flush.sh
#!/bin/bash # Flusher les règles existantes iptables -F iptables -X iptables -t nat -F iptables -t nat -X # Application de la politique par défaut # /!\ À ne pas faire via un accès distant iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Autoriser tout en loopback iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Autorise le ping DEPUIS l'extérieur uniquement iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT # Autorise le ping VERS l'extérieur uniquement iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT # NOTE : autorisez tout en ping en une seule règle iptables -A INPUT -p icmp -j ACCEPT iptables -A OUTPUT -p icmp -j ACCEPT # Autoriser tout trafic sortant et la réponse à ce trafic iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
by Nicolas SHINEY | April 25, 2015 | No Comments | Système | Tags : firewall iptables