Utiliser un VPS pour héberger un serveur OpenVPN et un serveur proxy

Vivant au Canada, j’ai souvent été frustré de me voir refuser l’accès à des sites internet français qui restreignent l’accès à leurs services aux résidents français (par exemple certains albums d’artistes français et certains films ne sont accessibles au téléchargement légal que depuis la France, les services de rattrapage des chaines de télés françaises  “replay tv ” sont aussi friands de géofiltrage).

Aussi, lorsque je suis en déplacement il m’arrive de me connecter à des réseaux wifi publics; ce qui représente un risque pour la confidentialité de mes communications (pour tous ces services qui n’utilisent pas SSL …)

Les deux techniques les plus populaires pour contourner le géofiltrage et garantir la confidentialité des communications sont l’utilisation de serveurs VPN ou proxy.

Héberger un serveur OpenVPN sur son VPS

Choisir son VPS

Souvent la solution la plus simple consiste de souscrire à un service de VPN existant, il en existe plusieurs, qui proposent même de choisir le pays de transit afin de contourner des restrictions géographiques de différents pays.

Si vous n’avez besoin que d’un pays en particulier, il peut être intéressant d’héberger votre propre serveur VPN sur une machine à bas coût – et puis c’est toujours réconfortant d’être un peu plus en contrôle de son trafic / infrastructure que de faire confiance à une tierce partie…

Les serveurs dédiés les moins onéreux sont les VPS (Virtual Private Server), des machines virtuelles consommant une portion des ressources de leur hôte.

Plusieurs choses sont à considérer concernant le choix d’un VPS (à part leur coût)

  • l’adresse IP qui lui sera assignée (dans mon cas, j’avais besoin d’une adresse IP française)
  • la bande passante disponible, en particulier la vitesse de connexion entre votre modem à la maison et le VPS (critique si l’on veut accéder à des services de “streaming”)
  • la technologie de virtualisation utilisée par le fournisseur de VPS (si l’on veut utiliser docker pour gérer les logiciels à installer, OpenVZ est à proscrire)

Après recherches et expérimentations, j’en viens au bilan suivant :

  • vultr.com est un hébergeur très prometteur car il propose des VPS à l’heure : si vous ne l’utilisez pas (il faut que l machine soit détruite, pas juste simplement arrêtée), vous ne payez pas, et docker fonctionne parfaitement dessus (virtualisation KVM); malheureusement, même s’ils ont un datacenter en France, les IPs assignées sont parfois vues comme provenant du New Jersey ; à ré essayer dans quelques mois (par contre parfait si vous voulez une IP américaine) mise à jour 23 Mai : le range 108.61.208.0 – 108.61.209.255 (mon VPS “françcais” a reçu une adresse IP de ce range) est maintenant reconnu comme étant localisé à Paris par Maxmind (la principale base de géo localisation par IP)
  • OVH propose 2 types de VPS : classic (2 euros / mois, sur base de OpenVZ, tant pis pour docker) et cloud (10 euros/ mois, sur base de VMware) : j’ai opté pour le classic, car le prix, 2 euros /mois est vraiment agressif, et les adresses IPs assignées sont bel et bien françaises

Le VPS créé, j’ai choisi Ubuntu 12.04 LTS 64 bits comme système d’exploitation.

Installer OpenVPN sur son VPS Ubuntu 12.04 LTS 64 bits

Une fois connecté en root sur le VPS,

Je vous recommande la lecture de cet article, chapitre “Bien démarrer” pour éviter de se connecter en root via ssh. et de redémarrer le VPS.

Si j’ai choisi OpenVPN (plutôt que PPTP) c’est parce que PPTP est  souvent bloqué (ports fixes) et fonctionne mal sur les réseaux de mauvaise qualité; ceci dit j’explique ici comment mettre en place PPTP.

J’ai choisi la facilité en installant OpenVPN Access Server, qui est la version commerciale de OpenVPN; l’intérêt d’utiliser OpenVPN AS, c’est qu’il prend en charge la création des clefs publiques et privées et du certificat. (en fait si j’avais pu utiliser Docker, j’aurais plutôt utiliser cette méthode : http://blog.docker.io/2013/09/docker-joyent-openvpn-bliss/ très rapide et basée sur OpenVPN community).

Outre la facilité d’installation, OpenVPN AS est compatible avec les clients OpenVPN community – le seul bémol est que seulement 2 utilisateurs simultanés sont autorisés avec la licence gratuite incluse (suffisant pour une utilisation personnelle)

Pour installer OpenVPN AS sur votre VPS donc, rendez vous sur la page de téléchargement   et choisissez le paquet correspondant à Ubuntu 12.04 LTS 64 bits, dans mon cas :

 

 

Il ne nous reste plus qu’à choisir un mot de passe pour l’utilisateur openvpn (qui est administrateur du serveur OpenVPN)

et à se rendre sur https://monip:943/ en se connectant en tant que openvpn, vous verrez alors la page suivante (après avoir accepté dans votre navigateur de faire confiance à un certificat auto signé — celui qui a été généré par OepnVPN AS durant l’installation) vous invitant à télécharger un client OpenVPN :

openvpn-as-connect openvpn-as-connect2

Vous pouvez toutefois télécharger un fichier .ovpn (compatible avec tunnelbclick par exemple) pour utiliser un autre client OpenVPN

Les plus curieux iront faire un tour du côté de la console d’administration (https://monip:943/admin) et pourront même jeter un coup d’œil aux logs (/var/log/openvpnas.log) ; pour contrôler OpenVPN vous devrez utiliser /etc/init.d/openvpnas {start|stop|restart}

Installer LittleProxy sur son VPS Ubuntu 12.04 LTS 64 bits

Pourquoi installer un serveur proxy en complément ? Pour les cas où un client VPN est difficilement configurable sur la machine utilisée (par exemple XBMC ou Showtime Media center), ou pour les cas où vous ne désirez pas que l’ensemble du trafic soit envoyé au travers du serveur VPN (oui, on peut configurer son serveur VPN pour cela, certes, mais c’est moins pratique)

Quand on pense serveur proxy sur linux, on a l’habitude de penser à Squid ; dans notre cas nous ne nécessitons pas de caching, aussi choisir une solution simple légère comme LittleProxy

C’est un logiciel écrit en Java, construit avec Maven, nous devons donc, avant de cloner le repo, installer quelques paquets :

Vous verrez alors :

 

Il vous suffira ensuite de configurer vos logiciels (navigateurs, media centers, etc…) pour utiliser ce proxy; exemple ici avec FoxyProxy, une extension Firefox pour confgurer finement (par url) l’utilisation de proxy :

Screen Shot 2014-05-08 at 12.00.25 PM

Bon par défaut LittleProxy vient sans possibilité d’utiliser un mot de passe, mais il est facile de rajouter cette fonctionnalité : créer un classe nommée SimpleAuthenticator.java :

et dans la classe Launcher.java, aux environs de la ligne 113, configurer LittleProxy avec votre classe d’authentification :

et le tour est joué !

 

Proxy socks (tunnel SSH)

Si vous ne tenez pas à utiliser un proxy http, il y a beaucoup plus simple : la mise en place d’un proxy SOCKS en utilisant un tunnel SSH : de votre poste de travail :

ensuite dans Foxyproxy, configurer votre nouveau proxy (qui disparaitra dès lors que votre session ssh se terminera)

foxyproxy-proxy-socks

CGIProxy : utile quand on ne peut pas utiliser de VPN ou de proxy http

CGI Proxy est une page web intermédiaire qui chargera le contenu du site que vous voulez consulter, et récrira les cookies et autres chemins relatifs pour que tout fonctionne bien.

Vous pouvez consulter le tutorial que j’ai écrit à ce propos

Utiliser un navigateur par déport d’affichage VNC ou X11

démarrez le une première fois pour configurer le mot de passe (cf http://blog.dahanne.net/2011/07/18/run-ui-tests-on-a-headless-jenkins-hudson-continuous-integration-server-running-ubuntu/)

Pour trouver le port de votre serveur vnc, reperez rfbport, ici 5901 et le port d’affichage X, ici :1

Configurer le serveur X à utiliser lorsque vous lancerez une application graphique :

Installez ensuite un navigateur  / fureteur et lancez le :

Sur MacOSX, il existe un client VNC inclus dans Safari , dans la barre d’adresse de Safari, tapez : vnc://ip:port  (cf http://www.davidtheexpert.com/post.php?id=5) ; sur Linux et Windows il y a toujours Real VNC Viewer

Vous y verrez alors le firefox démarré depuis votre vps

firefox-on-vnc

Si vous préférez X11 à vnc (si votre poste de travail est sous Linux ou MacOSX par exemple), vous pouvez tuer vncserver et vous reconnecter à votre VPS avec l’option -X :

et relancer firefox :

firefox-on-x11

Vérifier sa connexion au proxy ou au VPN

J’ai l’habitude d’utiliser http://ifconfig.me (de la ligne de commande, un simple curl ifconfig.me retourne l’adresse IP vue par l’extérieur) , mais je viens de découvrir qu’une recherche pour IP sur duck duck go ou même google  retourne votre adresse IP (avec un petit avantage pour DuckDuck go qui donne aussi la géo localisation de l’IP)

Screen Shot 2014-05-12 at 11.08.17 PM