SSH应用

一、SSH端口转发

1、定义

SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯

2、功能

  • 加密 SSH Client 端至 SSH Server 端之间的通讯数据
  • 突破防火墙的限制完成一些之前无法建立的 TCP 连接

3、本地转发

(1)需求

如上图如示,客户端需要从互联网上访问公司内部的telnet服务器,众所周知,telnet是一种不安全的协议,同时,公司只提供ssh服务器供外网的连接请求,即所有从外部连接公司内网的请求必须通过ssh服务器。

(2)前提

在公司内部,ssh服务器和telnet服务器网络上可达

(3)步骤

  • ssh –L 9527:telnetsrv:23 -N sshsrv
  • telnet 127.0.0.1 9527
  • 选项

 -f 后台启用
-N 不打开远程shell,处于等待状态
-g 启用网关功能

(4)具体过程 

当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23
data -->localhost:9527 --> localhost:XXXXX --> sshsrv:22 -->sshsrv:YYYYY -->telnetsrv:23

(5)应用场景

 在外网操作,适于于出差在外直接通过内部的ssh服务器连接内部的服务器

4、远程程转发

(1)需求

(2)前提:需要知道外部ssh服务器的密码

(3)步骤

格式:-R sshserverport:remotehost:remotehostport sshserver

ssh –R 9527:telnetsrv:23 –N sshsrv

(4)具体过程

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

(5)应用场景

分支机构的开发人员远程连接企业内部服务器通过不安全的网络如telnet

 

5、动态端口转发

(1) 需求:通过中间服务器访问google.com

(2) 实验模拟

  • 在httpd服务器A(ip=192.168.30.104)上模拟google网站,echo www.google.com > /var/www/html/index.html
  • 在服务器C上执行ssh -D 1080 root@192.168.30.101 此IP为代理服务器的IP(服务器C无法直接访问www.google.com,代理服务器可以直接访问服务器A上的网站)
  • 在服务器C(也就是代理服务器上通过浏览器FireFox配置代理)
  • 或才在服务器上执行指令curl --socks5 127.0.0.1:1080 192.168.30.104即可访问服务器A上的www.google.com网站

 

二、SSH服务器配置

配置文件: /etc/ssh/sshd_config,更改之前,把配置文件做备份cp sshd_config{,.bak}

1、port

从安全角度讲,把ssh的port从标准的22更改为私有的端口是必须的,如更改为9527

Port 9527

2、ListenAddress 0.0.0.0

如果服务器的多个IP,有对外提供服务和内部管理之分,一般绑定内部管理的IP, 0.0.0.0表示任何的IP都可以连接

3、SyslogFacility

定义ssh日志功能/var/log/secure

4、LoginGraceTime 2m

ssh登陆之后两分钟没有输入用户名或密码,自动断开连接

5、PermitRootLogin 

是否允许root用户直接登陆,在生产环境中,设置为no, 不允许root直接登录

6、MaxAuthTries

密码登录最大尝试错误:man sshd_config

Specifies the maximum number of authentication attempts permitted per connection. Once the number of
failures reaches half this value, additional failures are logged. The default is 6.实际尝试3次就会失败

7、MaxSessions

是指同一个会话中最大可以clone session数

8、PasswordAuthentication

 生产环境中可以考虑设置为no,只允许key验证的方式,因为从安全角度,key的验证安全级别更高

9、PubkeyAuthentication

基于public key登录,设置为yes

10、ClientAliveInterval; ClientAliveCountMax

         设置非活动连接的断开策略,如interval设置为10s,countmax设置为3,意味着如果10s没有任何指令,再测试2次,一共30秒之后断开

11、UseDNS;GSSAPIAuthentication

 把这两项更改为no,提高ssh的连接速度

12、MaxStartups 10:30:100

超过10个没有验证的连接,30%的连接会断开,当链接达到60个时,100%断开,达到限制并发连接数的限制

13、Banner /path/file

提示信息,在file里输入Wraning信息,这样在SSH时,会出现此信息

14、限制可登录用户的办法

AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroups

如果一个用户即同时属于AllowUsers和DenyUsers,默认是拒绝登录,黑名单优先级高于白名单

 

三、ssh服务的最佳实践

  • 建议使用非默认端口
  • 禁止使用protocol version 1
  • 限制可登录用户
  • 设定空闲会话超时时长
  • 利用防火墙设置ssh访问策略(只允许内网IP访问如iptables -A INPUT -s 192.168.30.0/24 -j ACCEPT)
  • 仅监听特定的IP地址
  • 基于口令认证时,使用强密码策略tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
  • 使用基于密钥的认证
  • 禁止使用空密码
  • 禁止root用户直接登录
  • 限制ssh的访问频度和并发在线数
  • 经常分析日志(lastb可以显示所有连接失败的IP,对应的日志是/vat/log/btmp)

 

 

 

 

posted @ 2018-05-24 15:59  Evan_Wolf  阅读(240)  评论(0编辑  收藏  举报