SSH远程登录协议

一、SSH服务

1.1SSH基础

(1)SSH:是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。
SSH客户端<--------------网络(通过网络连接服务端和客户端)---------------->SSH服务端

(2)SSH协议的优点:

  • 数据传输是加密的,可以防止信息泄漏
  • 数据传输是压缩的,可以提高传输速度

(3)服务名称:sshd

服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/ssh_config

1.2SSH原理

(1)公钥传输原理

  • 客户端发起链接请求
  • 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
  • 客户端生成密钥对
  • 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
  • 客户端发送加密值到服务端,服务端用私钥解密,得到Res
  • 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
  • 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密

(2)ssh远程登录

方法一:
ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p 端口号

方法二:
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p 端口号

-l:-l选项,指定登录名称。
-p:-p选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)。

1.3服务端配置

[root@client ~]# vim /etc/ssh/sshd_config        #修改常用配置项
  • Port 22   #生产建议修改
  • ListenAddress ip   #监听地址设置SSHD服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址安全建议:如果主机不需要从公网ssh访问,可以把监听地址改为内网地址 这个值可以写成本地IP地址,也可以写成所有地址,即0.0.0.0 表示所有IP。
  • LoginGraceTime 2m   #用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为秒
  • PermitRootLogin yes   #默认 ubuntu不允许root远程ssh登录
  • StrictModes yes   #检查.ssh/文件的所有者,权限等
  • MaxAuthTries   #用来设置最大失败尝试登陆次数为6
  • MaxSessions 10   #同一个连接最大会话
  • PubkeyAuthentication yes   #基于key验证
  • PermitEmptyPasswords no   #密码验证当然是需要的!所以这里写 yes,也可以设置为 no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。
  • PasswordAuthentication yes   #基于用户名和密码连接
  • GatewayPorts no
  • ClientAliveInterval 10   #单位:秒
  • ClientAliveCountMax 3   #默认3
  • UseDNS yes   #提高速度可改为no 内网改为no 禁用反向解析
  • GSSAPIAuthentication yes   #提高速度可改为no
  • MaxStartups   #未认证连接最大值,默认值10
  • Banner /path/file   #以下可以限制可登录用户的办法:白名单 黑名单
  • AllowUsers user1 user2 user3@ip(限制主机)
  • DenyUsers user1 user2 user3
  • AllowGroups g1 g2
  • DenyGroups g1 g2

(1)白名单黑名单列表

 (2)输入密码限制

 

1.4SSH客户端

(1)免密登录

[root@server ~]#ssh-keygen
[root@server ~]#ssh-copy-id -i .ssh/id_rsa.pub 192.168.10.20
[root@server ~]#ssh 192.168.10.20

(2)隐藏端口号,并且不让用户使用su命令切换root用户

[root@server ~]#vim /etc/ssh/sshd_config
#修改以下两行
Port 10086
PermitRootLogin no
[root@server ~]#systemctl restart sshd

[root@server ~]#vim /etc/pam.d/su
打开第6行

客户端测试:
[root@client ~]#ssh zhangzijun@192.168.10.10 -p 10086

 

二、TCP Wrappers

在Linux 系统中,许多网络服务针对客户端提供了访问控制机制,如 Samba、BIND、 HTTPD、OpenSSH 等。本节将介绍另一种防护机制——TCP Wrappers(TCP 封套),以作为应用服务与网络之间的一道特殊防线,提供额外的安全保障。TCP Wrappers 将 TCP 服务程序“包裹”起来,代为监听 TCP 服务程序的端口,增加了 一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正 的服务程序。TCP Wrappers 还可以记录所有企图访问被保护服务的行为, 为管理员提供丰富的安全分析资料。

2.1策略的配置格式

两个策略文件的作用相反,但配置记录的格式相同,如下所示
服务程序列表、客户端地址列表之间以冒号分隔,在每个列表内的多个项之间以逗号分隔
(1)服务程序列表可分为以下几类。

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

(2)客户端地址列表可分为以下几类。

  • ALL:代表任何客户端地址。
  • LOCAL:代表本机地址。
  • 单个 IP 地址:如“192.168.10.10”
  • 网络段地址:如“192.168.10.0/255.255.255.0”
  • 以“.”开始的域名:如“.bdqn.com”匹配 bdqn.com 域中的所有主机。
  • 以“.”结束的网络地址:如“192.168.10.”匹配整个 192.168.10.0/24 网段
  • 嵌入通配符“*”“?”:前者代表任意长度字符,后者仅代表一个字符,如“10.0.8.2*”
  • 匹配以 10.0.8.2 开头的所有 IP 地址。不可与以“**.**”开始或结束的模式混用
  • 多个客户端地址组成的列表:如“192.168.1.,172.16.16.,.bdqn.com”

2.2访问控制的基本格式

注意sshd_config的黑白名单:

posted @ 2022-10-23 00:14  崧蓝  阅读(186)  评论(0编辑  收藏  举报