ad99cbdd23167170049e6305fed3e3136faa09af
Guides/filtrage-paquets.md
... | ... | @@ -0,0 +1,133 @@ |
1 | +Petit guide du filtrage paquets sous Linux |
|
2 | +=========================================== |
|
3 | + |
|
4 | + |
|
5 | +## Qu'est-ce qu'un filtre de paquets ? |
|
6 | + |
|
7 | +A. C'est un programme qui regarde l'en-tête des paquets qui passent et décide du sort qui les attend. |
|
8 | + |
|
9 | +B. Pour quoi faire ? |
|
10 | + |
|
11 | +i. Contrôle des ports ouverts |
|
12 | +ii. Sécurité par la limitation et la manipulation des informations dans le paquet |
|
13 | +iii. Prévention de l'envoi de paquets indésirables |
|
14 | + |
|
15 | +C. Cas du filtrage sous linux |
|
16 | +``` |
|
17 | +Entrée --> [Décision de routage] -------> [Foward] -------> Sortie |
|
18 | + | ^ |
|
19 | + v | |
|
20 | + INPUT -- Processus local --> OUTPUT |
|
21 | +``` |
|
22 | + |
|
23 | +ii cibles |
|
24 | +ACCEPT |
|
25 | +DROP |
|
26 | + |
|
27 | +D. Chaînes et et chaînes par défaut |
|
28 | + INPUT |
|
29 | + OUTPUT |
|
30 | + FORWARD |
|
31 | + On peut créer ses propres chaînes |
|
32 | + |
|
33 | + |
|
34 | +E. Règles |
|
35 | + |
|
36 | +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). |
|
37 | + |
|
38 | +## Manipulation des chaînes |
|
39 | + |
|
40 | +* Créer une nouvelle chaîne : `iptables -N chaine` |
|
41 | +* effacer une chaîne vide : `iptables -X chaine` |
|
42 | +* Changer la règle par défaut pour une chaîne de départ : `iptables -P chaine police` |
|
43 | + exemple : `iptables -P INPUT DROP` |
|
44 | + --> par défaut DROP tous les paquets qui arrivent sur la machine |
|
45 | +* Lister toutes les règles: `iptables -L chaine` |
|
46 | +* Retirer les règles d'une chaîne : `iptables -F chaine` |
|
47 | + |
|
48 | +## Manipulation des règles dans les chaînes |
|
49 | + |
|
50 | +* Ajout d'une règle dans une chaîne : `iptables -A chaine règle` |
|
51 | +Supprimer une règle dans une chaîne : `iptables -D chaine règle` |
|
52 | + |
|
53 | +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. |
|
54 | + |
|
55 | +## Contenu d'une règle |
|
56 | + |
|
57 | +* Source et Destination : (`-s` et `-d`) |
|
58 | + 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. |
|
59 | +* Protocole (`p proto`) |
|
60 | +* Inversion : (ex: `-p ! proto`, `-i ! eth0`, `-s ! 172.16.0.0/16`) |
|
61 | +* Interface (`-i eth0`, `-o eth0`) |
|
62 | +* Extensions: |
|
63 | + * `--tcp-flags [list] [flags]` ex: `--tcp-flags ALL SYN,ACL` |
|
64 | + (SYN, ACK, FIN, RST, URG, PSH, NONE) |
|
65 | + * `--syn` |
|
66 | + * `--sport xx` << port source du packet |
|
67 | + * `-dport xx` << Port de destination du paquet |
|
68 | +* Autres Extensions, les modules |
|
69 | + On les charge avec : `-m module extensions_module` |
|
70 | + * mac (`--mac-source`) |
|
71 | + exemple : `iptables -A -i eth0 -o eth1 -s 172.16.23.6 -m mac -mac-source 00:50:ba:cf:fc: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). |
|
72 | + * limit (`--limit 5/s /m /h`) |
|
73 | + * state (Connection Tracking, ou suivi des connexions) `-m state --state NEW / ESTABLISHED / RELATED /INVALID) |
|
74 | + 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. |
|
75 | + |
|
76 | +ATTENTION ! Le fowarding sous linux ne fonctionne que si le sysctl correspondant prend la valeur 1 : |
|
77 | +``` |
|
78 | +echo 1 > /proc/sys/net/ipv4/ip_forward |
|
79 | +``` |
|
80 | + |
|
81 | +## Network Address Translation (NAT) |
|
82 | + |
|
83 | +Permet d'altérer le header du paquet : ip/port source/destination |
|
84 | + |
|
85 | +### SNAT : altère la source du paquet |
|
86 | + |
|
87 | +S'effectue généralement *après* le routage. |
|
88 | + |
|
89 | +Chaine pour le SNAT : POSTROUTING |
|
90 | + |
|
91 | +Pour la création des règles : utiliser explicitement de la table NAT `t nat` |
|
92 | + |
|
93 | +Exemple SNAT |
|
94 | +``` |
|
95 | +iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.44.76.8 |
|
96 | +``` |
|
97 | + |
|
98 | +Cas particulier du MASQUERADING |
|
99 | +* Détection automatique de l'ip externe (utile si dynamique) |
|
100 | +* coupe toutes les connexions lors d'une coupure de l'ip externe (dynamique), au lieu de les laisser en timeout. |
|
101 | + |
|
102 | +### NNAT : altère la destination du paquet |
|
103 | + |
|
104 | +S'effectue généralement *avant* le routage |
|
105 | + |
|
106 | +Chaines pour le DNAT : |
|
107 | +``` |
|
108 | +PREROUTING |
|
109 | +OUTPUT |
|
110 | +``` |
|
111 | + |
|
112 | +Exemple DNAT : |
|
113 | +``` |
|
114 | +iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 172.16.23.45 |
|
115 | +``` |
|
116 | +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) |
|
117 | + |
|
118 | +Exemple DNAT avec PortForwarding |
|
119 | +``` |
|
120 | +iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 172.16.23.45:8080 |
|
121 | +``` |
|
122 | +Change l'adresse destination ainsi que le port de destination. |
|
123 | + |
|
124 | +## Pour plus de détails |
|
125 | + |
|
126 | +N'hésitez pas à consulter : |
|
127 | +* http://www.netfilter.org/documentation |
|
128 | + |
|
129 | +Milton YATES pour le ResEl |
|
130 | +milton.yates@enst-bretagne.fr |
|
131 | +Octobre 2013 |
|
132 | + |
|
133 | +Mis à jour par Loïc CARR en Février 2017 |
|
... | ... | \ No newline at end of file |