一、SSH 简介
SSH(Secure Shell)是一种安全通道协议,只要用来实现字符界面的远程登陆、远程复制等功能。
SSH协议默认监听端口:TCP协议 22
SSH协议版本:V1、V2
SSH(Secure Shell)是一种安全通道协议,只要用来实现字符界面的远程登陆、远程复制等功能。
SSH协议默认监听端口:TCP协议 22
SSH协议版本:V1、V2
服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/sshconfig
1.服务监听选项
vim /etc/ssh/sshd_config
17 Port 22
#监听端口,建议修改为其他端口以提高在网络中的隐蔽性,一般不超过65535。
19 ListenAddress 192.168.200.111#监听IP地址,默认监听到0.0.0.0任意地址
20 protocol 2
#ssh协议的版本选用V2比V1的安全
性更好
116 UseDNS no
#禁用DNS反向解可以提高服务的响应速
度
93 GSSAPIAuthentication no
#为了加快连接
systemctl restart sshd #重启ssh服务
vim /etc/ssh/sshd_config
17 Port 22
#监听端口,建议修改为其他端口以提高在网络中的隐蔽性,一般不超过65535。
19 ListenAddress 192.168.200.111#监听IP地址,默认监听到0.0.0.0任意地址
20 protocol 2
#ssh协议的版本选用V2比V1的安全
性更好
116 UseDNS no
#禁用DNS反向解可以提高服务的响应速
度
93 GSSAPIAuthentication no
#为了加快连接
systemctl restart sshd #重启ssh服务
2.用户登录控制
sshd服务默认允许root用户登录,但在Internet中使用时是非常不安全的。普遍的做法如下:先以普通用户远程登入,进入安全shell环境后,根据实际需要使用su命令切换为root用户。
sshd服务默认允许root用户登录,但在Internet中使用时是非常不安全的。普遍的做法如下:先以普通用户远程登入,进入安全shell环境后,根据实际需要使用su命令切换为root用户。
vim /etc/ssh/sshd_config
38 LoginGraceTime 10s #登录验证时间为10秒
39 PermitRootLogin no #禁止root用户登录
41 MaxAuthTries 3 #最大重试次数为3
65 PermitEmptyPasswords no #禁止空密码用户登录
38 LoginGraceTime 10s #登录验证时间为10秒
39 PermitRootLogin no #禁止root用户登录
41 MaxAuthTries 3 #最大重试次数为3
65 PermitEmptyPasswords no #禁止空密码用户登录
OpenSSH服务访问控制
AllowUsers 仅允许用户登录
DenyUsers 仅禁止用户登录
注意:
1)Allow Users不要与Deny Users同时使用
2)当服务器在Internet时,控制包含的IP地址时应是公司公网地址
#一般来说拒绝用户是多于允许用户的,所以一般设置仅拒绝某些用户。
AllowUsers 仅允许用户登录
DenyUsers 仅禁止用户登录
注意:
1)Allow Users不要与Deny Users同时使用
2)当服务器在Internet时,控制包含的IP地址时应是公司公网地址
#一般来说拒绝用户是多于允许用户的,所以一般设置仅拒绝某些用户。
vim /etc/ssh/sshd_config
AllowUsers user1 user2 user3@IP地址
#被允许的IP一般为公司的公网IP,这行内容在文件内添加即可。
AllowUsers user1 user2 user3@IP地址
#被允许的IP一般为公司的公网IP,这行内容在文件内添加即可。
3.登陆验证方式
密码验证
密码验证:对服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器有可能被假冒:从服务器角度来看,当遭遇穷举(暴力破解)攻击时防御能力比较弱。
密钥对验证
密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互登录,在Shell中被广泛使用。
密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互登录,在Shell中被广泛使用。
vim /etc/ssh/sshd_config
66 PasswordAuthentication yes
#启用密码验证
44 PubkeyAuthentication yes
#启用密钥对验证
48 AuthorizedkeysFile ssh/authorized-keys
#指定公钥库文件(用于保存多个客户端上传的公钥文本)
66 PasswordAuthentication yes
#启用密码验证
44 PubkeyAuthentication yes
#启用密钥对验证
48 AuthorizedkeysFile ssh/authorized-keys
#指定公钥库文件(用于保存多个客户端上传的公钥文本)
二、使用客户端程序
openssh客户端由openssh-clients软件包提供,默认已安装。其中包括(ssh远程登录命令、scp远程复制命令、sftp远程文件传输命令等)。
1.命令程序
ssh命令
ssh user@IP地址 #若客户机登录用户与主机用户名相同,可省去user@)
ssh user@IP地址 command
-p 22 #端口选项
ssh命令
ssh user@IP地址 #若客户机登录用户与主机用户名相同,可省去user@)
ssh user@IP地址 command
-p 22 #端口选项
scp 命令
scp 源文件 目标位置 #IP:文件的绝对路径
-r #递归复制
用户名这部分影响了文件的权限
scp 源文件 目标位置 #IP:文件的绝对路径
-r #递归复制
用户名这部分影响了文件的权限
sftp命令
sftp user@IP地址
#是个交互式的环境,使用put 、get进行操作。
sftp user@IP地址
#是个交互式的环境,使用put 、get进行操作。
三、构建密钥对验证的SSH体系
密钥对验证整过细节包含四步:
a.首先要在SSH客户端以root用户身份创建密钥对
b.客户端将创建的公钥文件上传至SSH服务端
c.服务端将公钥信息导入用户root的公钥数据库文件
d.客户端以root用户身份连接服务器端root用户测试
1.在客户端创建密钥对,使用ssh-keygen命令,通过RSA、DSA、ECDSA等加密算法实现,通过-t选项指定。
ssh-keygen -t rsa
在主配置文件指定的位置会发现公钥id_rsa.pub和私钥id_rsa
ssh-keygen -t rsa
在主配置文件指定的位置会发现公钥id_rsa.pub和私钥id_rsa
2.将公钥使用scp命令传给客户端。
scp /root/.ssh/id_rsa.pub 目标主机IP:/root
scp /root/.ssh/id_rsa.pub 目标主机IP:/root
3.目标主机创建和当前主机权限相同的.ssh文件夹。并且将公钥内容导入到.ssh文件夹内的authorized_keys中。
mkdir .ssh
chmod 700 .ssh
cat /root/id-rsa.pub >> /root/.ssh/authorized_keys
mkdir .ssh
chmod 700 .ssh
cat /root/id-rsa.pub >> /root/.ssh/authorized_keys
4.连接测试。
#可以用ssh-copy-id 命令直接实现公钥传输。
ssh-cpy-id -i /root/.ssh/id_pub root@目标IP
#-i 指定公钥可以省略
ssh-cpy-id -i /root/.ssh/id_pub root@目标IP
#-i 指定公钥可以省略
四、TCP Wrappers
1,TCP Wrappers保护原理
TCP Wrappers将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增加了一个安全监测的过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
1,TCP Wrappers保护原理
TCP Wrappers将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,增加了一个安全监测的过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。
![](https://img2020.cnblogs.com/blog/1737613/202003/1737613-20200316223820335-1473232650.png)
2、保护机制的实现方式
方式1:通过tcpd主程序对其他服务程序进行包装
方式2:由其他服务程序调用libwrap.so.*链接库
方式1:通过tcpd主程序对其他服务程序进行包装
方式2:由其他服务程序调用libwrap.so.*链接库
3、TCP Wrappers保护的条件
(1)必须是采用TCP协议的服务
(2)函数库中必须包含libwrap.so.0(共享连接库)、大多数服务通过这种方式,可以用ldd命令查看
#ldd /sbin/ifconfig 查看ifconfig命令调用的库文件
(1)必须是采用TCP协议的服务
(2)函数库中必须包含libwrap.so.0(共享连接库)、大多数服务通过这种方式,可以用ldd命令查看
#ldd /sbin/ifconfig 查看ifconfig命令调用的库文件
4、访问控制策略的配置文件
/etc/hosts.allow #允许
/etc/hosts.deny #拒绝
访问控制策略处理流程图
/etc/hosts.allow #允许
/etc/hosts.deny #拒绝
访问控制策略处理流程图
![](https://img2020.cnblogs.com/i-beta/1737613/202003/1737613-20200316224013742-1310768960.png)
/etc/hosts.allow文件的优先级更高,若同一IP地址即出现在hosts.allow中,也存在与hosts.deny中,则该IP地址的访问请求将被接受。
文件格式
![](https://img2020.cnblogs.com/i-beta/1737613/202003/1737613-20200316224042294-521562823.png)
配置示例
实验要求:仅允许IP地址为192.168.200.100-192.168.200.199的主机访问sshd服务,禁止其他所有地址的访问。
vim /etc/hosts.allow
sshd:192.168.200.1??
vim /etc/hosts.deny
sshd:ALL
#因为/etc/hosts.allow的文件优先级较高所以在其中写上允许的IP并拒绝掉其他所有IP
#小知识
对访问的IP进行过滤
awk '/Failed/{print $(NF-3)}' /var/log/secure |sort -nr | uniq -c | head
对访问的IP进行过滤
awk '/Failed/{print $(NF-3)}' /var/log/secure |sort -nr | uniq -c | head