![如何通过 SSH 隧道避免 MITM 攻击?](https://linux22.com/image/623765/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20SSH%20%E9%9A%A7%E9%81%93%E9%81%BF%E5%85%8D%20MITM%20%E6%94%BB%E5%87%BB%EF%BC%9F%20.png)
假设我有一台计算机位于典型的家用路由器内(但假设防火墙/端口转发无法访问路由器)。它的内部 IP 可以是 192.168.1.81。该 LAN 上有一台 IP 为 192.168.1.85 的攻击者机器,它想对 192.168.1.81 进行典型的 ARP 欺骗 MITM 攻击(假设他想运行类似 urlsnarf 的程序来嗅探访问过的网站)。192.168.1.81 机器希望防止任何形式的 MITM 攻击并在使用 Chrome 浏览互联网时保持安全。他有一台具有 SSH 访问权限的服务器,他想用它来加密他的网页浏览,这样攻击者就无法通过 MITM 攻击嗅探它。我(希望使用 SSH 隧道保持安全的用户)如何在我的服务器(在公共 IP 162.xx.xxx.xx)上使用 SSH 隧道来防止潜在的 MITM 攻击?这是一个科学博览会项目。我需要在我的服务器上进行哪些设置(如果有的话)(我拥有完全的 root 访问权限)?我的 SSH 端口与常规端口不同,因此请将 SSH 端口 25512 作为参考。我还在防火墙上为服务器打开了端口 4567,因此请使用该端口作为参考。请使用 72.xxx.xx.xxx 作为家庭网络的公共 IP。请包含任何必要的命令。如果我需要更清楚,请告诉我。非常感谢任何能提供帮助的人!
答案1
最简单的方法是在远程服务器上运行代理(fe squid)并使其仅在本地接口上监听127.0.0.1
(因为您不想打开互联网的代理)。
然后您通过 ssh 进入远程服务器并创建一个到远程服务器上的本地代理接口的 tcp 转发。
例如,假设远程服务器上的代理162.xx.xx.xx
正在侦听 tcp 127.0.0.1:3128
。现在,您可以使用以下命令通过 ssh 连接到它:
ssh -p 25512 -L 3128:127.0.0.1:3128 -C 162.xx.xx.xx
这将打开从客户端到127.0.0.1:3128
远程主机的隧道127.0.0.1:3128
。然后,您只需在客户端上设置浏览器以使用代理127.0.0.1:3128
,然后通过 ssh 隧道传输到远程主机并传递到那里的代理。
该-C
参数启用压缩,希望可以使您的浏览速度更快一些,因为需要传输的数据更少。
以下是相关部分man 1 ssh
:
-L [bind_address:]port:host:hostport
Specifies that the given port on the local (client) host is to be forwarded to
the given host and port on the remote side. This works by allocating a socket
to listen to port on the local side, optionally bound to the specified
bind_address. Whenever a connection is made to this port, the connection is
forwarded over the secure channel, and a connection is made to host port
hostport from the remote machine. Port forwardings can also be specified in
the configuration file. IPv6 addresses can be specified by enclosing the
address in square brackets. Only the superuser can forward privileged ports.
By default, the local port is bound in accordance with the GatewayPorts
setting. However, an explicit bind_address may be used to bind the connection
to a specific address. The bind_address of “localhost” indicates that the
listening port be bound for local use only, while an empty address or ‘*’
indicates that the port should be available from all interfaces.
-C Requests compression of all data (including stdin, stdout, stderr, and data for
forwarded X11 and TCP connections). The compression algorithm is the same used
by gzip(1), and the “level” can be controlled by the CompressionLevel option
for protocol version 1. Compression is desirable on modem lines and other slow
connections, but will only slow down things on fast networks. The default
value can be set on a host-by-host basis in the configuration files; see the
Compression option.
-p port
Port to connect to on the remote host. This can be specified on a per-host
basis in the configuration file.