Projet

Général

Profil

Brique vpn » Historique » Version 31

david.daugareil, 10/03/2019 17:57

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
Tester la bon fonctionnement du VPN :
244 1 stephane.ligozat
245
~~~
246
sudo systemctl start openvpn@aqn
247
sudo systemctl status openvpn
248
ifconfig
249
traceroute www.debian.org
250
~~~
251
252 26 david.daugareil
Si tout est au vert, on valide le démon openvpn :
253
254
~~~
255
sudo systemctl enable openvpn@aqn
256
~~~
257
258
## le Firewall : Routage, NAT...
259
260 29 david.daugareil
Editer le fichier sysctl.conf
261
262
~~~
263
sudo vi /etc/sysctl.conf
264
~~~
265
266
Décommenter les lignes :
267
- net.ipv4.ip_forward=1
268
- net.ipv6.conf.all.forwarding=1
269 30 david.daugareil
270
Et valider les modifications :
271
272
~~~
273
sudo sysctl --system
274
~~~
275 31 david.daugareil
276
Créer le fichier netfilter et l'éditer :
277
278
~~~
279
sudo touch /etc/init.d/netfilter
280
sudo vi /etc/init.d/netfilter
281
~~~
282
283
Y coller les règles suivantes :
284
285
~~~
286
#!/bin/bash
287
# Script Netfilter
288
### BEGIN INIT INFO
289
# Provides: netfilter
290
# Required-Start:
291
# Required-Stop:
292
# Default-Start: 2 3 4 5
293
# Default-Stop: 0 1 6
294
# Short-Description: Start firewall daemon at boot time
295
# Description: Custom Firewall scrip.
296
### END INIT INFO
297
298
case "$1" in
299
'start')
300
# On vide les anciennes règles
301
iptables -F
302
iptables -X
303
iptables -Z
304
305
# Mise en place des sécurités noyaux
306
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
307
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
308
echo 1 >/proc/sys/net/ipv4/conf/all/log_martians
309
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
310
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
311
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
312
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
313
314
# Mise en place du NAT pour permettre au réseau Wi-Fi de communiquer sur Internet
315
iptables -t nat -A POSTROUTING -o tun0 -s 172.16.10.0/24 -j MASQUERADE
316
# Par défaut, on bloque les paquets provenant d'un réseau vers un autre réseau
317
# On bloque ce qui arrive sur le Raspberry
318
# On autorise tout ce qui sort du boîtier
319
iptables -t filter -P FORWARD DROP
320
iptables -t filter -P OUTPUT ACCEPT
321
iptables -t filter -P INPUT DROP
322
ip6tables -t filter -P FORWARD DROP
323
ip6tables -t filter -P OUTPUT ACCEPT
324
ip6tables -t filter -P INPUT DROP
325
326
# On autorise toutes les connexions en localhost (boucle locale)
327
iptables -t filter -A INPUT -i lo -j ACCEPT
328
iptables -t filter -A OUTPUT -o lo -j ACCEPT
329
ip6tables -t filter -A INPUT -i lo -j ACCEPT
330
ip6tables -t filter -A OUTPUT -o lo -j ACCEPT
331
332
# On autorise les réponses à une connexion préalablement établie
333
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
334
iptables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
335
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
336
ip6tables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
337
ip6tables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
338
ip6tables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
339
340
# On autorise tout type de flux provenant du réseau Wi-Fi à destination d'internet
341
iptables -t filter -A FORWARD -i wlan0 -o tun0 -s 172.16.10.0/24 -m state --state NEW -j ACCEPT
342
343
# On autorise les machines connectées au réseau Wi-Fi à se connecter sur le boîtier
344
iptables -t filter -A INPUT -i wlan0 -m state --state NEW -j ACCEPT
345
ip6tables -t filter -A INPUT -i wlan0 -m state --state NEW -j ACCEPT
346
347
# On autorise les requêtes RA et NDP vers mon Raspberry PI
348
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
349
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
350
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
351
352
sleep 3
353
echo -e "Starting firewall.. \n"
354
;;
355
'stop')
356
/sbin/iptables -F
357
/sbin/iptables -t nat -F
358
/sbin/iptables -t mangle -F
359
/sbin/iptables -P INPUT ACCEPT
360
/sbin/iptables -P FORWARD ACCEPT
361
/sbin/iptables -P OUTPUT ACCEPT
362
363
/sbin/ip6tables -F
364
/sbin/ip6tables -P INPUT ACCEPT
365
/sbin/ip6tables -P FORWARD ACCEPT
366
/sbin/ip6tables -P OUTPUT ACCEPT
367
368
sleep 3
369
echo -e "Stopping firewall.. \n"
370
;;
371
*)
372
;; 
373
esac
374
exit
375
~~~