Projet

Général

Profil

Brique vpn » Historique » Version 37

david.daugareil, 10/03/2019 19:24

1 23 david.daugareil
# Brique vpn
2 1 stephane.ligozat
3 4 stephane.ligozat
Séance du samedi 9 mars 2019.
4
5 1 stephane.ligozat
Il s'agit d'installer sur un raspberry pi un client VPN et un hotspot wifi.
6
7 11 stephane.ligozat
8 17 stephane.ligozat
## Installation du système
9 11 stephane.ligozat
10 23 david.daugareil
Télécharger le zip contenant l'image de Raspbian Lite : https://www.raspberrypi.org/downloads/raspbian/
11 1 stephane.ligozat
12 23 david.daugareil
Extraire l'image avec p7zip par exemple :
13 1 stephane.ligozat
14 14 stephane.ligozat
~~~
15 23 david.daugareil
7z x nom-de-l-image-raspbian-stretch-lite.zip
16 18 stephane.ligozat
~~~
17
18 23 david.daugareil
Identifier le périphérique correspondant à sa carte micro SD :
19 18 stephane.ligozat
20 15 stephane.ligozat
~~~
21 23 david.daugareil
sudo fdisk -l
22 1 stephane.ligozat
~~~
23 23 david.daugareil
insérer la carte micro SD et refaire la même manip, le device supplémentaire est la carte micro SD.
24 18 stephane.ligozat
25 23 david.daugareil
Copier l'image sur la micro SD (X est la lettre du device de l'étape précédente) :
26 1 stephane.ligozat
27 18 stephane.ligozat
~~~
28 23 david.daugareil
sudo dd bs=4M if=/chemin-de-l-image/nom-de-l-image-raspbian-stretch.img of=/dev/sdX conv=fsync status=progress
29 18 stephane.ligozat
~~~
30 1 stephane.ligozat
31 23 david.daugareil
/!\ créer un fichier vide ssh à la racine de la partition boot de la carte SD pour activer le démon SSH sur le pi
32 1 stephane.ligozat
33 15 stephane.ligozat
34
## Trouver la PI sur le réseau
35 1 stephane.ligozat
36
Ne pas brancher la PI et afficher la liste des IPS dispos sur le réseau 
37 18 stephane.ligozat
38 1 stephane.ligozat
~~~
39 15 stephane.ligozat
sudo arp-scan -l --interface wlp4s0
40 2 stephane.ligozat
~~~
41
42 23 david.daugareil
ici, wlp4s0 est le nom de l'interface WiFi
43 1 stephane.ligozat
44 23 david.daugareil
Autre méthode possible avec nmap (à adapter en fonction de votre IP privée) :
45 2 stephane.ligozat
46
~~~
47 23 david.daugareil
nmap -sP 192.168.1.*
48 1 stephane.ligozat
~~~
49 3 stephane.ligozat
50 23 david.daugareil
Brancher la PI et relancer la commande précédente de votre choix. Normalement une nouvelle IP est apparue, c'est celle de votre PI.
51 3 stephane.ligozat
52 23 david.daugareil
Se connecter au PI :
53 3 stephane.ligozat
54
~~~
55 23 david.daugareil
ssh pi@<IP_DE_MON_PI>
56 3 stephane.ligozat
~~~
57 1 stephane.ligozat
58 23 david.daugareil
Mot de passe par défaut : raspberry
59 3 stephane.ligozat
60 23 david.daugareil
## Première connexion au PI
61 1 stephane.ligozat
62 23 david.daugareil
Changer le mot de passe par défaut avec la commande :
63
64 1 stephane.ligozat
~~~
65 23 david.daugareil
passwd
66 4 stephane.ligozat
~~~
67 1 stephane.ligozat
68 23 david.daugareil
Mettre à jour du système
69 9 stephane.ligozat
70 1 stephane.ligozat
~~~
71 23 david.daugareil
sudo apt update && sudo apt upgrade
72 1 stephane.ligozat
~~~
73 9 stephane.ligozat
74 23 david.daugareil
Installer openvpn, hostapd et dnsmasq
75 9 stephane.ligozat
76 1 stephane.ligozat
~~~
77 23 david.daugareil
sudo apt install openvpn hostapd dnsmasq
78 1 stephane.ligozat
~~~
79
80 23 david.daugareil
Redémarrer le PI
81 1 stephane.ligozat
82
~~~
83
sudo reboot
84
~~~
85
86 23 david.daugareil
## Configuration du point d'accès
87 8 stephane.ligozat
88 23 david.daugareil
Mise en place d'un IP statique sur l'interface WiFi, éditer le fichier dhcpcd.conf avec vi, vim, nano...selon vos préférences :
89 1 stephane.ligozat
90 7 stephane.ligozat
~~~
91 1 stephane.ligozat
sudo vi /etc/dhcpcd.conf
92 8 stephane.ligozat
~~~
93
94 23 david.daugareil
A la fin du fichier ajouter, avec l'IP privée de votre choix (ici 172.16.10.1) :
95 1 stephane.ligozat
96 8 stephane.ligozat
~~~
97
interface wlan0
98 23 david.daugareil
    static ip_address=172.16.10.1/24
99 1 stephane.ligozat
    nohook wpa_supplicant
100 8 stephane.ligozat
~~~
101
102 23 david.daugareil
Remarque : dhcpcd exécute tous les scripts du répertoire '/lib/dhcpcd/dhcpcd-hooks' dans l'ordre croissant. L'option **nohook wpa_supplicant** empèche le script du même nom de s'exécuter et à wpa_supplicant de prendre la main sur le WiFi.
103 1 stephane.ligozat
104 23 david.daugareil
Enregistrer et redémarrer le démon dhcpcd
105
106 1 stephane.ligozat
~~~
107
sudo service dhcpcd restart
108 8 stephane.ligozat
~~~
109 7 stephane.ligozat
110 23 david.daugareil
Le message suivant s'affiche : Warning: dhcpcd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
111 6 stephane.ligozat
112 23 david.daugareil
Faire :
113 6 stephane.ligozat
114 9 stephane.ligozat
~~~
115 23 david.daugareil
sudo systemctl daemon-reload
116
sudo service dhcpcd restart
117
~~~
118
119
Configuration du serveur DHCP, editer le fichier dnsmasq.conf
120
121
~~~
122
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
123
sudo touch /etc/dnsmasq.conf
124 9 stephane.ligozat
sudo vi /etc/dnsmasq.conf
125
~~~
126
127 23 david.daugareil
Et y mettre :
128 9 stephane.ligozat
129
~~~
130 23 david.daugareil
interface=wlan0      # Interface WiFi - habituellement wlan0
131
  dhcp-range=172.16.10.100,172.16.10.120,255.255.255.0,24h
132 9 stephane.ligozat
~~~
133
134 23 david.daugareil
Ici pour wlan0, nous allons fournir des adresses IP entre 172.16.10.100 et 172.16.10.120, avec un temps de location de 24 heures.
135 9 stephane.ligozat
136 23 david.daugareil
Configuration de hostapd :
137
138
~~~
139
sudo touch /etc/hostapd/hostapd.conf
140 9 stephane.ligozat
sudo vi /etc/hostapd/hostapd.conf
141 23 david.daugareil
~~~
142 9 stephane.ligozat
143 23 david.daugareil
Y coller :
144
145 9 stephane.ligozat
~~~
146
interface=wlan0
147 23 david.daugareil
driver=nl80211
148
ssid=SonicLeHerisson
149 10 stephane.ligozat
hw_mode=g
150 23 david.daugareil
channel=6
151
ieee80211d=1
152
country_code=FR
153 10 stephane.ligozat
ignore_broadcast_ssid=0
154 23 david.daugareil
wmm_enabled=0
155
macaddr_acl=0
156
wpa_passphrase=lemotdepassedeouf
157
auth_algs=1
158
wpa=2
159 10 stephane.ligozat
wpa_key_mgmt=WPA-PSK
160
rsn_pairwise=CCMP
161
~~~
162
163 24 david.daugareil
Je mets le détail ici car hostapd n'aime pas trop les commentaires dans le fichier de conf :
164 29 david.daugareil
- interface=wlan0         # l'interface utilisée par l'AP
165
- driver=nl80211          # nl80211 avec tous les drivers Linux mac80211 => https://wireless.wiki.kernel.org/en/users/drivers
166
- ssid=SonicLeHerisson    # petit nom du hotspot
167
- hw_mode=g               # mode Wi-Fi (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g)
168
- channel=6               # le canal utilisé
169
- ieee80211d=1            # limiter les fréquences utilisées à celles autorisées dans le pays
170
- country_code=FR         # l'indicatif du pays
171
- ignore_broadcast_ssid=0         # envoyer les SSID vides dans les balises et ignorer les trames de requête de sonde qui ne le font pas
172
- wmm_enabled=0           # pas de QoS
173
- macaddr_acl=0           # pas d'authentification basée sur l'adresse MAC de la station
174
- wpa_passphrase=lemotdepassedeouf        # la phrase de passe
175
- # WPA2 Personnel, AES
176
- auth_algs=1
177
- wpa=2
178
- wpa_key_mgmt=WPA-PSK
179
- rsn_pairwise=CCMP 
180 24 david.daugareil
181 23 david.daugareil
Puis éditer '/etc/default/hostapd' pour modifier la ligne DAEMON_CONF :
182 10 stephane.ligozat
183
~~~
184
sudo vi /etc/default/hostapd
185
DAEMON_CONF="/etc/hostapd/hostapd.conf"
186
~~~
187
188 23 david.daugareil
Et on démarre/redémarre tout ce beau monde fraîchement configuré :
189 10 stephane.ligozat
190
~~~
191
sudo systemctl start hostapd
192
~~~
193
194 23 david.daugareil
Le message suivant s'affiche : Failed to start hostapd.service: Unit hostapd.service is masked.
195 10 stephane.ligozat
196 23 david.daugareil
Continuer :
197 10 stephane.ligozat
198
~~~
199 23 david.daugareil
sudo systemctl unmask hostapd
200
sudo systemctl start hostapd
201
sudo systemctl restart dnsmasq
202 10 stephane.ligozat
~~~
203
204 23 david.daugareil
Remarque : A partir de maintenant, il est possible de se connecter sur le hotspot qui doit maintenant être visible, il n'y a pas encore d'accès au NET, c'est normal.
205 10 stephane.ligozat
206 23 david.daugareil
Activer le démon hostapd au démarrage et redémarrer pour vérifier si tout ce qui a était fait jusqu'à présent persiste :
207 10 stephane.ligozat
208
~~~
209 23 david.daugareil
sudo systemctl enable hostapd
210
sudo reboot
211 10 stephane.ligozat
~~~
212
213 25 david.daugareil
## le VPN
214 1 stephane.ligozat
215 25 david.daugareil
Récupérer le fichier de configuration du VPN d'Aquilenet et le copier dans /etc/openvpn avec l'extension *.conf
216 1 stephane.ligozat
217 25 david.daugareil
~~~
218
scp /chemin-vers-le-fichier-de-conf/aqn.ovpn pi@<IP-DU-PI>:/tmp
219
~~~
220
221
~~~
222
sudo mv /tmp/aqn.ovpn /etc/openvpn/aqn.conf
223
~~~
224
225
Créer un fichier nommé secret qui contiendra le loggin et mdp du VPN :
226
227
~~~
228
cd /etc/openvpn && sudo touch secret
229
sudo chmod 600 secret
230
~~~
231
232
L'éditer pour y mettre loggin et mdp :
233
234
~~~
235
sudo vi secret
236
~~~
237
238
~~~
239
loggin-du-vpn
240
mot-de-passe-du-vpn
241
~~~
242 26 david.daugareil
243 37 david.daugareil
Modifier la ligne auth-user-pass du fichier aqn.conf :
244
245
~~~
246
sudo vi /etc/openvpn/aqn.conf
247
~~~
248
249
~~~
250
auth-user-pass secret
251
~~~
252
253 26 david.daugareil
Tester la bon fonctionnement du VPN :
254 1 stephane.ligozat
255
~~~
256
sudo systemctl start openvpn@aqn
257
sudo systemctl status openvpn
258
ifconfig
259
traceroute www.debian.org
260
~~~
261
262 26 david.daugareil
Si tout est au vert, on valide le démon openvpn :
263
264
~~~
265
sudo systemctl enable openvpn@aqn
266
~~~
267
268
## le Firewall : Routage, NAT...
269
270 29 david.daugareil
Editer le fichier sysctl.conf
271
272
~~~
273
sudo vi /etc/sysctl.conf
274
~~~
275
276
Décommenter les lignes :
277
- net.ipv4.ip_forward=1
278
- net.ipv6.conf.all.forwarding=1
279 30 david.daugareil
280
Et valider les modifications :
281
282
~~~
283
sudo sysctl --system
284
~~~
285 31 david.daugareil
286
Créer le fichier netfilter et l'éditer :
287
288
~~~
289
sudo touch /etc/init.d/netfilter
290
sudo vi /etc/init.d/netfilter
291
~~~
292
293
Y coller les règles suivantes :
294
295
~~~
296
#!/bin/bash
297
# Script Netfilter
298
### BEGIN INIT INFO
299
# Provides: netfilter
300
# Required-Start:
301
# Required-Stop:
302
# Default-Start: 2 3 4 5
303
# Default-Stop: 0 1 6
304
# Short-Description: Start firewall daemon at boot time
305
# Description: Custom Firewall scrip.
306
### END INIT INFO
307
308
case "$1" in
309
'start')
310
# On vide les anciennes règles
311 36 david.daugareil
/sbin/iptables -F
312
/sbin/iptables -X
313
/sbin/iptables -Z
314 1 stephane.ligozat
315 36 david.daugareil
/sbin/ip6tables -F
316
/sbin/ip6tables -X
317
/sbin/ip6tables -Z
318
319 31 david.daugareil
# Mise en place des sécurités noyaux
320
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
321
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
322 36 david.daugareil
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
323 31 david.daugareil
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
324
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
325
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
326
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
327
328
# Mise en place du NAT pour permettre au réseau Wi-Fi de communiquer sur Internet
329
iptables -t nat -A POSTROUTING -o tun0 -s 172.16.10.0/24 -j MASQUERADE
330
# Par défaut, on bloque les paquets provenant d'un réseau vers un autre réseau
331
# On bloque ce qui arrive sur le Raspberry
332
# On autorise tout ce qui sort du boîtier
333
iptables -t filter -P FORWARD DROP
334
iptables -t filter -P OUTPUT ACCEPT
335
iptables -t filter -P INPUT DROP
336
ip6tables -t filter -P FORWARD DROP
337
ip6tables -t filter -P OUTPUT ACCEPT
338
ip6tables -t filter -P INPUT DROP
339
340
# On autorise toutes les connexions en localhost (boucle locale)
341
iptables -t filter -A INPUT -i lo -j ACCEPT
342
iptables -t filter -A OUTPUT -o lo -j ACCEPT
343
ip6tables -t filter -A INPUT -i lo -j ACCEPT
344
ip6tables -t filter -A OUTPUT -o lo -j ACCEPT
345
346
# On autorise les réponses à une connexion préalablement établie
347
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
348
iptables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
349
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
350
ip6tables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
351
ip6tables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
352
ip6tables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
353
354
# On autorise tout type de flux provenant du réseau Wi-Fi à destination d'internet
355
iptables -t filter -A FORWARD -i wlan0 -o tun0 -s 172.16.10.0/24 -m state --state NEW -j ACCEPT
356
357
# On autorise les machines connectées au réseau Wi-Fi à se connecter sur le boîtier
358
iptables -t filter -A INPUT -i wlan0 -m state --state NEW -j ACCEPT
359
ip6tables -t filter -A INPUT -i wlan0 -m state --state NEW -j ACCEPT
360
361
# On autorise les requêtes RA et NDP vers mon Raspberry PI
362
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
363
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
364
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
365
366
sleep 3
367
echo -e "Starting firewall.. \n"
368
;;
369
'stop')
370
/sbin/iptables -F
371
/sbin/iptables -t nat -F
372
/sbin/iptables -t mangle -F
373
/sbin/iptables -P INPUT ACCEPT
374
/sbin/iptables -P FORWARD ACCEPT
375
/sbin/iptables -P OUTPUT ACCEPT
376
377
/sbin/ip6tables -F
378
/sbin/ip6tables -P INPUT ACCEPT
379
/sbin/ip6tables -P FORWARD ACCEPT
380
/sbin/ip6tables -P OUTPUT ACCEPT
381
382
sleep 3
383
echo -e "Stopping firewall.. \n"
384
;;
385
*)
386
;; 
387
esac
388
exit
389
~~~
390 32 david.daugareil
391
Le rendre exécutable et tester les règles :
392
393
~~~
394
sudo chmod +x /etc/init.d/netfilter
395
sudo /etc/init.d/netfilter start
396
~~~
397 33 david.daugareil
398
A partir de cet instant c'est pleinement fonctionnel même si il reste quelques angles à arrondir...! :D
399
400
Activer ces règles au démarrage :
401
402
~~~
403
sudo update-rc.d netfilter defaults
404 35 david.daugareil
sudo update-rc.d netfilter enable
405 33 david.daugareil
~~~
406
407
Valider que l'ensemble de ces réglages sont conservés après un ultime reboot :
408
409
~~~
410
sudo reboot
411
~~~
412
413 34 david.daugareil
Remarque après ce dernier reboot le ssh est uniquement fonctionnel depuis le WiFi.
414
415 33 david.daugareil
ENJOY !