SSH协议 (Secure Shell)
是一种安全通道协议,对通信数据进行了加密处理,用于远程管理。SSH是建立在应用层基础上的安全协议,较可靠,专为远程登录会话和其他网络服务提供安全性的协议。通过用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。
OpenSSH服务器
OpenSSH
·服务名称:sshd
·服务端主程序:/usr/sbin/sshd
·服务的配置文件:/etc/ssh/sshd_config
服务监听选项
·端口号、协议版本、监听IP地址
·禁用反向解析
[root@localhost~]# vi /etc/ssh/sshd_config
…
Port 22
LinstenAddress 192.168.10.11 (这里的IP填管理平面的IP)
Protocol 2
UseDNS no
用户登录控制
·禁用root用户、空密码用户
·限制登录验证时间、重试次数
·AllowUsers、DenyUsers
sshd服务默认允许root用户登录,但在Internet中使用时是非常不安全的。普遍做法:先以普通用户远程登入,进入安全Shell环境后,根据实际需要使用su命令切换为root用户。
另外,可以限制登录验证的时间及最大重试次数,若超过限制后仍未能登录则断开连接。
[root@localhost~]# vi /etc/ssh/sshd_config
LoginGraceTime 2m
MaxAuthTries 6
PermitEmptyPasswords no
…
AllowUsers jerry admin@61.23.24.25
(AllowUsers不要与DenyUsers同时用)
[root@localhost~]# systemctl restart sshd
登录验证方式
·密码验证:核对用户名、密码是否匹配
·密钥对验证:核对客户的私钥、服务端公钥是否匹配
[root@localhost~]# vi /etc/ssh/sshd_config
…
PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
(启用密码验证、密钥对验证、指定公钥库位置)
ssh命令
ssh user@host 远程安全登录
scp 远程安全复制
·scp user@host:file1 file2
·scp file1 user@host:file2
sftp user@host 安全FTP上下载
Xshell
Window下的一款SSH客户端软件,中文。
密钥对验证的SSH体系
整体实现过程
第一步:创建密钥对
私钥文件:id_rsa
公钥文件:id_rsa.pub
(由客户端的用户zhangsan在本地创建密钥对)
第二步:上传公钥文件id_rsa.pub
第三步:导入公钥信息
公钥库文件:~/.ssh/authorized_keys
(导入到服务端用户lisi的公钥数据库)
第四步:使用密钥对验证方式
(以服务端的用户lisi的身份进行登录)
在客户机中创建密钥对
·ssh-keygen命令
·可用的加密算法:RSA、ECDSA或DSA
[root@localhost~]# ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key(/home/zhangsan/.ssh/id_ecdsa);
Created directory ‘/home/zhangsan/.ssh’.
Enter passphrase(empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/zhangsan/.ssh/id_ecdsa.(私钥文件位置)
Your public key has been saved in /home/zhangsan/.ssh/id_ecdsa.pub.(公钥文件位置)
…
在服务器中导入公钥文本
·将公钥文本添加至目标用户的公钥库
·默认公钥库位置:~/.ssh.authorized_keys
[root@localhost~]# mkdir /home/lisi/.ssh/
[root@localhost~]# cat /tmp/id_ecdsa.pub >> /home/lisi/.ssh/authorized_keys
[root@localhost~]# tail -1 /home/.ssh/authorized_keys
ecdsa-sha2-nistp256
AAAA2VjZHnLXNoYTlybmlzdHAyNTYAAAAlbmlzdHAyNTYAAABBBLJSnBhscY
BfnnHxSYAJEBD4sNkTLMF7itcFGM33RdeXU89QNQkNmCrCJHzAIZURrzpXG6M
p62mz9gRUXnARk8s=zhangsan@localhost
验证密码后,会将公钥自动添加到目标主机user宿主目录下的.ssh/authorized_keys文件结尾
[zhangsan@localhost~]# ssh-copy-id ~/.ssh/id_rsa.pub lisi@172.16.16.22
ssh服务支持两种验证方式——密码验证、密码对验证,可以设置只使用其中一种方式,也可以两种方式都启用。
·密码验证:对服务器中本地系统也能够的登录名称、密码进行验证。这种方式最为简单,但从客户端角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。
·密钥对验证:要求提供相匹配的秘钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性,该方式不易被假冒,且可以免交互登录,在Shell中被广泛使用。
TCP Wrappers
保护机制的实现方式
·方式一:通过tcpd程序对其他服务程序进行包装
·方式二:由其他服务程序调用libwrap.so.*链接库
访问控制策略的配置文件
·/etc/hosts.alow
·/etc/hosts.deny
设置访问控制策略
·策略格式:服务程序列表:客户端地址列表
·服务程序列表:多个服务以逗号分隔,ALL表示所有服务
·客户端地址列表:
多个地址以逗号分隔,ALL表示所有地址;
允许使用通配符?和*;
网段地址,如192.168.4. 或者 192.168.4.0/255.255.255.0;
区域地址,如.benet.com
策略应用顺序
1.检查hosts.allow,找到匹配则允许访问
2.再检查hosts.deny,找到则拒绝访问
3.若两个文件中均无匹配策略,则默认允许访问
策略应用实例
·仅允许从以下地址访问sshd服务
主机61.63.65.67
网段192.168.2.0/24
·禁止其他所有地址访问受保护的服务
[root@localhost~]# vi /etc/hosts.allow
ssd:61.63.65.67,192.168.2.*
[root@localhost~]# vi /etc/hosts.deny
sshd:ALL