|
常见应急场景分类
目标机器有公网ip
目标机器在内网可出网
目标机器在内网且不可出网,边界服务器可出网有公网ip
目标机器在内网且不可出网,边界服务器可出网但无公网ip
目标机器所在内网与外网完全隔离
应急准备工作
linux跳板机1台、windows跳板机1台
场景一:目标机器有公网IP
这种场景也是比较常见的,就是目标机器无法外网直接访问但是自身可以访问外网。这里分为linux和windows下两种实现方式。
linux下使用ssh远程端口转发
远程转发是指把登录主机所在网络中某个端口通过本地主机端口转发到远程主机上。远程端口转发
先介绍ssh常用的几个参数:
-C 压缩数据传输
-f 后台登录用户名密码
-N 不执行shell[与 -g 合用]
-g 允许打开的端口让远程主机访问
-L 本地端口转发
-R 远程端口转发
-p ssh 端口
格式:-R [登录主机:]登录主机端口:本地网络主机:本地网络主机端口。
ssh -fNCR :2222:127.0.0.1:22 用户名@远程主机ip
我们来到远程转发端口的主机查看效果,先查看端口监听状况。
优势:
补充:
windows下使用openssh远程端口转发
由于大部分的Windows Server 都默认没有安装openssh,其实这个并非是最优的解决方案,但是在一些特殊场景下依然有可行性。该方案和上面linux的远程端口转发完全一致,但需要事先安装openssh。
对windows应急跳板机的要求
1、验证 SSH 服务器是否已安装。
Get-WindowsCapability -name openssh.server* -online
Get-WindowsCapability -name openssh.server* -online | Add-WindowsCapability -Online
openssh安装完成
Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd
New-NetFirewallRule -DisplayName "ALLOW SSH TCP 22" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 22
此外在需要远程转发的windows机器上也需要安装openssh客户端。除了使用上面命令行在线安装的方式也可以下载安装包。
微软的PowerShell团队已经支持openssh,所以安装文件我们可以在github的powershell团队项目根据系统对应下载后解压。
https://github.com/PowerShell/Win32-OpenSSH/releases
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
Windows下使用gost远程端口转发
这里下载Windows编译版本即可。
https://github.com/ginuerzh/gost/releases
在内网的Windows机器上执行一下命令:
.\gost-windows-amd64.exe -L=rtcp://:3389/127.0.0.1:3389 -F=socks5://公网ip:port
./gost-linux-amd64-2.11.4 -L socks5://:端口
windows下使用远程桌面程序
个人使用效果比较好的有 todesk。精简版体积非常小,点对点直连远程效果还不错。
由于条件限制,目标主机在内网且不可出网,这类情况通常为内网生产服务器,比如数据库服务器等。
面对这类情况往往需要内网中一台边界服务器(可出网)作为跳板连接,利用边界服务器作为正向代理,将本地主机某个端口流量转发到远程主机的指定端口。
-L [bind_address]:localport:remote_host:remote_port。
-L 即 local 的首字母,类似的远程转发的 -R 是 remote 的首字母,动态转发的 -D 是 dynamic 的首字母。
[root@host1 ~]# ssh -fNCL :2222:host2:22 user@host1 -p22
window下使用netsh实现端口转发
对于Windows Server 2008以下版本的系统,需要安装IPV6才行,如果是Windows Server 2008或者以上的系统则默认已经支持。
使用Portproxy模式下的Netsh命令即能实现Windows系统中的端口转发,转发命令如下。
netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
每个参数的意义:
listenaddress — 等待连接的本地ip地址(内网ip)
listenport — 本地监听的TCP端口(待转发)
connectaddress — 被转发端口的本地或者远程主机的ip地址
connectport — 被转发的端口
netsh interface portproxy show all
netsh interface portproxy delete v4tov4 listenaddress=localaddress listenport=localport
补充windows防火墙的相关命令参数:net firewall
set opmode mode=enable //开启防火墙
set opmode mode=disable //关闭防火墙
show opmode //显示防火墙端口配置
show portopening //显示防火墙端口配置
show service //显示防火墙服务配置
show state //显示当前防火墙状态
netsh firewall show allowedprogram //查看防火墙放行的程序
netsh firewall set portopening TCP 445 ENABLE //打开445端口
linux下在边界服务器使用ssh远程端口转发
windows下在边界服务器使用openssh远程端口转发
具体的操作过程参照场景二。
场景五:目标机器所在内网与外网完全隔离
这类场景通常为客户线下自建IDC机房或者部分混合云,但这种方式通常会使用堡垒机进行集中管理。
结合之前一个混合云场景应急的case分析(混合云vnc也无法使用)。
目标机器所处内网没有任何主机出网,客户使用办公PC(windows)通过堡垒机登录内网主机,办公PC需要设置代理才可访问外网。与客户协商后,使用远程桌面控制软件程序(Teamviewer,客户要求可设置代理)进行排查。
案例背景
文章来源:Zgao's blog
原文地址:https://zgao.top/多种应急场景下的正反向代理远程登录实现/
关 注 有 礼

推 荐 阅 读
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论