Greboca  

Suport technique et veille technologique

Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.

C’est alors la barrière de la prise en main qui fait peur, et pourtant...

Les logiciels libres

L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.

Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.

Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.

Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.

DLFP - Dépêches  -  WireGuard, protocole de communication chiffré sur UDP et logiciel libre

 -  Août 2022 - 

WireGuard est à la fois un protocole de communication chiffré sur UDP et un logiciel libre l’implémentant, le tout créé par Jason A. Donenfeld, qui vise à remplacer les protocoles ou logiciels comme IPSec ou OpenVPN.

Bien que WireGuard ait été principalement pensé pour Linux et que son implémentation de référence soit celle du noyau Linux, il existe des implémentations sous licence libre pour la majorité des plateformes (Linux, BSD, Windows, Mac, Android, iOS), sous GPLv2 pour le noyau Linux, sous MIT, BSD, APLv2 ou GPL suivant les autres cas.

Sommaire

Introduction

WireGuard se veut plus simple qu’IPSec à la fois pour les développeurs et pour les utilisateurs. Il ne propose notamment qu’une seule suite d’algorithmes cryptographiques (considérés comme les plus sûrs et les plus performants à l’heure actuelle) et ne laisse aucun choix de configuration.

Bien que le protocole ne soit pas normalisé sous forme d’une RFC comme peuvent l’être d’autres protocoles d’internet (IPSec par exemple), il est décrit dans un « papier blanc » écrit par son créateur.

Disponibilité

Linux

WireGuard est disponible nativement dans le noyau Linux depuis la version 5.6 et est disponible comme un module externe pour les noyaux 3.10 et ultérieur (en utilisant le support dynamique de chargements de modules DKMS).

NetworkManager gère WireGuard par défaut depuis la version 1.16, cependant il n’existe pas d’interface graphique pour gérer ce type de connexions. Pour ajouter une interface graphique de configuration, il existe le greffon network-manager-wireguard (semblable aux greffons pour OpenVPN ou OpenConnect).

Debian

Avec Debian 11 (Bullseye), WireGuard est intégré au noyau 5.10 et vous n’avez rien à faire si ce n’est installer les outils en ligne de commande fournis par le paquet wireguard et ses dépendances.

Sur Debian 10 (Buster), WireGuard s’installe depuis les backports (aussi avec le paquet wireguard), mais l’installation utilise DKMS et peut nécessiter des actions manuelles si vous avez SecureBoot activé :

Ensuite il faudra peut-être remplacer resolvconf par openresolv à cause du bogue 939904.

Android

Une application est disponible soit sur Play Store, soit sur F-droid.

Petite astuce, il est possible de générer un QR code depuis le serveur : qrencode -t ansiutf8 < fichier_de.conf

FreeBSD, NetBSD et OpenBSD

WireGuard est intégré au noyau d’OpenBSD depuis la version 6.8. NetBSD propose WireGuard dans le noyau de sa branche de développement, la future version 10. Quant à FreeBSD, le support de WireGuard fut retiré de son noyau juste avant la sortie de la version 13. Pour pallier ce manque, le mécanisme des ports propose une nouvelle implémentation en espace noyau, ainsi que l’implémentation de référence qui fonctionne en mode utilisateur.

Windows

Wireguard est disponible pour Windows soit sous la forme d’un module en espace utilisateur (recommandée), soit sous la forme d’un module noyau expérimental : WireguardNT.

MacOS et iOS

Des applications sont disponibles sur l'App Store pour macOS et iOS.

Tutoriel : Installer Wireguard sur Debian/Ubuntu

Tutoriel assez complet pour installer WireGuard sur Debian et Ubuntu 20.04 avec :

  • tunnel/NAT
  • IPv6
  • serveur DNS (pour éviter les fuites DNS)

Si vous installez le résolveur DNS validateur, cache, récursif unbound, il faut penser à désinstaller bind9 avant sinon vous aurez un conflit sur le port 53.

Installation de WireGuard

Le serveur utilisé est un VPS avec une installation Ubuntu server 20.04 toute fraîche.

apt install wireguard

Activation de l'ip_forward pour les deux piles IP

sed -i 's/^#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
sed -i 's/^#net.ipv6.conf.all.forwarding=1/net.ipv6.conf.all.forwarding=1/' /etc/sysctl.conf

Prise en compte immédiate

sysctl -p

La configuration se fait dans /etc/wireguard/. Le serveur a besoin d’un fichier de configuration nommé par exemple wg0.conf. Ici wg0 sera le nom de l’interface réseau de WireGuard.
Pour l’exemple, nous utiliserons ici les plages d’adresses privées suivantes : 10.26.174.0/24, fd42:42:42::/64.
Le serveur écoutera sur le port 51955.

Nous allons également devoir générer des paires de clefs (privées et publiques) pour le serveur (A) et pour l’exemple les deux premiers clients (B et C). Pour cela, Wirguard fournit tous les outils nécessaires.

umask 077; wg genkey | tee peer_A.key | wg pubkey > peer_A.pub
umask 077; wg genkey | tee peer_B.key | wg pubkey > peer_B.pub
umask 077; wg genkey | tee peer_C.key | wg pubkey > peer_C.pub

Dans la foulée, on va également générer des clefs pré-partagées histoire d’ajouter un petit niveau de sécurité.

umask 077; wg genpsk > peer_A-peer_B.psk
umask 077; wg genpsk > peer_A-peer_C.psk

WireGuard a la capacité de lancer des commandes à son lancement (PostUp) et à sa fermeture (PostDown). Nous allons nous en servir pour lancer les commandes Iptables nécessaires à son fonctionnement. Dans cet exemple, l’interface réseau du VPS sur lequel ont été menés les tests est ens3.

Le fichier de configuration /etc/wireguard/wg0.conf

[Interface]
Address = 10.26.174.1/24, fd42:42:42::1/64
ListenPort = 51955
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE 
PrivateKey = C...contenu_de_peer_A.key...=
DNS = 10.26.174.1, fd42:42:42::1

[Peer]
PublicKey = K...contenu_de_peer_B.pub...=
PresharedKey = k...contenu_de_peer_A-peer_B.psk...= 
AllowedIPs = 10.26.174.2/32, fd42:42:42::2/128

[Peer]
PublicKey = r...contenu_de_peer_C.pub...=
PresharedKey = j...contenu_de_peer_A-peer_C.psk...=
AllowedIPs = 10.26.174.3/32, fd42:42:42::3/128

Installation du serveur DNS Unbound

Si vous ne comptez pas utiliser unbound, et donc sauter cette étape, vous allez avoir une erreur au lancement de WireGuard. openresolv est la solution. Installez ce paquet et passez à l’étape suivante.

apt install unbound unbound-host resolvconf

Le fichier de configuration qui va bien : /etc/unbound/unbound.conf.d/dns-cx11.conf.

server:
    num-threads: 4

    # enable logs
    verbosity: 0  # no verbosity,  only  errors

    # Répondre aux requêtes DNS sur toutes les interfaces
    interface: 0.0.0.0                          # 0.0.0.0 unbound sur plusieurs interfaces
    interface: ::0
    max-udp-size: 3072

    # IPs authorised to access the DNS Server
    access-control: 0.0.0.0/0                 refuse
    access-control: 127.0.0.0/8               allow
    access-control: 10.26.174.0/24            allow

    access-control: ::0/0                     refuse
    access-control: ::1                       allow
    access-control: fe80::/10                 allow
    access-control: fd42:42:42::/64           allow

    #hide DNS Server info
    hide-identity: yes
    hide-version: yes

    # limit DNS fraud and use DNSSEC
    harden-glue: yes
    harden-dnssec-stripped: yes
    harden-referral-path: yes

    # add an unwanted reply threshold to clean the cache and avoid, when possible, DNS poisoning
    unwanted-reply-threshold: 10000000

    # have the validator print validation failures to the log
    val-log-level: 1

    # minimum lifetime of cache entries in seconds
    cache-min-ttl: 1800

    # maximum lifetime of cached entries in seconds
    cache-max-ttl: 14400
    prefetch: yes
    qname-minimisation: yes
    prefetch-key: yes

    #include: /etc/unbound/unbound.conf.d/adslist.txt 

Droits :

chown -R unbound:unbound /var/lib/unbound

Pour vérifier si le fichier de configuration est valide

unbound-checkconf /etc/unbound/unbound.conf.d/dns-cx11.conf

La réponse attendue :

unbound-checkconf: no errors in /etc/unbound/unbound.conf.d/dns-cx11.conf

Désactiver systemd-resolved (si utilisé)

systemctl stop systemd-resolved
systemctl disable systemd-resolved

Activation d’unbound`

systemctl enable unbound-resolvconf
systemctl enable unbound

Il est conseillé de redémarrer le serveur

Protection du serveur avec UFW

apt install ufw

On va modifier une stratégie par défaut d’UFW dans /etc/default/ufw pour permettre un bon fonctionnement de WireGuard : DEFAULT_FORWARD_POLICY="DROP" devient DEFAULT_FORWARD_POLICY="ACCEPT"

On va également ouvrir le port d'écoute du serveur VPN (51955).

ufw allow 51955/udp
ufw allow in on wg0 to any

Histoire de conserver l’accès SSH :

ufw allow ssh

S’il vous arrive d’avoir deux mains gauches et dix pouces, relisez vos règles avant d’activer UFW.

ufw enable

Pour voir les règles prises en compte :

ufw status

Test de WireGuard

Lancement du serveur VPN :

wg-quick up wg0

Si tout se passe bien on peut admirer le résultat :

wg show

(wg donne le même résultat)

Pour l’arrêter :

wg-quick down wg0

Mise en service et activation du service au démarrage du serveur :

systemctl enable wg-quick@wg0

Redémarrage et tadaaa !

Commentaires : voir le flux Atom ouvrir dans le navigateur

par carb0n, Cyrille Pontvieux, Anonyme, Benoît Sibaud, benja, volts, yPhil, SaintGermain, tisaac, Yves Bourguignon, palm123, GG, Pierre Tramo, gregober, Voisin, azerttyu

DLFP - Dépêches

LinuxFr.org

Codeberg, la forge en devenir pour les projets libres ?

 -  25 avril - 

Face aux risques que fait peser GitHub sur le monde des logiciels libres suite à son rachat par Microsoft en 2018, une alternative semble avoir (...)


L’informatique sans écran

 -  21 avril - 

Lors d’un Noël de ma tendre jeunesse pré-adolescente est arrivé un « ordinateur » dans le foyer. Ce PC (Intel 386) a été installé dans le bureau et a (...)


Entretien avec GValiente à propos de Butano

 -  16 avril - 

GValiente développe un SDK pour créer des jeux pour la console Game Boy Advance : Butano.Cet entretien revient sur son parcours et les raisons (...)


Nouveautés d'avril 2024 de la communauté Scenari

 -  11 avril - 

Scenari est un ensemble de logiciels open source dédiés à la production collaborative, publication et diffusion de documents multi-support. Vous (...)


Annuaire de projets libres (mais pas de logiciels)

 -  9 avril - 

Les communs sont une source énorme de partage !S’il est plutôt facile dans le monde francophone de trouver des ressources logicielles (Merci (...)