Comment puis-je canaliser tout le trafic de mon réseau via SSH?

117

Chaque fois que j'utilise Internet depuis un emplacement non sécurisé (comme le wifi public), j'aime utiliser un tunnel ssh ( ssh -D port host) pour m'assurer que mon trafic ne peut pas être reniflé. Malheureusement, de nombreuses applications ne permettent pas de spécifier un proxy (Flash en est un exemple majeur).

Il me semble qu’il devrait exister un moyen d’utiliser un tunnel pour tout le trafic réseau de mon ordinateur, mais je ne sais absolument pas comment procéder. Toute aide serait grandement appréciée.

REINSTATE MONICA - Jeremy Banks
la source
16
Bien sûr, vous ne pouvez pas acheminer littéralement TOUT votre trafic à travers ssh, car cela signifierait que ssh passe par lui-même, mais nous savions ce que vous vouliez dire. :)
CarlF
1
C'est une bonne idée, mais vous n'êtes protégé qu'entre votre ordinateur et votre point de terminaison ssh. Après cela, votre trafic est en clair (sauf indication contraire, par exemple SSL). d'accord, il est beaucoup plus probable que ce soit sur un fil, mais quand même ... vous ne pouvez pas vraiment faire confiance à des fils que vous ne contrôlez pas.
Quack Quichotte
6
Mais lorsque vous naviguez sur le vaste réseau Internet, vous êtes en sécurité en étant l'un des milliards de paquets, n'est-ce pas? Lorsque vous vous connectez à un réseau Wi-Fi public, vous êtes l’une des 3 connexions suivantes, vous pouvez être identifié personnellement, etc.
endolith

Réponses:

62

Pour faire ce que vous voulez, je vous recommande sshuttle .

Vous l'utilisez comme ceci:

./sshuttle -r username@sshserver 0.0.0.0/0 -vv

Il tunnelera tout votre trafic TCP automatiquement pour vous. Vous pouvez ajouter l' --dnsargument pour qu'il tunnelise également votre trafic DNS. Python doit uniquement être installé sur le serveur distant.

Si vous ne souhaitez que des programmes spécifiques du tunnel Je recommande proxychains .

Une fois installé, démarrez votre proxy ssh socks comme suit:

ssh -fND 127.0.0.1:<local port> username@sshserver

Cela lancera un proxy "SOCKS" à l’écoute sur <port local>.

Ensuite, éditez /etc/proxychains.conf pour qu'il pointe vers le même port que <port local>.

Enfin, démarrez votre programme que vous voulez utiliser comme proxy:

proxychains <program name>

Cela devrait juste marcher. Cependant, quelques programmes auront du mal à travailler avec les chaînes proxy. N'oubliez pas non plus qu'avec Firefox, vous devez modifier des éléments supplémentaires sous about: config pour le forcer à effectuer des recherches DNS via le proxy au lieu de le contourner.

Remarque supplémentaire sur les navigateurs Web. S'ils prennent en charge les proxy socks, vous n'avez rien d'autre à faire pour les amener à utiliser le tunnel ssh mentionné ci-dessus. Il vous suffit d'entrer 127.0.0.1 pour le serveur proxy SOCKS et le <port local> pour le port de proxy.

EDIT 3/29/16

Étant donné que ce billet continue de recevoir des votes positifs, j'ai pensé le mettre à jour. Proxychains est toujours dans la plupart des dépôts Linux et fonctionne toujours sous Linux. Cependant, le projet est effectivement abandonné et ne fonctionne pas sous OSX. Pour Linux ou OSX, je recommande vivement de mettre à niveau vers un fork encore maintenu: proxychains-ng: https://github.com/rofl0r/proxychains-ng

En plus de fonctionner sous Linux et OSX, il est facile à compiler et supporte beaucoup mieux le tunneling DNS.

Je devrais également mentionner une autre option, qui est les chaussettes rouges. Cela fonctionne de la même manière que proxychains (-ng) et est probablement aussi dans votre référentiel dist: https://github.com/darkk/redsocks

coquillages
la source
Remarque pour les systèmes Linux plus récents utilisant sshuttle: au moment de la rédaction de cet article, un bogue du noyau vous empêchait de fonctionner. Dans ce cas, utilisez:sshuttle -r root@host -x host 0/0
aggregate1166877
49

man sshdonne un exemple de cela. Un vpn basé sur ssh:

SSH-BASED VIRTUAL PRIVATE NETWORKS
     ssh contains support for Virtual Private Network (VPN) tunnelling using
     the tun(4) network pseudo-device, allowing two networks to be joined
     securely.  The sshd_config(5) configuration option PermitTunnel controls
     whether the server supports this, and at what level (layer 2 or 3 traf-
     fic).

     The following example would connect client network 10.0.50.0/24 with
     remote network 10.0.99.0/24, provided that the SSH server running on the
     gateway to the remote network, at 192.168.1.15, allows it:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.0.50.1 10.0.99.1 netmask 255.255.255.252

~~ snip ~~

     Since a SSH-based setup entails a fair amount of overhead, it may be more
     suited to temporary setups, such as for wireless VPNs.  More permanent
     VPNs are better provided by tools such as ipsecctl(8) and isakmpd(8).

Une fois cette nouvelle interface installée, il vous suffira d'en faire la route par défaut, ce qui est une question différente.

PriceChild
la source
1
Pourriez-vous expliquer un peu plus? La commande ifconfig crée une nouvelle interface nommée tun0, non? Ou tun0 est-il créé par ssh et simplement configuré par ifconfig? Peut-être ajouter un exemple pertinent à la question?
Personne
6

Recherchez l'option "Tunnel" dans ssh. Cela crée un périphérique de tunnel auquel vous pouvez attribuer une adresse IP, puis vous modifiez la route par défaut pour utiliser ce tunnel.

Peter Eisentraut
la source
4

J'ai développé un logiciel qui vous permet de transférer tous les protocoles TCP et éventuellement UDP via un proxy SOCKS5, à l'échelle du système.

http://code.google.com/p/badvpn/wiki/tun2socks

Il peut même être installé sur un routeur pour transférer toutes les connexions des ordinateurs du réseau local.

Ambroz Bizjak
la source
0

RÉSEAUX PRIVÉS VIRTUELS BASÉS SUR SSH ssh prend en charge le tunneling de réseau privé virtuel (VPN) à l'aide du pseudo-périphérique réseau tun (4), permettant ainsi à deux réseaux de se connecter en toute sécurité. L'option de configuration PermitTunnel de sshd_config (5) détermine si le serveur le prend en charge et à quel niveau (trafic de couche 2 ou 3).

 The following example would connect client network 10.0.50.0/24 with
 remote network 10.0.99.0/24 using a point-to-point connection from
 10.1.1.1 to 10.1.1.2, provided that the SSH server running on the gateway
 to the remote network, at 192.168.1.15, allows it.

 On the client:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252
       # route add 10.0.99.0/24 10.1.1.2

 On the server:

       # ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252
       # route add 10.0.50.0/24 10.1.1.1

 Client access may be more finely tuned via the /root/.ssh/authorized_keys
 file (see below) and the PermitRootLogin server option.  The following
 entry would permit connections on tun(4) device 1 from user “jane” and on
 tun device 2 from user “john”, if PermitRootLogin is set to
 “forced-commands-only”:

   tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane
   tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john

 Since an SSH-based setup entails a fair amount of overhead, it may be
 more suited to temporary setups, such as for wireless VPNs.  More perma‐
 nent VPNs are better provided by tools such as ipsecctl(8) and
 isakmpd(8).
Kristian Hermansen
la source
1
veuillez ajouter une source pour votre information. note: c'est une vieille question.
Lorenzo Von Matterhorn
-2

Je voulais juste préciser que (hôte ssh -D port) n’est pas un moyen 100% sécurisé de ne pas renifler le trafic. Ajouter (hôte ssh -D -c blowfish) serait un meilleur choix car vous ajoutez au moins le cryptage à votre session. Vous pouvez ajouter d’autres options, mais il est assez facile de taper simplement "man ssh" dans votre terminal ou sur Google pour obtenir une liste complète.

L'option que je pense que vous recherchez est la mise en place d'un VPN (réseau privé virtuel)

Consultez cet article pour comprendre la différence entre les deux ( SSH vs VPN ) ou une bonne version résumée avant de vous lancer dans la création de votre propre VPN. Si vous décidez d’utiliser la route VPN, je recommande OpenVPN , une documentation gratuite et abondante.

ricbax
la source
6
mauvais conseil. "blowfish" est un chiffre SSH-1; c'est rapide, pensé sécurisé (à partir de 1999: unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1 ), mais quand même. vous voulez probablement ssh -2 -C -D [...](forcer SSH2, utiliser la compression) et abandonner le fichier -c. selon man sshla liste de chiffrement de mon système dans SSH2 par défaut aes128-cbc,3des-cbc,blowfish-cbc,[etc]. Si vous le demandez, -c blowfishvous risquez de vous retrouver avec SSH1, qui est beaucoup moins sécurisé que SSH2.
Quack Quichotte
2
Certes, mais Jeremy avait l’impression que la connexion était sécurisée avec seulement -D 8080, j’ai simplement déclaré qu’elle était meilleure que celle qu’il utilisait. Vous faites valoir un argument valable et c’est pourquoi je mentionne le manuel pour plus d’options.
ricbax
Peut-être devriez-vous changer votre réponse, sinon c'est utile.
endolithe
J'ai oublié ceci, n'utilisez pas ce site régulièrement. Merci pour la clarification ... J'ai eu la forte impression que SSH était sécurisé par défaut.
REINSTATE MONICA -Jeremy Banks
9
WTF n'est pas SSH utilisant le cryptage par défaut ??
LatinSuD
-3

Utilisez ces exemples:

  • Transférez le port 80 depuis un hôte distant vers 8888 sur votre localhost

    ssh -fnN -L8888: hôte local: 80 utilisateur @ serveur

    Utilisez-le pour accéder aux services d'un hôte distant qui n'y sont disponibles que

  • Transférer le port 80 de votre serveur local vers 8888 sur un hôte distant

    ssh -fnN -R8888: hôte local: 80 utilisateur @ serveur

    Utilisez cette option pour permettre à d’autres utilisateurs d’accéder à vos services: serveur Web ou autre.

À votre santé! :)

kolypto
la source
Bon commentaire, mais pas du tout lié à ce dont nous parlons ici. Reverse ssh permet à un serveur de demander à un client de lui acheminer UN port de trafic. Il faudrait davantage de configuration pour acheminer ce trafic vers Internet. Vous devrez également configurer un tunnel SSH pour chaque port. ET cela doit être lancé à partir du serveur, pas du client - pourquoi voudriez-vous le faire si vous n'y étiez pas obligé?
Beachhouse