SSH端口转发及相关实验

在上一节我们知道,SSH会自动加密和解密所有SSH客户端和服务器之间的网络数据。但是,SSH还同时提供了一个非常有用的功能,这就是端口转发。

本节索引:

一、SSH端口转发相关概念

二、实验:模拟SSH本地端口转发

三、实验:模拟SSH远程端口转发

四、实验:模拟SSH动态端口转发

$D5AYK`@5XYRVU]_CSQBZQA

 

一、SSH端口转发相关概念

上一节我们知道,SSH会自动加密和解密所有SSH客户端和服务器之间的网络数据。但是,SSH还同时

提供了一个非常有用的功能,这就是端口转发。它能够将其他TCP端口的网络数据通过安全的SSH协议

转发,例如:Telnet,SMTP等这些TCP应用都能从中受益,避免了用户名,密码以及隐私信息的明文传

输。而与此同时,如果在你的工作环境中防火墙限制了一些网络端口的使用,但是允许SSH的连接,那么

端口转发功能也能够将TCP端口转发来使用SSH进行通信。

 

SSH端口转发提供的功能主要有:

1.加密SSH Client端至SSH Server端之间的数据

2.突破防火墙的限制完成一些之前无法建立的TCP连接

 

SSH端口转发提供的类型有:

本地转发

远程转发

动态转发

X协议转发

 

本地转发:

当外网用户想要临时访问公司内部的不安全TCP协议服务器时,由于防火墙限制无法直接访问,但可利用

先SSH连接至公司内网的SSH服务器在转发至不安全的TCP协议服务器。由于作为转发的SSH服务器与要访

问的不安全TCP协议服务器在同一网络环境内,故这种连接就叫本地转发

 

格式:

ssh -L localprot:remotehost:remotehostport  sshserver

localprot:指定本机端口

remotehost:指定远程不安全协议的服务器地址

remotehostport:远程不安全协议的服务器地址端口

sshserver:SSH服务器地址

 

options:

-f      后台启用

-N    不打开远程shell,处于等待状态

-g     启用网关功能

示例:

ssh -L 9527:telnetsrv:23  -N sshsrv

telnet 127.0.0.1 9527

当访问本机的9527端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23

大致流程:

Data <–> localhost:9527 <–>localhost:xxxxx <–> sshsrv:22 <–>sshsrv:yyyyy <–> telnetsrv:23

 

 

远程转发:

与本地端口转发相比,我们将SSH服务器与Client访问端的位置对调,将与不安全TCP协议服务器同一内网

的主机作为Client,将外部网络主机作为SSH服务器做为端口转发。由于作为转发的SSH服务器处在外部网

络环境中,故这种连接就叫远程转发。

 

格式:

ssh -R sshserverport:remotehost:remotehostport sshserver

sshserverport:指定SSH服务器端口

remotehost:指定远程不安全协议的服务器地址

remotehost:remotehostport:指定远程不安全协议的服务器端口

sshserver:SSH服务器地址

 

示例:

ssh -R 9527:telnetsrv:23 -N sshsrv

让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23

大致流程:

Data <–> sshsrv:9527 <–> sshsrv:22 <–> localhost:xxxxx <–> localhost:yyyyy <–> telnetsrv:23

 

 

动态端口转发:

在之前我们已经了解了本地转发,以及远程转发,但它们实现的前提都是要求有一个固定的应用服务端端

口号。但在某些场景下,例如用浏览器浏览网页,是没有固定端口的,这时就需要利用到动态的端口转

发。比如说,当用firefox访问Internet时,本机的1080端口作为代理服务器,firefox的访问请求被转发到

sshserver上,由sshserver替代访问Internet

ssh -D 1080 root@sshserver

在本机firefox设置socketproxy:127.0.0.1:1080

curl –socks5  127.0.0.1:1080  http://www.qq.com

 

 

X协议转发:

所有图形化应用程序都是X客户程序

能够通过tcp/ip连接远程X服务器

数据没有加密机,但是它通过ssh连接隧道安全进行

 

ssh -X user@remotehost gedit

remotehost主机上的gedit工具,将会显示在本机的X服务器上

传输的数据将通过ssh连接加密

 

 

 

 

相关文件:

/var/log/secure               存放日志

/etc/ssh/sshd_config      SSH服务配置文件

#Port 22           端口

                          生产中一般第一步先改端口号

                          如Port 9527  

定义公钥、私钥存放文件名,位置

HostKey /etc/ssh/ssh_host_rsa_key

#HostKey /etc/ssh/ssh_host_dsa_key

HostKey /etc/ssh/ssh_host_ecdsa_key

HostKey /etc/ssh/ssh_host_ed25519_key

日志设置选项,日志存放在/var/log/secure

# Logging

#SyslogFacility AUTH

SyslogFacility AUTHPRIV

#LogLevel INFO

 

#LoginGraceTime 2m              不输入密码最大时间端口

#PermitRootLogin yes            生产中一般改成no,普通用户连接su切换

#StrictModes yes             检查文件权限

#MaxAuthTries 6                      密码登录最大验证次数

#MaxSessions 10                      单个会话能开的最大克隆数

 

PasswordAuthentication yes  是否允许基于口令登录方式,no表示禁止

 

#ClientAliveInterval 0              连接后不操作最大时间,单位:秒

#ClientAliveCountMax 3                  连接环不操作最大时间次数

         生产中一般要修改AliveInterval 30

                          AliveCountMax 3   

         表示连接后不进行任何操作30S,3次后自动断开连接

#ShowPatchLevel no

UseDNS no                       是否使用DNS反向解析,关闭可提高连接速度

 

#MaxStartups 10:30:100                 最大并发连接数,默认10

限制可登录用户的办法:

AllowUsers user1 user2 user3

DenyUsers

AllowGroups

DenyGroups

 

SSH服务的最佳实践配置:

建议使用非默认端口

禁止使用protocol version 1

限制可登录用户

设定空闲会话超时时长

利用防火墙设置ssh访问策略

仅监听特定的IP地址

基于口令认证时,使用强密码策略

tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs

使用基于密钥的认证

禁止使用空密码

禁止root用户直接登录

限制ssh的访问频度和并发在线数

经常分析日志

 

 

二、实验:模拟SSH本地端口转发

应用场景:当外部客户端想要访问公司内网的Telnet服务器时,由于防火墙限制无法直接访问,可使用

SSH本地端口转发实现:

前期准备:

以三台CentOS模拟机作为服务器及主机,主机名网络配置如下:

客户端:192.168.30.133

SSH服务器:192.168.30.158

telnet服务器:192.168.30.160

 

telnet服务器端操作:

一、安装telnet-server包,系统默认未安装

二、防火墙禁止远程客户端访问:

iptables  -A  INPUT  -s  192.168.30.133  -j  REJECT

为了防止之前防火墙策略干扰,最好先清空下防火墙策略:

iptables  -K

防火墙

此时作为Clinet的192.168.30.133已经ping不通作为telnet服务器的192.168.30.160

ping不通

三、开启telnet-server服务

CentOS6:

service  xinted  start                       开启xinted进程

chkconfig  telnet  on                        开启telnet服务

service  xinted  restart                   重启xinted服务

重启xinetd

CentOS7:

systemctl start telnet-scoket

 

客户端操作:

ssh -L 9527:192.168.30.17:23 [-Nf] 192.168.30.6

加-Nf选项将后台执行,关闭时只能通过kill关闭进程

telnet 127.0.0.1 9527

提示输入用户名,密码;默认不让root账户使用SSH端口转发登录

登录成功

 

三、实验:模拟SSH远程端口转发

应用场景:当外部有工程师想要临时访问内部telnet服务器时,作为系统管理员,我们可以将对方主机作

为SSH服务器进行端口转发,让其临时可访问公司的telnet服务器。

前期准备:

以三台CentOS模拟机作为服务器及主机,主机名及网络配置如下:

Internet:192.168.30.133

lanserver:192.168.30.158

telnet服务器:192.168.30.160

 

lanserver端操作:

ssh -R 9527:192.168.30.17:23 [-Nf] 192.168.30.7

加-Nf选项将后台执行,关闭时只能通过kill关闭进程

lanserver命令

Internet端操作:

telnet 127.0.0.1 9527

telnet成功

 

四、实验:模拟SSH动态端口转发

应用场景:在某些场景中,用浏览器浏览网页,是没有固定端口的,这时就需要利用到动态的端口转

发。下面我们模拟用一台虚拟机模拟google网站,用Internet主机通过代理服务器proxy访问google模拟机

前期准备:

以三台CentOS模拟机作为服务器及主机,主机名及网络配置如下:

Internet:192.168.30.133

proxy:192.168.30.158

google:192.168.30.160

 

google模拟服务器操作:

开启http服务,模拟网页内容:

CentOS6:

service httpd start

CentOS7:

systemctl start  httpd

echo www.google.com > /var/www/html/index.html

internet

此时访问192.168.30.160,正常网页内容显示如下:

gogole

Internet端操作:

此时在Internet端我们是无法访问google服务器的

无法打开

使用proxy的1080端口作为动态转发:

ssh -D 1080 root@192.168.30.158

登录代理

接下来我们可以通过图形界面或者字符界面来尝试访问:

图形界面:

打开firefox浏览器,按以下顺序操作:

–>preferences–>advanced–>network–setting–manual proxy configuration

–>SOCKS Host:127.0.0.1

设置火狐

现在再次尝试访问192.168.30.160的google模拟服务器,发现可以正常访问了!

访问成功

字符界面:

在字符界面我们可执行下面的命令来进行访问:

curl -socks5 127.0.0.1:1080 192.168.30.17

字符界面登录

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/99141

(2)
wangxczwangxcz
上一篇 2018-05-21
下一篇 2018-05-22

相关推荐

  • 第十次笔记 二

    使用PEX和cobbleer实现网络服务器自动化安装系统

    2018-05-26
  • VIM编辑器用法大全

    文本编辑工具 语法:vim 参数 文件 文本编辑种类: 行编辑器:sed 全屏编辑器:nano,vi,vim – Vi Improved vim编辑器三大模式 编辑模式, 输入模式: 末行模式: 内置的命令行接口; 模式转换: 编辑模式 — > 输入模式 : i : 在光标所在处输入 a : 在光标所在处的后方输入 o : 在光…

    2018-04-08
  • bash的工作特性

    bash特性:命令执行状态返回值 bash命令的执行状态分为两种:1. 成功,状态返回值为0。2. 失败,状态返回值为1-255。bash使用特殊变量$?保存最近一条命令的执行状态结果: [Azuth@azuth ~]$ id root &>/dev/null[Azuth@azuth ~]$ echo $?0[Azuth@azuth ~]$ i…

    Linux笔记 2018-05-20
  • 转义字符Escape character在正则中的用法

    通过()的在基本正则和扩展正则中的不同使用,详细介绍了转义字符的使用注意事项

    Linux笔记 2018-04-13
  • 第四周

      sed的高级用法 安装包路径/misc/cd/Packages/ rpm 可以安装 卸载 软件包 rpm -i 跟软件包名称 (安装) -e 卸载软件包 (只有配置文件会自己备份 备份文件以.rpmsave结尾的文件)-v显示详细进度 -h显示百分条 –test 测试安装,但不是真的装–nodeps 忽略依赖性 (但安装…

    Linux笔记 2018-04-22
  • Linux-正则表达式

    REGEXP:Regular Expression 由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能 程序支持:grep,sed,awk,vim, less,nginx,varnish等 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE grep -E, egrep 正则表达式引擎: 采用不同算法…

    2018-04-08