Installation d'un serveur OpenVPN et automatisation
Contents
OpenVPN est un logiciel permettant de monter un serveur VPN SSL. Le but est de créer un LAN qui passe sur le WAN, et dont les données sont cryptées. Cela est utile quand on ne souhaite pas ouvrir de ports à partir de tout internet par exemple. Ce tutorial présente l’installation d’un serveur OpenVPN avec une identification par certificats, qui sont uniques à chaque personne.
- Installation d’un serveur OpenVPN
Il faut installer le paquet OpenVPN
apt-get install openvpn
Puis on copie les samples dans le répertoire de configuration
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
Il faut éditer les variables suivantes
vim /etc/openvpn/easy-rsa/vars
export KEY_COUNTRY="FR"
export KEY_PROVINCE="75"
export KEY_CITY="Paris"
export KEY_ORG="Nom de la societé"
export KEY_EMAIL="email@domaine.fr"
On lance les commandes suivantes pour générer les clés et certificats (ne pas tenir compte des messages qui s’affichent, ceux-ci sont normaux)
cd /etc/openvpn/easy-rsa/
source vars
./clean-all
./build-dh
./pkitool --initca
./pkitool --server server
openvpn --genkey --secret keys/ta.key
On copie les clés dans le repertoire de configuration
cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn/
On chroot OpenVPN afin de limiter la casse en cas de faille dans OpenVPN
mkdir /etc/openvpn/jail
mkdir /etc/openvpn/clientconf
On crée le fichier de configuration du serveur, en adaptant avec l’adresse IP publique et le port sur lequel on souhaite faire écouter le serveur VPN.
vim /etc/openvpn/server.conf
mode server
proto tcp
port <port> # A adapter
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
tls-auth ta.key
cipher AES-256-CBC
server 10.8.0.0 255.255.255.0 # On peut changer le réseau du LAN ici
keepalive 10 120
user nobody
group nogroup
chroot /etc/openvpn/jail
persist-key
persist-tun
comp-lzo
verb 3
mute 20
status openvpn-status.log
On lance ensuite le serveur
cd /etc/openvpn
openvpn server.conf
Si la ligne suivante s’affiche à la fin, le serveur est correctement configuré
Tue Oct 16 09:13:00 2012 Initialization Sequence Completed
On peut donc l’arréter avec un CTRL+C
On ajoute la ligne suivante à la fin du fichier de configuration /etc/openvpn/server.conf
log-append /var/log/openvpn.log
Puis on lance le serveur
/etc/init.d/openvpn start
Il faut activer l’ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
Puis le mettre en dur dans la configuration en cas de reboot
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
Il faut créer la règle iptables, à adapter en fonction du LAN, et à ajouter à /etc/init.d/firewall
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
- Ajouter une nouvelle route aux clients dès leur connexion
On modifie le fichier /etc/openvpn/server.conf
Ajouter la ligne après « server » :
push 'route 192.168.3.0 255.255.255.0'
On relance le serveur OpenVPN :
/etc/init.d/openvpn restart
Dans le cas où la chaine « FORWARD » d’iptables est en « Policy DROP », il faut autoriser le routage
vers une machine en particlulier :
iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 192.168.3.121 -j ACCEPT
vers un réseau entier :
iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 192.168.3.0/24 -j ACCEPT
- Script d’ajout d’utilisateurs
Voici le script d’ajout automatique d’utilisateurs, ne pas oublier de change l’adresse IP et le numéro de port :
#!/bin/bash
# Syntaxe: # ./create_vpn_user.sh <prenom-nom>
#
# Test que le script est lance en root
if [ $EUID -ne 0 ]; then
echo "Le script doit etre lance en root: # $0 <prenom-nom>" 1>&2
exit 1
fi
# Test parametre
if [ $# -ne 1 ]; then
echo "Il faut saisir le nom de la personne: # $0 <prenom-nom>" 1>&2
exit 1
fi
cd /etc/openvpn/easy-rsa
echo "Creation du client OpenVPN: $1"
echo "Veuillez choisir le type de certificat :"
echo "1) Certificat SANS mot de passe"
echo "2) Certificat AVEC mot de passe"
read key
case $key in
1)
echo "Creation du certificat SANS mot de passe pour le client $1"
source vars
./build-key $1
;;
2)
echo "Creation du certificat AVEC mot de passe pour le client $1"
source vars
./build-key-pass $1
;;
*)
echo "Choix non correct !"
echo "Arret du script"
exit 0
;;
esac
mkdir /etc/openvpn/clientconf/$1
cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/$1.crt keys/$1.key /etc/openvpn/clientconf/$1/
cd /etc/openvpn/clientconf/$1
cat >> client.conf << EOF
# Client
client
dev tun
proto tcp-client
remote <IP> <port>
resolv-retry infinite
cipher AES-256-CBC
# Cles
ca ca.crt
cert $1.crt
key $1.key
tls-auth ta.key 1
# Securite
nobind
persist-key
persist-tun
comp-lzo
verb 3
EOF
cp client.conf client.ovpn
tar cvzf $1.tar.gz *
echo "Creation du client OpenVPN $1 termine"
echo "/etc/openvpn/clientconf/$1/$1.tar.gz"
echo "---"
Une fois le script exécuté, il crée une archive .tar.gz dans /etc/openvpn/clientconf/nom-du-client. Il faut lui fournir cette archive, qui contient clés et certificats, ainsi que le fichier de configuration pour windows et linux
- Ajout manuel de client
On crée la clé
cd /etc/openvpn/easy-rsa
source vars
./build-key
Il faut répondre aux questions, et on peut paramétrer un mot de passe ou pas.
Puis on crée le repertoire correspondant au client et on déplace les fichiers générés dedans
mkdir /etc/openvpn/clientconf/<prenom-nom>
cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/<prenom-nom>.crt keys/<prenom-nom>.key /etc/openvpn/clientconf/<prenom-nom>
cd /etc/openvpn/clientconf/<prenom-nom>/
Il faut ensuite créer le fichier de configuration, en pensant à adapter l’IP et le port, ainsi que les noms des certificats :
vim client.conf
# Client
client
dev tun
proto tcp-client
remote <IP> <port>
resolv-retry infinite
cipher AES-256-CBC
ca ca.crt
cert <prenom-nom>.crt
key <prenom-nom>.key
tls-auth ta.key 1
nobind
persist-key
persist-tun
comp-lzo
verb 3
On copie le fichier en changeant l’extention pour créer un fichier de configuration Windows
cp client.conf client.ovpn
Puis on génère l’archive que l’on va fournir au client
tar cvzf .tar.gz *
- Configuration côté client
- Sous Linux (Network-Manager) :
Il faut tout d’abord installer openvpn et network-manager-openvpn-gnome
apt-get install openvpn resolvconf network-manager-openvpn-gnome
Puis déplacer l’archive .tar.gz dans /etc/openvpn/ et l’extraire
mv prenom-nom.tar.gz /etc/openvpn/
cd /etc/openvpn
tar xvzf prenom-nom.tar.gz
Aller dans Tableau de bord > Connexions VPN > Configurer le VPN.
Cliquer sur le bouton Importer.
Choisir le fichier /etc/openvpn/client.conf
Remplacer le nom de la connexion par un nom plus explicite
Cliquer sur « Editer », puis aller dans « Routes », et cocher la case « Utiliser cette connexion uniquement pour les ressources du réseau »
Cliquer sur « Appliquer », puis aller dans Tableau de bord > Connexions VPN > Client
Le VPN devrait être connecté.
- Sous Windows
Télécharger OpenVPN for Windows :
L’installer, accepter la création du nouveau périphérique « TAP ».
Extraire l’archive et copier les fichiers dans C:\Programmes\OpenVPN\config
Lancer OpenVPN GUI (Avec les droits administrateurs, clique droit, Exécuter en tant qu’administrateur »)
Une icône apparaitra en bas, et quelques secondes plus tard, une bulle informe de l’IP assignée.
- Sous Linux à la main
Aller dans le répertoire qui contient l’archive extraite, puis lancer la commande suivante
openvpn --script-security 2 --config client.conf
La ligne suivante doit s’afficher à la fin
Tue Oct 16 16:30:39 2012 Initialization Sequence Completed
Author VaLouille
LastMod 2013-02-18