每当我从不安全的位置(例如公共wifi)使用Internet时,我都喜欢使用ssh隧道(ssh -D port host)以确保不会监听我的流量。不幸的是,似乎有许多应用程序没有提供指定代理的方法(Flash是一个主要示例)。

感觉应该有某种方法可以对所有网络流量使用隧道从我的计算机上,但是我完全不知道如何执行此操作。任何帮助将不胜感激。

评论

当然,您实际上无法通过ssh隧道传输所有流量,因为那将意味着通过ssh本身隧道传输,但是我们知道您的意思。 :)

这是个好主意,但是只在计算机和ssh端点之间保护您。在那之后,您的流量是明确的(除非受到其他保护,例如SSL)。当然,它更可能是通过电线,但仍然...您无法真正信任不受控制的电线。

但是,当您使用广泛的Internet时,仅数十亿个数据包中的一个就具有一定的安全性,对吗?当您连接到公共Wi-Fi时,您可能是3个连接之一,可以进行个人识别,等等。

#1 楼

要执行您想要的操作,我建议使用sshuttle。

您可以像这样使用它:

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


它将自动隧穿所有TCP通信为了你。您可以添加--dns参数,使其也可以隧道DNS流量。远程服务器只需要安装Python。

如果您只想隧道传输特定程序,我建议使用代理链。

一旦安装,请像下面一样启动ssh socks代理this:

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


这将启动“ SOCKS”代理,监听<本地端口>。

然后编辑/etc/proxychains.conf指向与<本地端口>相同的端口。

像这样最后启动要代理的程序:

proxychains <program name>


它应该工作。但是,一些程序在使用代理链时会遇到麻烦。另外请记住,对于Firefox,您必须在about:config下更改其他项,以强制它通过代理进行DNS查找,而不是绕过它。

作为附加说明,在Web浏览器上。如果它们支持袜子代理,则无需执行任何其他操作即可使它们使用上述ssh隧道,只需为SOCKS代理服务器输入127.0.0.1,为代理端口输入

编辑3/29/16

由于这篇文章仍然有一些争议,我想我会对其进行更新。 Proxychains仍然存在于大多数Linux仓库中,并且仍可在Linux上使用。但是,该项目实际上已被放弃,无法在OSX上运行。对于Linux或OSX,我强烈建议您升级到仍然维护的fork:proxychains-ng:https://github.com/rofl0r/proxychains-ng

除了在Linux和OSX上均可使用,它易于编译,并且对DNS隧道具有更好的支持。

我还应该提到另一个选项,即redsocks。它的工作原理类似于proxychains(-ng),也可能在您的dist回购中:https://github.com/darkk/redsocks

编辑19/27/19
如果您使用代理链路线,请使用proxychains-ng。在旧版本上有一些严重的错误修复,例如:https://github.com/rofl0r/proxychains-ng/issues/292

评论


请注意使用shuttle的较新Linux系统:在撰写本文时,有一个内核错误会给您造成麻烦。在这种情况下,请使用:sshuttle -r root @ host -x host 0/0

–aggregate116​​6877
19年7月3日在6:02

#2 楼

man ssh给出了一个确切的例子。基于ssh的vpn:

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


~~片段~~

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


一旦有了新界面起来,您只需要将其设置为默认路由即可,这是一个不同的问题。

评论


您能再解释一下吗? ifconfig命令创建一个名为tun0的新接口,对吗?还是tun0是由ssh创建的,是否由ifconfig进一步配置的?也许添加与该问题相关的示例?

–没人
17年2月18日在17:07

#3 楼

在ssh中寻找“隧道”选项。这将创建一个隧道设备,您可以为其分配IP地址,然后更改默认路由以使用该隧道。

#4 楼

我已经开发了允许您通过系统范围内的SOCKS5代理转发所有TCP和UDP的软件。

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

它甚至可以安装在路由器上,以转发来自局域网中计算机的所有连接。

#5 楼

基于SSH的虚拟专用网络
ssh包含对使用tun(4)网络伪设备的虚拟专用网络(VPN)隧道的支持,从而允许两个网络安全地连接。 sshd_config(5)配置选项PermitTunnel控制服务器是否支持此功能以及级别(第2层或第3层traf-
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).


评论


请添加信息来源。注意:这是一个老问题。

–洛伦佐·冯·马特宏峰
2013年3月12日23:22

#6 楼

只是想清除一下(ssh -D端口主机),这不是一种不监听流量的100%安全方式。添加(ssh -D -c河豚端口主机)将是一个更好的选择,因为您至少要在会话中添加加密。您可以添加更多选项,但只需在终端机或Google中键入“ man ssh”即可获得完整列表。

我认为您正在寻找的选项是设置一个VPN(虚拟专用网络)

在您设置自己的VPN之前,请查看本文以了解两者之间的差异(SSH与VPN)或良好的摘要版本。 。如果您决定使用VPN路由,我建议您使用OpenVPN,它是免费的,并提供大量文档和支持。

评论


不好的建议。 “ blowfish”是SSH-1密码;它是快速的,被认为是安全的(从1999年开始:unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1),但是仍然如此。您可能需要ssh -2 -C -D [...](强制使用SSH2,使用压缩)并删除-c。根据我系统的人ssh的说法,SSH2中的密码列表默认为aes128-cbc,3des-cbc,blowfish-cbc等。我的意思是,如果您请求-c blowfish,则可能会得到SSH1,它比SSH2安全得多。

–嘎嘎吉qua德
09-10-29在5:58

的确如此,但是杰里米给人的印象是,仅使用-D 8080,连接是安全的,我只是说它比他使用的要好。您的观点是正确的,这就是为什么我在手册中提到更多选项的原因。

–ricbax
09-10-29在6:26

也许您应该更改答案,否则会有所帮助。

– Endolith
09年11月2日在16:16

忘记了我问的这个问题,不要经常使用此网站。感谢您的澄清...我给人的强烈印象是SSH默认是安全的。

–杰里米
2010-12-18在4:10

WTF默认不是使用加密的SSH ??

–LatinSuD
2011年7月18日在10:31

#7 楼

使用以下示例:



将端口80从远程主机转发到本地主机上的8888

ssh -fnN -L8888:localhost:80 user@server


使用这可以访问仅在那里可用的远程主机上的服务


将端口80从本地主机转发到远程主机上的8888

ssh -fnN -R8888:localhost:80 user@server


使用它可以使这些用户访问您的服务:Web服务器或其他任何内容。


干杯! :)

评论


很好的评论,但与我们在这里所说的根本无关。反向ssh允许SERVER请求CLIENT将流量的一个端口路由到它。然后需要进行更多配置,才能将该流量路由到Internet。您还必须为每个端口设置SSH隧道。并且必须从服务器而不是客户端启动它-为什么除非您必须这样做,否则为什么要这样做?

–海滩屋
13年5月21日在12:30