mercredi 3 juin 2020

Sécurité: Se protéger du "boot" sur nos XBOX one !

En fait, depuis plusieurs mois, on se fait "boot" à cause du fait que les IPs sont révélés dans les groupes XBOX quand on est en ligne sur le XBOX live (Apparement sur PS4, il n'y a pas le problème). Les "booteurs" sont des tricheurs qui pour faire perdre ses opposants piquent votre IP internet quand vous lui parler ou échangé en chat sur un même groupe (souvent c'est un ancien équipier qui garde votre IP pour s'en servir contre vous plus tard... pas cool du tout !!!)
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 :-(.

https://drive.google.com/uc?export=view&id=1pjWdbDiseamxHeZxmYnLbbzpjhHYqDm7


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)

https://drive.google.com/uc?export=view&id=10Z8IdX0MfCXUvIqkXq4N4WyuT5yjmNHC

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.


 Password à saisir ci-après : raspberry 

(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