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的黑白名单: