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:
Les versions Ubuntu sur lesquelles cela devrait fonctionner sont 10.10 et 11.04.
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.
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
.
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.
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.
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
vars
selon vos besoins, par exemple définissez KEY_SIZE=2048
car vous êtes paranoïaque.Chargez les variables et créez le répertoire de clés en exécutant:
. vars
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.
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
./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 keys
name__. Conservez le secret du fichier ca.key
en toutes circonstances . Sinon, toute personne possédant la clé pourra se connecter à votre serveur../revoke-full server
. Sinon, vous obtenez une erreur de base de données.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 keys
name__: server.key
and server.crt
.
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.
Pour chaque client, ces étapes doivent être répétées:
Entrez le répertoire dans lequel vous avez créé votre certificat de CA et de serveur:
cd ~/openvpn-admin/easy-rsa
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
./revoke-full you
. Sinon, vous obtenez une erreur de base de données.Créez le certificat client you.key
et son certificat correspondant you.crt
:
./build-key you
CommonName
devrait ê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.
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.
Créez un utilisateur dédié pour OpenVPN, dites openvpn
name__:
Sudo useradd openvpn
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}
Copiez également le fichier ta.key
:
Sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
Sudo chmod 400 /etc/openvpn/ta.key
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
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
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.
En plus de l'adresse IP du serveur, l'administrateur du serveur doit transférer les fichiers suivants:
ca.crt
: pour vérifier les certificatsserver.crt
: pour vérifier le serveur et communiquer avec luita.key
: pour renforcer la sécuritéyou.crt
: pour vous identifier auprès du serveuryou.key
: c'est comme votre mot de passe, les autorisations de fichier doivent être de 400 (lecture seule pour le propriétaire)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.
Dans le panneau de configuration, utilisez les détails suivants:
ca.crt
you.crt
you.key
À Avancé :
ta.key
et réglez "Key Direction" sur 1
.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
client
doit ê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
En réalité, vous n'avez pas besoin de manipuler les applications. Cela fonctionne "comme un VPN".
Commencez par installer le package tsocks
(chaussettes temporaires):
Sudo apt-get install tsocks
Puis éditez /etc/tsocks.conf
et entrez
server = 127.0.0.1
server_port = 3333
Maintenant, ouvrez un terminal et tapez (cela vous connecte):
ssh -ND 3333 ssh.url.to.your.home.machine
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.
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.