如何巧用SSH突破防火墙

前言



众所周知,一个公司内部与外部网络之间是由防火墙存在的,防火墙的的存在保证了,企业内部的

安全性。像一些明文传输的协议telnet或者一些安全性不是那么高的协议icmp,走这些协议的数据时 极

度不安全的,在防火墙规则中都是明令禁止的,有时我们由于业务的 需求,需要在外网与内网传输一些

像telnet这样的流量,而我们又没有权利去要求相关的部门随意修改防火墙策略。此时SSH协议便可助你

突破防火墙的障碍,成功完成数据传输。

ssh工作原理



SSH 会自动加密和解密所有SSH客户端与服务端之间的网络数据。但是,SSH还能够将其他TCP端

口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做"隧道"

(tunneling),这是因为SSH为其他TCP链接提供了一个安全的通道来进行传输而得名。例如,

Telnet,SMTP,LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。

而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够通过

将TCP端口转发来使用SSH进行通讯。

ssh本地转发



1、原理图

        图解:Host A以Host B为跳板机,通过ssh协议先打通自己与局域网的“隧道”,然后以Host B

的为telnet client端,建立与Host C的telnet连接,最终实现Host A能够与目标主机Host C之间实现

telnet流量创输。而在外围有ssh协议为这些telnet流量“保驾护航”,我们在也不用担心自己的数据被

截获。

2、实现ssh本地转发

 1)准备阶段

准备3台虚拟机,可以使CentOS系列,也可以是RHEL系列。为了实验能够顺利实现,我们手动关

闭防火墙(iptables -F)和SELinux(setenforce 0)当然了这仅仅是为了实验的需要,在生产场景中实

不允许的。然后确保Host C主机都有telnet server服务,而Host B具有ssh server功能。通过rpm -q 来

查看服务是否安装。

    2)建立连接

首先:测试Host A能否使用telnet与Host C建立连接,如果能,那么在Host C上使用防火墙规则禁

用Host A在访问(iptables -A INPUT -s HostA_ip -j REJECT)。

建立ssh隧道,实现防火墙的突破,进入LAN。

上图中,使用命令ssh -L实现隧道的建立。4000表示我们随机指定开启的端口,确保该端口是不被

任何服务使用。172.18.253.159表示目标主机(Host C)的的地址;23表示要连接目标主机的相应服务

端口,如果是telnet服务则是23,smtp则监听在25。-N表示不打开远程shell,处于等待状态,-f表示后

台启用。172.18.18.13则表示“跳板机”的地址,在本例中即Host B的IP地址。

上例中,我们用过ssh -tn查看发现,我们其实不是与目录主机建立了连接,而是与Host B建立了连

接,这就说明,该隧道已经建立好了。其次:我们再去查看Host C机器的连接情况,发现,并没有任何

主机与自己建立连接。

最后:实现telnet流量传输。在Host A主机是哪个使用telnet去连接目标主机Host B,出现下图所

示的内容,则说明telnet链路已通,然后连接进入目标主机Host C,使用ss -tn 查看,你会发现并不是

Host A与自己建立的telnet连接,而是“跳板机”Host B。

建立telnet连接之后我们在来看看Host A上的连接情况。ss -tn

而Host B在收到Host A的telnet流量后,自己充当telnet客户端去连接Host C的telnet服务气端。

到此,基于SSH的本地转发就实现了。

ssh端口转发



1、应用场景

ssh基于端口转发的应用场景一般是这样:当我们在企业内部想要访问外部的某些站点,但是有防

火墙禁用访问站点的端口,例如httpd服务的80端口,这样我们便不能访问外部网站。此时我们就可以使

用ssh端口转发的方法实现,访问外部站点。

2、原理图

上图中,由于防火墙的原因,Host A 并不能访问Host C站点,此时我们可以在外部找一个主机

Host B,以Host B 为代理服务器,这样,Host A 通过ssh协议突破防火墙,访问代理服务器,在由代理

服务器将Host A的访问请求发送给Host C服务器,获取相应的信息(例如,网页信息),然后在回传给

客户端Host A。

3、实例

1)准备阶段

准备3台主机,Host A 、HostB、Host C,用HostA 客户端,Host C作为服务器端,而Host B作

为代理服务器agent。实验需求,将Host B的防火墙关闭,关闭所有主机的SELinux功能。

2)方案实现

模拟防火墙,我们在Host C上设置防火墙规则,拒绝Host A 的任何请求 :

在主机Host A上试着去抓取Host C的网页:

[ [email protected] ~ ]#curl http://172.18.18.13
curl: (7) Failed connect to 172.18.252.50:80; Connection refused      # 被拒绝
[ [email protected] ~ ]#

然后在Host A上建立ssh连接

此时在你用Host A去访问依然不行,我们需要在Host B上做代理配置。这样才能转发数据信息。

[ [email protected] ~ ]#curl --socks5 127.0.0.1 
<h1>I love linux...</h1>         # 成功抓取到网页

ssh远程转发



1、原理图

原理与ssh本地转发大体相同,这里就不放实验过程了,只是ssh的服务器端与客户端的角色发生了

改变,由于,在一个企业内部,我们想要从内向外访问某端口,防火墙是没有限制的,但是想要从外向

里访问就很困难。ssh远程转发的就是通过,局域网内部的主机充当ssh客户端与LAN外的主机建立连

接,从而打通外部与内部的通道。此时有人可能会有疑问,不还是进步来么?其实不然,防火墙也是有

链路记忆功能的,通过出去的通道在回来时,防火墙是不会做限制的。

2、数据过程

首先,Host B以ssh客户端的身份访问外部的主机Host A (此时Host A充当ssh服务器)建立隧

道,然后,Host A充当telnet客户端向Host B发送telnet流量。当收到Host A发来数据之后,Host B解

封装,然后充当telnet客户端的身份,建立与Host C的连接,从而将数据安全的传输至目标主机。

3、实现命令

在Host B上执行:ssh –R 9527:ip_HostC:23 –Nf ip_HostA 建立隧道,端口9527是在Host A上打开的

在Host A上执行:telnet 127.0.0.1 9527

总结



本篇详细了介绍了基于SSH“巧妙”的突破防火墙的方法,包括ssh端口转发,本地转发以及远程转

发,都有各自的使用场景。但本文也存在很多不足,有许多地方讲述的不够详细,在ssh端口转发与本地

转发的实验中,原理说的多些,实验步骤较少,还望见谅。欢迎阅读~~

时间: 2024-10-31 15:40:31

如何巧用SSH突破防火墙的相关文章

secureCRT端口转发功能突破防火墙限制

这样一个场景:A是办公网络的一台windows主机,B是一台Linux堡垒机,C是生产环境一台Oracle主机, A只能访问B但A不能访问C,B可以访问到C,那怎样才可以使A机上的" PLSQL Developer "连接到C机上的ORACLE数据库呢? 1.在A上用secureCRT以ssh2协议远程登录到B,然后右击工具栏下方的连接选项卡,弹出的菜单如下图所示 2.单击"会话选项",在弹出的对话框中,先单击左边菜单中的"端口转发",再单击右边

网络安全巧设置 Win2008 R2 防火墙详解(1)

针对一般中小企业型来说,如果希望对企业网络进行安全管理,不一定非得花高价钱购买专业的防火墙设置,直接借助操作系统本身自带的防火墙功能即可以满足一般企业的应用,今天我们就一起来探究一下Windows Server 2008 R2系统防火墙的强大功能.熟练的应用Windows 内置防火墙,首先需要了解网络位置. 网络位置 第一次连接到网络时,必须选择网络位置.这将为所连接网络的类型自动设置适当的防火墙和安全设置.如果用户在不同的位置(例如,家庭.本地咖啡店或办公室)连接到网络,则选择一个网络位置可帮

突破公司的防火墙对视频网站的限制

现在很多公司都有网络防火墙,来限制员工使用网络.禁止浏览腾讯视频.爱奇艺.优酷土豆等等等等.想要突破这些限制通过SOCKS代理即可,SPCKS代理非常简单与http代理基本类似.现在大多数浏览器比如360浏览器.QQ浏览器.Chrome等等都支持SOCKS代理. 先要泼一盆冷水了,要想成功突破公司内网防火墙的配置,那么你得有一定的计算机知识并且有一台公网服务器.接下来介绍如何才能突破防火墙的限制.防火墙会对去各种购物网站.视频网站的数据做拒绝处理.通过与服务器建立SSH连接然后在开启服务器的路由

cisco 防火墙 5505 SSH 登录方式配置

ciscoasa(config)# crypto key generate rsa modulus 1024 //指定rsa系数的大小,这个值越大,产生rsa的时间越长,cisco推荐使用1024. WARNING: You have a RSA keypair already defined named <Default-RSA-Key>.警告:你有一个RSA密钥对已定义的命名<默认的RSA密钥>.Do you really want to replace them? [yes/

安全与加密之gpg,ssh服务

安全与加密 本章目录 gpg的使用 ssh服务 dropbear aide 1. gpg的使用 GPG是加密和数字签名的免费工具,大多用于加密信息的传递.除了仅用密码加密外,GPG最大的不同是提供了"公钥/私钥"对.利用你的"公钥"别人加密信息不再需要告诉你密码,随时随地都能发送加密信息.而这种加密是单向的,只有你的"私钥"能解开加密.数字签名又是另一大使用方向.通过签名认证,别人能确保发布的消息来自你,而且没有经过修改. 使用gpg实现对称加密

实战 SSH 端口转发

原文转自:http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中的一些问题.学会在非安全环境下使用端口转发来加密网络应用,保护个人隐私以及重要商业信息.同时也能够用此技术解决工作中一些常见问题,例如解决防火墙及网络应用本身带来的一些限制. 第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你

SSH转发

前言 前面介绍了ssh的两种连接方式,是在学习过程中连接主机的方式.在实际生产场景中,环境可能更加复杂.这里再介绍2种在实际工作中如何安全的访问想要访问的主机. SSH端口转发 SSH 会自动加密和解密所有SSH 客户端与服务端之间的网络数据.但是,SSH 还能够将其他TCP 端口的网络数据通过SSH 链接来转发,并且自动提供了相应的加密及解密服务.这一过程也被叫做"隧道"(tunneling),这是因为SSH 为其他TCP 链接提供了一个安全的通道来进行传输而得名.例如,Telnet

SSH端口转发的理解(精华)

之前一直在纠结什么是端口转发,现在写下自己的理解,并试验本地端口,远程端口转发 SSH(Secure Shell,安全外壳协议),在SSH的通道上传输数据都是通过加密的,每次连接SSH会执行指纹核对来确认用户连接到正确的远程主机上,如果在其它协议的数据通过SSH端口进行转发,SSH连接作为其它协议传输的通道(隧道),这种方式也叫做SSH端口转发或SSH隧道. 作用:加密数据传输.突破防火墙限制 分类:本地转发.远程转发.动态转发 一.本地端口转发 本地转发中的本地是指将本地的某个端口转发到其他主

SSH 端口转发实战

第一部分 概述 场景一: 设想这样一个场景,当你挤了很久的公交,又辗转了几班地铁,终于拖着疲惫的身躯回到家中的时候,突然间接到了领导的电话,公司服务器上有某个重要的服务需要立马被关闭,而公司的内部网络与外部网络之间有防火墙,禁止telnet远程直接链接,这时你会怎么办呢?(吐槽一下,运维好苦逼/(ㄒoㄒ)/~~) 场景二:  设想另外一种场景,在本地的一个服务器上运行着SMTP服务,而远程的一个主机需要访问这个SMTP服务,但是防火墙不允许不信任的外部访问,进入到局域网内部,而内部的主机却是可以