Comment configurer OpenVPN pour pouvoir utiliser Internet en toute sécurité à partir d'un point d'accès non sécurisé?

31

Objectif: je veux pouvoir utiliser Internet en toute sécurité via mon ordinateur personnel pendant que mon ordinateur portable est connecté à un point d'accès / point d'accès ouvert.

Je ne sais que je peux utiliser un tunnel SSH / proxy SOCKS, mais je ne veux pas bricoler avec des applications (les utilisent, si même possible). Je suppose que j'ai besoin d'une configuration OpenVPN, donc je cherche un guide détaillé sur la façon de:

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

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

htorque
la source
C'est plus une question de défaut de serveur qu'une question d'ubuntu je pense.
Luis Alvarado
1
@Cyrex: 1) est, 2) probablement pas
Lekensteyn

Réponses:

40

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

Je n'avais qu'une seule carte réseau ("interface réseau") sur mon serveur pour l'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é cependant, je vais utiliser NetworkManager ici et omettre le support IPv6.

Tout d'abord, prenez une décision sur la méthode d'authentification. J'utiliserai la méthode du certificat plus sûr qui fonctionne comme SSL: pendant la prise de contact, 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 un mot de passe.

Serveur

1. préparer

Tout d'abord, installez le serveur openvpn. C'est aussi simple que cela sudo apt-get install openvpn. La partie difficile est de le configurer. La configuration est présente dans /etc/openvpn.

2. Configurer l'authentification

Le serveur a besoin de certificats pour s'identifier et identifier ses clients. Ces certificats sont récupérés auprès 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 quelle machine, elle n'a pas à être effectuée sur le serveur. Si vous êtes vraiment paranoïaque, vous devez 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, des certificats valides peuvent être créés qui seront acceptés par le serveur, entraînant une faille de sécurité.

La 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, donc je vais le mettre dans un répertoire différent.

  1. Créez le répertoire d'administration et copiez-y les fichiers 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 varsselon vos besoins, par exemple en définissant KEY_SIZE=2048votre position paranoïaque.
  3. Chargez les variables et créez le répertoire clé en exécutant:

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

  5. Si c'est la première fois que vous utilisez cette autorité de certification, préparez l'environnement des clés. N'exécutez pas cette commande si vous souhaitez conserver votre autorité de certification précédemment créée. 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 remplir tous les détails que vous souhaitez, mais notez que ces informations seront visibles dans les fichiers journaux lorsque les clients se connecteront au serveur. Cela va créer les fichiers ca.keyet ca.crtdans le sous-dossier keys. Gardez le ca.keyfichier secret en toutes circonstances . Ne pas le faire permettra à toute personne possédant la clé de se connecter à votre serveur.
  7. Si vous avez un certificat précédent 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 exécutant:

    ./build-key-server server
    

    Lorsqu'on vous demande un mot de passe, laissez-le vide, sauf si vous êtes prêt à entrer le mot de passe à chaque démarrage du serveur (non recommandé). Confirmez en signant le certificat et en le validant. Deux nouveaux fichiers apparaîtront dans le répertoire keys: server.keyet server.crt.

DH et utilisez prepare for tls-auth

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

./build-dh

Par pointes 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 mettre en 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 CA et votre certificat de serveur:

    cd ~/openvpn-admin/easy-rsa
    
  2. Si vous avez ignoré 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 clients you.keyet son certificat correspondant you.crt:

    ./build-key you
    

    Le 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 certificats 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 des connexions. Ce n'est pas une bonne idée si le service est accessible à partir du mal Internet.

  1. Créez un utilisateur dédié pour OpenVPN, par exemple openvpn:

    sudo useradd openvpn
    
  2. Copiez les fichiers server.key, server.crt, ca.crtet dh1024.pem(ou dh2048.pemsi vous avez changé la taille de clé) à partir du répertoire des clés dans /etc/openvpn. Une autorisation de 400 (lecture seule pour le propriétaire) est très bien.

    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.confet insérez-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, il n'a pas besoin d'être secret, mais je préfère ne pas divulguer les détails de configuration:

    sudo chmod 640 /etc/openvpn/server.conf
    

4. Fin du serveur

Si vous avez créé les certificats sur le serveur, c'est une bonne idée de le chiffrer ou de le déplacer hors du serveur. Dans tous les cas, ne perdez pas le ca.keyet server.key. Dans le premier cas, d'autres pourront se connecter à votre serveur. Dans ce dernier, un MITM est possible.

Client

Outre l'adresse IP du serveur, l'administrateur du serveur doit remettre les fichiers suivants:

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

1. Installation

Installez OpenVPN et le plugin NetworkManager (adapté à KDE et Gnome):

sudo apt-get install openvpn network-manager-openvpn

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

2. Configuration

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

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

Chez Advanced :

  • Port de passerelle: automatique (1194) (n'a pas besoin d'être modifié)
  • Utiliser la compression de données LZO: activé
  • Utiliser la connexion TCP: désactivé
  • Utiliser l'appareil TAP: activé
  • Chiffrement: par défaut
  • Authentification HMAC: par défaut
  • Utiliser l'authentification TLS: activé
    Spécifiez le chemin d'accès au fichier clé ta.keyet définissez "Direction clé" sur 1.
  • ( todo - check it out ) le serveur pousse la passerelle par défaut pour que tout le trafic passe par la connexion VPN. La dernière fois que j'ai vérifié, le plugin network-manager-openvpn ne l'a pas fait.

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

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, modifiez /etc/default/openvpnet décommentez la ligne suivante en supprimant #:

#AUTOSTART="none"

Pour démarrer cette connexion, exécutez:

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
Lekensteyn
la source
1
Quelle est la configuration du serveur pour la connexion basée sur le nom d'utilisateur / mot de passe, où mon client n'a pas de connaissances pour configurer le client vpn tout ce que je veux qu'il utilise l'IP du serveur, le nom d'utilisateur, le mot de passe.
@YumYumYum Aucune idée de la façon d'utiliser le nom d'utilisateur / mot de passe, consultez la page de manuel de openvpn ( man openvpn). Les versions récentes d'openvpn ont la possibilité d'incorporer des certificats et des fichiers de clés, il est donc peut-être encore plus facile de fournir ce fichier de configuration unique avec des instructions à l'utilisateur.
Lekensteyn
Notez que les versions plus récentes d'Ubuntu sont livrées avec OpenSSL 1.0.1, et l'exécution de la . varscommande ci-dessus peut générer une erreur indiquant que «le fichier openssl.cnf a pu être trouvé. D'autres invocations échoueront». Vous devez sudo -s; cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/; ln -s openssl-1.0.0.cnf openssl.cnf, puis exécutez . varset les autres commandes.
Dan Dascalescu
@DanDascalescu Le script whichopenssllocalise le openssl-1.0.0.cnffichier correctement pour moi (easy-rsa 2.3.2, OpenSSL 1.0.1e)
Lekensteyn
Réponse très instructive et approfondie. Pourriez-vous répondre à cette question ?
JB0x2D1
8

Vous n'avez en fait pas besoin de jouer avec des applications. Cela fonctionne "tout comme le VPN".

  1. Installez d'abord le tsockspaquet (chaussettes temporaires):

    sudo apt-get install tsocks
    
  2. Puis éditez /etc/tsocks.confet 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 au serveur SOCKS de votre ordinateur créé par SSH. Cela est ensuite acheminé par tunnel vers votre machine domestique, où il 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 simplement les étapes 3 et 4.

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

MarkovCh1
la source
3
Eh bien, voyez votre dernière phrase - je ne veux pas d'abord vérifier tous mes programmes s'ils fonctionnent vraiment bien avec tsocks, alors que cela pourrait être un seul clic dans l'applet NetworkManager avec OpenVPN.
htorque
D'ACCORD. Ma réponse sera probablement utile aux personnes qui souhaitent une solution rapide pour accéder aux sites Web.
MarkovCh1
1

La solution de tunnel SSH est plus simple que vous ne le pensez. Un programme comme gSTM démarrera / arrêtera les tunnels pour vous avec une interface graphique. Ensuite, ouvrez simplement Network Proxy et changez-le de Connexion Internet directe à Configuration manuelle de proxy, appuyez sur "Appliquer à l'échelle du système" et toutes vos applications devraient envoyer leurs données dans le tunnel - pas besoin de tripoter chacune individuellement.

Félix
la source