Iptables est une interface de ligne de commande qui permet de configurer NetFilter et ainsi de filtrer les paquets IP. En voici quelques commandes usuelles:
Commandes de base
Afficher les règles
sudo iptables –L
Réinitialiser les règles
sudo iptables -F
sudo iptables -X
Supprimer une règle
Déterminer le numéro de ligne
iptables -L --line-numbers
Supprimer la ligne 2
iptables -D OUTPUT 2
Sauvegarder les règles
sudo -s iptables-save -c
Autoriser un trafic
Autoriser un port entrant (ici le port SSH 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Autoriser un port sortant (ici le port SSH 22)
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
Bloquer un trafic
Bloquer l’ensemble du trafic entrant
iptables -P INPUT DROP
Bloquer l’ensemble du trafic sortant
iptables -P OUTPUT DROP
Bloquer une adresse IP
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
Bloquer un port entrant (ici le port 80)
iptables -A INPUT -p tcp --dport 80 -j DROP
Bloquer un port sortant (ici le port 80)
iptables -A OUTPUT -p tcp --dport 80 -j DROP
Exemple de script
Voici un exemple de script à adapter suivant votre utilisation. (source: http://doc.ubuntu-fr.org/iptables, auteur: BeAvEr)
#!/bin/bash
## Script iptables by BeAvEr.
## Règles iptables.
## On flush iptables.
iptables -F
## On supprime toutes les chaînes utilisateurs.
iptables -X
## On drop tout le trafic entrant.
iptables -P INPUT DROP
## On drop tout le trafic sortant.
iptables -P OUTPUT DROP
## On drop le forward.
iptables -P FORWARD DROP
## On drop les scans XMAS et NULL.
iptables -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
## Dropper silencieusement tous les paquets broadcastés.
iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP
## Permettre à une connexion ouverte de recevoir du trafic en entrée.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
## Permettre à une connexion ouverte de recevoir du trafic en sortie.
iptables -A OUTPUT -m state ! --state INVALID -j ACCEPT
## On accepte la boucle locale en entrée.
iptables -I INPUT -i lo -j ACCEPT
## On log les paquets en entrée.
iptables -A INPUT -j LOG
## On log les paquets forward.
iptables -A FORWARD -j LOG
exit 0
En savoir plus
http://doc.ubuntu-fr.org/iptables [FR]
http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/ [FR]
http://www.netfilter.org/documentation/ [FR][EN]
https://help.ubuntu.com/community/IptablesHowTo [EN]