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çais » 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 14.04 LTS 64 bits
Une fois connecté en root sur le VPS,
1 |
# apt-get update && apt-get upgrade |
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 :
1 |
$ wget http://swupdate.openvpn.org/as/openvpn-as-2.0.10-Ubuntu14.amd_64.deb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ sudo dpkg -i openvpn-as-2.0.10-Ubuntu14.amd_64.deb Selecting previously unselected package openvpn-as. (Reading database ... 24641 files and directories currently installed.) Unpacking openvpn-as (from openvpn-as-2.0.7-Ubuntu12.amd_64.deb) ... Setting up openvpn-as (2.0.7-Ubuntu12) ... The Access Server has been successfully installed in /usr/local/openvpn_as Configuration log file has been written to /usr/local/openvpn_as/init.log Please enter "passwd openvpn" to set the initial administrative password, then login as "openvpn" to continue configuration here: https://monip:943/admin To reconfigure manually, use the /usr/local/openvpn_as/bin/ovpn-init tool. Access Server web UIs are available here: Admin UI: https://monip:943/admin Client UI: https://monip:943/ |
Il ne nous reste plus qu’à choisir un mot de passe pour l’utilisateur openvpn (qui est administrateur du serveur OpenVPN)
1 |
$ sudo passwd 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 :
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 14.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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ sudo apt-get install openjdk-7-jdk git $ wget ftp://apache.mirror.iweb.ca/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.tar.gz $ cd /opt $ sudo tar xvzf ~/apache-maven-3.2.1-bin.tar.gz $ echo "export PATH=\$PATH:/opt/apache-maven-3.2.1/bin" >> ~/.bashrc $ . ~/.bashrc $ mvn --version Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-14T18:37:52+01:00) Maven home: /opt/apache-maven-3.2.1 Java version: 1.7.0_55, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre Default locale: en_GB, platform encoding: UTF-8 OS name: "linux", version: "2.6.32-042stab084.14", arch: "amd64", family: "unix" $ cd $ git clone https://github.com/adamfisk/LittleProxy.git $ cd LittleProxy/ $ ./run.bash |
Vous verrez alors :
1 2 3 4 5 6 |
Running using Java on path at /usr/bin/java with args -server -XX:+HeapDumpOnOutOfMemoryError -Xmx800m -jar ./target/littleproxy-1.0.0-beta8-SNAPSHOT-littleproxy-shade.jar 1 2014-05-08 07:17:09,775 INFO [main] proxy.Launcher (?:?).?() - Running LittleProxy with args: [] About to start server on port: 8080 About to start... 495 2014-05-08 07:17:10,269 INFO [main] impl.DefaultHttpProxyServer (?:?).?() - Starting proxy at address: 0.0.0.0/0.0.0.0:8080 504 2014-05-08 07:17:10,278 INFO [main] impl.DefaultHttpProxyServer (?:?).?() - Proxy listening with TCP transport |
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 :
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 :
1 2 3 4 5 6 7 8 9 10 11 12 |
package org.littleshoot.proxy; public class SimpleAuthenticator implements ProxyAuthenticator { @Override public boolean authenticate(String userName, String password) { if ("anthony".equals(userName) && "password".equals(password)) { return true; } return false; } } |
et dans la classe Launcher.java, aux environs de la ligne 113, configurer LittleProxy avec votre classe d’authentification :
1 2 3 |
System.out.println("About to start..."); bootstrap.withProxyAuthenticator(new SimpleAuthenticator()); bootstrap.start(); |
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 :
1 |
$ ssh -ND 3128 ipVps |
ensuite dans Foxyproxy, configurer votre nouveau proxy (qui disparaitra dès lors que votre session ssh se terminera)
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
1 |
# apt-get install vnc4server fluxbox |
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
1 2 |
$ ps aux | grep vnc anthony 25447 0.1 0.7 25240 8208 pts/0 S 23:12 0:00 Xvnc4 :1 -desktop vps:1 (anthony) -auth /home/anthony/.Xauthority -geometry 1024x768 -depth 16 -rfbwait 30000 -rfbauth /home/anthony/.vnc/passwd -rfbport 5901 -pn -fp /usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/Speedo/,/usr/X11R6/lib/X11/fonts/misc/,/usr/X11R6/lib/X11/fonts/75dpi/,/usr/X11R6/lib/X11/fonts/100dpi/,/usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,/usr/share/fonts/X11/100dpi/ -co /etc/X11/rgb |
Configurer le serveur X à utiliser lorsque vous lancerez une application graphique :
1 |
$ export DISPLAY=:1; |
Installez ensuite un navigateur / fureteur et lancez le :
1 2 |
$ sudo apt-get install firefox $ firefox & |
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
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 :
1 |
$ ssh -X ip |
et relancer firefox :
1 |
$ firefox & |
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)