VPN

De OpenWikiBSD
Aller à : navigation, rechercher

IPSec

Usage de IPSec pour relier deux réseaux : IpSec en mode Tunnel

Tiré de

  • LAN A :
    • @IP Externe : Fixe: A.A.A.A/32
    • Plage Interne : 172.16.0.0/16
  • LAN B depuis le Soekris
    • @IP Externe : DHCP par ma XXXXBox : B.B.B.B/32
    • Plage Interne : 172.31.0.0/16
  • Sur chaque passerelle :
    • permettre le routage IP : /etc/sysctl.conf
net.inet.ip.forwarding=1        # 1=Permit forwarding (routing) of IPv4 packets
    • Permettre le NAT et le passage dans le firewall : /etc/pf.conf
ext_if="vic0"
int_if="vic1"
set skip on { lo $int_if }
nat on $ext_if from !($ext_if) -> ($ext_if:0)
block in
pass out keep state


clés

X509

PassPhrase

Le moins sécurisé, mais suffisant pour les tests.

Le fichier ipsec.conf devient :

ike ...etc.... main auth hmac-sha1 enc 3des group modp1024 quick auth hmac-sha1 enc 3des group none psk MAPASSPHRASE


et ça marche


lynx @IP_SE3:909



                                                                                                                            Authentification SE3

                                                                                                                                                  Bonjour
   
  Authentification...

   Afin de pouvoir rentrer dans l'interface SambaEdu, vous devez indiquer votre identifiant et votre mot de passe sur le r�seau.

   Identifiant :  ____________________
   Mot de passe : ____________________
                               Valider

   Cryptage du mot de passe actif ! 




OpenVPN

Tiré de cette excellente doc .

Install

Sur le serveur

Bien entendu, vous avez, au préalable généré votre nécessaire cryptographique : VPN#Version_Easy-Rsa

pkg_add -iv openvpn
mkdir -p /etc/openvpn/private
cd /etc/openvpn
cp SSSS.key /etc/openvpn/private
cp dh1024.pem /etc/openvpn
cp ca.crt /etc/openvpn
cp SSSS.crt /etc/openvpn
chmod 500 /etc/openvpn/private/
chmod 400 /etc/openvpn/private/CCC.key 
cp  /usr/local/share/examples/openvpn/sample-config-files/server.conf /etc/openvpn/

perl -pi -e 's/;local a.b.c.d/local IP-SRV-Publique/' server.conf 
perl -pi -e 's/server.key/private\/SSSS.key/' server.conf 
perl -pi -e 's/server.crt/SSSS.crt/' server.conf 
perl -pi -e 's/;push "route 192.168.20.0 255.255.255.0"/push "route MON_Reseau Netmask"/' server.conf 


A la fin il faudra donc avoir cet état :

ls -lh /etc/openvpn/
-rw-r--r--  1 root  wheel   ca.crt
-r--r--r--  1 root  wheel   server.conf
-rw-r--r--  1 root  wheel   dh1024.pem
-rw-r--r--  1 root  wheel   SSSS.crt
dr-x------  2 root  wheel   private
ls -lh /etc/openvpn/private/
 
-r--------  1 root  wheel   SSSS.key

Sur le client

Bien entendu, vous avez, au préalable généré votre nécessaire cryptographique : VPN#Version_Easy-Rsa

pkg_add -iv openvpn
mkdir -p /etc/openvpn/private
cd /etc/openvpn
cp CCC.key /etc/openvpn/private
cp dh1024.pem /etc/openvpn
cp ca.crt /etc/openvpn
cp CCC.crt /etc/openvpn
chmod 500 /etc/openvpn/private/
chmod 400 /etc/openvpn/private/CCC.key 
cp  /usr/local/share/examples/openvpn/sample-config-files/client.conf /etc/openvpn/

perl -pi -e 's/my-server-1/IP-SRV/' client.conf 
perl -pi -e 's/client.key/private\/CCCCC.key/' client.conf 
perl -pi -e 's/client.crt/CCCC.crt/' client.conf 


A la fin il faudra donc avoir cet état :

ls -lh /etc/openvpn/
-rw-r--r--  1 root  wheel   ca.crt
-r--r--r--  1 root  wheel   client.conf
-rw-r--r--  1 root  wheel   dh1024.pem
-rw-r--r--  1 root  wheel   CCCC.crt
dr-x------  2 root  wheel   private
ls -lh /etc/openvpn/private/
 
-r--------  1 root  wheel   CCCC.key



  • Configuration de la carte virtuelle
echo "/etc/hostname.tun0
up
/usr/local/sbin/openvpn --daemon --config /etc/openvpn/server.conf
" > /etc/hostname.tun0



ifconfig-pool-persist ipp.txt push "route 172.16.0.0 255.255.0.0" push "dhcp-option DNS 172.16.0.XX" push "dhcp-option DOMAIN maxp.local"

  1. push "dhcp-option WINS 172.16.0.2"


Utilisation en pont/bridge, bref en niveau 2

[1]

Génération des clés et certificats

A faire sur une machine tierce.

Quelques mots sur les extensions
 ca.crt     -> root certificate (--ca)
 ca.key     -> root key, keep secure (not directly used by OpenVPN)
 .crt files -> client/server certificates (--cert)
 .key files -> private keys, keep secure (--key)
 .csr files -> certificate signing request (not directly used by OpenVPN)
 dh1024.pem or dh2048.pem -> Diffie Hellman parameters (--dh)
Version TinyCA

Export de certificat serveur

et

Export de certificat client

Version Easy-Rsa
pkg_add easy-rsa
cd /usr/local/share/easy-rsa

Modifiez vars comme bon vous semble

export KEY_SIZE=1024
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="FR"
export KEY_PROVINCE="DEPT"
export KEY_CITY="VILLE"
export KEY_ORG="ORG"
export KEY_EMAIL="@email"
export KEY_EMAIL=@email
export KEY_CN=changeme
export KEY_NAME=changeme
export KEY_OU=changeme

Ces deux là sont inutiles sauf à utiliser une smartcard

export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234

On nettoie toute trace de CA précédente (Donc on efface tout!!! attention)

. ./vars
./clean-all

On génére les primites cryptographiques pour la suite des opérations:

./build-dh 

On crée une AC avec mot de passe (c'est un peu mieux...)

./pkitool --init-ca --pass


Tout est prêt pour accueillir les nouveaux certificats

  • Je crée une demande de certificat pour le serveur VPN nommé SSSSS
KEY_CN=SSSS ./pkitool --server SSSS

On me demandera le mdp de l'AC,normal!

  • Je crée une demande de certificat pour le client VPN nommé CCCCCC
KEY_CN=CCCC ./pkitool CCCCC

On me demandera le mdp de l'AC,normal!

Le KEY_CN= devant est indispensable pour éviter l'erreur classique de easy-rsa : "TXT-DB error number 2"

Vous n'avez plus qu'à copier les bons fichiers aux bons endroits :

  • Serveur VPN :

ca.crt, SSS.crt,dh1024.pem dans /etc/openvpn

  • Client VPN :

ca.crt, CCC.crt,dh1024.pem dans /etc/openvpn

Important : Tout repose désormais sur votre répertoire keys !!! Une bonne sauvegarde est de mise (sans compter le bon mot de passe l'AC protégée par HSM pour ne pas se faire trouer comme DIginotar ou Comodo...) Mais c'est une autre histoire.

  • Debug
failed to update database
TXT_DB error number 2

La solution

Vérifications
  • Vous pouvez vérifier le certicat serveur :
openssl verify -CAfile /etc/openvpn/ssl/ca.crt -purpose sslserver /etc/openvpn/ssl/ca.crt 
/etc/openvpn/ssl/ca.crt: OK


En cas de doute, n'hésitez pas à vérifier la chaîne de signature :


Mauvaise chaîne :

openssl verify -CAfile /etc/openvpn/ssl/ca.crt -purpose sslclient /etc/openvpn/clients/client3.crt 
unable to load certificate
18725:error:0906D06C:PEM routines:PEM_read_bio:no start line:/usr/src/lib/libssl/src/crypto/pem/pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

Mauvais usage du certificat client

openssl verify -CAfile /etc/openvpn/diracCA.crt -purpose sslclient /etc/openvpn/phil.crt 
/etc/openvpn/phil.crt: /le/chemin/de/certification
error 26 at 0 depth lookup:unsupported certificate purpose
OK

Logs du serveur

Bonne chaîne

openssl verify -CAfile /etc/openvpn/ssl/ca.crt -purpose sslclient /etc/openvpn/clients/client4.crt 
/etc/openvpn/clients/client4.crt: OK

Au final

Client

Sur un client OpenBSD, il faut donc :

  • Un certificat client dans /etc/openvpn/CLT.crt
  • Une clé cliente dans /etc/openvpn/private/CLT.key
  • Le certificat de l'AC dans /etc/openvpn/ca.crt
  • Un fichier de conf /etc/openvpn/client.conf
client
dev tun
proto udp
remote SERVEUR 1194
resolv-retry infinite
nobind
user _openvpn
group _openvpn
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/CLT.crt
key /etc/openvpn/private/CLT.key
ns-cert-type server
comp-lzo
verb 3
  • Un fichier de lancement /etc/rc.local
 /usr/local/sbin/openvpn --daemon --config /etc/openvpn/client.conf


Serveur

Sur un serveur OpenBSD, il faut donc :

  • Un certificat serveur dans /etc/openvpn/SRV.crt
  • Une clé serveur dans /etc/openvpn/private/SRV.key
  • Le certificat de l'AC dans /etc/openvpn/ca.crt
  • Un fichier de conf /etc/openvpn/server.conf
local IPSRV
port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/SRV.crt
dh dh1024.pem
server IPSRV 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route VPN_RSX 255.255.255.0"
keepalive 10 120
comp-lzo
user _openvpn
group _openvpn
persist-key
persist-tun
status openvpn-status.log

Plus les options spécifiques éventuellement nécessaires (routes, dhcp,...)

  • Un fichier de lancement /etc/rc.local
 /usr/local/sbin/openvpn --daemon --config /etc/openvpn/server.conf

Config réseau

Côté serveur

  • La création de l'interface a déjà été faite.
sh /etc/netstart

Il va râler sur les permissions, mais les corriger aussitôt.


  • Firewall
echo "
# OpenVPN
pass in log quick on $WAN_IF proto udp from any to $WAN_IP  port 1194
" >> /etc/pf.conf

Ne pas oublier de faire la même chose côté pare-feu du client....


  • Côté client

Sur Ubuntu, j'ai eu un petit souci de résolution de nom sur le LAN, et donc :

#!/bin/bash
sudo perl -pi -e 's/# Generated by NetworkManager/nameserver @IP_DNS_Interne/'  /etc/resolv.conf

et j'accède en local aux imprimantes, serveurs, routeurs etc...


  • Attention à la route de retour!

Si vous passez d'une machine en adressage privé d'un LAN à une autre également NATée d'un autre LAN, il faudra donner aux machines les routes de retour hors du tunnel VPN..

Exemple avec un client sur un réseau en 10.0.0.0 24 qui cause, par le tunnel VPN à une autre machine sur un autre LAN en 10.10.10.9 en VPN. La passerelle VPN est en 10.10.10.5. /sbin/route add -net 10.0.0.0/24 10.10.10.5

Remarques

  • Il s'agit du portage rapide de l'appli depuis LInux. Exemple : /usr/local/share/examples/openvpn/sample-scripts/openvpn.init

contient

/sbin/modprobe pour lancer le module tun...

Essayez cette commande linux sous un BSD, ça marche moyen moyen...