GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Configurer OpenConnect VPN Server (ocserv) sur Ubuntu 18.04/16.04 avec Let's Encrypt

Ce tutoriel va vous montrer comment installer le serveur VPN OpenConnect sur Ubuntu 16.04/18.04 . Serveur VPN OpenConnect, alias ocserv , est une implémentation open source du protocole VPN Cisco AnyConnnect, qui est populaire parmi les entreprises et les universités. AnyConnect est un protocole VPN basé sur SSL qui permet aux utilisateurs individuels de se connecter à un réseau distant.

Fonctionnalités du serveur VPN OpenConnect :

  • Léger et rapide. Dans mon test, je peux regarder YouTube en 4k avec OpenConnect VPN. YouTube est bloqué dans mon pays.
  • Compatible avec le client Cisco AnyConnect
  • Prend en charge l'authentification par mot de passe et l'authentification par certificat
  • Facile à configurer

J'aime particulièrement le fait que par rapport aux autres technologies VPN, il est très facile et pratique pour l'utilisateur final d'utiliser OpenConnect VPN. Chaque fois que j'installe une distribution Linux basée sur Debian sur mon ordinateur et que je souhaite débloquer rapidement des sites Web ou masquer mon adresse IP, j'installe le client OpenConnect et me connecte au serveur avec seulement deux lignes de commandes :

sudo apt install openconnectsudo openconnect -b vpn.mydomain.com

Le gnutls-bin Le progiciel fournit des outils pour créer votre propre autorité de certification et certificat de serveur, mais nous obtiendrons et installerons le certificat Let's Encrypt. L'avantage d'utiliser le certificat Let's Encrypt est qu'il est gratuit, plus facile à configurer et approuvé par le logiciel client VPN.

Exigences

Pour suivre ce tutoriel, vous aurez besoin d'un VPS (Virtual Private Server) pouvant accéder librement aux sites bloqués (Hors de votre pays ou système de filtrage Internet). Je recommande Kamatera VPS, qui comprend :

  • 30 jours d'essai gratuit.
  • À partir de 4 $/mois (1 Go de RAM)
  • VPS basé sur KVM hautes performances
  • 9 centres de données dans le monde, dont les États-Unis, le Canada, le Royaume-Uni, l'Allemagne, les Pays-Bas, Hong Kong et Israël

Suivez le tutoriel lié ci-dessous pour créer votre serveur Linux VPS chez Kamatera.

  • Comment créer un serveur VPS Linux sur Kamatera

Une fois que vous avez un VPS exécutant Ubuntu 18.04, suivez les instructions ci-dessous.

Vous avez également besoin d'un nom de domaine pour activer HTTPS pour OpenConnect VPN. J'ai enregistré mon nom de domaine auprès de NameCheap car le prix est bas et ils offrent une protection de la confidentialité whois gratuite à vie.

Étape 1 :Installer le serveur VPN OpenConnect sur Ubuntu 16.04/18.04

Connectez-vous à votre serveur Ubuntu 16.04/18.04. Ensuite, utilisez apt pour installer ocserv package, qui est inclus dans le référentiel Ubuntu depuis 16.04.

sudo apt install ocserv

Une fois installé, le serveur VPN OpenConnect est automatiquement démarré. Vous pouvez vérifier son statut avec :

statut systemctl ocserv

Exemple de sortie :

● ocserv.service - Serveur VPN SSL OpenConnect Chargé :chargé (/lib/systemd/system/ocserv.service ; activé ; préréglage fournisseur :activé Actif :actif (en cours d'exécution) depuis le jeu 2017-11-30 05:45 :07 UTC ; il y a 11s 

S'il ne fonctionne pas, vous pouvez le démarrer avec :

sudo systemctl start ocserv

Par défaut, le serveur VPN OpenConnect écoute sur les ports TCP et UDP 443. S'il est utilisé par le serveur Web, le serveur VPN ne peut pas être démarré. Nous verrons plus tard comment changer le port dans le fichier de configuration OpenConnect VPN.

Étape 2 :Installer le client Let's Encrypt (Certbot) sur le serveur Ubuntu 16.04/18.04

Exécutez les commandes suivantes pour installer la dernière version de certbot à partir du PPA officiel. software-properties-common est requis si vous souhaitez installer des packages à partir de PPA. Il peut être manquant sur votre serveur Ubuntu.

sudo apt install software-properties-commonsudo add-apt-repository ppa:certbot/certbotsudo apt updatesudo apt install certbot

Pour vérifier le numéro de version, exécutez

certbot --version

Exemple de sortie :

certbot 0.31.0

Étape 3 :Obtenir un certificat TLS auprès de Let's Encrypt

Plug-in autonome

S'il n'y a pas de serveur Web en cours d'exécution sur votre serveur Ubuntu 16.04/18.04 et que vous souhaitez que le serveur VPN OpenConnect utilise le port 443, vous pouvez utiliser le plug-in autonome pour obtenir le certificat TLS de Let's Encrypt. Exécutez la commande suivante. N'oubliez pas de définir un enregistrement A pour votre nom de domaine.

sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email votre-adresse-email -d vpn.example.com

Explication :

  • certonly  :obtenez un certificat, mais ne l'installez pas.
  • --standalone :Utilisez le plugin autonome pour obtenir un certificat
  • --preferred-challenges http :Effectuez le défi http-01 pour valider notre domaine, qui utilisera le port 80. Par défaut, le plugin autonome effectuera le défi tls-sni, qui utilise le port 443. Le port 443 étant déjà utilisé par le serveur VPN OpenConnect, nous devons changer le comportement par défaut.
  • --agree-tos  :Acceptez les conditions d'utilisation de Let's Encrypt.
  • --email  :L'adresse e-mail est utilisée pour l'enregistrement et la récupération du compte.
  • -d :Spécifiez votre nom de domaine.

Comme vous pouvez le voir sur la capture d'écran suivante, j'ai réussi à obtenir le certificat.

Utilisation du plug-in Webroot

Si votre serveur Ubuntu 16.04/18.04 a un serveur Web qui écoute sur les ports 80 et 443, et que vous voulez que le serveur VPN OpenConnect utilise un port différent, c'est une bonne idée d'utiliser le plugin webroot pour obtenir un certificat car le plugin webroot fonctionne avec à peu près tous les serveurs Web et nous n'avons pas besoin d'installer le certificat sur le serveur Web.

Tout d'abord, vous devez créer un hôte virtuel pour vpn.example.com.

Apache

Si vous utilisez Apache, alors

sudo nano /etc/apache2/sites-available/vpn.example.com.conf

Et collez les lignes suivantes dans le fichier.

 ServerName vpn.example.com DocumentRoot /var/www/vpn.example.com

Enregistrez et fermez le fichier. Créez ensuite le répertoire racine Web.

sudo mkdir /var/www/vpn.example.com

Définissez www-data (utilisateur Apache) comme propriétaire de la racine Web.

sudo chown www-data:www-data /var/www/vpn.example.com -R

Activez cet hôte virtuel.

sudo a2ensite vpn.example.com

Rechargez Apache pour que les modifications prennent effet.

sudo systemctl recharger apache2

Une fois l'hôte virtuel créé et activé, exécutez la commande suivante pour obtenir le certificat Let's Encrypt à l'aide du plug-in Webroot.

sudo certbot certonly --webroot --agree-tos --email votre-adresse-email -d vpn.example.com -w /var/www/vpn.example.com

Nginx

Si vous utilisez Nginx, alors

sudo nano /etc/nginx/conf.d/vpn.example.com.conf

Collez les lignes suivantes dans le fichier.

serveur { écoute 80 ; nom_serveur vpn.exemple.com ; racine /var/www/vpn.example.com/ ; location ~ /.well-known/acme-challenge { tout autoriser ; }}

Enregistrez et fermez le fichier. Créez ensuite le répertoire racine Web.

sudo mkdir -p /var/www/vpn.example.com

Définissez www-data (utilisateur Nginx) comme propriétaire de la racine Web.

sudo chown www-data:www-data /var/www/vpn.example.com -R

Rechargez Nginx pour que les modifications prennent effet.

sudo systemctl recharger nginx

Une fois l'hôte virtuel créé et activé, exécutez la commande suivante pour obtenir le certificat Let's Encrypt à l'aide du plug-in Webroot.

sudo certbot certonly --webroot --agree-tos --email votre-adresse-email -d vpn.example.com -w /var/www/vpn.example.com

Étape 4 :Modification du fichier de configuration du serveur VPN OpenConnect

Modifier le fichier de configuration ocserv.

sudo nano /etc/ocserv/ocserv.conf

Tout d'abord, configurez l'authentification par mot de passe. Par défaut, l'authentification par mot de passe via PAM (Pluggable Authentication Modules) est activée, ce qui vous permet d'utiliser des comptes système Ubuntu pour vous connecter à partir de clients VPN. Ce comportement peut être désactivé en commentant la ligne suivante.

auth ="pam[gid-min=1000]"

Si nous voulons que les utilisateurs utilisent des comptes VPN distincts au lieu de comptes système pour se connecter, nous devons ajouter la ligne suivante pour activer l'authentification par mot de passe avec un fichier de mots de passe.

auth ="plain[passwd=/etc/ocserv/ocpasswd]"

Après avoir fini de modifier ce fichier de configuration, nous verrons comment utiliser ocpasswd outil pour générer le /etc/ocserv/ocpasswd fichier, qui contient une liste de noms d'utilisateur et de mots de passe codés.

Remarque :Ocserv prend en charge l'authentification par certificat client, mais Let's Encrypt n'émet pas de certificat client. Vous devez configurer votre propre autorité de certification pour émettre un certificat client.

Ensuite, si vous ne voulez pas qu'ocserv utilise les ports TCP et UDP 443, recherchez les deux lignes suivantes et modifiez le numéro de port. Sinon, laissez-les tranquilles.

tcp-port =443udp-port =443

Trouvez ensuite les deux lignes suivantes. Nous devons les changer.

server-cert =/etc/ssl/certs/ssl-cert-snakeoil.pemserver-key =/etc/ssl/private/ssl-cert-snakeoil.key

Remplacez le paramètre par défaut par le chemin du certificat de serveur Let's Encrypt et du fichier de clé de serveur.

server-cert =/etc/letsencrypt/live/vpn.example.com/fullchain.pemserver-key =/etc/letsencrypt/live/vpn.example.com/privkey.pem

Ensuite, définissez le nombre maximal de clients. La valeur par défaut est 16. Réglez sur zéro pour un nombre illimité.

max-clients =16

Définissez le nombre d'appareils à partir desquels un utilisateur peut se connecter en même temps. La valeur par défaut est 2. Réglez sur zéro pour un nombre illimité.

max-même-clients =2

Ensuite, trouvez la ligne suivante. Changer false à true pour activer la découverte MTU, qui peut optimiser les performances VPN.

try-mtu-discovery =false

Après cela, définissez le domaine par défaut sur vpn.example.com.

default-domain =vpn.example.com

La configuration du réseau IPv4 est la suivante par défaut. Cela causera des problèmes car la plupart des routeurs domestiques définissent également la plage de réseau IPv4 sur 192.168.1.0/24 .

ipv4-network =192.168.1.0ipv4-netmask =255.255.255.0

Nous pouvons utiliser une autre plage d'adresses IP privées (10.10.10.0/24) pour éviter les collisions d'adresses IP, alors changez la valeur de ipv4-network à

réseau-ipv4 =10.10.10.0

Décommentez maintenant la ligne suivante pour tunnelliser toutes les requêtes DNS via le VPN.

tunnel-all-dns =true

Modifier l'adresse du résolveur DNS. Vous pouvez utiliser le serveur DNS public de Google.

dns =8.8.8.8

Remarque :C'est une bonne pratique d'exécuter votre propre résolveur DNS sur le même serveur, surtout si vous êtes un fournisseur VPN. Si un résolveur DNS s'exécute sur le même serveur, spécifiez le DNS sous

dns =10.10.10.1

10.10.10.1 est l'adresse IP du serveur VPN OpenConnect dans le réseau local VPN. Cela accélérera un peu les recherches DNS pour les clients car la latence du réseau entre le serveur VPN et le résolveur DNS est éliminée.

Mettez ensuite en commentaire tous les paramètres de route (ajoutez le symbole # au début des quatre lignes suivantes), ce qui définira le serveur comme passerelle par défaut pour les clients.

route =10.10.10.0/255.255.255.0route =192.168.0.0/255.255.0.0route =fef4:db8:1000:1001::/64no-route =192.168.5.0/255.255.255.0

Enregistrez et fermez le fichier Puis redémarrez le serveur VPN pour que les modifications prennent effet.

sudo systemctl redémarrer ocserv

Étape 5 :Correction de l'échec de la négociation DTLS

Sur Ubuntu 16.04 et Ubuntu 18.04, le démon ocserv ocserv.socket ne respecte pas la valeur "listen-host" du fichier de configuration, ce qui provoquera l'erreur suivante lorsque les clients se connecteront au serveur VPN.

Échec de l'établissement de liaison DTLS :ressource temporairement indisponible, réessayez.

Pour corriger cette erreur, nous devons modifier le fichier ocserv.service. Nous copions d'abord le fichier d'origine dans /lib/systemd/system/ répertoire vers /etc/systemd/system/ répertoire, puis modifiez-le, car nous ne voulons pas que la nouvelle version du package ocserv remplace nos modifications. (Pour en savoir plus sur les fichiers d'unité systemd, exécutez man systemd.unit .)

sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.servicesudo nano /etc/systemd/system/ocserv.service

Commentez les deux lignes suivantes.

Requires=ocserv.socketAlso=ocserv.socket

Enregistrez et fermez le fichier. Rechargez ensuite systemd

sudo systemctl daemon-reload

Arrêtez ocserv.socket et désactivez-le.

sudo systemctl stop ocserv.socketsudo systemctl disable ocserv.socket

Redémarrez le service ocserv.

sudo systemctl redémarrer ocserv.service

Le service ocserv systemd n'affichera aucun message s'il ne redémarre pas, nous devons donc vérifier l'état pour nous assurer qu'il est réellement en cours d'exécution.

statut systemctl ocserv

Étape 6 :Créer des comptes VPN

Utilisez maintenant l'outil ocpasswd pour générer des comptes VPN.

sudo ocpasswd -c /etc/ocserv/ocpasswd username

Il vous sera demandé de définir un mot de passe pour l'utilisateur et les informations seront enregistrées dans /etc/ocserv/ocpasswd dossier. Pour réinitialiser le mot de passe, exécutez simplement à nouveau la commande ci-dessus.

Étape 7 :Activer le transfert IP

Pour que le serveur VPN achemine les paquets entre le client VPN et le monde extérieur, nous devons activer le transfert IP. Modifier sysctl.conf fichier.

sudo nano /etc/sysctl.conf

Ajoutez la ligne suivante à la fin de ce fichier.

net.ipv4.ip_forward =1

Enregistrez et fermez le fichier. Appliquez ensuite les modifications avec la commande ci-dessous. Le -p l'option chargera les paramètres sysctl depuis /etc/sysctl.conf dossier. Cette commande conservera nos modifications lors des redémarrages du système.

sudo sysctl -p

Étape 8 :Configurer le pare-feu pour le masquage d'adresses IP

Nous devons configurer le masquage IP dans le pare-feu du serveur, afin que le serveur devienne un routeur virtuel pour les clients VPN. J'utiliserai UFW, qui est un frontal du pare-feu iptables. Installez UFW sur Ubuntu avec :

sudo apt install ufw

Tout d'abord, vous devez autoriser le trafic SSH.

sudo ufw autorise 22/tcp

Ensuite, recherchez le nom de l'interface réseau principale de votre serveur.

adresse IP

Comme vous pouvez le voir, il s'appelle ens3 sur mon serveur Ubuntu.

Pour configurer le masquage IP, nous devons ajouter la commande iptables dans un fichier de configuration UFW.

sudo nano /etc/ufw/before.rules

Par défaut, il existe des règles pour le filter table. Ajoutez les lignes suivantes à la fin de ce fichier. Remplacer ens3 avec votre propre nom d'interface réseau.

# NAT table rules*nat:POSTROUTING ACCEPT [0:0]-A POSTROUTING -s 10.10.10.0/24 -o ens3 -j MASQUERADE# Terminez chaque table avec la ligne 'COMMIT' ou ces règles ne seront pas traitéCOMMIT

Dans l'éditeur de texte Nano, vous pouvez aller à la fin du fichier en appuyant sur Ctrl+W , puis en appuyant sur Ctrl+V .

Les lignes ci-dessus s'ajouteront (-A ) une règle à la fin de POSTROUTING chaîne de nat table. Il reliera votre réseau privé virtuel à Internet. Et cachez également votre réseau du monde extérieur. Ainsi, Internet ne peut voir que l'IP de votre serveur VPN, mais pas l'IP de votre client VPN, tout comme votre routeur domestique masque votre réseau domestique privé.

Par défaut, UFW interdit le transfert de paquets. Nous pouvons autoriser le transfert pour notre réseau privé. Trouvez le ufw-before-forward chain dans ce fichier et ajoutez les 3 lignes suivantes, qui accepteront le transfert de paquets si l'IP source ou l'IP de destination est dans le 10.10.10.0/24 plage.

# autoriser le transfert pour le réseau de confiance-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

Enregistrez et fermez le fichier. Activez ensuite UFW.

activer sudo ufw

Si vous avez déjà activé UFW, vous pouvez utiliser systemctl pour redémarrer UFW.

sudo systemctl redémarrer ufw

Maintenant, si vous listez les règles dans la chaîne POSTROUTING de la table NAT en utilisant la commande suivante :

sudo iptables -t nat -L POSTROUTING

Vous pouvez voir la règle de mascarade.

Étape 9 :Ouvrez le port 443 dans le pare-feu

Exécutez la commande suivante pour ouvrir les ports TCP et UDP 443. Si vous avez configuré un port différent pour ocserv, remplacez 443 par votre port configuré.

sudo ufw allow 443/tcpsudo ufw allow 443/udp

Le serveur VPN OpenConnect est maintenant prêt à accepter les connexions client.

Si vous avez spécifié 10.10.10.1 comme serveur DNS pour les clients VPN, vous devez autoriser les clients VPN à se connecter au port 53 avec la règle UFW suivante.

sudo ufw insert 1 autoriser à partir de 10.10.10.0/24

Vous devez également modifier la configuration du serveur DNS BIND pour permettre aux clients VPN d'envoyer des requêtes DNS récursives comme ci-dessous.

allow-recursion { 127.0.0.1; 10.10.10.0/24 ; } ;

Comment installer et utiliser le client VPN OpenConnect sur le bureau Ubuntu 16.04/18.04

Exécutez la commande suivante pour installer le client de ligne de commande OpenConnect VPN sur le bureau Ubuntu.

sudo apt install openconnect

Vous pouvez vous connecter au VPN à partir de la ligne de commande comme ci-dessous. -b le fera s'exécuter en arrière-plan une fois la connexion établie.

sudo openconnect -b vpn.example.com:port-number

Il vous sera demandé d'entrer le nom d'utilisateur et le mot de passe VPN. Si la connexion est établie avec succès, vous verrez le message suivant.

Réponse CONNECT obtenue :HTTP/1.1 200 CONNECTEDCSTP connecté. DPD 90, Keepalive 32400Connected tun0 as 192.168.1.139, using SSLEstablished DTLS connection (using GnuTLS). Suite de chiffrement (DTLS1.2)-(RSA)-(AES-256-GCM).

Pour arrêter la connexion, exécutez :

sudo pkill openconnect

Pour exécuter le client de manière non interactive, utilisez la syntaxe suivante.

echo -n mot de passe | sudo openconnect -b vpn.example.com -u username --passwd-on-stdin

Si vous souhaitez utiliser Network Manager pour gérer la connexion VPN, vous devez également installer ces packages.

sudo apt install network-manager-openconnect network-manager-openconnect-gnome

Si vous êtes connecté avec succès au serveur VPN, mais que votre adresse IP publique ne change pas, c'est parce que le transfert IP ou le masquage IP ne fonctionne pas. Une fois, j'ai eu une faute de frappe dans ma commande iptables, ce qui a empêché mon ordinateur de naviguer sur Internet.

Connexion automatique au démarrage du système

Pour permettre au client VPN OpenConnect de se connecter automatiquement au serveur au démarrage, nous pouvons créer une unité de service systemd.

sudo nano /etc/systemd/system/openconnect.service

Mettez les lignes suivantes dans le fichier. Remplacez le texte rouge.

[Unité] Description=Client VPN OpenConnect Après=network-online.target systemd-resolved.service Wants=network-online.target[Service] Type=simple ExecStart=/bin/bash -c '/bin/echo - n mot de passe | /usr/sbin/openconnect vpn.example.com -u username --passwd-on-stdin' ExecStop=/bin/bash -c '/sbin/resolvconf -d tun0 &&/usr/bin/pkill -SIGINT openconnect &&/ sbin/ip route flush 12.34.56.78' Restart=always RestartSec=2[Install] WantedBy=multi-user.target

Enregistrez et fermez le fichier. Activez ensuite ce service pour qu'il démarre au démarrage.

sudo systemctl enable openconnect.service

Explication du contenu du fichier :

  • After=network-online.target systemd-resolved.service et Wants=network-online.target faire fonctionner ce service une fois le réseau activé. Nous voulons le openconnect.service commencer après le systemd-resolved.service car cela garantira que l'adresse du serveur DNS définie par OpenConnect ne sera pas remplacée par systemd-resolved.service .
  • En réalité, ce service peut toujours fonctionner avant que le réseau ne soit opérationnel. Nous ajoutons Restart=always et RestartSec=2 pour redémarrer ce service après 2 secondes si ce service échoue.
  • Systemd ne reconnaît pas la redirection de canal, donc dans le ExecStart directive, nous enveloppons la commande de guillemets simples et l'exécutons avec le shell Bash.
  • Étant donné que le client VPN OpenConnect fonctionnera en tant que service systemd, qui s'exécute en arrière-plan, il n'est pas nécessaire d'ajouter -b drapeau à openconnect commande.
  • Le ExecStop directive est d'arrêter la connexion VPN. Tout d'abord, nous utilisons resolvconf commande pour rétablir les paramètres du serveur DNS. tun0 est le nom par défaut du périphérique TUN, que vous pouvez voir avec ip link commande. Ensuite, nous utilisons pkill commande pour arrêter openconenct processus. Enfin, nous restaurons la table de routage du noyau Linux avec le ip route flush commande. Remplacer 12.34.56.78 avec l'adresse IP de votre serveur VPN.

Pour démarrer ce service Systemd immédiatement, exécutez

sudo systemctl start openconnect

Pour arrêter ce service Systemd, exécutez

sudo systemctl stop openconnect

Redémarrage automatique lorsque la connexion VPN est interrompue

Parfois, la connexion VPN s'interrompait pour diverses raisons. Pour que le client VPN redémarre automatiquement, modifiez le fichier crontab de l'utilisateur root.

sudo crontab -e

Ajoutez la ligne suivante à la fin de ce fichier.

* * * * * ping -c 10 10.10.10.1> /dev/null || systemctl redémarrer openconnect

Cette tâche Cron s'exécutera toutes les minutes pour vérifier si le client VPN peut envoyer un ping à l'adresse IP privée du serveur VPN (10.10.10.1). Si le ping échoue, la commande de droite sera exécutée pour redémarrer le client VPN. || est l'opérateur OR de Bash. Il exécute la commande de droite uniquement si la commande de gauche a renvoyé une erreur.

Enregistrez et fermez le fichier.

Client graphique OpenConnect pour Windows et MacOS

Ils peuvent être téléchargés à partir de la page Github de l'interface graphique OpenConnect.

Vitesse

OpenConnect VPN est assez rapide. Je peux l'utiliser pour regarder des vidéos 4k sur YouTube. Comme vous pouvez le voir, la vitesse de connexion est de 63356 Kbps , ce qui correspond à 61 Mbit/s .

Et voici les résultats des tests sur speedtest.net.

Optimisation de la vitesse

OpenConnect utilise par défaut le protocole TLS sur UDP (DTLS) pour atteindre une vitesse plus rapide, mais UDP ne peut pas fournir une transmission fiable. TCP est plus lent que UDP mais peut fournir une transmission fiable. Un conseil d'optimisation que je peux vous donner est de désactiver DTLS, d'utiliser TLS standard (sur TCP), puis d'activer TCP BBR pour augmenter la vitesse TCP.

Pour désactiver DTLS, commentez (ajoutez le symbole # au début) la ligne suivante dans le fichier de configuration ocserv.

udp-port =443

Enregistrez et fermez le fichier. Redémarrez ensuite le service ocserv.

sudo systemctl redémarrer ocserv.service

Pour activer TCP BBR, veuillez consulter le didacticiel suivant.

  • Comment améliorer facilement les performances du réseau Ubuntu en activant TCP BBR

Dans mon test, TLS standard avec TCP BBR activé est deux fois plus rapide que DTLS.

Renouvellement automatique du certificat Let's Encrypt

Modifiez le fichier crontab de l'utilisateur root.

sudo crontab -e

Ajoutez la ligne suivante à la fin du fichier. Il est nécessaire de redémarrer le service ocserv pour que le serveur VPN récupère le nouveau certificat et le fichier de clé.

@daily certbot renouveler --quiet &&systemctl restart ocserv

Conseils de dépannage

Notez que si vous utilisez OpenVZ VPS, assurez-vous d'activer le périphérique de réseau virtuel TUN dans le panneau de configuration VPS.

Si vous rencontrez un problème, consultez le journal du serveur OpenConnect VPN.

sudo journalctl -xe -u ocserv.service

J'ai découvert que si je changeais le port 443 pour un port différent, le grand pare-feu de Chine bloquerait cette connexion VPN.

Si ocserv vous dit qu'il ne peut pas charger le /etc/ocserv/ocserv.conf fichier, vous pouvez arrêter ocserv.

sudo systemctl stop ocserv

Ensuite, exécutez-le au premier plan avec le débogage activé.

sudo /usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf --debug=10

Ensuite, la sortie peut vous donner des indices sur la raison pour laquelle ocserv ne fonctionne pas.

Laisser le serveur VPN OpenConnect et le serveur Web utiliser le port 443 en même temps

Veuillez lire l'article suivant :

  • Exécutez OpenConnect VPN Server et Apache/Nginx sur le même boîtier avec HAProxy

Comment désactiver TLS 1.0 et TLS 1.1 dans ocserv

Le conseil PCI a rendu obsolète TLS 1.0 le 30 juin 2018 et les principaux navigateurs Web vont désactiver TLS 1.0 et TLS 1.1 en 2020. Nous devrions faire de même avec le serveur VPN. Modifiez le fichier de configuration principal.

sudo nano /etc/ocserv/ocserv.conf

Recherchez la ligne suivante :

tls-priorities ="NORMAL :%SERVER_PRECEDENCE :%COMPAT :-VERS-SSL3.0"

Pour désactiver TLS 1.0 et TLS 1.1 dans le serveur VPN OpenConnect, ajoutez simplement -VERS-TLS1.0 et -VERS-TLS1.1 dans la ligne.

tls-priorities ="NORMAL :%SERVER_PRECEDENCE :%COMPAT :-VERS-SSL3.0 :-VERS-TLS1.0 :-VERS-TLS1.1"

Enregistrez et fermez le fichier. Redémarrez ensuite ocserv.

sudo systemctl redémarrer ocserv

Désormais, ocserv n'acceptera que TLS 1.2. Pour plus d'informations sur la configuration du paramètre TLS dans ocserv, veuillez consulter Chaînes de priorité GnuTLS.

Pour vérifier si TLS 1.0 est pris en charge sur votre serveur VPN OpenConnect, exécutez la commande suivante.

openssl s_client -connect vpn.votre-domaine.com:443 -tls1

Et vérifiez TLS 1.1

openssl s_client -connect vpn.votre-domaine.com:443 -tls1_1

Si vous voyez le message suivant dans la sortie, cela signifie que la version TLS n'est pas prise en charge.

Nouveau, (NONE), le chiffrement est (NONE) La renégociation sécurisée N'EST PAS prise en charge

J'ai essayé d'activer TLS 1.3, mais il n'est pas encore pris en charge dans le package ocserv sur Ubuntu.

Configuration par utilisateur ou par groupe

Ocserv permet des configurations par utilisateur et par groupe. Pour activer cette fonctionnalité, décommentez les deux lignes suivantes dans /etc/ocserv/ocserv.conf fichier.

config-per-user =/etc/ocserv/config-per-user/config-per-group =/etc/ocserv/config-per-group/

Enregistrez et fermez le fichier. Créez ensuite le répertoire de configuration par utilisateur et par groupe.

sudo mkdir /etc/ocserv/config-per-user/sudo mkdir /etc/ocserv/config-per-group/

Ensuite, vous pouvez créer un fichier sous ces deux répertoires. Par exemple, créez le user1 fichier pour permettre une configuration personnalisée pour user1 .

sudo nano /etc/ocserv/config-per-user/user1

Vous pouvez également créer le group1 fichier pour permettre une configuration personnalisée pour le groupe nommé group1 .

sudo nano /etc/ocserv/config-per-group/group1

Vous pouvez ajouter quelque chose comme ci-dessous dans le fichier.

route =10.10.10.0/255.255.255.0

Cela signifie qu'après user1 connectez-vous à ce serveur VPN, uniquement le trafic vers le 10.10.10.0/24 réseau sera acheminé via un serveur VPN. Le trafic vers d'autres adresses IP est acheminé via la passerelle d'origine. J'utilise cette astuce pour permettre à mon autre VPS (serveur privé virtuel) de se connecter à ce serveur VPN sans perturber le trafic normal, donc le périphérique tun (vpns0) de mon serveur VPN est toujours activé, ce qui signifie que mon serveur VPN aura toujours le adresse IP privée 10.10.10.1.

Enregistrez et fermez le fichier. Redémarrez ocserv pour que les modifications prennent effet.

sudo systemctl redémarrer ocserv

Hébergement virtuel

Pour ajouter un nouvel hôte virtuel dans ocserv, vous devez d'abord utiliser la méthode de l'étape 3 pour obtenir un certificat TLS pour le nouvel hôte virtuel. Modifiez ensuite le fichier de configuration ocserv.

sudo nano /etc/ocserv/ocserv.conf

Allez au bas de ce fichier. Dans l'éditeur de texte Nano, vous pouvez appuyer sur Ctrl+W , puis Ctrl+V pour aller au bas d'un fichier. Ajoutez les lignes suivantes. Remplacez vpn2.example.com avec le nom d'hôte du deuxième hôte virtuel.

[vhost:vpn2.example.com]#Allow password authentication and certificate authenticationenable-auth ="plain[passwd=/etc/ocserv/ocpasswd]"auth ="certificate"tcp-port =443#uncommentez les deux lignes si ocserv s'exécute derrière HAProxy.#listen-host =127.0.0.1#listen-proxy-proto =true# SSL/TLS configurationca-cert =/etc/ocserv/ssl/ca-cert.pemserver-cert =/etc/letsencrypt/ live/vpn2.example.com/fullchain.pemserver-key =/etc/letsencrypt/live/vpn2.example.com/privkey.pemcert-user-oid =0.9.2342.19200300.100.1.1#Configuration réseau. Utilisez une plage de réseau différente pour cet hôte virtuel. périphérique =vpnsipv4-network =10.10.20.0ipv4-netmask =255.255.255.0route =defaultdns =8.8.8.8tunnel-all-dns =truecompression =truemax-clients =0max-same-clients =0try-mtu-discovery =trueidle-timeout =1200mobile-idle-timeout=2400config-per-user =/etc/ocserv/config-per-user/config-per-group =/etc/ocserv/config-per-group/

Enregistrez et fermez le fichier. Redémarrez ensuite ocserv.

sudo systemctl redémarrer ocserv

Modifiez le fichier de configuration UFW.

sudo nano /etc/ufw/before.rules

Trouvez le ufw-before-forward chain dans ce fichier et ajoutez les 2 lignes suivantes, qui accepteront le transfert de paquets si l'IP source ou l'IP de destination est dans le 10.10.20.0/24 plage.

-A ufw-before-forward -s 10.10.20.0/24 -j ACCEPTER-A ufw-before-forward -d 10.10.20.0/24 -j ACCEPTER

Enregistrez et fermez le fichier. Redémarrez ensuite UFW.

sudo systemctl redémarrer ufw

Notez que le démon ocserv peut vous dire que certains paramètres seront ignorés pour l'hôte virtuel. Cependant, j'ai trouvé que certains des paramètres ignorés sont réellement nécessaires. Par exemple, si vous supprimez le device = vpns ligne de l'hôte virtuel, vous pouvez rencontrer l'erreur suivante lors de l'établissement de la connexion VPN à l'hôte virtuel.

Service VPN indisponible ; raison :erreur de configuration du serveur

Et le serveur VPN produirait le message d'erreur suivant dans le journal.

aucun réseau n'est configuré ; refus du client

Remarque également que le client VPN AnyConnect sur iOS ne prend pas en charge TLS SNI, de sorte que les utilisateurs iOS se connecteront à l'hôte virtuel par défaut.

Comment exécuter plusieurs instances d'ocserv

Un processus ocserv ne peut se lier qu'à un seul port TCP ou UDP sur votre serveur. Si vous souhaitez autoriser ocserv à se lier à plusieurs ports TCP ou UDP, vous devez exécuter plusieurs processus ocserv. C'est très simple. Copiez le /lib/systemd/system/ocserv.service dans un nouveau fichier.

sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.service

Modifiez ensuite le nouveau fichier.

sudo nano /etc/systemd/system/ocserv2.service

Modifier

/etc/ocserv/ocserv.conf

à

/etc/ocserv/ocserv2.conf

Enregistrez et fermez le fichier. Ensuite, vous pouvez modifier le /etc/ocserv/ocserv2.conf fichier et ajoutez vos configurations personnalisées. Une fois que vous avez terminé, démarrez le deuxième service ocserv.

sudo systemctl start ocserv2

Ubuntu
  1. Comment configurer WireGuard VPN sur Ubuntu (un guide étape par étape)

  2. Comment configurer un serveur VPN IKEv2 avec StrongSwan sur Ubuntu 22.04

  3. Configurer le serveur VPN OpenConnect (ocserv) sur Debian 11 Bullseye

  4. Configurer le serveur VPN OpenConnect (ocserv) sur Debian 10 Buster

  5. Sécuriser Nginx avec Let's Encrypt sur Ubuntu 18.04 - Comment faire ?

Installez le serveur LAMP avec Let's Encrypt Free SSL sur Ubuntu 18.04

Comment configurer un serveur Seafile avec Nginx sur Ubuntu 18.04

Comment configurer un serveur FTP avec ProFTPD dans Ubuntu 18.04

Comment configurer un serveur de messagerie avec Modoboa sur Ubuntu 20.04

Comment sécuriser Nginx avec Let's Encrypt sur Ubuntu 20.04

Comment sécuriser Apache avec Let's Encrypt sur Ubuntu 20.04