Outils pour utilisateurs

Outils du site


logiciels:openvpn

OpenVPN


Openvpn permet de communiquer de façon sécurisée entre deux machines. Généralement on parle d'un server et d'un client.

Installation sur le server ( Ubuntu 14.04 )

apt-get install openvpn easy-rsa
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Initialiser les variables et générer les clés et certificats

Aller dans le dossier /etc/openvpn/easy-rsa, éditer le fichier vars et initialiser les variables :

cd /etc/openvpn/easy-rsa
nano vars
export KEY_COUNTRY="US"
export KEY_PROVINCE="NC"
export KEY_CITY="Winston-Salem"
export KEY_ORG="Example Company"
export KEY_EMAIL="steve@example.com"
export KEY_NAME=MyVPN
export KEY_OU=MyVPN

On pousse KEY_SIZE à 4096.
Initialiser les variables :

source ./vars

Nettoyer toutes les clés et certificats existants :

./clean-all

Créer le certificat et la clé de l'Autorité de Certification Maitre :

./build-ca

On remarque les champs peuvent être omis puisque l'on a prédéfini des valeurs par défaut (valeurs entre crochets).
Générer un certificat et une clé privée pour le serveur :

./build-key-server server

Puis il faut mettre un mot de passe et un nom d'entreprise (facultatif).
Suivent deux dernières questions qui requièrent des réponses positives :

Certificate is to be certified until Oct 26 21:48:37 2017 GMT (3650 days)
Sign the certificate ? [y/n] :y
1 out of 1 certificate requests certified, commit ? [y/n] y

On génère les paramètres Diffie Hellman :

./build-dh

Création d'une clé ta.key pour se prémunir de certaines attaques :

openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key

Finalement on retrouve les clés et les certificats dans le dossier keys.

Paramétrer le server

On copie les clés et les certificats dont a besoin le server :

cp keys/{dh*.pem,ca.crt,server.crt,server.key,ta.key} /etc/openvpn/

On crée le fichier server.conf dans le dossier /etc/openvpn :

cd /etc/openvpn
nano server.conf

Et on rentre ces informations :

# Serveur TCP/443
proto tcp
port 443
dev tun
# Clés et certificats
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh4096.pem  # dépend de la valeur attribuée à KEY_SIZE
tls-auth ta.key 0
# tls-cipher voir quelles sont les suites acceptées en fonction de la version Openvpn. Utiliser openvpn --show-tls
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA:TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA
cipher AES-256-CBC
auth SHA384
# Réseau
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
#push "redirect-gateway def1 bypass-dhcp"
push "redirect-gateway def1"
#push "dhcp-option DNS 208.67.222.222"  # DNS d'OpenDNS
#push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
# Sécurité
user nobody
group nogroup
chroot /etc/openvpn/jail  # En cas de faille dans Openvpn, on limite les dégâts 
persist-key
persist-tun
comp-lzo
max-clients 3
# Log
verb 3
mute 10
status /var/log/openvpn/status.log
log-append /var/log/openvpn/server.log

On créer un dossier pour le chroot, un pour les logs et un pour les clients :

mkdir jail clientconf /var/log/openvpn

Générer les certificats et les clés pour les clients :

cd /etc/openvpn/easy-rsa
./build-key client1

Quand le Common Name est demandé, il faudra entrer client1.Normalement il est mis par défaut.
On peut protéger la clé client par un mot de passe, on utilise alors ./build-key-pass client1.

On copie les fichiers pour les clients dans /etc/openvpn/clientconf/client1, ca.crt client1.crt client1.key ta.key.

cd /etc/openvpn
mkdir clientconf/client1
cp easy-rsa/keys/{client1.key,client1.crt,ca.crt,ta.key} /etc/openvpn/clientconf/client1/

Créer une archive et envoyer ces fichiers au client par un canal sécurisé.

cd /etc/openvpn/clientconf && zip client1.zip *.*

Activé le forwarding sur le serveur :

echo "1" > /proc/sys/net/ipv4/ip_forward

Pour l'activer en permanence modifier le fichier /etc/sysctl.conf en décommentant la ligne suivante :

sed -i s/"#net.ipv4.ip_forward=1"/"net.ipv4.ip_forward=1"/ /etc/sysctl.conf

Pour que les clients puissent accéder à internet il faut rajouter une règle à Iptables :

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE

Adapter l'interface réseau, suivant le type de serveur que l'on a, pour savoir un ifconfig aide.

Paramétrer le client

Le client a besoin de Openvpn et pour faciliter la création de la connexion NetworkManager-openvpn Créer un fichier client.conf dans /etc/openvpn:

nano /etc/openvpn/client.conf

Et coller ces informations :

# Client
client
dev tun
proto tcp
remote A.B.C.D 443  # remplacer A.B.C.D par l'IP du serveur
resolv-retry infinite
# Clé
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
tls-auth /etc/openvpn/ta.key 1
# Sécurité
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA:TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA
cipher AES-256-CBC
auth SHA384
# script-security 2  # option non tester
remote-cert-tls server
user nobody
group nogroup  # nobody pour Arch
nobind
persist-key
persist-tun
comp-lzo
verb 3
# attend que le DHCP ait eu lieu avant d'ajouter les routes
route-delay 5

Attribuer une adresse IP statique à un client VPN

Pour des raisons de sécurité (par exemple l'application de filtre IP), il est parfois nécessaire d'affecter une adresse IP statique à un client VPN. Pour cela, il faut créer un répertoire qui va contenir les configurations statiques :

sudo mkdir /etc/openvpn/ccd
sudo ln -s /etc/openvpn/ccd /etc/openvpn/jail/ccd

Ensuite on édite à l'intérieur de ce répertoire un fichier correspondant au CNAME (X509) de l'utilisateur dont on veut rendre la configuration statique (par exemple client1)

nano /etc/openvpn/ccd/client1
ifconfig-push 10.8.0.12 10.8.0.11

La syntaxe est la suivante: ifconfig-push @IPCLIENTTUNNELVPN @IPSERVEURTUNNELVPN.
Ainsi quand le client client1 se connectera au serveur VPN il obtiendra une adresse en 10.8.0.12. Le bout du tunnel VPN (coté serveur) sera lui en 10.8.0.11.
Note: A chaque modification de ce répertoire il faut en faire une copie vers le chroot (jail, à adapter à votre configuration) :

cp /etc/openvpn/ccd/* /etc/openvpn/jail/ccd

On décommente la ligne suivante au niveau de la configuration du serveur (/etc/openvpn/server.conf) :

client-config-dir ccd

Puis on relance le serveur :

service openvpn restart

Mise en place d'un logrotate pour le server

Placer le contenu suivant dans le fichier openvpn sous /etc/logrotate.d/

nano /etc/logrotate.d/openvpn

/var/log/openvpn/*.log
{
    weekly
    rotate 52
    missingok
    notifempty
    delaycompress
    compress
    copytruncate
}

Filtre pour fail2ban

On rajoute un filtre openvpn dans /etc/fail2ban/filter.d/:

nano /etc/fail2ban/filter.d/openvpn
[Definition]
failregex = <HOST>:\d{1,5} TLS Auth Error
    <HOST>:\d{1,5} VERIFY ERROR:
    <HOST>:\d{1,5} TLS Error: TLS handshake failed
ignoreregex =

Et un petit bloc de configuration dans /etc/fail2ban/jail.local:

[openvpn]
enabled = true
protocol = tcp
port = 443
filter = openvpn
logpath = /var/log/openvpn/server.log

Sources

Liens à explorer

Faire passer un traffic rtorrent, et uniquement ce traffic, dans un tunnnel VPN : http://mondedie.fr/viewtopic.php?id=5933

logiciels/openvpn.txt · Dernière modification: 2018/10/25 18:19 (modification externe)