Petit guide du filtrage paquets sous Linux
Qu'est-ce qu'un filtre de paquets ?
A. C'est un programme qui regarde l'en-tête des paquets qui passent et décide du sort qui les attend.
B. Pour quoi faire ?
i. Contrôle des ports ouverts ii. Sécurité par la limitation et la manipulation des informations dans le paquet iii. Prévention de l'envoi de paquets indésirables
C. Cas du filtrage sous linux
Entrée --> [Décision de routage] -------> [Foward] -------> Sortie
| ^
v |
INPUT -- Processus local --> OUTPUT
ii cibles ACCEPT DROP
D. Chaînes et et chaînes par défaut INPUT OUTPUT FORWARD On peut créer ses propres chaînes
E. Règles
Chaque chaîne contient des règles qui sont testées successivement pour chaque paquet, dès qu'une règle envoi le paquet sur la cible ACCEPT, celui-ci est envoyé, sinon il continue de se comparer aux règles. Si aucune ne convient, il utilise la décision par défaut de la chaîne (généralement DROP).
Manipulation des chaînes
- Créer une nouvelle chaîne :
iptables -N chaine
- effacer une chaîne vide :
iptables -X chaine
- Changer la règle par défaut pour une chaîne de départ :
iptables -P chaine police
exemple :iptables -P INPUT DROP
--> par défaut DROP tous les paquets qui arrivent sur la machine - Lister toutes les règles:
iptables -L chaine
- Retirer les règles d'une chaîne :
iptables -F chaine
Manipulation des règles dans les chaînes
- Ajout d'une règle dans une chaîne :
iptables -A chaine règle
Supprimer une règle dans une chaîne :iptables -D chaine règle
exemple : `iptables -A INPUT -i eth0 -p tcp -dport 135 -j DROP Détruit tous les paquets arrivant de l'interface eth0 à destination du port 135 du firewall lui-même.
Contenu d'une règle
- Source et Destination : (
-s
et-d
)
exemple:iptables -A FOWARD -s 172.16.23.6 -j DROP
détruit tous les paquets que voit le firewall dont l'adresse source est 172.16.23.6. - Protocole (
p proto
) - Inversion : (ex:
-p ! proto
,-i ! eth0
,-s ! 172.16.0.0/16
) - Interface (
-i eth0
,-o eth0
) - Extensions:
-
--tcp-flags [list] [flags]
ex:--tcp-flags ALL SYN,ACL
(SYN, ACK, FIN, RST, URG, PSH, NONE) --syn
-
--sport xx
<< port source du packet -
-dport xx
<< Port de destination du paquet
-
- Autres Extensions, les modules
On les charge avec :
-m module extensions_module
- mac (
--mac-source
) exemple :iptables -A -i eth0 -o eth1 -s 172.16.23.6 -m mac -mac-source 00:50:bafc:dd -j DROP
Coupe tous les paquets provenant de l'interface eth0 à destination de eth1 provenant de l'IP de peck et dont l'adresse MAC est aussi celle de peck (NDR: peck est surement un ancien admin ResEl). - limit (
--limit 5/s /m /h
) - state (Connection Tracking, ou suivi des connexions)
-m state --state NEW / ESTABLISHED / RELATED /INVALID) exemple
iptables -A FORWARD -i eth1 -o eth0 -d 172.16.0.0/16 -m state --state ESTABLISHED,RELATED -j ACCEPT` Accepte tous les paquets provenant de eth1 à destination de l'interface eth0, dont l'ip de destination fait partie du sous réseau 172.16.0.0 et qui correspond à une réponse sur une connexion déjà établie ou bien une connexion liée à une connexion déjà établie.
- mac (
ATTENTION ! Le fowarding sous linux ne fonctionne que si le sysctl correspondant prend la valeur 1 :
echo 1 > /proc/sys/net/ipv4/ip_forward
Network Address Translation (NAT)
Permet d'altérer le header du paquet : ip/port source/destination
SNAT : altère la source du paquet
S'effectue généralement après le routage.
Chaine pour le SNAT : POSTROUTING
Pour la création des règles : utiliser explicitement de la table NAT t nat
Exemple SNAT
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.44.76.8
Cas particulier du MASQUERADING
- Détection automatique de l'ip externe (utile si dynamique)
- coupe toutes les connexions lors d'une coupure de l'ip externe (dynamique), au lieu de les laisser en timeout.
NNAT : altère la destination du paquet
S'effectue généralement avant le routage
Chaines pour le DNAT :
PREROUTING
OUTPUT
Exemple DNAT :
iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 172.16.23.45
Change l'adresse de destination de tous les paquets arrivants sur l'interface de eth1 pour l'adresse 172.16.23.45 (adresse du rédacteur initial)
Exemple DNAT avec PortForwarding
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 172.16.23.45:8080
Change l'adresse destination ainsi que le port de destination.
Pour plus de détails
N'hésitez pas à consulter :
Milton YATES pour le ResEl milton.yates@enst-bretagne.fr Octobre 2013
Mis à jour par Loïc CARR en Février 2017