web-dev-qa-db-fra.com

Comment configurer OpenVPN pour pouvoir utiliser Internet de manière sécurisée à partir d'un hotspot non sécurisé?

Objectif: Je veux pouvoir utiliser Internet en toute sécurité via mon ordinateur à la maison lorsque mon ordinateur portable est connecté à un point d'accès/point d'accès ouvert.

Je do sais que je peux utiliser un proxy tunnel/SOCKS SSH, mais je ne veux pas jouer avec les applications (les obliger à les utiliser, si possible). Je suppose que ce dont j'ai besoin est une configuration OpenVPN. Je cherche donc un guide détaillé sur la façon de:

  1. Installer et configurer le serveur OpenVPN
  2. Configurer le client OpenVPN (NetworkManager)

Les versions Ubuntu sur lesquelles cela devrait fonctionner sont 10.10 et 11.04.

31
htorque

J'ai la question exacte il y a quelques mois, mais je voulais aussi si possible avoir une connexion IPv6. Vous pourriez être intéressé par mes questions sur Serverfault:

J'avais un seul NIC ("interface réseau") sur mon serveur à utiliser. Dans ma configuration, NetworkManager n'était pas suffisant car je dois exécuter un script personnalisé pour prendre en charge IPv6. Pour plus de simplicité, j'utiliserai NetworkManager ici et omettrai le support IPv6.

Tout d'abord, il suffit de prendre une décision sur la méthode d'authentification. J'utiliserai la méthode du certificat plus sûr qui fonctionne comme le protocole SSL: lors de la négociation, un secret commun est choisi qui sera utilisé pour la session. Les autres méthodes sont une clé partagée. un nom d'utilisateur et mot de passe.

Serveur

1. préparer

Commencez par installer le serveur openvpn. C'est aussi simple que Sudo apt-get install openvpn. La partie difficile est de le configurer. La configuration est présente dans /etc/openvpn.

2. Configurez l'authentification

Le serveur a besoin de certificats pour s'identifier et identifier ses clients. Ces certificats sont extraits d'une autorité de certification (autorité commune). La création des certificats et des clés privées associées peut être effectuée sur n’importe quel ordinateur, mais pas nécessairement sur le serveur. Si vous êtes vraiment paranoïaque, vous devriez le faire sur une machine qui n'est pas connectée à un réseau et utiliser une clé USB pour transférer les certificats.

Créer une autorité de certification et des certificats pour le serveur

Cette étape doit être effectuée une fois, sauf si la clé privée de votre autorité de certification a été compromise. Dans ce cas, il est possible de créer des certificats valides qui seront acceptés par le serveur, ce qui entraînera une violation de la sécurité.

Le documentation officielle suggère de faire l’administration en /etc/openvpn. Je ne suis pas un grand fan de tout exécuter en tant que root, je vais donc le mettre dans un répertoire différent.

  1. Créez le répertoire d'administration et copiez les fichiers qu'il contient en exécutant:

    mkdir ~/openvpn-admin
    cd ~/openvpn-admin
    cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
    cd easy-rsa
    
  2. Modifiez les valeurs par défaut dans varsselon vos besoins, par exemple définissez KEY_SIZE=2048 car vous êtes paranoïaque.
  3. Chargez les variables et créez le répertoire de clés en exécutant:

    . vars
    
  4. Si vous obtenez une erreur qui No ... openssl.cnf file could be found Further invocations will fail, exécutez ln -s openssl-1.0.0.cnf openssl.cnf, puis . vars à nouveau.

  5. Si vous utilisez cette autorité de certification pour la première fois, préparez l'environnement des clés. Ne pas exécutez cette commande si vous souhaitez conserver votre autorité de certification créée précédemment. Pour ce faire, vous devrez déployer un nouveau ca.crt.

    ./clean-all
    
  6. Créez l'autorité de certification en exécutant ./build-ca. Vous pouvez renseigner les informations que vous souhaitez, mais notez que ces informations seront visibles dans les fichiers journaux lorsque les clients se connectent au serveur. Cela créera les fichiers ca.key et ca.crt dans le sous-dossier keysname__. Conservez le secret du fichier ca.key en toutes circonstances . Sinon, toute personne possédant la clé pourra se connecter à votre serveur.
  7. Si vous avez un ancien certificat perdu ou expiré, vous devez d'abord révoquer l'ancien avec ./revoke-full server. Sinon, vous obtenez une erreur de base de données.
  8. Créez le certificat pour le serveur en lançant:

    ./build-key-server server
    

    Lorsque vous êtes invité à entrer un mot de passe, laissez-le vide, sauf si vous souhaitez entrer le mot de passe à chaque démarrage du serveur (non recommandé). Confirmez en signant et en validant le certificat. Deux nouveaux fichiers apparaîtront dans le répertoire keysname__: server.key and server.crt.

DH et utiliser prepare for tls-auth

Génère des paramètres Diffie-Hellman en utilisant:

./build-dh

Per astuces de durcissement , utilisez tls-auth. Pour cela, générez la clé secrète partagée en utilisant:

openvpn --genkey --secret ta.key

Le fichier résultant (ta.key) doit également être distribué aux clients, mais vous ne devez pas le rendre public.

Créer des certificats pour les clients

Pour chaque client, ces étapes doivent être répétées:

  1. Entrez le répertoire dans lequel vous avez créé votre certificat de CA et de serveur:

    cd ~/openvpn-admin/easy-rsa
    
  2. Si vous avez sauté l'étape de création de l'autorité de certification parce que vous en avez déjà une, vous devez d'abord charger les variables:

    . vars
    
  3. Si vous créez de nouveaux certificats parce que les anciens sont perdus ou expirés , vous devez d'abord révoquer l'ancien avec ./revoke-full you. Sinon, vous obtenez une erreur de base de données.
  4. Créez le certificat client you.key et son certificat correspondant you.crt:

    ./build-key you
    

    CommonNamedevrait être unique. Laissez le mot de passe vide si vous utilisez KDE car il n'est pas encore pris en charge à partir de 10.10. Comme pour la génération de certificat de serveur, confirmez la signature du certificat et la validation des modifications.

3. Configurez le service OpenVPN

Par défaut, OpenVPN s’exécute en tant que root lors de l’acceptation de connexions. Ce n'est pas une bonne idée si le service est accessible depuis Internet maléfique.

  1. Créez un utilisateur dédié pour OpenVPN, dites openvpnname__:

    Sudo useradd openvpn
    
  2. Copiez les fichiers server.key, server.crt, ca.crt et dh1024.pem (ou dh2048.pem si vous avez modifié la taille de la clé) du répertoire de clés dans /etc/openvpn. Une autorisation de 400 (en lecture seule pour le propriétaire) convient.

    Sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn
    Sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
    
  3. Copiez également le fichier ta.key:

    Sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    Sudo chmod 400 /etc/openvpn/ta.key
    
  4. Créez le fichier /etc/openvpn/server.conf et mettez-y les lignes suivantes:

    proto udp
    dev tap
    ca ca.crt
    cert server.crt
    key server.key
    dh dh1024.pem
    server 10.8.0.0 255.255.255.0
    Push "redirect-gateway def1"
    ifconfig-pool-persist ipp.txt
    keepalive 10 120
    tls-auth ta.key 0
    # Compress data to save bandwidth
    comp-lzo
    user openvpn
    group openvpn
    persist-key
    persist-tun
    # Logs are useful for debugging
    log-append openvpn-log
    verb 3
    mute 10
    
  5. Définissez les autorisations appropriées sur celui-ci, il n'est pas nécessaire que ce soit secret, mais je préfère ne pas divulguer les détails de la configuration de manière

    Sudo chmod 640 /etc/openvpn/server.conf
    

4. Finition du serveur

Si vous avez créé les certificats sur le serveur, il est judicieux de les chiffrer ou de les déplacer hors du serveur. Dans tous les cas, ne perdez pas les ca.key et server.key. Dans le premier cas, d’autres pourront se connecter à votre serveur. Dans ce dernier cas, un MITM est possible.

Client

En plus de l'adresse IP du serveur, l'administrateur du serveur doit transférer les fichiers suivants:

  • ca.crt: pour vérifier les certificats
  • server.crt: pour vérifier le serveur et communiquer avec lui
  • ta.key: pour renforcer la sécurité
  • you.crt: pour vous identifier auprès du serveur
  • you.key: c'est comme votre mot de passe, les autorisations de fichier doivent être de 400 (lecture seule pour le propriétaire)

1. Installation

Installez OpenVPN et le plugin NetworkManager (approprié pour KDE et Gnome):

Sudo apt-get install openvpn network-manager-openvpn

network-manager-openvpn se trouve dans le référentiel de l'univers.

2. configuration

Dans le panneau de configuration, utilisez les détails suivants:

  • Gateway: l'adresse IP du serveur
  • Type: "Certificats (TLS)" (Gnome) ou "Certificat X.509" (KDE)
  • Certificat CA: chemin d'accès à ca.crt
  • Certificat d'utilisateur: chemin d'accès à you.crt
  • Clé privée: chemin d'accès à you.key

À Avancé :

  • Port de la passerelle: automatique (1194) (il n'est pas nécessaire de le modifier)
  • Utiliser la compression de données LZO: activé
  • Utiliser TCP connexion: désactivé
  • Utiliser le périphérique TAP: activé
  • Chiffre: par défaut
  • Authentification HMAC: par défaut
  • Utiliser l'authentification TLS: activé
    Spécifiez le chemin du fichier de clé à ta.key et réglez "Key Direction" sur 1.
  • ( todo - en le vérifiant ), le serveur envoie la passerelle par défaut afin que tout le trafic passe par la connexion VPN. La dernière fois que j'ai vérifié, le plug-in network-manager-openvpn ne le faisait pas.

Si vous ne parvenez pas à faire fonctionner NetworkManager ou si vous ne voulez pas l'utiliser, placez les fichiers (ca.crt, ...) dans /etc/openvpn et créez le fichier /etc/openvpn/client.conf:

client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20

Si vous ne souhaitez pas activer ce VPN au démarrage, éditez /etc/default/openvpn et décommentez la ligne suivante en supprimant le #:

#AUTOSTART="none"

Pour démarrer cette connexion, lancez:

Sudo /etc/init.d/openvpn start client

clientdoit être renommé si votre fichier de configuration n'est pas nommé client.conf. Exemple: si vous avez nommé votre fichier de configuration safe.conf, vous devez exécuter Sudo /etc/init.d/openvpn start safe.

Pour arrêter OpenVPN, vous devez exécuter:

Sudo /etc/init.d/openvpn stop
40
Lekensteyn

En réalité, vous n'avez pas besoin de manipuler les applications. Cela fonctionne "comme un VPN".

  1. Commencez par installer le package tsocks (chaussettes temporaires):

    Sudo apt-get install tsocks
    
  2. Puis éditez /etc/tsocks.conf et entrez

    server = 127.0.0.1
    server_port = 3333
    
  3. Maintenant, ouvrez un terminal et tapez (cela vous connecte):

    ssh -ND 3333 ssh.url.to.your.home.machine
    
  4. Exécuter (via un autre terminal ou ALT-F2):

    tsocks firefox
    

Désormais, Firefox transmet toutes les communications via le serveur SOCKS sur votre ordinateur créé par SSH. Cela va plus loin dans votre machine domestique, où elle va sur le Web. Tout ce dont vous avez besoin sur votre ordinateur personnel est un serveur SSH. Après la première fois, répétez les étapes 3 et 4.

Il fonctionne comme un charme! Hélas, le chrome n'aime pas les tsocks, mais bon, Firefox fonctionne.

8
MarkovCh1

La solution de tunnel SSH est plus simple que vous ne le pensez. Un programme comme gSTM démarrera/arrêtera les tunnels avec une interface graphique. Il vous suffit ensuite d'ouvrir Network Proxy et de passer de la connexion Internet directe à la configuration manuelle du proxy, puis de cliquer sur "Appliquer à l'échelle du système". Toutes vos applications doivent envoyer leurs données dans le tunnel. Inutile de les modifier individuellement.

1
Felix