Simple VPN sur SSH avec sshuttle ou comment surfer tranquillement sur un réseau public

Lorsque je me rends à des conférences où potentiellement des pirates seront sur le même LAN que moi, je passe toujours une heure ou deux à vérifier mon laptop.

C’était le cas dernièrement au SSTIC, une conférence sur la sécurité informatique.

Mon PC fonctionne sous Manjaro Linux, une distribution à base de Arch avec un installeur et quelques outils qui rendent cette distribution accessible.

J’ai donc fait un tour des services actifs et commencé par désactiver SSH, c’est en effet bien pratique quand je veux accéder à mon laptop du boulot mais sur un LAN public autant le désactiver.

Pour sécuriser et rendre mes communications chiffrées je n’ai pas de VPN perso, j’utilise donc la fonction de redirection de port dynamique de SSH.

En suivant cette procédure https://web.archive.org/web/20130621205516/http://blog.crash-override.net/blog/2006/12/21/206.html j’arrive d’avoir l’équivalent d’un VPN seulement en passant par SSH:)

Mon serveur SSH est un OpenBSD, je m’authentifie dessus avec un OTP (yubikey).

Ce mécanisme fonctionne bien mais j’ai testé dernièrement une solution encore plus simple : sshuttle.

Ce super outils va automatiquement ouvrir une session SSH et configurer iptables de manière à faire passer tous le trafic par ce tunnel.

Son utilisation est simple :

alias tunnel='sshuttle --dns -vvr user@server.com 0/0'

et pourvu que python soit installé sur votre serveur et dispo dans le PATH, c’est tout ce que vous avez à faire :)

Ensuite on active le par-feu iptables :

# systemctl start iptables

avec des règles très simples qui interdit tous trafic entrant qui n’est pas une connexion déjà établie:

cat /etc/iptables/iptables.rules 
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p icmp -j REJECT 
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -j REJECT --reject-with tcp-reset 
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable 
-A INPUT -j REJECT --reject-with icmp-proto-unreachable 
COMMIT

Enfin n’oubliez pas ipv6, pour moi la meilleur façon de se protéger c’est de le désactiver dans le noyau dans le fichier grug.cfg ! (comme ipv4 est encore utilisé partout…)

linux /vmlinuz-310-x86_64 root=UUID=aaaa-bbbb-cccc 0 rw resume=UUID=eeee-fff-0000 quiet ipv6.disable=1

Voilà vous pouvez utiliser votre ordinateur en toute sécurité sur un réseau public :-)