Brique vpn » Historique » Version 34
david.daugareil, 10/03/2019 18:09
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 | ~~~ |
||
376 | 32 | david.daugareil | |
377 | Le rendre exécutable et tester les règles : |
||
378 | |||
379 | ~~~ |
||
380 | sudo chmod +x /etc/init.d/netfilter |
||
381 | sudo /etc/init.d/netfilter start |
||
382 | ~~~ |
||
383 | 33 | david.daugareil | |
384 | A partir de cet instant c'est pleinement fonctionnel même si il reste quelques angles à arrondir...! :D |
||
385 | |||
386 | Activer ces règles au démarrage : |
||
387 | |||
388 | ~~~ |
||
389 | sudo update-rc.d netfilter defaults |
||
390 | ~~~ |
||
391 | |||
392 | Valider que l'ensemble de ces réglages sont conservés après un ultime reboot : |
||
393 | |||
394 | ~~~ |
||
395 | sudo reboot |
||
396 | ~~~ |
||
397 | |||
398 | 34 | david.daugareil | Remarque après ce dernier reboot le ssh est uniquement fonctionnel depuis le WiFi. |
399 | |||
400 | 33 | david.daugareil | ENJOY ! |