140 votes

Comment puis-je faire passer tout mon trafic réseau par SSH ?

Lorsque j'utilise l'internet à partir d'un endroit non sécurisé (comme un wifi public), j'aime utiliser un tunnel ssh ( ssh -D port host ) pour s'assurer que mon trafic ne peut pas être reniflé. Malheureusement, il semble que de nombreuses applications ne permettent pas de spécifier un proxy (Flash en est un exemple majeur).

On dirait qu'il devrait y avoir un moyen d'utiliser un tunnel pour tous le trafic réseau de mon ordinateur, mais je ne sais absolument pas comment faire. Toute aide serait grandement appréciée.

82voto

shellster Points 938

Pour faire ce que vous voulez, je recommande sshuttle .

Vous l'utilisez comme ça :

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

Il tunnelise automatiquement tout votre trafic TCP pour vous. Vous pouvez ajouter le --dns pour qu'il tunnelise aussi votre trafic DNS. Il suffit que Python soit installé sur le serveur distant.

Si vous voulez seulement tunneliser des programmes spécifiques, je vous recommanderais chaînes par procuration .

Une fois qu'il est installé, démarrez votre proxy ssh socks comme ceci :

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

Ceci lancera un proxy "SOCKS" écoutant sur le port <local>.

Modifiez ensuite le fichier /etc/proxychains.conf pour qu'il pointe vers le même port que le port <local> :

socks5 127.0.0.1 <localport>

Enfin, lancez votre programme que vous voulez proxy-ed comme ceci :

proxychains <program name>

Cela devrait fonctionner. Cependant, certains programmes ont des difficultés à fonctionner avec les chaînes de proxy. Gardez également à l'esprit qu'avec Firefox, vous devez modifier des éléments supplémentaires dans about:config pour l'obliger à effectuer des recherches DNS via le proxy au lieu de le contourner.

En outre, sur les navigateurs web. S'ils supportent les proxys socks, vous n'avez pas besoin de faire quoi que ce soit d'autre pour qu'ils utilisent le tunnel ssh mentionné ci-dessus, il suffit d'entrer 127.0.0.1 pour le serveur proxy SOCKS et le <port local> pour le port du proxy.

EDIT 3/29/16

Puisque ce message reçoit encore des votes positifs, j'ai pensé que je devais 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. Que ce soit pour Linux ou OSX, je recommande fortement de passer à une version fork toujours maintenue : proxychains-ng : https://github.com/rofl0r/proxychains-ng

Outre le fait qu'il fonctionne à la fois sous Linux et OSX, il est facile à compiler et offre une bien meilleure prise en charge du tunneling DNS.

Je dois également mentionner une autre option, à savoir les chaussettes rouges. Elle fonctionne de manière similaire à proxychains(-ng) et se trouve probablement dans votre dépôt de distribution : https://github.com/darkk/redsocks

EDIT 11/27/19 Si vous choisissez la voie des proxychains, veuillez utiliser proxychains-ng. Il y a de sérieuses corrections de bogues par rapport à l'ancienne version, par exemple : https://github.com/rofl0r/proxychains-ng/issues/292

55voto

Pricey Points 4504

man ssh donne un exemple de cette situation. Un vpn basé sur le 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 la nouvelle interface mise en place, il suffit d'en faire la route par défaut, ce qui est une autre question.

6voto

Peter Eisentraut Points 7030

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.

5voto

Ambroz Bizjak Points 4595

J'ai développé un logiciel qui vous permet de transférer tout le TCP et éventuellement l'UDP à travers un proxy SOCKS5, dans tout le système.

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

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

2voto

RÉSEAUX PRIVÉS VIRTUELS BASÉS SUR LE SSH ssh supporte la création de tunnels de réseaux privés virtuels (VPN) à l'aide de le pseudo-dépôt de réseau tun(4), permettant à deux réseaux d'être joints de manière sécurisée. L'option de configuration PermitTunnel de sshd_config(5) contrôle si le serveur prend en charge cette fonction et à quel niveau. si le serveur prend en charge cette fonction, et à quel niveau (couche 2 ou 3). fic).

 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).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X