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