Sommaire
Généralités
Un VPN c'est quoi..?
Un VPN permet d'étendre la zone de sécurité du système d'information interne à travers un réseau non sécurisé (de type Internet). Cela permet à un poste non physiquement connecté sur le réseau local d'être considéré comme une machine branchée directement au sein de celui-ci.
Fonctionnement
La connexion à un VPN se déroule comme suit :
- Lancement d'une application de connexion sur l'ordinateur se trouvant en dehors du réseau du SI.
- L'application se connecte au serveur gérant les accès aux VPN : pendant cette phase, l'application et le serveur échangent les informations nécessaires à vérifier l'identité du client et son droit ou non droit à se connecter au réseau VPN.
- Une fois l'authentification effectuée, le serveur et l'application mettent en place une connexion point à point entre eux, dans laquelle l'ensemble des données circulant sont cryptées.
- L'ordinateur externe peut alors accéder à l'ensemble des données de l'entreprises dont le contenu est accessible via les règles mises en place par l'administrateur de la sécurité.
Différentes technologies existent pour pouvoir se connecter à distance via un VPN. Ces techniques s'appuient sur l'un des protocoles de tunnelisation existant (IPSec, PPTP, SecuRemote, ssh...)
Pré-requis
- Une adresse IP joignable du réseau du client
- Un port d'écoute non filtré [Attention aux FW]
- Une méthode permettant de générer des certificats SSL (souvent fournit avec openvpn)
Un tunnel VPN simple et TEMPORAIRE avec SSH
Sur le serveur ssh
Sur le serveur sshd (enfin la machine avec laquelle vous voulez établire un tunnel ssh), dans la fichier " /etc/ssh/sshd_config" il faut activer ses deux options :
PermitRootLogin yes PermitTunnel yes
et redémarrer le service sshd
/etc/init.d/ssh restart
Sur le client
ssh -f -w 0:1 ip_serv true
Cette commande va initialiser une interface sur chaque machine : tun0 sur le client et tun1 sur le serveur ssh. Les numéros sont tout à fait arbitraires et n'on aucune significations réelle.
Sur les deux machines
ip addr show tun0 #pour voir que l'interface existe bien
Cette commande va permettre de vérifier qu'une unterface tunX a été bien créer
Configurer l'interface client
ifconfig tun0 192.168.1.1 pointopoint 192.168.1.2 netmask 255.255.255.252
# ou
ip addr add 192.168.1.1/32 peer 192.168.1.2 dev tun0
Configurer l'interface serveur
ifconfig tun1 192.168.1.2 pointopoint 192.168.1.1 netmask 255.255.255.252
# ou
ip addr add 192.168.1.2/32 peer 192.168.1.1 dev tun1- Sur une machine et pinguer l'autre pour voir... ca devrait marcher.
- Ensuite, vous pouvez rajouter des des options de routages pour donner accès aux sous réseaux connecter aux 2 machines ..
OpenVPN
Installation
Simple : apt-get install openvpn
Fichiers de configuration :
- /etc/openvpn
- /etc/default/openvpn
- /etc/init.d/openvpn
Quelques choses préalables
Il faut avant de lancer le serveurs générer les pairs de clés nécessaires pour la certification des clés du client, la sécurisation de la connexion etc. Sous débian, les outils nécessaires sont installés dans "/usr/share/doc/openvpn/examples/easy-rsa/2.0". Donc je recommande de faire une copie de ce répertoire dans /root :
cp -av /usr/share/doc/openvpn/examples/easy-rsa/2.0 /root/
Variables
- Adaptez le contenu du fichier "vars" dans le répertoire "easy-rsa" qui est dans root à vos données locales en modifiant les lignes suivantes :
export KEY_COUNTRY="BJ"
export KEY_PROVINCE="Ctn"
export KEY_CITY="COTONOU"
export KEY_ORG="AUF"
export KEY_EMAIL="technique@bj.auf.org"- Rendre le fichier excécutable et remplir les variables de session
chmod +x vars
./vars
Procéder au grand nettoyage
./clean-all #Attention car le script supprime le contenu du répertoire keys qui se trouve dans le répertoire courant
Création du CA
./build-ca
et ça doit donner un truc comme cela
Generating a 1024 bit RSA private key
...++++++
................++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [BJ]:
State or Province Name (full name) [Ctn]:
Locality Name (eg, city) [COTONOU]:
Organization Name (eg, company) [AUF]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [TEST CA]: RTL
Name []:
Email Address [technique@bj.refer.org]:On obtient une clé "ca.key" Uniquement accessible à root et une demande de signature pour le certificat de l'autorité de certification
Génération du Diffie-Hellman
./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2 |
Génération des clés
Voila, à cette étape, on est prêt à signer des clés. On va commencer par le serveur lui même
Serveur
./build-key-server server # Qui va vous générer le clé, une demande der certification et signer la clé rien que pour vous
Il Faut répondre oui aux 2 dernières questions
Clients
Ensuite on va générer des clés pour les clients pour X de 1 à n
./build-key client_X
Les cles se trouvent dans le répertoirte "keys"
Configuration du serveur
Cela se passe dans "/etc/openvpn/openvpn.con". Voici un exemple type avec quelques commentaires pour expliquer ce que chaque chose fait :
#local XXX.XXX.XXX.XXX # Adresse IP d'écoute Commenter pour une écoute sur toutes les interfaces
port 1194 # Port d'écoute
#nobind # Permet de dire au serveur de en pas écouter sur un port spécifique A ne pas utiliser avec l'option "port "
proto udp # Protocol utilisé (TCP ou UDP)
dev tun # Permet de créer des tunnels IP routés alors que "tap" permet de créer des tunnels ethernet ???
ca /root/easy-rsa/keys/ca.crt
cert /root/keys/easy-rsa/test.crt
key /root/keys/easy-rsa/test.key # Fichier à concerver secret
dh /root/keys/easy-rsa/dh1024.pem # Localisation des paramètres Diffie-Hellman
server 10.25.2.0 255.255.255.0 # Le sous réseau de notre VPN
#ifconfig-pool-persist ipp.txt # Enregistres les associations entre les clients VPN et les adresses IP reçues. En cas de redémarrage après un crash, il permet aux clients de retrouver leurs adresses IP précédentes
user nobody
group nobody
#push "redirect-gateway" # Change la route par défaut des clients via le VPN.
#push "dhcp-option DNS 10.25.1.1" # Une option très intéressante qui permet de changer le serveur DNS vers un serveur accessible du VPN
#duplicate-cn # décommenter pour permettre à plusieurs client de présenter le même certificat
keepalive 10 30 # Ping toute les 10 sec et considère la liaison morte si aucune réponse n'est recue au bout de 30 sec
comp-lzo # Active la compression LZO sur la liaison VPN
max-clients 20 # Nombre maximum de clients
log openvpn.log
verb 4
# up /etc/openvpn/cmd/up.sh # Lors de la connexion, ce script est excécuté
#ccd-exclusive # Permet d'imposer des conditions particulières aux xlients.
#client-config-dir /etc/openvpn/ccd
#persist-key
#persist-tun
#status /var/state/openvpn.statusTout ce qui est commenté n'est pas encore utile. Allez on va lancer en regardant ce que le serveur nous dit : /etc/init.d/openvpn start et ensuite un netstat -laput . Notez qu'il y a un serveur qui écoute sur le port 1194. Regarder aussi les logs..
Configuration du client
Installation pure de openvpn sur debian like
apt-get install openvpn
Alors ici ce qui est bien c'est que vous pouvez configurer openvpn pour se connecter à plusieurs réseaux vpn.. Chacun avec sa configuration dé"fini dans un fichier dans "/etc/openvpn/EXAMPLE_CONFIG1.conf" :
cd /etc/openvpn;
touch mon_vpn1.conf
vi mon_vpn1.confDedans rajouter les informations concernant le VPN auquel vous voulez vous connecter :
client # fonctionnement en mode client
remote XXX.XXX.XXX.XXX # adresse ip du serveur VPN
port 1194 #Port d'écoute du serveur VON
#nobind # a utiliser si l'option nobind a été activer sur le serveurr
dev tun # conformément à la configuration du serveur
comp-lzo # conformément à la configuration du serveur
# SSL Configuration
ca /home/toto/keys/ca.crt
cert /home/toto/keys/client.crt
key /home/toto/keys/client.key
# Logging configuration
log /var/log/openvpn.log
verb 4Bon vous aurez notez que on a vraiment besoin de trois fichiers pour cela :
- ca.crt qui est récupérer du serveur
- client.crt qui le certificat du client signé par le serveur
- client.keys qui est la clé du client
Bon il y a une longue littérature sur comment transmettre ces informations de façon sécurisé pour les préserver de toutes agressions. Moi, je suggère ssh, mais il y a d'autre façons ... A vous de voir
Ensuite dans "/etc/default/openvpn" il est important de faire :
AUTOSTART="none"
et ...
/etc/init.d/openvpn start mon_vpn
Installation pure de openvpn windows/mac
Who cares ...?