SSH协议(SecureShell)
是一种安全通道协议,对通信数据进行了加密处理,用于远程管理。SSH是建立在应用层基础上的安全协议,较可靠,专为远程登录会话和其他网络服务提供安全性的协议。通过用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。
OpenSSH服务器
OpenSSH
·服务名称:sshd
·服务端主程序:/usr/sbin/sshd
·服务的配置文件:/etc/ssh/sshd_config
服务监听选项
·端口号、协议版本、监听IP地址
·禁用反向解析
[root@localhost~]#vi/etc/ssh/sshd_config
…
Port22
LinstenAddress192.168.10.11(这里的IP填管理平面的IP)
Protocol2
UseDNSno
用户登录控制
·禁用root用户、空密码用户
·限制登录验证时间、重试次数
·AllowUsers、DenyUsers
sshd服务默认允许root用户登录,但在Internet中使用时是非常不安全的。普遍做法:先以普通用户远程登入,进入安全Shell环境后,根据实际需要使用su命令切换为root用户。
另外,可以限制登录验证的时间及最大重试次数,若超过限制后仍未能登录则断开连接。
[root@localhost~]#vi/etc/ssh/sshd_config
LoginGraceTime2m
MaxAuthTries6
PermitEmptyPasswordsno
…
AllowUsersjerryadmin@61.23.24.25
(AllowUsers不要与DenyUsers同时用)
[root@localhost~]#systemctlrestartsshd
登录验证方式
·密码验证:核对用户名、密码是否匹配
·密钥对验证:核对客户的私钥、服务端公钥是否匹配
[root@localhost~]#vi/etc/ssh/sshd_config
…
PasswordAuthenticationyes
PubkeyAuthenticationyes
AuthorizedKeysFile.ssh/authorized_keys
(启用密码验证、密钥对验证、指定公钥库位置)
ssh命令
sshuser@host远程安全登录
scp远程安全复制
·scpuser@host:file1file2
·scpfile1user@host:file2
sftpuser@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-tecdsa
Generatingpublic/privateecdsakeypair.
Enterfileinwhichtosavethekey(/home/zhangsan/.ssh/id_ecdsa);
Createddirectory‘/home/zhangsan/.ssh’.
Enterpassphrase(emptyfornopassphrase):
Entersamepassphraseagain:
Youridentificationhasbeensavedin/home/zhangsan/.ssh/id_ecdsa.(私钥文件位置)
Yourpublickeyhasbeensavedin/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.publisi@172.16.16.22
ssh服务支持两种验证方式——密码验证、密码对验证,可以设置只使用其中一种方式,也可以两种方式都启用。
·密码验证:对服务器中本地系统也能够的登录名称、密码进行验证。这种方式最为简单,但从客户端角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。
·密钥对验证:要求提供相匹配的秘钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性,该方式不易被假冒,且可以免交互登录,在Shell中被广泛使用。
TCPWrappers
保护机制的实现方式
·方式一:通过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