Le principe du Boot est d'envoyer une attaque DDOS à votre intention :-( pour vous empêcher de jouer et donc de perdre la partie !!! Des services existent sur internet et plutôt payant.
Le principe de l'attaque DDOS (Distributed Denial of Service) est d'envoyer pleins de requêtes avec plusieurs machines pour saturer la connexion de l'IP en question.
Et manque de bol, nous sommes chez Free à la maison, et avec eux, si on se fait "boot" même 5 minutes, et bien plus de connexion pendant 2h... et ils disent ne rien pouvoir faire pour cela.
Donc on a décider de se protéger :
1) On va changer d'opérateur
Pour avoir une IP dynamique ou du moins pouvoir la changer si besoin (Apparement c'est surtout chez Orange ou Sosh que l'on peut le faire sur une connection ADSL/VSDL... je n'ai pas encore la fibre dans ma rue :-(
2) On va aussi utiliser un VPN pour cacher notre IP !
Le problème sur XBOX... pas de client VPN ni de conf VPN directement possible sur la box...
Donc la possibilité est de le mettre au niveau de la box internet ou d'un routeur Wifi (J'ai un firmware DD-WRT dans mon routeur Wifi donc c'est possible)... mais je me suis dis c'est dommage de mettre cela dans le routeur parce que toutes les connexions Wifi dans ce cas devront passer par le VPN donc je me suis dis que cela serait mieux de pouvoir choisir et que cela soit possible de le faire pour chaques appareils sur le réseau (wifi ou pas).
Donc j'ai opter pour le faire avec un Raspberry Pi :
Inconvénients:
- Pas simple à configurer, c'est pour cela qu'aujourd'hui je fais ce tuto pour vous (et pour moi si je dois le refaire ;-)
- Besoin de mettre un raspberry pi en place (dédié de préférence pour des raisons de maintenance)
- Besoin de lui trouver une place sur le réseau avec une connection etthernet de préférence.
- Passer en IP fixe les devices concernés et sans DHCP pour éviter des confs complexes du routeurs Wifi !
Avantages:
- Reste valide même si je change d'opérateur ou de routeur wifi.
- Consommation limité (je vais prendre un pi 2 dans mon cas)
- Coût limité
- juste besoin de changer de "gateway" dans les appareils qui voudront l'utiliser !
Donc voici comment mettre un raspberry pi en gateway VPN:
Pré-requis:
1) J'ai pris un compte chez NordVPN https://nordvpn.com/fr/ (j'ai pris une offre de 3 ans pour réduire le cout par mois)
On aura besoin du login/password du compte VPN par la suite.
2) J'ai pris un raspberry pi2, un boitier, un alim 5V/2A AUKRU et une microSD 4Go (suffisant et que j'avais en stock ;-)
3) Un OS Raspbian en version Lite, le dernier en date que l'on trouve ici: https://www.raspberrypi.org/downloads/raspberry-pi-os/
4) Un soft pour flasher la microSD: https://www.balena.io/etcher/
5) un PC pour faire la manip bien sur sur Windows ou Linux (dans mon cas je suis sur Windows 10)
Installation du pi et de son OS:
1) Installation de l'OS sur la microSD avec Etcher :
Rien de compliqué, on sélectionne l'image de l'OS, on sélection la microSD et on flash !!!
2) on active le SSH juste après le flashage (on eject puis réinsert la microSD (avec ou sans son adaptateur SD ;-) dans le PC pour pouvoir voir la partition "boot")
Puis on créé un fichier "ssh" à sa racine:
3) On insert ensuite la microSd dans le pi, on l'allume en branchant l'alim sur le microUSB et le SSH s'active comme on le voit ci-après, j'ai mis un écran pour voir le démarrage - désolé la photo a des reflet :-(.
Installation du VPN :
1) Pour connaitre l'IP du pi fourni par mon DHCP, dans mon cas, elle est visible au démarrage comme dans le précdent screenshot en fait ;-), mais il faudra peut être faire un second boot (dans mon cas, j'ai pu l'avoir au deuxième boot du pi finalement)
Donc 192.168.0.150.... il faudra penser à la rendre fixe dans votre DHCP (mettre en IP fixe sur le raspberry pi directement je ne suis pas un adepte, je préfère le faire via un DCHP (celui de mon routeur wifi dans mon cas), cela permet de modifier facilement la gateway et/ou les dns en cas de besoin de changement de box internet par exemple sans être obliger de changer dans chaque appareil du réseau)
2) Je m'y connecte en SSH en utilisant mobaXterm que je kiff trop en ce moment ;-) : https://mobaxterm.mobatek.net/
On peut avoir plusieurs session ouvert et en plus on browse les fichiers en même temps, j'adore.
(comme d'hab, il faudra changer votre password par défaut avec la command
passwd)
3) On peut aussi passer les commandes d'update comme d'hab :
(pas besoin de resize de la partition system, c'est fait par l'OS lui même au premier boot maintenant)
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade
4) On va devoir installer openVPN
(je propose d'avoir le VPN comme un service et pas une app comme proposé ici par NordVPN: https://support.nordvpn.com/FAQ/Setup-tutorials/1182453582/Installing-and-using-NordVPN-on-Linux.htm, pourquoi ? parce que je veux pouvoir arrêter, changer de server, etc... à distance avec ma domotique dans un second temps surement)
sudo apt-get install openvpn
5) Puis dans mon cas, pour NordVPN, télécharger une partie de la configuration comme expliqué ici : https://support.nordvpn.com/Connectivity/Linux/1047409422/How-can-I-connect-to-NordVPN-using-Linux-Terminal.htm
On télécharge et installe les confs de tous les serveurs ainsi:
cd /etc/openvpn
sudo wget https://downloads.nordcdn.com/configs/archives/servers/ovpn.zip
sudo unzip ovpn.zip
sudo rm ovpn.zip
Puis via cette page dans le cas de NordVPN, j'ai choisi le serveur conseillé : https://nordvpn.com/fr/servers/tools/
Puis on lance la commande en ligne suivante pour tester:
sudo openvpn /etc/openvpn/ovpn_udp/fr514.nordvpn.com.udp.ovpn
Cela va demander le login/password de NordVPN, et on doit avoir un écran comme cela qui fini sur "Completed":
pi@raspberrypi:/ $ sudo openvpn /etc/openvpn/ovpn_udp/fr514.nordvpn.com.udp.ovpn Wed Jun 3 19:24:14 2020 OpenVPN 2.4.7 arm-unknown-linux-gnueabihf [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019 Wed Jun 3 19:24:14 2020 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10 Enter Auth Username: emailbidon@gmail.com Enter Auth Password: ********** Wed Jun 3 19:24:56 2020 WARNING: --ping should normally be used with --ping-restart or --ping-exit Wed Jun 3 19:24:56 2020 Outgoing Control Channel Authentication: Using 512 bit message hash 'SHA512' for HMAC authentication Wed Jun 3 19:24:56 2020 Incoming Control Channel Authentication: Using 512 bit message hash 'SHA512' for HMAC authentication Wed Jun 3 19:24:56 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]212.129.34.54:1194 Wed Jun 3 19:24:56 2020 Socket Buffers: R=[163840->163840] S=[163840->163840] Wed Jun 3 19:24:56 2020 UDP link local: (not bound) Wed Jun 3 19:24:56 2020 UDP link remote: [AF_INET]212.129.34.54:1194 Wed Jun 3 19:24:56 2020 TLS: Initial packet from [AF_INET]212.129.34.54:1194, sid=20321615 983068ef Wed Jun 3 19:24:56 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this Wed Jun 3 19:24:56 2020 VERIFY OK: depth=2, C=PA, O=NordVPN, CN=NordVPN Root CA Wed Jun 3 19:24:56 2020 VERIFY OK: depth=1, C=PA, O=NordVPN, CN=NordVPN CA4 Wed Jun 3 19:24:56 2020 VERIFY KU OK Wed Jun 3 19:24:56 2020 Validating certificate extended key usage Wed Jun 3 19:24:56 2020 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication Wed Jun 3 19:24:56 2020 VERIFY EKU OK Wed Jun 3 19:24:56 2020 VERIFY OK: depth=0, CN=fr514.nordvpn.com Wed Jun 3 19:24:56 2020 Control Channel: TLSv1.2, cipher TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384, 4096 bit RSA Wed Jun 3 19:24:56 2020 [fr514.nordvpn.com] Peer Connection Initiated with [AF_INET]212.129.34.54:1194 Wed Jun 3 19:24:57 2020 SENT CONTROL [fr514.nordvpn.com]: 'PUSH_REQUEST' (status=1) Wed Jun 3 19:24:57 2020 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option DNS 103.86.96.100,dhcp-option DNS 103.86.99.100,sndbuf 524288,rcvbuf 524288,explicit-exit-notify,comp-lzo no,route-gateway 10.8.0.1,topology subnet,ping 60,ping-restart 180,ifconfig 10.8.0.7 255.255.255.0,peer-id 2,cipher AES-256-GCM' Wed Jun 3 19:24:57 2020 OPTIONS IMPORT: timers and/or timeouts modified Wed Jun 3 19:24:57 2020 OPTIONS IMPORT: explicit notify parm(s) modified Wed Jun 3 19:24:57 2020 OPTIONS IMPORT: compression parms modified Wed Jun 3 19:24:57 2020 OPTIONS IMPORT: --sndbuf/--rcvbuf options modified Wed Jun 3 19:24:57 2020 Socket Buffers: R=[163840->327680] S=[163840->327680] Wed Jun 3 19:24:57 2020 OPTIONS IMPORT: --ifconfig/up options modified Wed Jun 3 19:24:57 2020 OPTIONS IMPORT: route options modified Wed Jun 3 19:24:57 2020 OPTIONS IMPORT: route-related options modified Wed Jun 3 19:24:57 2020 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified Wed Jun 3 19:24:57 2020 OPTIONS IMPORT: peer-id set Wed Jun 3 19:24:57 2020 OPTIONS IMPORT: adjusting link_mtu to 1657 Wed Jun 3 19:24:57 2020 OPTIONS IMPORT: data channel crypto options modified Wed Jun 3 19:24:57 2020 Data Channel: using negotiated cipher 'AES-256-GCM' Wed Jun 3 19:24:57 2020 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key Wed Jun 3 19:24:57 2020 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key Wed Jun 3 19:24:57 2020 ROUTE_GATEWAY 192.168.0.254/255.255.255.0 IFACE=eth0 HWADDR=b8:27:eb:f1:e7:f9 Wed Jun 3 19:24:57 2020 TUN/TAP device tun0 opened Wed Jun 3 19:24:57 2020 TUN/TAP TX queue length set to 100 Wed Jun 3 19:24:57 2020 /sbin/ip link set dev tun0 up mtu 1500 Wed Jun 3 19:24:57 2020 /sbin/ip addr add dev tun0 10.8.0.7/24 broadcast 10.8.0.255 Wed Jun 3 19:24:57 2020 /sbin/ip route add 212.129.34.54/32 via 192.168.0.254 Wed Jun 3 19:24:57 2020 /sbin/ip route add 0.0.0.0/1 via 10.8.0.1 Wed Jun 3 19:24:57 2020 /sbin/ip route add 128.0.0.0/1 via 10.8.0.1 Wed Jun 3 19:24:57 2020 Initialization Sequence Completed
Et pour sortir, il faudra faire CTRL+C
^CWed Jun 3 19:26:30 2020 event_wait : Interrupted system call (code=4) Wed Jun 3 19:26:30 2020 SIGTERM received, sending exit notification to peer Wed Jun 3 19:26:31 2020 /sbin/ip route del 212.129.34.54/32 Wed Jun 3 19:26:31 2020 /sbin/ip route del 0.0.0.0/1 Wed Jun 3 19:26:31 2020 /sbin/ip route del 128.0.0.0/1 Wed Jun 3 19:26:31 2020 Closing TUN/TAP interface Wed Jun 3 19:26:31 2020 /sbin/ip addr del dev tun0 10.8.0.7/24 Wed Jun 3 19:26:31 2020 SIGTERM[soft,exit-with-notification] received, process exiting pi@raspberrypi:/ $
6) Maintenant pour l'utiliser tout le temps en tant que Gateway Internet, il va falloir mettre le VPN en mode service !
Pour cela, on va faire en sorte que la conf de NordVPN soit lancable en mode service avec les credentials déjà configuré.
il faut déjà sauvegarder son login et mot de passe dans un fichier:
sudo nano /etc/openvpn/nordvpn_auth.txt
ainsi :
Et on change ses droits au passage:
chmod 600 /etc/openvpn/nordvpn_auth.txt
Puis on renomme le fichier de configuration du serveur qui nous intéresse en fichier "client.conf" pouvoir le lancer dans un service et on le met dans /etc/openvpn/ :
sudo mv /etc/openvpn/ovpn_udp/fr514.nordvpn.com.udp.ovpn /etc/openvpn/client.conf
Et on va donc aussi modifier le fichier .conf pour demander l'utilisation du fichier nordvpn_auth.txt
sudo nano /etc/openvpn/client.conf
pour changer la ligne contenant "auth-user-pass" par "auth-user-pass /etc/openvpn/nordvpn_auth.txt"
On va ensuite activer OpenVPN en mode service avant de la lancer (ou le relancer):
sudo systemctl enable openvpn
sudo service openvpn restart
Puis on lance et test:
pi@raspberrypi:/etc/openvpn $ wget http://ipinfo.io/ip -qO - 201.141.12.25
Installation du routage et du firewall :
1) On active l'IP forwarding
sudo /bin/su -c "echo -e '\n#Enable IP Routing\nnet.ipv4.ip_forward = 1' > /etc/sysctl.conf"
Et on doit avoir ce résultat suite à la commande suivante pour vérifier le bon fonctionnement:
pi@raspberrypi:/etc/openvpn $ sudo sysctl -p net.ipv4.ip_forward = 1
2) On active le NAT
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
3) Et on redirige les traffics entrant/sortant dans le VPN
sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
4) On configure aussi les flux locaux, le ping et le SSH pour les PCs internes
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -i eth0 -p icmp -j ACCEPT sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT sudo iptables -P FORWARD DROP
sudo iptables -P INPUT DROP
Et pour contrôler les modifications:
pi@raspberrypi:/etc/openvpn $ sudo iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED Chain FORWARD (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED Chain OUTPUT (policy ACCEPT) target prot opt source destination
5) Et pour finir on lance ces 2 commands pour sauvegarder la configuration et rendre cela permanent après reboot:
sudo apt-get install iptables-persistent sudo systemctl enable netfilter-persistent
Configuration de la XBOX One (désolé pour la qualité des screenshots :-( ):
1) on va dans les paramètres réseaux puis avancés de la console donc:
2) On va se mettre en config statique pour le IPs et donc pouvoir mettre la gateway VPN en tant que passerelle
J'ai pas mis tout les écrans, mais il va falloir mettre votre IP (que vous aviez avant surement fixé par le DHCP) + le masque sous réseau (mettre 255.255.255.0 en général) + la passerelle (mettre l'IP de votre raspberry pi) + le premier/second DNS (dans mon cas j'ai mis l'IP de mon raspberry pi pour le premier et rien pour le second)
Ensuite cela lance un test à la fin de la conf pour confirmé que l'on est bien connecté sur internet.
3) On voit aussi que l'on est en double NAT maintenant dans les détails de la connection.
4) et un petit test de performance pour finir
Et voilà, pas simple mais pas si compliqué... maintenant, on pourra changer d'IP via le VPN ;-)... merci d'avance pour vos retours. Dans un prochain article, je vous exposerais comment interagir avec ce VPN à partir de la domotique et qu'est ce que Jeedom m'apporte facilement dans ce cas.
Enjoy !
Aucun commentaire :
Enregistrer un commentaire