ProtonVPN

ProtonVPN peut s’utiliser sur toutes les plateformes avec le client officiel OpenVPN
Configuration

  • AES-256-CBC pour la data channel
  • ECDHE-RSA-AES256-GCM-SHA384 pour la control channel
  • RSA 2048 bits
  • tls-auth
  • SHA-512 pour l’authentification HMAC
  • TLS 1.2

Il faut ouvrir un compte ProtonVPN et régler un abonnement à l’année pour disposer des éléments de paramétrage OpenVPN

On va utiliser une connexion Secure Core VPN

Qu'est-ce que Secure Core VPN?
ProtonVPN dispose d’un mode Secure Core pour améliorer la confidentialité des utilisateurs et la sécurité des données en atténuant certains des risques d’un serveur VPN compromis.
Une méthode commune pour exposer le trafic VPN consiste à compromettre le serveur qui gère votre trafic. Ce risque est particulièrement grave lorsque le serveur est situé dans une juridiction à haut risque. Pour atténuer ce risque, ProtonVPN emploie une technique appelée Secure Core. Cet article fournit une vue d’ensemble des attaques que Secure Core atténue, de la manière dont il atteint une plus grande confidentialité VPN, ainsi que des instructions sur l’activation de Secure Core dans ProtonVPN.

A. À quoi protège Secure Core?
L’architecture Secure Core unique de ProtonVPN nous permet de nous défendre contre les attaques réseau auxquelles les autres VPN ne peuvent se défendre. Une configuration VPN classique implique un client qui transmet le trafic via un serveur VPN en route vers la destination finale. Cela signifie qu’un attaquant qui a le contrôle du serveur VPN ou la capacité de surveiller le réseau du serveur VPN sera capable de faire correspondre les clients VPN avec leur destination, annulant les avantages de la vie privée du VPN.
De telles attaques de synchronisation / corrélation ne sont pas difficiles à accomplir. Dans les pays ayant des règlements Internet restrictifs (Chine, Russie, Iran, Turquie, etc.), ou des pays dotés de larges pouvoirs de surveillance (États-Unis, Royaume-Uni, etc.), les agences de surveillance de l’Etat ont généralement le pouvoir de contraindre soit le fournisseur VPN, Fournisseur de serveurs du fournisseur VPN, pour aider à la surveillance du réseau. Par conséquent, même si ProtonVPN est basé en Suisse, nous ne pouvons pas savoir avec certitude que nos serveurs VPN dans d’autres pays tels que les États-Unis ou le Royaume-Uni ne sont pas surveillés et que la confidentialité des utilisateurs est compromise.

B. Comment Secure Core augmente-t-il la confidentialité VPN?
Secure Core nous permet de nous défendre contre cette menace pour la confidentialité VPN en transmettant le trafic utilisateur via plusieurs serveurs. Lorsque vous vous connectez à un serveur dans une juridiction à risque élevé comme les États-Unis, votre trafic passera d’abord par nos serveurs Secure Core. Par conséquent, même si notre serveur VPN américain est surveillé, un attaquant ne pourra suivre le trafic qu’au bord de notre réseau Secure Core, rendant ainsi beaucoup plus difficile la découverte de la véritable adresse IP et de l’emplacement des utilisateurs ProtonVPN.

Nous avons également pris des mesures extraordinaires pour défendre nos serveurs Secure Core. Tout d’abord, les serveurs sont situés dans des pays spécifiquement sélectionnés avec des lois de confidentialité très fortes (Islande, Suisse et Suède). Les serveurs Secure Core sont également situés dans des datacenters de haute sécurité pour assurer une sécurité physique forte. L’infrastructure ProtonVPN en Suisse et en Suède est située dans les centres de données souterrains, tandis que nos serveurs islandais sont situés dans une ancienne base militaire. En outre, les serveurs Secure Core sont entièrement détenus par nous et sont également fournis par nous (expédiés sur place directement depuis nos bureaux). Enfin, les serveurs Secure Core sont connectés à Internet en utilisant notre propre réseau dédié avec des adresses IP qui sont détenues et exploitées par notre propre registre Local Internet (LIR).

Ces mesures nous offrent un niveau de certitude beaucoup plus élevé que nos serveurs et notre réseau Secure Core ne sont pas manipulés. Bien qu’il n’y ait pas de sécurité à 100%, Secure Core est l’une des nombreuses façons dont ProtonVPN offre une meilleure sécurité et confidentialité VPN en protégeant contre les attaques complexes auxquelles les autres VPN ne peuvent se défendre.

ProtonVPN Archlinux

Article original, How to use ProtonVPN on Arch Linux

Installer OpenVPN

sudo pacman -S openvpn --needed

Pour éviter les fuites DNS, vous aurez besoin d’un paquet supplémentaire, pour plus d’informations voir Arch Linux Wiki.

Suivant la version de systemd

systemctl --version
    systemd 239

version systemd < 229

Installer openvpn-update-resolv-conf ou openvpn-update-resolv-conf-git:

yaourt -S openvpn-update-resolv-conf-git --needed

modification des fichiers de configuration ProtonVPN

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

remplacer par

setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
down-pre

ou bien si vous ne souhaitez pas modifier la configuration de votre client, vous pouvez ajouter les options suivantes à votre commande openvpn:

--setenv PATH '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' --up /etc/openvpn/update-resolv-conf --/etc/openvpn/update-resolv-conf --down-pre

version systemd >= 229

Depuis systemd 229, systemd-networkd a exposé une API à travers DBus permettant la gestion de la configuration DNS sur une base par liaison. Des outils comme openresolv peuvent ne pas fonctionner de manière fiable lorsque /etc/resolv.conf est géré par systemd-resolved, et ne fonctionneront pas du tout si vous utilisez resolve au lieu de dns dans votre fichier /etc/nsswitch.conf.

Le script update-systemd-resolved est une autre alternative et relie OpenVPN avec systemd-resolved via DBus pour mettre à jour les enregistrements DNS.

Installer openvpn-update-systemd-resolved:

yaourt -S openvpn-update-systemd-resolved --needed
To complete the installation, please add this script to your OpenVPN
settings for each of the VPNs you wish it to manage the DNS for:
    script-security 2
    setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    up /etc/openvpn/scripts/update-systemd-resolved
    down /etc/openvpn/scripts/update-systemd-resolved
    down-pre


The path to the script has changed. Please ensure you update all your
configuration files to match this:
    up /etc/openvpn/scripts/update-systemd-resolved
    down /etc/openvpn/scripts/update-systemd-resolved

modification des fichiers de configuration ProtonVPN

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

remplacer par

script-security 2
setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
up /etc/openvpn/scripts/update-systemd-resolved
down /etc/openvpn/scripts/update-systemd-resolved
down-pre

ou bien si vous ne souhaitez pas modifier la configuration de votre client, vous pouvez ajouter les options suivantes à votre commande openvpn:

--setenv PATH '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' --down-pre

Obtenir les fichiers de configuration de ProtonVPN

Créez un compte ou connectez-vous sur account. protonvpn. com.
Accédez au menu de téléchargement et téléchargez le fichier de configuration dont vous avez besoin (choisissez le pays et le protocole).

Remarque: si vous utilisez un compte gratuit, seules les options Connexion au serveur et un nombre restreint de pays et de serveurs sont disponibles:

Trouvez vos identifiants OpenVPN dans le menu Compte. Vous devez initialiser le mot de passe OpenVPN.

Connexion via l’interface de ligne de commande (CLI)

Lancez openvpn avec des privilèges:

sudo openvpn nl-07.protonvpn.com.udp1194.ovpn

Note: n’oubliez pas d’utiliser les arguments supplémentaires que nous avons vus lors de l’installation si vous n’avez pas changé les fichiers de configuration.

Par exemple, j’utilise

openvpn  --setenv PATH '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' --up /etc/openvpn/scripts/update-systemd-resolved --down /etc/openvpn/scripts/update-systemd-resolved --down-pre --config fr.protonvpn.com.udp1194.ovpn

veuillez noter que lors de l’utilisation d’arguments vous devez utiliser –config autrement vous aurez un message d’erreur comme
Options error: Unrecognized option or missing or extra parameter(s) in [CMD-LINE]:1: /etc/openvpn/update-resolv-conf (2.4.2).

Lorsque vous voyez la séquence d’initialisation terminée, vous êtes connecté avec succès.

[...]
Sun Jul 22 19:27:32 2018 TUN/TAP device tun0 opened
Sun Jul 22 19:27:32 2018 TUN/TAP TX queue length set to 100
Sun Jul 22 19:27:32 2018 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Sun Jul 22 19:27:32 2018 /usr/bin/ip link set dev tun0 up mtu 1500
Sun Jul 22 19:27:32 2018 /usr/bin/ip addr add dev tun0 10.8.8.27/24 broadcast 10.8.8.255
Sun Jul 22 19:27:32 2018 /etc/openvpn/scripts/update-systemd-resolved tun0 1500 1585 10.8.8.27 255.255.255.0 init
<14>Jul 22 19:27:32 update-systemd-resolved: Link 'tun0' coming up
<14>Jul 22 19:27:32 update-systemd-resolved: Adding IPv4 DNS Server 10.8.8.1
<14>Jul 22 19:27:32 update-systemd-resolved: SetLinkDNS(3 1 2 4 10 8 8 1)
Sun Jul 22 19:27:32 2018 /usr/bin/ip route add 185.94.189.188/32 via 192.168.0.254
Sun Jul 22 19:27:32 2018 /usr/bin/ip route add 0.0.0.0/1 via 10.8.8.1
Sun Jul 22 19:27:32 2018 /usr/bin/ip route add 128.0.0.0/1 via 10.8.8.1
Sun Jul 22 19:27:32 2018 Initialization Sequence Completed

Il est possible de fournir l’utilisateur et son mot de passe dans la ligne de commande
Le fichier (protonvpn_userpass.txt par ex:) comporte 2 lignes : ligne 1 ,Utilisateur et ligne 2, Mot de passe.

Dans la commande ci-dessous , le fichier de configuration se nomme protonvpn.conf
La ligne de commande
openvpn --setenv PATH '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' --up /etc/openvpn/scripts/update-systemd-resolved --down /etc/openvpn/scripts/update-systemd-resolved --down-pre --config /etc/openvpn/client/protonvpn.conf --auth-user-pass /etc/openvpn/client/protonvpn_userpass.txt

ProtonVPN auto connexion

Pour utiliser le dispatcher, il faut créer des scripts dans le répertoire /etc/NetworkManager/dispatcher.d, le fichier peut avoir un préfixe pour donner un ordre de lancement, exemple: 10-netfs, 20-ntpd
Le script en lui même prend 2 arguments, l’un pour le nom de l’interface, l’autre pour le statut, voici un exemple:

#!/bin/sh
INTERFACE=$1 # Le nom de l'interface
STATUS=$2 # Le statut

case "$STATUS" in
    'up') exec systemctl start [service];;
    'down') exec systemctl stop [service];;
esac

Afin que les scripts s’exécutent, il est nécessaire d’activer le dispatcher :

systemctl enable NetworkManager-dispatcher

NetworkManager - Connexion auto au VPN

Connexion automatique au VPN quand le réseau est établi ou la wifi sur les portables.
Pour se garder la possibilité de se connecter sur le réseau sans VPN (ordinateur de bureau) , création d’une seconde connexion réseau filaire en mode graphique nommée Free.fr
Créer la connexion VPN en mode graphique Connexions VPN –> Configure VPN
2 cas de figure pour une exécution automatique

  1. Ajout mot de passe à la configuration VPN
  2. Créer un fichier mot de passe
  3. Partie commune à 1 et 2

1-Ajout mot de passe à la configuration VPN
Modification en ligne de commande du fichier de connexion vpn /etc/NetworkManager/system-connections/se-fr-protonvpn ,password-flags passe à 0 et ajout configuration vpn-secrets

[vpn]
 ....
password-flags=0
 
[vpn-secrets]
password=your_password

Sur un ordinateur de bureau à liaison filaire (ethernet),on va créer un fichier /etc/NetworkManager/dispatcher.d/10-openvpn en mode root qui va activer ou désactiver la configuration VPN
Si la connexion Free.fr est active, on lance le VPN

#!/bin/bash
VPN_NAME="se-fr-01.protonvpn.com.udp"

case "$2" in
  up)
    if [ "$CONNECTION_ID" == "Free.fr" ]; then
      nmcli con up id "$VPN_NAME" 
    fi
  ;;
  down)
      if nmcli con show --active | grep "$VPN_NAME"; then
        nmcli con down id "$VPN_NAME"
      fi
  ;;
esac

2-Créer un fichier mot de passe
Créer le dossier qui va contenir le fichier

sudo mkdir /etc/mdp

Le fichier mot de passe vpn

sudo nano /etc/mdp/vpn
vpn.secrets.password:'mot_de_passe_connexion_vpn'

Les droits

sudo chmod 600 /etc/mdp/vpn

Sur un ordinateur de bureau à liaison filaire (ethernet),on va créer un fichier /etc/NetworkManager/dispatcher.d/10-openvpn en mode root qui va activer ou désactiver la configuration VPN

#!/bin/bash
VPN_NAME="se-fr-01.protonvpn.com.udp"

case "$2" in
  up)
    if [ "$CONNECTION_ID" == "Free.fr" ]; then
      nmcli con up id "$VPN_NAME" passwd-file /etc/mdp/vpn
    fi
  ;;
  down)
      if nmcli con show --active | grep "$VPN_NAME"; then
        nmcli con down id "$VPN_NAME"
      fi
  ;;
esac

3-Partie commune à 1 et 2
Changer les droits

sudo chown root:root /etc/NetworkManager/dispatcher.d/10-openvpn
sudo chmod 755 /etc/NetworkManager/dispatcher.d/10-openvpn

Afin que les scripts s’exécutent, il est nécessaire d’activer le dispatcher

sudo systemctl enable NetworkManager-dispatcher

Démarrer le service

sudo systemctl start NetworkManager-dispatcher.service

Sur un ordinateur portable Wifi, on veut se connecter automatiquement au VPN quelque soit le réseau Wifi utilisé.
On va créer un fichier /etc/NetworkManager/dispatcher.d/10-wifivpn en mode root qui va activer ou désactiver la configuration VPN
iwgetid nécessite l’installation du paquet wireless_tools

yaourt -S wireless_tools
#!/bin/sh
VPN_NAME="se-fr-protonvpn"
ESSID=$(iwgetid -r)

interface=$1 
status=$2
case $status in
  up|vpn-down)
    if iwgetid | grep -qs ":\"$ESSID\""; then
      nmcli con up id "$VPN_NAME"
    fi
    ;;
  down)
    if iwgetid | grep -qs ":\"$ESSID\""; then
      if nmcli con show --active | grep "$VPN_NAME"; then
        nmcli con down id "$VPN_NAME"
      fi
    fi
    ;;
esac

Changer les droits

sudo chown root:root /etc/NetworkManager/dispatcher.d/10-wifivpn
sudo chmod 755 /etc/NetworkManager/dispatcher.d/10-wifivpn

Afin que les scripts s’exécutent, il est nécessaire d’activer le dispatcher

sudo systemctl enable NetworkManager-dispatcher

Démarrer le service

sudo systemctl start NetworkManager-dispatcher.service

Attention aux connexions à distance

Lancer OpenVPN à distance (ex : via SSH) sur un serveur comme un VPS ou un serveur dédié peut être dangereux.
L’utilisation d’un VPN changera votre adresse IP et votre passerelle par défaut de sorte que votre connexion à distance sera interrompue et que vous ne pourrez plus vous connecter à votre serveur. Pour récupérer, vous aurez besoin d’un autre mode de sauvetage du réseau ou d’un redémarrage brutal.

Afin de ne pas interrompre votre connexion à distance active, vous devrez configurer la route appropriée avant de lancer openvpn.

Méthode (allowing-ssh-on-a-server-with-an-active-openvpn-client):
Il utilise iptables et ip (iproute2). Ci-dessous, il est supposé que l’interface de passerelle par défaut avant le démarrage d’OpenVPN est “eth0”. L’idée est de s’assurer que lorsqu’une connexion à eth0 est établie, même si eth0 n’est plus l’interface de passerelle par défaut, les paquets de réponse pour la connexion retournent sur eth0.
Vous pouvez utiliser le même numéro pour la marque de connexion, la marque de pare-feu et la table de routage. J’ai utilisé des nombres distincts pour rendre les différences entre eux plus évidentes.

# set "connection" mark of connection from eth0 when first packet of connection arrives
# Définir la marque "connexion" de connexion à partir de eth0 lorsque le premier paquet de connexion arrive.
sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234

# set "firewall" mark for response packets in connection with our connection mark
# Définir la marque "firewall" pour les paquets de réponse en relation avec notre marque de connexion.
sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321

# our routing table with eth0 as gateway interface
# notre table de routage avec eth0 comme interface de passerelle
sudo ip route add default dev eth0 table 3412

# route packets with our firewall mark using our routing table
# de paquets de route avec notre marque de pare-feu en utilisant notre table de routage.
sudo ip rule add fwmark 4321 table 3412

Erreurs

Lancer en mode commande pour analyse

openvpn  --setenv PATH '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' --up /etc/openvpn/scripts/update-systemd-resolved --down /etc/openvpn/scripts/update-systemd-resolved --down-pre --config se-fr-01.protonvpn.com.udp1194.ovpn
[...]
Fri Aug 10 07:34:24 2018 TUN/TAP device tun0 opened
Fri Aug 10 07:34:24 2018 TUN/TAP TX queue length set to 100
Fri Aug 10 07:34:24 2018 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Fri Aug 10 07:34:24 2018 /usr/bin/ip link set dev tun0 up mtu 1500
Fri Aug 10 07:34:24 2018 /usr/bin/ip addr add dev tun0 10.8.8.16/24 broadcast 10.8.8.255
Fri Aug 10 07:34:24 2018 /etc/openvpn/scripts/update-systemd-resolved tun0 1500 1585 10.8.8.16 255.255.255.0 init
<14>Aug 10 07:34:24 update-systemd-resolved: Link 'tun0' coming up
<14>Aug 10 07:34:24 update-systemd-resolved: Adding IPv4 DNS Server 10.8.8.1
<14>Aug 10 07:34:24 update-systemd-resolved: SetLinkDNS(5 1 2 4 10 8 8 1)
Unit dbus-org.freedesktop.resolve1.service not found.
<8>Aug 10 07:34:24 update-systemd-resolved: 'busctl' exited with status 1
Fri Aug 10 07:34:24 2018 WARNING: Failed running command (--up/--down): external program exited with error status: 1
Fri Aug 10 07:34:24 2018 Exiting due to fatal error

Le service de résolution n’est pas actif

systemctl status systemd-resolved.service
● systemd-resolved.service - Network Name Resolution
   Loaded: loaded (/usr/lib/systemd/system/systemd-resolved.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:systemd-resolved.service(8)
           https://www.freedesktop.org/wiki/Software/systemd/resolved
           https://www.freedesktop.org/wiki/Software/systemd/writing-network-configuration-managers
           https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients


Lancer le service de résolution

	systemctl start systemd-resolved.service

et vérifier

	systemctl status systemd-resolved.service

● systemd-resolved.service - Network Name Resolution Loaded: loaded (/usr/lib/systemd/system/systemd-resolved.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2018-08-10 07:45:37 CEST; 6s ago Docs: man:systemd-resolved.service(8) https://www.freedesktop.org/wiki/Software/systemd/resolved https://www.freedesktop.org/wiki/Software/systemd/writing-network-configuration-managers https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients Main PID: 1953 (systemd-resolve) Status: “Processing requests…” Tasks: 1 (limit: 4915) Memory: 2.1M CGroup: /system.slice/systemd-resolved.service └─1953 /usr/lib/systemd/systemd-resolved

août 10 07:45:37 e6230 systemd[1]: Starting Network Name Resolution… août 10 07:45:37 e6230 systemd-resolved[1953]: Positive Trust Anchors: août 10 07:45:37 e6230 systemd-resolved[1953]: . IN DS 19036 8 2 49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5 août 10 07:45:37 e6230 systemd-resolved[1953]: . IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d août 10 07:45:37 e6230 systemd-resolved[1953]: Negative trust anchors: 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 1> août 10 07:45:37 e6230 systemd-resolved[1953]: Using system hostname ‘e6230’. août 10 07:45:37 e6230 systemd[1]: Started Network Name Resolution. août 10 07:45:37 e6230 systemd-resolved[1953]: request_name_destroy_callback n_ref=1 ```

Activer le service de résolution pour le prochain démarrage

systemctl enable systemd-resolved.service

Liens

gtkvpn

Gestionnaire des connexion vpn mullvad
https://gitea.yanspm.com/yannick/gtkvpn