*学会构建SSH远程登录服务
*学会使用SSH客户端工具
*学会编写TCP Wrappers访问策略
实验环境:
开启2台linux虚拟机
2.linux-2 外网客户端
nat 200.1.1.10
3.windows 主机 内网客户机
仅主机 192.168.10.10
OpenSSH服务器
1.SSH协议(安全通道协议)
*为客户机提供安全的Shell环境,用于远程管理(生产环境多用),远程登录、远程双向复制scp,远程文件传输sftp;安全性高。
*默认端口:TCP 22
2.OpenSSH
*服务名称:sshd
*服务端主程序:/usr/sbin/sshd
*服务端配置文件:/etc/ssh/sshd_config
3。服务监听选项
*端口号、协议版本、监听IP地址
*禁用反向解析
[root@localhost ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
[root@localhost ~]# vi /etc/ssh/sshd_config
……
17 Port 22 ***可更改端口
18 Protocol 2 ***版本2比版本1安全性高
20 ListenAddress 192.168.10.1 ***侦听地址
116 UseDNS no ***禁用反向解析,提高服务器响应速度(添加)
[root@localhost ~]# systemctl restart sshd
验证:外网客户机 200.1.1.2
[root@localhost ~]# ssh [email protected]
[root@localhost ~]# ssh [email protected]
ssh: connect to host 200.1.1.1 port 22: Connection refused
如果要实现可访问,openssh服务器添加侦听地址
ListenAddress 200.1.1.1
4.用户登录控制
*禁止root用户、空密码用户—(普通用户登录–>切换到root)
*登录时间、重试次数
*AllowUsers、DenyUsers
[root@localhost ~]# useradd tom
[root@localhost ~]# useradd jack
[root@localhost ~]# echo “123” |passwd --stdin tom
更改用户 tom 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# echo “123” |passwd --stdin jack
更改用户 jack 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# vi /etc/ssh/sshd_config
……
40 PermitRootLogin no *** 禁止root用户
66 PermitEmptyPasswords no ***禁止空密码用户
39 LoginGraceTime 2m ***登录验证时间2分钟
42 MaxAuthTries 6 ***最大重试次数
……
末尾添加:
AllowUsers tom [email protected] ***允许tom登录;允许jack只能在此地址登录
*可设置AllowUsers和DenyUsers,【不要与DenyUsers同时用】
[root@localhost ~]# systemctl restart sshd
验证:允许tom登录;允许jack只能在此地址登录
5.登录验证对象
*服务器中的本地用户账号—例:tom
6.登录验证方式
*密码验证:核对用户名、密码是否匹配—安全性弱,易被攻击
*密钥对验证:核对客户的私钥、服务端公钥是否匹配
— 客户机创建秘钥对(公钥、私钥)–>公钥存放到服务器
— 密码、秘钥同时启用,优先使用密钥
—公钥库文件可保存多个公钥
[root@localhost ~]# vi /etc/ssh/sshd_config
……
【启用密码验证、密钥对验证、指定公钥库位置】
PasswordAuthentication yes ***密码验证
PubkeyAuthentication yes ** 秘钥对验证
AuthorizedKeysFile .ssh/authorized_keys 指定公钥库数据文件位置
使用SSH客户端程序
1.ssh命令 —— 远程安全登录 【端口选项:-p 22】
*格式:ssh user@host
2.scp命令 —— 远程安全复制
*格式1:scp user@host:file1 file2
*格式2:scp file1 user@host:file2
3.sftp命令 —— 安全FTP上下载
格式:sftp user@host
4.Xshell
*Windows下一款功能非常强大的安全终端模拟软件
linux-1:
[root@localhost ~]# cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
cp:是否覆盖"/etc/ssh/sshd_config"? y
[root@localhost ~]# systemctl restart sshd
$ touch tom.txt
linux-2:
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# useradd lisi
[root@localhost ~]# echo “123” |passwd --stdin zhangsan
[root@localhost ~]# echo “123” |passwd --stdin lisi
[root@localhost ~]# su - lisi
[lisi@localhost ~]$ touch lisi.txt
[lisi@localhost ~]$ ssh [email protected]
The authenticity of host ‘192.168.10.1 (192.168.10.1)’ can’t be established.
ECDSA key fingerprint is SHA256:T+Kaqay4bTpIR3BBJ1x8EXaE3ukPjDMGEqMLPAaqaQg.
ECDSA key fingerprint is MD5:3e:1d:ef:74:ae:15:bb:3f:f1:cc:53:07:64:e2:ef:f9.
—根据服务端发送过来的RSA密钥输入‘yes’验证
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.10.1’ (ECDSA) to the list of known hosts.
—输入tom密码
[email protected]’s password:
Last login: Thu Oct 25 14:34:00 2018
[tom@localhost ~]$ pwd
/home/tom
[tom@localhost ~]$ ls
tom.txt
[tom@localhost ~]$ exit
登出
Connection to 192.168.10.1 closed.
[lisi@localhost ~]$ scp [email protected]:tom.txt tom.txt
[email protected]’s password:
tom.txt 100% 0 0.0KB/s 00:00
[lisi@localhost ~]$ scp lisi.txt [email protected]:lisi.txt
[email protected]’s password:
lisi.txt 100% 0 0.0KB/s 00:00
[lisi@localhost ~]$ ssh [email protected] ls
[email protected]’s password:
lisi.txt
tom.txt
[lisi@localhost ~]$ touch test1.txt
[lisi@localhost ~]$ sftp [email protected]
[email protected]’s password:
Connected to 192.168.10.1.
sftp> lls
lisi.txt test1.txt tom.txt
sftp> ls
lisi.txt tom.txt
sftp> put test1.txt
Uploading test1.txt to /home/tom/test1.txt
test1.txt 100% 0 0.0KB/s 00:00
sftp> ls
lisi.txt test1.txt tom.txt
sftp> bye
构建密钥对验证的SSH体系(ssh信任)
1.整体实现过程
原理;由客户端的用户zhangsan、lisi在本地创建密钥对
导入到服务端用户tom的公钥数据库(然后就可以在客户端zhangsan、lisi登录的情况下ssh到服务器tom用户了)
第一步:创建密钥对(zhangsan的密钥对,在Linux客户机的…/.ssh里面)
私钥文件:id_rsa
公钥文件:id_rsa.pub
第二步:上传公钥文件 id_rsa.pub
第三步:导入公钥信息()
公钥库文件:~/.ssh/authorized_keys
第四步:使用密钥对验证方式【以服务端的用户tom的身份进行登录】
linux-1
[tom@localhost ~]$ su -
[root@localhost ~]# vim /etc/ssh/sshd_config
43 PubkeyAuthentication yes
47 AuthorizedKeysFile .ssh/authorized_keys
[root@localhost ~]# systemctl restart sshd
linux-2 客户机
[lisi@localhost ~]$ su -
[root@localhost ~]# su - zhangsan
[zhangsan@localhost ~]$ ll .ssh
ls: 无法访问.ssh: 没有那个文件或目录
[zhangsan@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.
The key fingerprint is:
SHA256:byF6T/5YXG/9D9I5xqcfiI8isugc6z5BNyHQkTohaoI [email protected]
The key’s randomart image is:
±–[ECDSA 256]—+
| .o.o |
|… + . |
|+ o . . |
|E+ . o |
|o o . . S . . |
| . . o o.+.o.|
| … . . +.+.B.=|
| …+. o * ooo *o|
| +B…o . =o…=|
±—[SHA256]-----+
[zhangsan@localhost ~]$ ls -lh .ssh/id_ecdsa*
-rw------- 1 zhangsan zhangsan 227 10月 25 14:45 .ssh/id_ecdsa
-rw-r–r-- 1 zhangsan zhangsan 192 10月 25 14:45 .ssh/id_ecdsa.pub
方法1:
?2. 将公钥文件上传至服务器
*任何方式均可(共享、FTP、Email、SCP、……)
[zhangsan@localhost ~]$ scp .ssh/id_ecdsa.pub [email protected]:zhangsan.key
— .ssh 目录权限 700
— .ssh/authorized_keys 权限644
— .ssh/id_rsa 私钥文件权限必须是600
[zhangsan@localhost ~]$ ssh [email protected]
[tom@localhost ~]$ ll .ssh
【tom的家目录本来没有authorized_keys】
[tom@localhost ~]$ mkdir .ssh
[tom@localhost ~]$ touch .ssh/authorized_keys
[tom@localhost ~]$ chmod 700 .ssh
[tom@localhost ~]$ chmod 644 .ssh/authorized_keys
[tom@localhost ~]$ cat zhangsan.key >> .ssh/authorized_keys
---选择‘>>’,公钥库可存放多个用户的公钥
[tom@localhost ~]$ cat .ssh/authorized_keys
—库中==后为声明
[zhangsan@localhost ~]$ ls -lh .ssh/
总用量 12K
-rw------- 1 zhangsan zhangsan 227 10月 25 14:45 id_ecdsa
-rw-r–r-- 1 zhangsan zhangsan 192 10月 25 14:45 id_ecdsa.pub
-rw-r–r-- 1 zhangsan zhangsan 174 10月 25 14:49 known_hosts
[zhangsan@localhost ~]$ ls -ldh .ssh/
drwx------ 2 zhangsan zhangsan 61 10月 25 14:49 .ssh/
[zhangsan@localhost ~]$ ssh [email protected]
方法2:*验证密码后,会将公钥自动添加到目标主机user宿主目录下的.ssh/authorized_keys文件结尾
*ssh-copy-id -i 公钥文件 user@host
[zhangsan@localhost ~]$ exit
登出
[root@localhost ~]# su - lisi
[lisi@localhost ~]$ ssh-keygen -t ecdsa
[lisi@localhost ~]$ ssh-copy-id -i .ssh/id_ecdsa.pub [email protected]
— -i 指定公钥文件
[lisi@localhost ~]$ ssh [email protected]
[tom@localhost ~]$ cat .ssh/authorized_keys
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAZydP4XKVX6GGR9DLcKIW/nYZY+sLenMYnIaOrPrRhZ14tfGg1c+7JOWkd2yEL+VaXrhkRpjPCdOJfXoHT4vuU= [email protected]
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBE/gMz/L6FSUJC7fSy/0/cW/8+DB4QSSvxLHhmdpIspy4EvQ5hzvCI1Q4N0He6kIf82U0rv3SJEofdsRcD7/8Yg= [email protected]
TCP Wrappers概述
1.TCP Wrappers机制
【客户机的网络访问请求】
1)对访问请求进行过滤控制
代为监听端口21
代为监听端口23
代为监听端口110
代为监听端口143
2)调用相应的网络程序
vsftpd
telnet
ipop3
imap
2.保护机制的实现方式
方式1:通过tcpd主程序对其他服务程序进行包装
方式2:由其他服务程序调用libwrap.so.*链接库
3.访问控制策略的配置文件
/etc/hosts.allow
/etc/hosts.deny
TCP Wrappers(tcp封套)策略应用
在 wrappers 下进行访问控制的通常有 telnet、ssh、sendmail、ftp 包、pop3 和 stunnel。
主配置文件:
/etc/hosts.allow
/etc/hosts.deny
*执行程序: tcpd
共享链接库文件: libwrap.so.
–这种方式更广泛
查看程序的共享库 ldd
1.设置访问控制策略
*策略格式:服务列表:客户机地址列表
2.服务列表 ——
*多个服务以逗号分隔,ALL 表示所有服务
3.客户机地址列表
*多个地址以逗号分隔,ALL表示所有地址
*允许使用通配符 ? 和 *
*网段地址,如 192.168.4. 或者 192.168.4.0/255.255.255.0
*区域地址,如 .benet.com
—匹配域中所有主机
4.策略的应用顺序
*先检查hosts.allow,找到匹配则允许访问
*否则再检查hosts.deny,找到则拒绝访问
*若两个文件中均无匹配策略,则默认允许访问
5.策略应用示例
*仅允许从以下地址访问sshd服务
&主机192.168.10.3
&网段192.168.2.0/24
*禁止其他所有地址访问受保护的服务
[root@localhost ~]# ll /etc/hosts.*
-rw-r–r--. 1 root root 370 6月 7 2013 /etc/hosts.allow
-rw-r–r--. 1 root root 460 6月 7 2013 /etc/hosts.deny
[root@localhost ~]# vim /etc/hosts.allow
sshd:192.168.10.*,200.1.1.3
[root@localhost ~]# vi /etc/hosts.deny
sshd:ALL
验证:在客户机ssh登录验证
[root@localhost ~]# ssh [email protected]
更改hosts.allow为sshd:192.168.10.*,200.1.1.2继续验证
总结:配置策略要2个文件都做配置