Script VPN en vadrouille

De balade de nouveau en Colombie.

Cette année, j’ai refait mon script de connexion vers la maison. Il s’agit de faire croire à face de bouc et co que je suis toujours à la maison pas qu’ils me posent tout un tas de questions dont moi-même ne suis pas sûr de pouvoir répondre…

Tout est fait sous Linux Debian mais il est facile d’adapter à d’autres distribution.

Côté serveur

Pré-requis, avoir une machine à la maison qui écoute en SSH (port tcp/22), c’est le serveur. Et le routeur (box) de la maison doit rediriger les connexions SSH de l’extérieur vers ce serveur.
Cette machine doit permettre le routage et masquer les connexions qui passent par elle. Les commandes :

  • sysctl -w net.ipv4.ip_forward=1
  • iptables -t nat -A POSTROUTING -s 10.3.0.0/24 -o eth0 -j MASQUERADE

Il faut autoriser les VPN dans le démon SSHD, ajouter dans /etc/ssh/sshd_config :
PermitRootLogin yes
PermitTunnel yes
Et redémarrer le démon :

  • service ssh restart

Côté client

Sur mon poste utilisateur en Colombie, je crée dans /usr/local/bin/tun2home.sh le script :

#!/bin/bash
ID=$(id | cut -d '=' -f 2 | cut -d '(' -f 1)
echo $ID
[ "$ID" != "0" ] && sudo /usr/local/bin/tun2home.sh
[ "$ID" != "0" ] && return 2>&-
[ "$ID" != "0" ] && exit 2>&-
# Verif cnx
[ "$(ip a | grep tun0)" != "" ] && echo "Already running..."
[ "$(ip a | grep tun0)" != "" ] && return 2>&-
[ "$(ip a | grep tun0)" != "" ] && exit 2>&-
# cnx
SERVER="1.2.3.4"
ssh -p 443 -w0:0 root@$SERVER -f -- \
  ifconfig tun0 10.3.0.2 pointopoint 10.3.0.1
ifconfig tun0 10.3.0.1 pointopoint 10.3.0.2
# routage
OLDGATEWAY=$(ip r | grep default | head -1 | cut -d ' ' -f 3)
route add -host $SERVER gw $OLDGATEWAY
route del default
route add default gw 10.3.0.2
# Modif DNS
route add -host 8.8.8.8 gw $OLDGATEWAY
echo "nameserver 8.8.8.8" > /etc/resolv.conf

Remplacer l’adresse IP 1.2.3.4 par l’adresse de la maison…

Rendre exécutable le script :

  • chmod 755 /usr/local/bin/tun2home.sh

Modifier SUDO pour permettre aux utilisateurs de lancer la connexion VPN. Créer le fichier /etc/sudoers.d/tun2home :
%users ALL=NOPASSWD: /usr/local/bin/tun2home.sh

Maintenant, un utilisateur peut initier le VPN vers la maison avec la commande :

  • tun2home.sh

Optimisations

Le serveur SSH sur son port tcp/22 habituel est une cible régulière d’attaque sur Internet. Mais même si il y a peu de chance que les attaques réussissent sur un serveur à jour, il est toujours pénible de voir ça dans les logs toute la journée.
La solution, changer le port par défaut et penser à changer la redirection de port sur le routeur de la maison. Évidemment, certains ports sont plus opportuns que d’autres et un choix judicieux peut aider à camoufler le VPN ou à contourner les blocages de ports de certains opérateurs locaux peu scrupuleux.