结构
SSH远程管理:配置OpenSSH服务端;使用SSH客户端程序;密钥对验证的SSH体系
TCP Wrappers访问控制:TCP Wrappers 概述;TCP Wrappers访问策略
SSH远程管理
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能,SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。
因此SSH协议具有很好的安全性
SSH客户端:Putty、Xshell、GRT
OpenSSH(SSH服务端)
服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
默认端口22 网络 传输层tcp 默认端口22
SSH客户端<--------------------------------------->SSH服务端
数据传输是加密的,可以防止信息泄漏
数据传输是压缩的,可以提高传输速度
OpenSSH 是实现 SSH 协议的开源软件项目,适用于各种 UNIX、Linux 操作系统。
CentOS 7系统默认已安装openssh相关软件包,并已将 sshd 服务添加为开机自启动。
执行“systemctl start sshd”命令即可启动 sshd 服务
ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件
SSH的优点
SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。
SSH在正确使用时可弥补网络中的漏洞。
客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序
SSH 的组成
传输层协议 [SSH-TRANS]
提供了服务器认证,保密性及完整性。
此外它有时还提供压缩功能。
SSH-TRANS 通常运行在TCP/IP连接上,
也可能用于其它可靠数据流上。
SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。
该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上
用户认证协议 [SSH-USERAUTH]
用于向服务器提供客户端用户鉴别功能。
它运行在传输层协议 SSH-TRANS 上面。
当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。
会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护
连接协议 [SSH-CONNECT]
将多个加密隧道分成逻辑通道。
它运行在用户认证协议上。
它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接
SSH的密钥登录
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。
而ssh密钥就是一种非对称性的密钥
ssh远程访问控制中不仅仅可以使用用户密码登录,还可以通过密钥进行登录。
而密钥登录的产生是通过客户端与服务端进行一系列的操作过程产生的
密钥登录的过程:
1. ssh客户端通过ssh-keygen生成自己的公钥和私钥,将公钥发送给ssh服务端,并且放在指定的位置。
2.公钥发送完毕后。ssh客户端再向ssh 服务端进行登录请求。
3.ssh服务端收到ssh客户端的登录请求后,ssh服务端用对应的公钥加密一些随机数返回给ssh客户端。
4.ssh客户端收加密的随机数后使用私钥对其进行解密,再将解密的结果发送给ssh服务端进行验证。
5. ssh服务端接收到ssh客户端发送过来的解密数据,将其与原数据进行比对,保持一致则允许用户进行登录
SSH命令--远程安全登录 ssh user@host 【host即地址】
配置OpenSSH服务端:sshd_config配置文件的常用选项设置
1.修改zy002配置文件[root@localhost ~]# vim /etc/ssh/sshd_config 将默认端口22改为10022
2. [root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl restart sshd
同时要修改主机配置里的默认端口号
3.关闭主机zy1的防火墙,检验机制 ,进行连接zy002主机
禁止root用户登录 PermitRootLogin no
1.更改主机zy002的配置文件 [root@localhost ~]# vim /etc/ssh/sshd_config
2.重启服务 [root@localhost ~]# systemctl restart sshd
3.进入zy1,尝试连接登录
[root@zy1 ~]# ssh -p 10022 root@192.168.126.6
root@192.168.126.6's password:
Permission denied, please try again.
root@192.168.126.6's password: 登录失败,root用户已被禁止登录
只允许aa、cc用户登录,且其中cc用户仅能够从IP地址为192.168.126.7 的主机远程登录,不允许bb登录
1.创建用户
[root@localhost ~]# useradd aa
[root@localhost ~]# echo 123 | passwd --stdin aa
更改用户 aa 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# useradd bb
[root@localhost ~]# echo 123 | passwd --stdin bb
更改用户 bb 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# useradd cc
[root@localhost ~]# echo 123 | passwd --stdin cc
2.修改主机zy002的配置文件
[root@localhost ~]# systemctl restart sshd 重启服务
3.进入主机zy1 登录zy002的aa用户[root@zy1 ~]# ssh -p 10022 aa@192.168.126.6
[root@zy1 ~]# ssh -p 10022 bb@192.168.126.6 【登录bb用户 失败】
bb@192.168.126.6's password:
Permission denied, please try again.
4.进入zy3主机 登录cc用户[root@zy3 ~]# ssh -p 10022 cc@192.168.126.6
cc@192.168.126.6's password:
Last failed login: Thu Mar 9 19:16:30 +08 2023 from 192.168.126.7 on ssh:notty
There were 7 failed login attempts since the last successful login.
[cc@localhost ~]$ 【登录成功】
*SCP命令--远程安全复制:
格式1 scp user@host:hile1 file2
格式2 scp file1 user@host:file2
[root@localhost opt]# scp root@192.168.233.22:/opt/yht.txt /opt/rh 【复制192.168.233.22地址的/opt/yht.txt 到本机的/opt/rh下】
[root@localhost rh]# scp -r root@192.168.233.22:/opt/ky27/ /opt/ #复制目录 -r
[root@localhost rh]# scp -rP 10022 root@192.168.233.22:/opt/ky27/ /opt/ #如果不是默认端口22,要加大P 或者 scp -P 10022 -r root@192.168.233.22:/opt/ky27/ /opt/
sftp安全的FTP:
由于使用了加密/解密技术,所以传输效率比普通的FTP要低,但安全性更高。操作语法sftp与ftp几乎一样
[root@zy3 ~]# sftp root@192.168.126.21
在zy2 /opt 目录下创建文件aaa ,在zy3家目录创建bbb文件
此时就可以通过sftp进行文件的获取与传输
zy3主机接收的文件home目录下
[root@zy3 ~]# ls
aaa initial-setup-ks.cfg 公共 视频 文档 音乐
anaconda-ks.cfg original-ks.cfg 模板 图片 下载 桌面
[root@zy3 ~]# cat aaa
1234
zy1接收的文件还在/opt目录下
root@zy1 opt]# ls
aaa bbb rh
sftp对于非默认端口的连接也是通过-P(大P)进行的
sshd 服务支持两种验证方式
1.密码验证
对服务器中本地系统用户的登录名称、密码进行验证。简便,但可能会被暴力破解,暴力破解可看之前博客有详细描述系统弱口令检测
2.密钥对验证
要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),
然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证。能增强安全性,且可以免交互登录
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。可根据实际情况设置验证方式。
构建密钥对验证的SSH体系
构建密钥对验证
[root@localhost ~]# vim /etc/ssh/sshd_config 【检查修改配置文件】
2. 在客户端创建密钥对
通过ssh-keygen工具为当前用户创建密钥对文件。可用的加密算法为RSA、ECDSA或DSA等(ssh-keygen命令的“-t”选项用于指定算法类型)
[root@localhost ~]# ssh-keygen 【-t 指定算法类型 可以不加】
[root@localhost ~]# cd .ssh
[root@localhost .ssh]# ls
id_rsa id_rsa.pub known_hosts 【id_rsa私钥文件 默认权限600 id_rsa.pub公钥文件一共给SSH服务器】
[root@localhost .ssh]# ssh-copy-id -i id_rsa.pub root@192.168.126.21 【zy2 给zy1服务器 -i表示指定密钥文件】
root@192.168.126.21's password: 输入zy1的root登录密码
3.进入服务器zy1
4.此时用zy2去连接zy1:
[root@localhost .ssh]# ssh root@192.168.126.21
Enter passphrase for key '/root/.ssh/id_rsa': 【输入密钥对密码】
Last login: Thu Mar 9 18:11:42 2023
[root@zy1 ~]# exit 【登录成功,exit退出】
登出
免密登录:不需要密码和密钥对直接登录
[root@localhost ~]# ssh-agent bash
[root@localhost ~]# ssh-add
Bad passphrase, try again for /root/.ssh/id_rsa: 【输入密钥对密码保存,下次就可以直接登录】
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
[root@localhost ~]# ssh root@192.168.126.21 【直接登录zy1】
Last login: Fri Mar 10 09:43:33 2023 from 192.168.126.6
[root@zy1 ~]# 【登录成功】
TCP Wrappers 访问控制
TCP Wrappers 将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,
增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,
获得许可后才能访问真正的服务程序。
大多数 Linux 发行版,TCP Wrappers 是默认提供的功能。rpm -q tcp_wrappers 【默认已安装】
TCP Wrapper 保护机制的两种实现方式
1.直接使用 tcpd 程序对其他服务程序进行保护,需要运行 tcpd程序。
2.由其他网络服务程序调用 libwrap.so.链接库,不需要运行 tcpd 程序。此方式的应用更加广泛,也更有效率
使用 ldd 命令可以查看程序的 libwrap.so.*链接库:ldd $(which ssh vsftpd)
TCP Wrappers 的访问策略
TCP Wrappers 机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。
对应的两个策略文件为/etc/hosts.allow 和/etc/hosts.deny,分别用来设置允许和拒绝的策略
格式:
<服务程序列表>:<客户端地址列表>
(1)服务程序列表
ALL:代表所有的服务。
单个服务程序:如“vsftpd”。
多个服务程序组成的列表:如“vsftpd,sshd”。
(2)客户端地址列表
ALL:代表任何客户端地址。
LOCAL:代表本机地址。
多个地址以逗号分隔
允许使用通配符 “*” 和 “?” ,前者代表任意长度字符,后者仅代表一个字符
网段地址,如 192.168.233. 或者 192.168.233.0/255.255.255.0
区域地址,如 “.benet.com”匹配 bdqn.com 域中的所有主机
“允许所有,拒绝个别”
只需在/etc/hosts.deny文件中添加相应的拒绝策略
“允许个别,拒绝所有”
除了在/etc/hosts.allow中添加允许策略之外,还需要在/etc/hosts.deny文件中设置“ALL:ALL”的拒绝策略
例1:只允许zy3访问 不允许其他访问
1.[root@localhost ~]# vim /etc/hosts.allow 【先设置allow 白名单】
sshd:192.168.233.23 #若多个ip用,隔开
2.[root@localhost ~]# vim /etc/hosts.deny
3.此配置文件即时生效 ,不用重启服务
4.从客户机zy3 登录zy2 [root@zy3 ~]# ssh -p 10022 root@192.168.126.6
root@192.168.126.6's password: 【输入zy2的root密码】
Last failed login: Thu Mar 9 18:29:24 +08 2023 from 192.168.126.41 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Thu Mar 9 18:16:11 2023 from 192.168.126.41
[root@localhost ~]# 【登陆成功】
5.从客户机zy1登录zy2
[root@zy1 ~]# ssh -p 10022 root@192.168.126.6
ssh_exchange_identification: read: Connection reset by peer
[root@zy1 ~]# 【登录失败】