sommaire
Serveur OpenVPN
Installation:
version 2.1.3-2+squeeze1
apt-get install openvpn
Configuration:
cd /etc/openvpn/
mkdir easy-rsa
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* easy-rsa/
Edition du fichier /etc/openvpn/easy-rsa/vars, à la fin du fichier:
export KEY_COUNTRY="FR"
export KEY_PROVINCE="IDF"
export KEY_CITY="Puteaux"
export KEY_ORG="fredaria.org"
export KEY_EMAIL="openvpn@fredaria.org"
Générer les clefs et les certificats:
Pour le serveur:
depuis /etc/openvpn/easy-rsa/
. ./vars
./clean-all
./build-dh
./build-ca
La réponse aux questions: laisser par défaut si tout a bien été rempli dans le fichier /etc/openvpn/easy-rsa/vars
./build-key-server vpn-server
La réponse aux questions: laisser par défaut si tout a bien été rempli dans le fichier /etc/openvpn/easy-rsa/vars.
Choisir ou pas de mettre un "challenge password "
_________________________________________________________________
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'FR'
stateOrProvinceName :PRINTABLE:'IDF'
localityName :PRINTABLE:'Puteaux'
organizationName :PRINTABLE:'fredaria.org'
commonName :PRINTABLE:'vpn-server'
emailAddress :IA5STRING:'openvpn@fredaria.org'
Certificate is to be certified until May 26 12:24:12 2023 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
_________________________________________________________________
Pour un client:
./build-key vpn-client1
Le "Common name" est important
_________________________________________________________________
-----
Country Name (2 letter code) [FR]:
State or Province Name (full name) [IDF]:
Locality Name (eg, city) [Puteaux]:
Organization Name (eg, company) [fredaria.org]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [vpn-client1]:
Name []:
Email Address [openvpn@fredaria.org]:
_________________________________________________________________
Création de la clé spéciale pour plus de sécurtité
openvpn --genkey --secret keys/ta.key
S'assurer enfin que toute les
clés soient dans le répertoire mis dans /etc/openvpn/serveur.conf . Ici
/etc/openvpn/easy-rsa/keys/
Ajout d'un utilisateur et d'un groupe dédié au processus:
groupadd openvpn
useradd -d /dev/null -g openvpn -s /bin/false openvpn
Fichier de configuration serveur: le serveur sur le réseau 192.168.0.0/24 donnera un ip sur une autre plage 192.168.80.0/24
local 192.168.0.9
port 1443
proto tcp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/vpn-server.crt
key /etc/openvpn/easy-rsa/keys/vpn-server.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
server 192.168.1.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.0.0 255.255.255.0"
push "dhcp-option DNS 192.168.0.3"
client-to-client
duplicate-cn
# cette ligne permet de n'avoir
qu'un seul certificat pour tous les clients / à commenter au en
fonction des besoins
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/keys/ta.key # cette clé doit être présent sur chaque client
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
verb 4
Ce qu'il reste à faire:
-Routage:
La partie "push route" permet d'accèder aux réseaux ajoutés. Il faut
donc que la passerelle de chaque réseau soit modifiée pour prendre en
compte le nouveau routage
Dans ce cas là:
le réseau 192.168.0.0/24 à pour routeur 192.168.0.1
Ce routeur doit donc être modifier en ajoutant la route permettant d'aller sur 192.168.1.0/24 via 192.168.0.9
Avec un routeur sous GNU/Linux cela pourrait se faire via:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.9
-Firewall:
Penser à ouvrir le port 1443 mis dans le fichier server.conf.
Dans le cas d'une DMZ nattée il faudra aussi rediriger le port 1443 vers le serveur OpenVPN
-DNS:
Dans le cas d'une configuration DNS (via BIND) gérant les ACL et les
vues il faut ajouter ce nouveau réseau dans la configuration de bind.
Exemple: vous avez un serveur BIND qui gère la résolution dns différement que l'on l'interroge depuis le LAN ou le WAN =>
Il faut ajouter le 192.168.1.0 dans l'ACL de la vue du LAN pour passer de:
acl "LAN" {
192.168.0/24;
127.0.0.0/24;
};
vers:
acl "LAN" {
192.168.0/24;
192.168.1/24;
127.0.0.0/24;
};
-Configuration des clients
Cette ligne:
push "dhcp-option DNS 192.168.0.3"
ne sert que pour les machines sous Windows
Pour un client, par exemple, sous Android il faudra ajouter en dure le serveur dns et/ou le nom de domaine:
dhcp-option DNS ip_serveur_dns
dhcp-option DOMAIN mondomain.org.
Précisions:
Pourquoi ne pas prendre le port 443 pour faire un "vrai vpn SSL" ?
Dans le cas d'un accès internet avec une seul ip publique si l'on prend
le port 443 pour openvpn on ne pourra pas utiliser le protocol SSL (sur
le 443) avec un serveur HTTP
pour, par exemple, sécuriser un accès HTTP typiquement un webmail (afin
d'eviter que les identifiants ne passe pas en clair dans la connexion
TCP).
Maintenant vous avez des clients VPN qui se trouvant sur la plage
192.168.80.0/24 qui peuvent accèder aux ressources de la plage locale
192.168.0.0/24. Cette configuration laisse à l'ordinateur client ses
routes d'origine pour le reste des accès => L'accès internet de la
machine cliente se fait toujours par sa passerelle par défaut.