R\303\251seau/Firewall.md
... ...
@@ -1,4 +1,235 @@
1
-Le Firewall
2
-===========
1
+Le Firewall Dynamique et de QoS du ResEl
2
+=========================================
3 3
4
-TODO
... ...
\ No newline at end of file
0
+**Auteur :** Alexandre "Pika" Manoury pika@resel.fr
1
+
2
+**Date :** 28 Février 2013
3
+
4
+Le but du nouveau script pour le Firewall / Shapping est de fournir un firewall dynamique (prise en compte automatique des inscriptions, bans, ...) et de QoS (répartition équitable de la bande passante entre les utilisateurs).
5
+
6
+## Les fonctionnalités
7
+
8
+### Paramètres du service
9
+
10
+Un service nommé reselqos permet de gérer le firewall en effectuant diverses opérations :
11
+
12
+ * Efface toutes les règles/chaînes, vide les files, vide les sets, puis relance le firewall dynamique :
13
+
14
+```
15
+service reselqos start
16
+```
17
+
18
+ * Arrête le script de firewall, sans supprimer les chaines (actuellement pour éviter de couper la passerelle par erreur pendant la phase de test) :
19
+
20
+```
21
+service reselqos stop
22
+```
23
+
24
+ * Mettre à jour le firewall; cette mise à jour s'effectue également toute seule à intervalle régulier (environ toutes les 10 secondes - paramétrable) :
25
+
26
+```
27
+service reselqos update
28
+```
29
+
30
+ * Recharger la configuration du firewall; cela permet de changer le débit ou certains paramètres sans avoir à relancer le firewall (attention, tous les paramètres ne peuvent pas être ainsi modifiés à chaud cf ...) :
31
+
32
+```
33
+service reselqos reload
34
+```
35
+
36
+ * Affiche l'aide :
37
+
38
+```
39
+service reselqos help
40
+```
41
+
42
+## Fichier de configuration
43
+
44
+Le fichier de configuration est `/srv/qos/qos.conf` et regroupe l'ensemble des paramètres du firewall, de la qos, de l'ipv6,...
45
+La modification de ce fichier permet de configurer distinctement loli et peach, il n'y a pas besoin de modifier les scripts pour les différents routeurs.
46
+
47
+Le fichier se présente sous la forme :
48
+
49
+```
50
+[section1]
51
+key1 = value1
52
+key2 = value2
53
+...
54
+```
55
+
56
+## Connexions requises
57
+
58
+### LDAP
59
+
60
+Le script requière une connexion au LDAP (anonyme) pour récupérer la liste des utilisateurs et des machines.
61
+Si cette connexion est perdue après le démarrage les utilisateurs ne seront pas mis à jour mais les règles resteront les mêmes : une personne déjà chargée pourra continuer à accéder à internet.
62
+Le script tentera de se connecter au serveur régulièrement, si le serveur à changer il suffit de modifier le fichier de configuration et de faire un service reselqos reload pour se connecter au nouveau serveur sans redémarrer le serveur.
63
+
64
+Les données relative au LDAP sont dans la section :
65
+
66
+```
67
+[ldap]
68
+host = beaune.adm.maisel.enst-bretagne.fr
69
+user =
70
+password =
71
+baseorga = ou=organisations,dc=maisel,dc=enst-bretagne,dc=fr
72
+basepeople = ou=people,dc=maisel,dc=enst-bretagne,dc=fr
73
+basehosts = ou=machines,dc=resel,dc=enst-bretagne,dc=fr
74
+```
75
+
76
+
77
+
78
+### MySQL
79
+
80
+Le script requière une connexion à un BDD MySQL afin de stocker la quantité de données téléchargées par utilisateur ainsi que pour le partage de bande passante entre les firewall.
81
+Si cette connexion est perdue après le démarrage les règles resteront inchangées et la mise à jour dynamique continuera si le LDAP est toujours accessible. Néanmoins si le firewall est redémarrer avant de retrouver la connexion, les quota pour la QoS ne seront pas corrects.
82
+Le script tentera de se connecter au serveur régulièrement, si le serveur à changer il suffit de modifier le fichier de configuration et de faire un service reselqos reload pour se connecter au nouveau serveur sans redémarrer le serveur.
83
+
84
+Les données relative à MySQL sont dans la section :
85
+
86
+```
87
+[database]
88
+host = maia.adm.maisel.enst-bretagne.fr
89
+user = qos
90
+password = ***
91
+db = qos
92
+```
93
+
94
+## Options
95
+
96
+### Firewall
97
+
98
+Toutes les données pour configurer le firewall sont dans la section du même nom dans le fichier de configuration :
99
+
100
+```
101
+[firewall]
102
+enabled = 1
103
+areaPrefix = 172.22.
104
+areaOtherPrefix = 172.23.
105
+eth_ext = eth0.990
106
+... (autres interfaces)
107
+tunnel_name = to_rennes
108
+ip_int = 172.22.199.30
109
+... (autres IP)
110
+net6 = 2001:0660:7302:D000::/52
111
+... (autres network)
112
+area6Prefix = 2001:0660:7302:d
113
+...
114
+```
115
+
116
+### IPv6
117
+
118
+Le firewall gère actuellement en partie l'IPv6 : les IP des utilisateurs sont filtrées mais la plupart des autres IP (machines, blacklist) ne le sont pas. La gestion de la QoS et les quotas sont néanmoins en place en IPv6.
119
+Pour activer ou non l'IPv6 (en cas de désactivation, la politique est de tout accepter) :
120
+
121
+```
122
+[firewall]
123
+v6Enabled = 1
124
+```
125
+
126
+### Débit
127
+
128
+La section rates du fichier de configuration permet de gérer tous les débits (en upload et en download) pour le débit total, le débit du tunnel, le débit shapé, ...
129
+Le débit dit "Global" correspond au débit alloués à l'ensemble Brest + Rennes, il sert au partage dynamique de débit entre les deux campus si un campus sature et que l'autre a de la marge. (Cette fonctionnalité n'est pas encore activée)
130
+
131
+### Règle de débit
132
+
133
+Si des changement de débit doivent avoir lieu sur des tranches horaires spécifiques il suffit de les renseigner dans la section ratesrules :
134
+Exemple : pour passer à 160 Mbps entre 20h et 4h du matin en upload et en download :
135
+
136
+```
137
+[ratesrules]
138
+rule1From = 20:00
139
+rule1To = 4:00
140
+rule1GlobalUp = 200Mbps
141
+rule1GlobalDown = 200Mbps
142
+rule1Up = 160Mbps
143
+rule1Down = 160Mbps
144
+```
145
+
146
+Les autres débits seront adaptés de manière proportionnelle.
147
+Pour qu'un débit ne soit pas modifié, il suffit de mettre sa valeur à 0 (attention, le champ doit quand même être présent !)
148
+
149
+Pour ajouter d'autres règles il suffit de rajouter les 6 mêmes champ en remplaçant le début par rule2, rule3 et ainsi de suite.
150
+
151
+## Qos
152
+
153
+### Principe
154
+Le principe utilisé ici est le suivant :
155
+On possède M groupes de QoS, au début de la journée (vers 5h) tous les utilisateurs sont dans le `groupe 0`. En fonction de la quantité de données téléchargées, les utilisateurs vont franchir des limites et tomber dans le `groupe n+1`.
156
+
157
+Il existe une distinction entre l'upload et le download. Ainsi un utilisateur peut se trouver dans le `groupe 2` en download et dans le `groupe 0` en upload.
158
+
159
+### Limites
160
+La limite de chaque groupe dépend de deux paramètres `classSeperationBase` et `classSeperationParameter` : la limite du `groupe n` vaut :
161
+
162
+```
163
+(la limite du groupe n-1) * classSeperationParameter + classSeperationBase
164
+```
165
+
166
+La limite du ''groupe 0'' vaut classSeperationBase.
167
+
168
+### Débit par utilisateur
169
+
170
+A chaque groupe un débit par utilisateur cible est précisé, les règles TC sont donc mises à jour à chaque fois que des utilisateurs change de groupe afin de conserver le bon débit par utilisateur pour chaque groupe.
171
+Le débit par utilisateur dépend d'un facteur `classRateFactor` < 1, du débit total, et de la répartition des utilisateurs dans chaque classe.
172
+La répartition est faite de telle manière à répartir l'ensemble du débit disponible entre les utilisateurs tel que un utilisateur du `groupe n+1` aura `classRateFactor` le débit d'un utilisateur du `groupe n`
173
+
174
+### Valeurs par défauts
175
+
176
+| Groupe | Limits | Rate factor |
177
+| ------ | ------ | ----------- |
178
+| 0 | 1250 Mo | 100% |
179
+| 1 | 3250 Mo | 80% |
180
+| 2 | 6450 Mo | 64% |
181
+| 3 | 11570 Mo | 51% |
182
+| 4 | 19762 Mo | 41% |
183
+| 5 | - | 33% |
184
+
185
+# Désactivation
186
+La QoS peut être désactiver : dans ce cas tous les utilisateurs sont dans le même groupe et la quantité de données téléchargées n'entrent pas en jeu.
187
+
188
+
189
+```
190
+[qos]
191
+enabled = 1
192
+```
193
+
194
+
195
+## Logs
196
+
197
+Un fichier de log est présent : `/var/log/reselqos/reselqos.log` (par défaut), pour le modifier :
198
+
199
+```
200
+[path]
201
+log = /var/log/reselqos
202
+```
203
+
204
+## Partie technique
205
+
206
+### Scripts
207
+
208
+Des scripts pythons gèrent le nouveau firewall, ils sont présents dans `/srv/qos/`
209
+
210
+* Le fichier qosrunner.py constitue un programme avec une boucle d'actualisation.
211
+* Le fichier qospam.py sert à lancer ce programme.
212
+* Le fichier qosfirewall.py gère les règles IPTABLES, IPSET et TC.
213
+* Le fichier qosparser.py se gère de la lecture du fichier netacct pour recueillir les logs.
214
+
215
+* Le fichier objects.py contient les classes User et Host.
216
+* Le fichier utils.py contient des fonctions utilitaires.
217
+
218
+### Gestions des groupes de QoS
219
+
220
+1. Ipset :
221
+* Toutes les IP des machines d'un utilisateur du ''groupe 3'' en upload seront mises dans l'Ipset ''qos_u3''
222
+* Si l'utilisateur passe dans le ''groupe 4'' en upload, ses IP seront supprimées de l'Ipset ''qos_u3'' et rajoutées dans l'Ipset ''qos_u4'
223
+* De même pour les groupes en download ''qos_d'''X''' ''
224
+* Dans le cas de l'IPv6, les Ipset se nomment ''v6qos_d'''X''' '' et ''v6qos_u'''X''' ''
225
+
226
+2. Iptables :
227
+* Tous les paquets correspondant aux IP d'un Ipset ''qos_d'''X''' '' seront marqués avec le numéro 1000 + X (ou 2000 + X dans le cas d'un groupe d'upload)
228
+3. TC :
229
+* Un '''groupe de QoS''' correspond à une '''class TC''' avec une ''' qdisc SFQ''' et associée à un '''filter TC'''
230
+* Le '''filter TC''' pour le ''groupe n'' récupère tous les paquets marqués avec le numéro 1000 + n (ou 2000 + n selon le cas)
231
+* Le débit d'un '''groupe de QoS''' correspond au débit de sa classe TC, chaque groupe peut emprunter du débit autres groupes (jusqu'à une certaine limite) s'ils n'utilisent pas leur bande passante allouée.
... ...
\ No newline at end of file