远程访问及控制ssh

1. SSH 远程管理

  • SSH是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能;
  • 对通信双方的数据传输进行加密处理,其中包括用户登录时输入的用户口令;
  • 与早期的Telnet(远程登录)、rsh(远程执行命令)、rcp(远程文件控制)等相比,SSH协议提供了更好的安全性。


  1.1 配置Open SSH 服务端

  • SSH服务端的配置文件:/etc/ssh/sshd_config
  • 服务监听选项:端口(默认Tcp的22号端口)、地址、协议版本和DNS反向解析等

 

复制代码
 1 vim /etc/ssh/sshd_config               #服务端配置文件
 2 #Port 22                               #监听端口为 22
 3 #AddressFamily any                     #监听地址为任意网卡,也可以指定 Openssh 服务器的具体 ip
 4 #LoginGraceTime 2m                     #登录验证时间为2分钟
 5 #PermitRootLogin yes                   #禁止 root 用户登录
 6 #MaxAuthTries 6                        #最大重试次数为 6
 7 #PermitEmptyPasswords no               #禁止空密码用户登录
 8 #UseDNS no                             #禁用 DNS 反向解析,以提高服务器的响应速度
 9 ----------------------------------------------------------------------------------
10 配置允许和禁止用户登录:加@表示限制ip,注意允许和禁止不要同时使用!!
11 AllowUsers zhangsan                    #允许 zhangsan 登录
12 AllowUsers zhangsan@192.168.80.80      #只允许 zhangsan 通过 192.168.80.80 登录
13 DenyUsers lisi                         #禁止 lisi 登录
复制代码

 

    例:只允许zhangsang、lisi、wangwu用户登录,且其中lisi用户仅能够从IP地址为192.168.80.80的主机远程登录。

 

1 vim /etc/ssh/sshd_config                                 #修改服务端配置文件
2 -------------------------------------------------------    
3 AllowUsers zhangsan lisi@192.168.80.80  wangwu           #这里为添加的配置
4 -------------------------------------------------------
5 systemctl reload sshd                                    #修改完记得重新加载


  1.2 sshd 支持的登陆验证方式

    sshd服务支持登录验证方式有:密码验证和密钥对验证,可以设置只使用其中一种,也可以都启用。

  • 密码验证:

    以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇密码暴力破解攻击时防御能力比较弱。

  • 密钥对验证:

    要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性。

  • 公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;
  • 不能根据一个密码来推算出另一个密钥;
  • 公钥对外公开,私钥只有私钥的持有人才知道。
  • 公钥和私钥要配对使用,如果用公钥对数据进行加密,只有用相对应的私钥才能解密;如果用私钥对数据进行加密,那么只有对应的公钥才能解密。
  • 当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用,只允许启用密码对验证方式;若没有特殊要求,则两种方式都可以。


  1.3 使用 SSH 客户端程序

  • SSH客户端的配置文件:/etc/ssh/ssh_config
  • 通过 ssh 命令可以远程登录 sshd 服务,为用户提供一个安全的 Shell 环境,以便于对服务器进行管理和维护。
  • 命令行格式:

 

1 ssh [选项] zhangsan@192.168.80.77    #指定登录用户、目标主机地址作为参数
2 ssh -p 20 zhangsan@192.168.80.77    #-p为指定端口

 

  • 当用户第一次登录 SSH 服务器时,必须接受服务器发来的 RSA 密钥(需要根据提示输入:yes)后才能继续验证,接受的密钥信息将保存到 ~/.ssh/known_hosts 文件中,密码验证成功以后,就登录到目标服务器的命令行环境中了。如下:

 

1 The authenticity of host '192.168.80.77 (192.168.80.77)' can't be established.
2 ECDSA key fingerprint is SHA256:sRKz60ZIwaIjOXejXaNdZp69M/aygMdkunCMR7a3u+4.
3 ECDSA key fingerprint is MD5:be:42:dd:a7:be:d9:96:f3:9d:8a:0c:20:b6:65:c9:2e.
4 Are you sure you want to continue connecting (yes/no)? yes         #接受密钥
5 root@192.168.80.77's password:                                     #输入密码

 

  • 如果 sshd 服务器使用了非默认的端口号(如:1234),则在登录时必须通过 -p 选项指定端口号:

 

1 ssh -p 1234 root@192.168.80.77             #指定端口
2 root@192.168.80.77's password:             #输入密码

 

2. 密钥对验证的 SSH 体系
  2.1 配置密钥对验证的步骤

① 在客户端创建密钥对:
② 将公钥文件上传至服务器:
③ 在服务器中导入公钥文本:
④ 在服务端验证并设置ssh 代理功能,实现免交互登录:

 3. TCP Wrapper 访问控制
  3.1 TCP Wrapper 概述

  • TCP Wrappers (TCP封套)
  • 将 TCP 服务程序“包裹”起来,代为监听 TCP 服务程序的端口,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
  • 大多数 Linux 发行版,TCP Wrappers 是默认提供的功能。rpm -q tcp_ wrappers 查看是否安装程序。
  • TCP Wrappers 机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。
  • 对应的两个策略文件为 /etc/hosts.allow 和 /etc/hosts.deny,分别用来设置允许和拒绝的策略。


  3.2 TCP Wrapper 保护机制

    TCP Wrappers保护机制的两种实现方式:

  • 直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd程序。
  • 由其他网络服务程序调用libwrap.so. 链接库,不需要运行tcpd程序。此方式的应用更加广泛,也更有效率。
  • 使用ldd命令可以查看程序的libwrap.so. 链接库;
  • 命令:ldd $ (which ssh)


  3.3 TCP Wrapper 配置格式

 

    (1)命令行格式:<服务程序列表> : <客户端地址列表>

    (2)服务程序列表:

  • ALL:代表所有的服务。
  • 单个服务程序:如“vsftpd"。
  • 多个服务程序组成的列表:如“vsftpd, sshd”。

    (3)客户端地址列表:

  • ALL:代表任何客户端地址。
  • LOCAL:代表本机地址。
  • 多个地址以逗号分隔。
  • 允许使用通配符 “*” 和 "?” ,前者代表任意长度字符,后者仅代表一个字符。
  • 网段地址,如"192. 168.80.”或者192. 168.80.0/255.255.255.0。
  • 区域地址,如". benet . com"匹配benet.com 域中的所有主机。

 

 

  3.4 TCP Wrapper 访问机制

    (1)查看策略:

  • 首先检查 /etc/hosts.allow 文件,如果找到相匹配的策略,则允许访问;
  • 否则继续检查 /etc/hosts.deny 文件, 如果找到相匹配的策略,则拒绝访问;
  • 如果检查上述两个文件都找不到相匹配的策略,则允许访问。

    (2)“允许所有,拒绝个别”

  • 只需在 /etc/hosts.deny 文件中添加相应的拒绝策略。

    (3)“允许个别,拒绝所有”

  • 除了在 /etc/hosts.allow 中添加允许策略之外,还需要在 /etc/hosts.deny 文件中设置 "ALL : ALL" 的拒绝策略。


  3.5 TCP Wrapper 配置步骤

例:只希望从IP地址为192.168.80.80的主机访问sshd服务,其他地址被拒绝。
① 主机1(192.168.80.77)的/etc/ hosts.allow配置文件内增加192.168.80.80主机2的ip;
② 主机1(192.168.80.77)的/etc/ hosts.deny配置文件内增加拒绝所有的配置;
③ 主机2(192.168.80.80)可以正常远程登录到主机1上;
④ 主机2(192.168.80.78)被拒绝登录到主机1上。

posted @ 2021-07-14 09:52  开水没味  阅读(449)  评论(0)    收藏  举报