Installation d'un serveur VPN sous debian wheezy avec openvpn
Posted on lun. 02 février 2015 in tuto
Salut à tous !
Aujourd'hui petit tuto sur l'installation d'un VPN sur serveur debian wheezy !
C'est quoi un VPN ?
Un Virtual Private Network, c'est un réseau comme votre réseau local chez vous, mais qui est disponible via Internet, avec du chiffrement en prime. Les intérêts sont multiples, par exemple accéder à un ordinateur qui se trouve chez vous, ou contourner un pare-feu pour jouer en cours... *ahem* C'est aussi un excellent moyen de masquer votre trafic dans le réseau local et d'avoir une ip de sortie différente (celle de votre serveur), dans un autre pays par exemple.
Pour cela, il nous faut un serveur pour faire tourner notre serveur VPN, sur lequel les différents ordinateurs du VPN peuvent se connecter, et d'où l'accès internet sortira.
Allez, c'est parti !
Installation et PKI
Première étape, installer openvpn. Bah on va pas chercher compliqué :
apt-get update
apt-get upgrade
apt-get install openvpn
Ensuite, il faut générer une PKI (Public Key Infrastructure). C'est un système de clefs et de certificats qui permettra de chiffer le trafic. Openvpn propose tout ce qu'il faut pour le faire en quelques commandes :
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
cd /etc/openvpn/easy-rsa
Il faut ensuite modifier le fichier vars
pour modifier quelques options :
key 2048
export KEY_COUNTRY="FR"
export KEY_PROVINCE="FR"
export KEY_CITY="FR"
export KEY_ORG="exemple.com"
export KEY_EMAIL="exemple@exemple.com"
(remplacez les valeurs de KEY_ORG et KEY_EMAIL par vos valeurs)
Générez les certificats :
source vars
./clean-all
./build-dh
./pkitool --initca
./pkitool --server server
openvpn --genkey --secret keys/ta.key
cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh2048.pem /etc/openvpn/
mkdir /etc/openvpn/jail && mkdir /etc/openvpn/clientconf
Configuration serveur OpenVPN
La configuration de openvpn se trouve dans le fichier /etc/openvpn/server.conf
:
# Serveur UDP/1194
mode server
proto udp
port 1194
#Ici l'utilisation de tun va permettre de créer une interface réseau tun0 (par exemple) qui correspondra a notre vpn
dev tun
# Clés certificats
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 1
key-direction 0
cipher AES-256-CBC
# Réseau
# Les ip distribuées aux machines seront de la forme 10.8.0.x
server 10.8.0.0 255.255.255.0
# Cette option permet a un client de joindre les autres clients du VPN. Si vous souhaitez utiliser votre VPN uniquement pour avoir une sortie réseau distance, vous pouvez ne pas mettre cette option.
client-to-client
push "redirect-gateway def1 bypass-dhcp"
# On utilise les serveurs DHCP de google pour les clients, changez selon votre choix
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
# Sécurité : le programme est lancé sans aucun droits et coincé dans le dossier (vide) jail.
user nobody
group nogroup
chroot /etc/openvpn/jail
persist-key
persist-tun
# On utilise de la compression pour soulager le réseau
comp-lzo
# Log
verb 3
mute 20
status openvpn-status.log
# On enregistre les logs dans un fichier dédié :
log-append /var/log/openvpn.log
Pour que nos clients puissent accéder à internet, il va falloir faire suivre (forward) les paquets, il faut donc activer cette possibilité (bloquée par défaut). Pour cela, il faut exécuter la commande suivante :
# sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
Et pour que cette configuration soit conservée au reboot il vaut modifier le fichier /etc/sysctl.conf
et décommenter la ligne :
net.ipv4.ip_forward = 1
Il faut aussi paramétrer le masquerading avec netfilter avec la commande
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Pour ceux qui ont un firewall netfilter, pensez à rajouter les règles suivantes (a minima, pas de filtrage) :
# iptables -t filter -A INPUT -p udp --dport 1194 -j ACCEPT
# iptables -A FORWARD -i tun0 -j ACCEPT
# iptables -A FORWARD -o tun0 -j ACCEPT
# iptables -t filter -A OUTPUT -p udp --sport 1194 -j ACCEPT
Et voila pour le serveur !
Configuration clients
Maintenant, on prépare les configurations clients, toujours depuis le serveur, avec les certificats. Retenez bien le mot de passe du certificat pour vous connecter ensuite :
# cd /etc/openvpn/easy-rsa
# source vars
# ./build-key-pass mon-serveur-vpn
# cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/mon-serveur-vpn.crt keys/mon-serveur-vpn.key /etc/openvpn/clientconf/mon-serveur-vpn/
# cd /etc/openvpn/clientconf/mon-serveur-vpn/
Créez le fichier client.conf
:
# Client
client
dev tun
proto udp
#Ici remplacez A.B.C.D par l'IP de votre serveur
remote A.B.C.D 1194
resolv-retry infinite
cipher AES-256-CBC
# Clé
ca ca.crt
cert mon-serveur-vpn.crt
key mon-serveur-vpn.key
tls-auth ta.key 0
key-direction 1
# Sécurité
nobind
persist-key
persist-tun
comp-lzo
verb 3
Pour des soucis de compatibilité, copiez le en lui donnant l'extension ovpn :
# cp client.conf client.ovpn
Puis on crée une archive avec toute notre configuration client :
# cd ..
# tar zcvf vpnconf.tgz mon-serveur-vpn
Une fois cette partie effectuée, il vous suffit de récupérer et décompresser l'archive sur votre client et d'importer la configuration dans votre gestionnaire de connexion (networkmanager par exemple pour linux), en lui donnant le mot de passe du certificat.
Une fois connecté à votre VPN, vous pouvez aller sur internet pour afficher votre ip (j'utilise http://whatsmyip.net), et si tout va bien, vous verrez l'IP de votre serveur ! Et voila, votre VPN fonctionne !