ssh 端口转发工具 tunnel

英语好的请移步:https://www.ssh.com/ssh/tunneling/example

相信很多大公司为了安全和权限管理都在使用堡垒机,这里介绍一个方便快速开发,安全直连服务器的方法。

什么是SSH端口转发,SSH tunnel?

SSH端口转发是SSH的一种机制,用于从客户端到服务器的隧穿应用端口,反之亦然。它可以用于向应用程序加密通过防火墙,一些系统管理员和It专业人员使用它来从家里的机器中打开后门进入内部网络。它还可以被黑客和恶意软件滥用,以开放从内部网络的访问。

本地转发

本地转发用于将一个端口从客户端转发到服务器。通常的做法是:SSH客户机配置链接用的监听端口,当它接收到连接时,它将转发连接到SSH服务器。服务器连接到一个配置好的目标端口,可能在不同的机器上而不是SSH服务器。

本地端口转发的典型用途包括:

  • 通过跳转服务器进行隧道会话和文件传输。
  • 从外部网络连接到内部网络上的服务器。
  • 连接到Internet上的远程文件共享。

相当多的组织通过某个跳转服务器来访问内部SSH。服务器可能是一个标准的Linux/Unix box,通常带有一些额外的硬化、入侵检测和/或日志记录,或者它可能是一个商业跳转服务器解决方案。例如,CryptoAuditor可以充当跳转服务器,记录所有会话,并将会话内容传递给分析,以获得可疑活动的早期预警。

许多跳转服务器允许传入端口转发只要连接验证通过,这样的端口转发是很方便的,因为它允许精通技术的用户非常透明地使用内部资源。例如,他们会他们的本地机器上一个端口转发到公司内部网web服务器,内部邮件服务器的IMAP端口,一个本地文件服务器的445和139端口,一台打印机,版本控制存储库,或任何其他系统内部网络。通常,端口被隧道到内部机器上的SSH端口上。

在OpenSSh中,本地端口转发需要使用-L参数进行配置:

ssh -L 80:intra.example.com:80 gw.example.com

这里的例子是打开一个链接到跳转服务器gw.example.com ,同时转发任意一个本地使用80端口的链接至intra.example.com80端口。

默认情况下,任何人(即使在不同的机器上)都可以连接到SSH客户机机器上指定的端口。然而,这可以通过提供一个bind地址来限制在同一主机上的程序:

ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com

在 OpenSSH 客户端配置文件中参数LocalForward 能够被用来配置转发而不需要在命令行中指定它。

远程转发

在OpenSSH中使用参数-R实现远程SSH端口转发。例如:

ssh -R 8080:localhost:80 public.example.com

这允许远程服务器上的任何人连接到远程服务器上的TCP端口8080。然后,连接将被隧道重新连接到客户端主机,然后客户端在本地主机上与端口80进行TCP连接。任何其他主机名或IP地址都可以用来代替localhost来指定要连接的主机。

这个特殊的例子对于允许外部访问内部web服务器是很有用的。或者将一个内部的web应用程序公开到公共互联网上。这有利于在家工作的员工或攻击者。

默认情况下,OpenSSH只允许从服务器主机连接到远程转发端口。然而,服务器配置文件sshdconfig中的gatewayport选项可以用来控制它。以下是可选的配置:

GatewayPorts no

这可以防止连接到服务器计算机外部的转发端口。

GatewayPorts yes

这允许任何人连接到转发的端口。如果服务器在公共互联网上,互联网上的任何人都可以连接到端口。

GatewayPorts clientspecified

这意味着客户端可以指定一个IP地址,该IP地址允许连接到端口的连接。其语法是:

ssh -R 52.194.1.73:8080:localhost:80 host147.aws.example.com

在这个例子中,只有来自IP地址为52.194.1.73且目标端口是8080的被允许

OpenSSH还允许将转发的远程端口指定为0。在这种情况下,服务器将动态分配一个端口并将其报告给客户端。当使用参数-O forward,客户端将把分配的端口号打印到标准输出。

在企业内部开后门

远程SSH端口转发通常被员工用来打开企业的后门。例如,员工可能会从Amazon AWS中获得一个免费的服务器,并从办公室登录到该服务器,从服务器上的端口指定远程转发到内部企业网络上的某个服务器或应用程序。多个远程转发可以被指定为打开对多个应用程序的访问。

该员工还会在服务器上设置“GatewayPorts yes”(大多数员工在家里没有固定的IP地址,因此他们不能限制IP地址)。

例如,下面的命令可以打开端口5432的内部Postgres数据库,以及端口2222的内部SSH端口。

ssh -R 2222:d76767.nyc.example.com:22 -R 5432:postgres3.nyc.example.com:5432 aws4.mydomain.net

服务器端配置

OpenSSH服务器配置文件中的参数AllowTcpForwarding 必须启用以允许端口转发。默认情况下,转发是允许的。这个选项的可能值是yes或all,允许所有TCP转发,local 允许本地转发,以及remote 允许远程转发。

另一个选项是AllowStreamLocalForwarding转发,它可以用来转发Unix领域套接字。它允许与AllowTcpForwarding相同的值。默认是yes

例如:

AllowTcpForwarding remote AllowStreamLocalForwarding no

如上所述的GatewayPorts 配置选项也会影响到远程端口的前进。可能的值是no (默认只允许来自服务器主机的本地连接;),yes (Internet上的任何人都可以连接到远程转发端口)和clientspecified (客户端可以指定一个可以连接的IP地址,任何人都可以,如果没有指定的话)。

如何防止SSH端口转发绕过防火墙

建议在不需要的时候明确禁用端口转发。启用端口转发可以使组织暴露于安全风险和后门。例如,如果一个服务器只提供SFTP文件传输,允许端口转发,那么这些转发可能会被用来从外部网中意外地进入内部网络。

实际生产中,端口转发只能由服务器或防火墙来阻止。企业不能控制Internet上的所有服务器。基于防火墙的控制也很棘手,因为大多数组织在Amazon AWS和其他云服务中都有服务器,而且这些服务器通常是使用SSH访问的。

CryptoAuditor® 提供了一个方便的解决方案。它可以用来确保端口转发被阻止。它可以审计、记录和控制SSH连接,并且能够在不中断其他用途的情况下阻止端口转发。因此,在公共云中的服务器或与外部合作伙伴或服务提供者使用SFTP文件传输时,它尤其有用。

CryptoAuditor 是控制出站连接的远程转发的极少数已知解决方案之一。这种连接是从互联网到内部网络的反向隧道的最高风险连接。当开发人员和管理员需要访问外部云服务器时,完全阻塞防火墙的出站SSH连接是不可行的。


猜你喜欢

转载自blog.csdn.net/maizi1045/article/details/80702847