Merci de partager...Share on Google+Tweet about this on TwitterShare on FacebookEmail this to someoneShare on Reddit

 

Bon alors.. la dernière fois que j’ai écrit un billet dans bloguelinux.ca, c’était le 22 octobre 2011 soit il y a 3 ans et 7 mois. Il faut dire que depuis l’arrivée de notre podcast, j’ai pu communiquer de vive voix ce que je voulais exprimer concernant mes bidouillages techniques. Mais cette fois-ci, considérant la complexité de ce que je veux démontrer, j’ai préféré écrire un billet décrivant la marche à suivre dans ses moindres détails.

Cela faisait littéralement des mois que je procrastinais à accomplir ceci. Jusqu’à il y a quelques jours, dès que mon serveur démarrait, le client OpenVPN démarrait automatiquement avec sa configuration par défaut. L’avantage de faire ceci est que tout le traffic réseau entrant et sortant de mon serveur CentOS est encrypté mais par contre mon serveur devient isolé dû à la connexion OpenVPN. Donc, il n’est pas possible de créer une règle sur mon routeur pour me permettre d’accèder à mon serveur de l’extérieur via SSH ou HTTP (en fait je peux très bien créer la règle mais elle ne permettra pas d’accéder à mon serveur). Et la seule raison pourquoi j’ai configuré OpenVPN ainsi est pour mon client Bittorrent, c’est en fait le seul traffic réseau que je désire voir obligatoirement encrypté.

Il y a tout prêt d’un an, j’ai fait des recherches pour trouver un façon de configurer OpenVPN et Transmission (mon client Bittorrent) pour que seulement le contenu de Transmission passe par OpenVPN, en faisant ceci, mon serveur redeviendrait accessible de l’extérieur. J’ai trouvé plusieurs articles et billets sur divers blog et forums qui expliquaient la marche à suivre mais plusieurs d’entres-eux semblaient se contredire et utilisaient des méthodes relativement différentes (qui sans doute fonctionnaient pour les auteurs). Une autre chose qui m’intimidait est que presque toutes ces méthodes demandaient l’utilisation de Netfilter/iptables. iptables a toujours été intimidant pour moi et je ne crois pas que je serais un jour vraiment à l’aise à utiliser cette commande en toute confiance.

J’abaisse mon chapeau bien bas pour le sérieux coup de pouce que Sandrine m’a donné afin de finalement faire fonctionner ceci. Elle avait déjà trouvé un billet de blog expliquant la marche à suivre, l’a adapté selon ses besoins et l’a fait fonctionner dans son environnement il y a plus de 6 mois. Tout ce que je fais ici est de documenter en détails les étapes que j’ai suivi pour arriver au même résultat que Sandrine (la seule différence étant que j’utilise CentOS et elle Debian).

Quelques détails avant d’entrer dans le vif du sujet. J’utilise les services de Private Internet Access (https://www.privateinternetaccess.com) pour mon accès VPN et je suis satisfait de leurs services depuis que je suis avec eux. Je ne peux que vous les recommander (Patrick en est aussi très satisfait, Sandrine est avec ProXPN, un autre excellent fournisseur de service VPN) . De plus, veuillez prendre note que cette marche à suivre est basée sur CentOS 6.6 (c’est ce que je roule sur mon serveur) que j’ai configuré avec une adresse IP statique. Puisqu’il s’agit de CentOS qui utilise SELinux et qui est activé par défaut, il faut s’assurer de le désactiver pour que cette marche à suivre fonctionne (j’ai passé 4 jours à sacrer avant de réaliser que j’avais oublié de le désactiver). Finalement, il y probablement 87 façons différentes d’arriver au même résultat (j’exagère un peu…) mais c’est de cette façon que je l’ai configuré sur mon serveur.

Une fois votre CentOS démarré et fonctionnel (configuré avec une adresse IP fixe et un compte d’utilisateur autre que root), vous êtes prêt à commencer:

Désactivé SELinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

Changer « net.ipv4.ip_forward = 0 » pour « net.ipv4.ip_forward = 1 »

sed -i 's/net\.ipv4\.ip_forward = 0/net\.ipv4\.ip_forward = 1/' /etc/sysctl.conf

Ajouter une nouvelle entrée dans le fichier de table de routage « rt_tables »

echo 1 VPN >> /etc/iproute2/rt_tables

Redémarrer CentOS


Créer une nouvelle interface locale avec l’adresse IP 192.168.0.1 Note importante: Si vous utilisez déjà le sous-réseau 192.168.0.x dans votre environnement, changez 192.168.0.1 pour autre chose, par exemple: 10.0.0.1 et remplacez 192.168.0.1 par 10.0.0.1 dans les scripts « up.sh » et « down.sh » que vous verrez plus tard.
Créer un nouveau fichier /etc/sysconfig/network-scripts/ifcfg-lo:1 avec le contenu suivant

DEVICE=lo:1 IPADDR=192.168.0.1 NETMASK=255.255.255.255 ONBOOT=yes NAME=loopback

Installer openvpn

yum install -y openvpn

Télécharger les fichiers de configuration de Private Internet Access

wget https://www.privateinternetaccess.com/openvpn/openvpn.zip

Extraire le fichier openvpn.zip
Déplacer ca.crt et crl.pem dans /etc/openvpn
Créer un répertoire « locations » sous /etc/openvpn

mkdir /etc/openvpn/locations

Déplacer tous les fichiers *.ovpn du fichier openvpn.zip dans /etc/openvpn/locations
Créer un lien symbolique (symlink) du fichier ovpn que vous désirez utiliser pour votre connexion OpenVPN

ln -s /etc/openvpn/locations/France.ovpn /etc/openvpn/client.conf

Voici le contenu du fichier /etc/openvpn/client.conf

client dev tun proto udp # La prochaine ligne sera différente selon le fichier ovpn choisi remote france.privateinternetaccess.com 1194 resolv-retry infinite nobind persist-key persist-tun ca /etc/openvpn/ca.crt tls-client remote-cert-tls server auth-user-pass /etc/openvpn/login.txt auth-nocache comp-lzo verb 1 reneg-sec 0 keepalive 10 60 crl-verify /etc/openvpn/crl.pem # Les lignes qui suivent changent le comportement de OpenVPN script-security 2 up /etc/openvpn/client/up.sh down /etc/openvpn/client/down.sh route-nopull route-method exe route-delay 1 10 route-metric 512 route 0.0.0.0 0.0.0.0

Créer un fichier « login.txt » dans /etc/openvpn avec votre nom d’utilisateur sur la première ligne et votre mot de passe sur la deuxième (Il s’agit ici de votre nom d’utlisateur et mot de passe qui vous a été donné par votre founisseur VPN).

Changer les permissions (mode) du fichier login.txt

chmod 600 /etc/openvpn/login.txt

Créer un répertoire client sous /etc/openvpn

mkdir /etc/openvpn/client

Créer les 3 fichiers suivants dans /etc/openvpn/client
up.sh

#!/bin/sh # This script enables policy routing after the tunnel interface is brought up # Policy routing is used to make sure response packets go through the tunnel interface # This is mandatory when your ISP has setup anti-spoofing filters # Create SERVICES chain in iptables /sbin/iptables -N SERVICES # Add a default route via tun0 into the VPN routing table /sbin/ip route add default dev tun0 table VPN # Pass traffic from lo:1 (192.168.0.1) to the VPN routing table, using policy routing ("ip rule" commands) /sbin/ip rule add from 192.168.0.1/32 table VPN # Pass traffic from tun0 IP address to the VPN routing table /sbin/ip rule add from $4/32 table VPN #On ajoute les règles iptables pour faire le NAT # Source NAT and destination NAT rules to make sure the incoming and ougoing packets on 192.168.0.1 are $ /sbin/iptables -A PREROUTING -t nat -i tun0 -p tcp --dport 1194 -j DNAT --to 192.168.0.1 /sbin/iptables -A PREROUTING -t nat -i tun0 -p udp --dport 1194 -j DNAT --to 192.168.0.1 /sbin/iptables -A POSTROUTING -t nat -o tun0 -j MASQUERADE # Allow session continuation traffic /sbin/iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT # Allow Bittorrent traffic via tun0 /sbin/iptables -A SERVICES -p tcp --dport 6061 -j ACCEPT # rTorrent random range /sbin/iptables -A SERVICES -p udp --dport 6061 -j ACCEPT # DHT # Disallow BitTorrent traffic via eth0 - Just to be extra safe... /sbin/iptables -A FORWARD -s 192.168.0.1/32 -o eth0 -j DROP #Démarrage de transmission /sbin/service transmission-daemon restart

down.sh

#!/bin/sh #This script disables policy routing before the tunnel interface is brought down /sbin/service transmission-daemon stop #On efface les règles iptables ajoutées /sbin/iptables -D PREROUTING -t nat -i tun0 -p tcp --dport 1194 -j DNAT --to 192.168.0.1 /sbin/iptables -D PREROUTING -t nat -i tun0 -p udp --dport 1194 -j DNAT --to 192.168.0.1 /sbin/iptables -D POSTROUTING -t nat -o tun0 -j MASQUERADE /sbin/iptables -D INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -D SERVICES -p tcp --dport 6061 -j ACCEPT # rTorrent random range /sbin/iptables -D SERVICES -p udp --dport 6061 -j ACCEPT # DHT /sbin/iptables -D FORWARD -s 192.168.0.1/32 -o eth0 -j DROP # Flush all iptables rules /sbin/iptables -F # Delete SERVICES iptables chain /sbin/iptables -X SERVICES # Remove rule for tun0 IP address /sbin/ip rule del from $4/32 table VPN # Remove rule for the secondary loopback IP address (192.168.0.1) /sbin/ip rule del from 192.168.0.1/32 table VPN # Remove the default route via tun0 from the IPRED routing table /sbin/ip route del default dev tun0 table VPN

watchdog_openvpn.sh (ce script surveille si OpenVPN a cessé de fonctionner et le redémarre au besoin)

#!/bin/bash while [ 1 ] do test1=`ip addr show tun0 | grep inet | awk '{print $2}' | cut -d/ -f1` REGEX="^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" if [[ $test1 =~ $REGEX ]]; then #OK sleep 300 else #Not OK /etc/init.d/openvpn restart 1>>/dev/null 2>>/dev/null sleep 60 fi done

Donner les permissions (mode) rwx—— (700) à ces 3 nouveaux fichiers

chmod 700 /etc/openvpn/client/*

Ajouter la ligne ci-dessous (avant la dernière ligne) au fichier rc.local pour faire démarrer watchdog_openvpn.sh au démarrage

/etc/openvpn/client/watchdog_openvpn.sh&

Afin d’installer le client Bittorrent Transmission à partir de paquet RPM, vous devez activez le repo EPEL

yum install epel-release yum -y upgrade

Si la première de ces 2 dernières commandes vous donne une erreur roulez les commandes suivantes

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm sudo rpm -Uvh epel-release-6*.rpm yum -y upgrade

Installer Transmission et Transmission Daemon (version avec interface de Web)

yum -y install transmission transmission-daemon

Créer le fichier de configuration « settings.json » pour Transmission Daemon avec le contenu ci-dessous sous /var/lib/transmission/.config/transmission/

{ "alt-speed-down": 50, "alt-speed-enabled": false, "alt-speed-time-begin": 540, "alt-speed-time-day": 127, "alt-speed-time-enabled": false, "alt-speed-time-end": 1020, "alt-speed-up": 50, "bind-address-ipv4": "192.168.0.1", "bind-address-ipv6": "fe80::", "blocklist-enabled": false, "dht-enabled": true, "download-dir": "/home/transmission/downloads", "download-limit": 100, "download-limit-enabled": 0, "encryption": 1, "incomplete-dir": "home/transmission/incomplete", "incomplete-dir-enabled": true, "lazy-bitfield-enabled": true, "lpd-enabled": false, "max-peers-global": 200, "message-level": 2, "open-file-limit": 32, "peer-limit-global": 240, "peer-limit-per-torrent": 60, "peer-port": 6061, "peer-port-random-high": 65535, "peer-port-random-low": 49152, "peer-port-random-on-start": false, "peer-socket-tos": 0, "pex-enabled": true, "port-forwarding-enabled": false, "preallocation": 1, "proxy": "", "proxy-auth-enabled": false, "proxy-auth-password": "", "proxy-auth-username": "", "proxy-enabled": false, "proxy-port": 80, "proxy-type": 0, "ratio-limit": 2.0000, "ratio-limit-enabled": false, "rename-partial-files": true, "rpc-authentication-required": true, "rpc-bind-address": "0.0.0.0", "rpc-enabled": true, "rpc-password": "MOT DE PASSE POUR LE CONTRÔLE DISTANT", "rpc-port": 9091, "rpc-username": "LOGIN POUR LE LOGIN DISTANT", "rpc-whitelist": "127.0.0.1", "rpc-whitelist-enabled": false, "script-torrent-done-enabled": false, "script-torrent-done-filename": "", "speed-limit-down": 100, "speed-limit-down-enabled": false, "speed-limit-up": 100, "speed-limit-up-enabled": false, "start-added-torrents": true, "trash-original-torrent-files": false, "umask": 18, "upload-limit": 100, "upload-limit-enabled": 0, "upload-slots-per-torrent": 14 }

Modifier lignes rpc-password et rpc-username selon vos préférences.

Créer 3 répertoires pour Transmission

mkdir -p /home/transmission/{incomplete,downloads}

Modifier les permissions de ce répertoire tel qu’indiqué

chmod -R 770 /home/transmission

Assigner le groupe « users » à ces répertoires

chgrp -R users /home/transmission

Si ce n’est déjà fait, ajouter le groupe « users » à votre compte d’utilisateur

gpasswd -a "votre nom d'utilisateur" users

Configurer le service openvpn pour qu’il démarre automatiquement lors du démarrage de CentOS

chkconfig openvpn on

Redémarrer CentOS


 

Merci de partager...Share on Google+Tweet about this on TwitterShare on FacebookEmail this to someoneShare on Reddit