这里写目录标题
一、OpenSSH服务器
1.SSH协议
SSH(Secure Shell)协议
1.是一种安全通道协议
2.对通信数据进行了加密处理,用于远程管理
2.OpenSSH服务
OpenSSH
服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
3.服务监听选项
服务监听选项
端口号、协议版本、监听IP地址
禁用反向解析
示例:
vi /etc/ssh/sshd_config
Port 22 #默认端口号是22,可改,最大的端口号可以改为65535
ListenAddress 172.16.16.22(目标地址就是自已的地址) #监听地址
注: 监听地址默认指的是0.0.0.0 是监听所有,如目标地址设置的为自已的ip地址,然后pkill sshd清完进程,
那个ip地址的XShell就连接不上,如不清进程,下一次,登录也连接不上
Protocol 2 #协议号
UseDNS no #重定向禁用
重定向:客户机去访问一个服务器1,但这个服务器是不可达的,这个服务器1会把这个不可达的内容
指向另一台服务器(服务器2),这个过程称为重定向
4.用户登录控制
用户登录控制
禁用root用户、空密码用户
限制登录验证时间、重试次数
AllowUsers 、DenyUsers
示例:
vi /etc/ssh/sshd_config #进入编辑
LoginGraceTime 2m #限定密码登录的访问时间
如别人用SSH远程访问,2分钟没有输入密码就
会显示超时
PermitRootLogin no #不允许root账号登录,Yes是允许,默认是Yes
MaxAuthTries 6 #最大尝试密码的次数是6次,超过6次服务器会断开
PermitEmptyPasswords no #不允许空密码登录
........
AllowUsers jerry admin@61.23.24.25 #白名单
jerry、admin:只允许这2个用户访问
61.23.24.25:客户机的IP
注:AllowUsers 白名单、DenyUsers 黑名单,两个不能同时使用
1.操作试验
1.1 白名单试验
1.vi /etc/ssh/sshd_config #先进入ssh
1.vi /etc/ssh/sshd_config #先进入ssh
按大G到文件的最后一行,小o从光标处所在行之下插入一个新行内容
输入AllowUsers lisi zhangsan@20.0.0.15客户机的IP(指定被远程的客户机IP地址)
wq保存退出
2.systemctl restart sshd #重启sshd服务
2.systemctl restart sshd #重启sshd服务
创建白名单允许的访问的用户
useradd lisi
passwd lisi
123123
useradd zhangsan
passwd zhangsan
123123
3.然后去白名单指定的客户机ip地址的机器上测试是否可以用SSH远程到本机的账户
ssh lisi@20.0.0.14 -p 22 #使用ssh登录要登录的客户机ip地址
whoami #表示我是谁
exit #登出
1.2 黑名单试验
同上
1.vi /etc/ssh/sshd_config
改为
DenyUsers lisi@20.0.0.15 #把lisi放入黑名单,20.0.0.15这个客户机是ssh远程不上本机(20.0.0.14)的lisi账户的
2.测试
上面已经把lisi账户放入黑名单,用20.0.0.14的ip的客户机用ssh远程本机(20.0.0.15)的lisi账户是远程不上的,连续输入3次密码不管是否正确,最后都会返回为客户机的初始账户。
客户机远程本机登录账户,除本机黑名单意外的账户,其他账户都可以远程通过
ssh zhangsan@20.0.0.14 #登录20.0.0.14机器的zhangsan账户
exit #退出
注释:ssh:做完一个实验最好还原一下,以免影响到下面的实验
5.登录验证方式
登录验证方式:
密码验证:核对用户明、密码是否匹配
密钥对验证:核对客户的私钥、服务端公钥是否匹配
密钥分为:公钥与私钥
公钥:大家都可以有这个钥匙,解的是私钥锁
私钥:私钥解的是公钥的锁
示例:
[root@server1 ~]# vi /etc/ssh/sshd_config
PasswordAuthentication yes #密码验证
PubkeyAuthentication yes #公钥验证 下面两个同时开启
AuthorizedKeysFile .ssh/authorized_keys #密钥对存放位置 默认开启的
隐藏文件
生成密钥对的过程
ssh-keygen -t rsa #生成密钥的方式
ls -lh #只能查看到没有加密、没有隐藏的文件是可以看到的
ls -lah #可以查看到加密、隐藏的文件
cd .ssh/ #进入.ssh目录
ls -lah #查看.ssh目录中的文件
会生成两条文件,第一条是私钥,第二条是公钥
5.1 数据加密
1.发送方使用接收方的公钥加密数据
2.接收方使用自已的私钥解密数据
3.数据加密能保证所发送数据的机密性
5.2 数字签名
1.对原始数据执行HASH算法得到摘要值
2.发送方用自已私钥加密摘要值
3.将加密的摘要值与原始数据发送给接收方
注:数字签名保证数据完整性、身份验证和不可否认
二、使用SSH客户端程序
1.ssh命令
ssh命令
用途:远程安全登录、端口选项:-p 22
格式:ssh user@host
示例:
要求:客户端(20.0.0.14)登录服务器(20.0.0.15)的root账户
ssh root@20.0.0.15
yes
20.0.0.15的root密码:123456
whoami #查看本身是谁
ifconfig #查看本身是哪个IP地址
2.scp命令
scp命令
用途:远程安全复制
格式:
格式1:scp user@host:file1 file2
格式2:scp file1 user@host:file2
示例
要求:客户端(20.0.0.14)创建文件复制到服务器(20.0.0.15)的root下的opt目录下
//格式1
echo "abc123" >a.txt #本地生成一个a.txt文件
scp /root/a.txt root@20.0.0.15:/opt #把本地的root目录下的a.txt文件拷贝到用户名为root的
20.0.0.15ip地址的opt目录下
在20.0.0.15的opt目录下创建文件信息,然后在去20.0.0.14上下载20.0.0.15的文件
// 格式2
scp root@20.0.0.15:/opt/1 /root #拷贝20.0.0.15上的root账户下opt目录下的1文件,拷贝到本机的root目录下
3.sftp命令
sftp命令
用途:安全FTP上下载
格式:sftp user@host
注:sftp访问的都是文件的家目录
示例:
要求:服务器创建文件,客户机通过FTP查看文件的上下载
sftp root@20.0.0.15 #登录上20.0.0.15这个用户的家目录
在服务器上创建文件
cd /home/fa #进入家目录
touch ky07 #创建一个ky07文件
在客户机上测试
sftp fa@20.0.0.15 #sftp访问20.0.0.15的fa目录,访问进去直接进的是fa的家目录
三、构建密钥对验证的SSH体系
1.实现过程图
2.四步操作
2.1 在客户机中创建密钥对
1.在客户机中创建密钥对
·ssh-keygen命令
·可用的加密算法:RSA、ECDSA或DSA
示例:
[zhangsan@server2 ~]$ 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. #公钥文件位置
注:设置密钥短语密码的时候要谨慎设置
2.2 将公钥文件上传至服务器
2.将公钥文件上传至服务器
·任何方式均可(FTP、Email、SCP、HTTP ........
示例:
[zhangsan@localhost ~]$ scp ~/.ssh/id_ ecdsa.pub root@172.16.16.22:/tmp
拷贝 公钥文件位置 到root用户ip地址的tmp目录下
2.3 在服务器中导入公钥文本
3. 在服务器中导入公钥文本
·将公钥文本添加至目标用户的公钥库
·默认公钥库位置:~/.ssh/authorized_keys
示例:
mkdir /home/lisi/.ssh/ #以mkdir的形式创建lisi,lisi是本身存在的
cat /tmp/id_ecdsa.put >> /home/lisi/.ssh/authorized_keys #把公钥文件的内容追加到lisi的.ssh目录的authorized_keys文件下
tail -1 /home/lisi/.ssh/authorized_keys #查看文件内容最后一行
2.4 客户端使用密钥对验证登录
4.客户端使用密钥对验证登录
·验证用户:服务端的用户lisi
·验证密码:客户端的用户zhangsan的私钥短语
示例:
[zhangsan@localhost ~]$ ssh lisi@172.16.16.22 #登录到lisi的家目录下
[lisi@localhost ~]$ whoami
lisi
3.项目操作
1.在客户机上创建用户
useradd wangwu #创建用户
passwd wangwu #设置密码
2.生成密钥
[root@server1 ~]# su zhangwe #切换到wangwu用户
[zhangwe@server1 root]$ ssh-keygen -t rsa #生成密钥的过程
[zhangwe@server1 root]$ ls -lah #查看,权限不够
[zhangwe@server1 root]$ exit #退出
因为wangwu是普通用户没有权限
3.添加到组内,提升权限
sudo /usr/bin/ls -lah #授权
cd /home/wangwu
ls -lah #查看所有文件包括有密码的,隐藏的文件
4.查看生成的密钥文件
5.将公钥文件上传至服务器
在客户机上
scp id_rsa.pub root@20.0.0.15:/tmp #拷贝公钥到root用户的客户机ip地址是20.0.0.15的tmp目录下
6.在服务器(20.0.0.15)上去查看
7.把文件拷贝到用户lisi上
先创建用户lisi,目录
在服务器上
[root@server3 tmp]# useradd lisi #创建用户
[root@server3 tmp]# mkdir /home/lisi/.ssh #创建目录
[root@server3 tmp]# cat id_rsa.pub >> /home/lisi/.ssh/authorized_keys #追加文件内容
[root@server3 tmp]# cat /home/lisi/.ssh/authorized_keys #查看文件是否存在
测试:
客户机(20.0.0.14)远程登录服务器(20.0.0.15)
客户端使用密钥对验证登录
ssh lisi@20.0.0.15 #用ssh远程登录服务器
3.1 第2和第3步可以采用另外一种方法
ssh-copy-id -i 公钥文件 user@host #自已生成的密钥文件拷贝到指定目标主机上的目标用户下的密钥库文件中
ssh-copy-i -i ~/.ssh/id_rsa.pub lisi@172.16.16.22 # 验证密码后,会将公钥自动添加到目标主机user宿主目录下
的.ssh/authorized_keys文件结尾
示例:
接着以上实验继续进行
服务器(20.0.0.15)还原初始状态
在服务器上
在客户机(20.0.0.14)上配置
ssh-copy-id -i /home/wangwu/.ssh/id_rsa.pub lisi@20.0.0.15
#验证密码后,会将公钥自动添加到目标home下wangwu/.ssh/id_rsa.pub
显示已进将密钥添加进lisi的公钥库中
(Now try logging into the machine, with: "ssh 'lisi@20.0.0.15'"
and check to make sure that only the key(s) you wanted were added.)
进行验证登录服务器(20.0.0.15)的lisi账户
ssh lisi@20.0.0.15 #通过ssh远程目标20.0.0.15的lisi账户
whoami
ifconfig
登录上来说明验证成功
4.免密登录
ssh-keygen -t rsa #生成密钥
ssh-copy-id 20.0.0.14 #输入20.0.0.14管理员的密码
ssh root@20.0.0.14 #代理成功直接无密码登陆20.0.0.14的root账户
四、TCP Wrappers概述
1.TCP保护原理
1.1 保护机制的实现方式
方式1:通过tcpd程序对其他服务程序进行包装
方式2:由其他服务程序调用libwrap.so.*链接库
1.2 访问控制策略的配置文件
·/etc/hosts.allow 白名单
·/etc/hosts.deny 黑名单
2.策略应用
2.1 设置访问控制策略
1.设置访问控制策略
1.1 策略格式:服务程序列表:客户端地址列表
1.2 服务程序列表
多个服务以逗号分隔,ALL表示所有服务
1.3 客户端地址列表
多个地址以逗号分隔,ALL表示所有地址
允许使用通配符?和*
# "?"表示1位未知、" * "表示这位数字可用为0,没有或者任意数字
网段地址,如192.168.4. 或者 192.168.4.0/255.255.255.0
区域地址,如.benet.com
2.2 策略应用顺序
1.检查hosts.allow,找到匹配则允许访问(白名单)
2.在检查hosts.deny,找到则拒接访问(黑名单)
3.若两个文件中均误匹配策略,则默认允许访问
2.3 策略应用示例
1.仅允许从以下地址访问sshd服务
主机61.63.65.67
网段192.168.2.0/24
2.禁止其他所有地址访问受保护的服务
示例:
vi /etc/hosts.allow
sshd:61.63.65.67,192.168.2. *任意字符 192.168.2.0/255.255.255.255 #只允许这一个网段和这个ip访问我
vi /etc/hosts.deny
vsftpd:ALL #ftp不允许任何用户访问
sshd:ALL #禁用所有
实例:
1.在服务器(20.0.0.14)上
sshd:20.0.0.15 #允许20.0.0.15访问我
2.在服务器(20.0.0.14)上
vsftpd:ALL #ftp不允许任何用户访问
sshd:ALL #拒绝所有
3.在客户机(20.0.0.15)上,连接服务器是可以正常登录的,因为上面服务器允许20.0.0.15的ip地址访问他,登录成功!
ssh root@20.0.0.14 #用ssh远程连接20.0.0.14ip上的机器的root账户
4.在没有被允许登录的客户机(20.0.0.13)上去用ssh远程连接服务器(20.0.0.14)
登录失败!
匿名访问
1.服务器上安装ftp
yum -y install vsftpd #服务器上安装ftp
2.编辑配置文件
vi /etc/vsftpd/vsftpd.conf #进入vsftpd.conf文件进行编辑
添加:
anon_umask=022 #设置匿名账户权限为755
anon_other_write_enable=YES #允许匿名账户其它写的权限
修改:
anon_upload_enable=YES #允许匿名账户登录
anon_mkdir_write_enable=YES #允许匿名账户新键文件或目录
3.在服务器(20.0.0.14)上配置
[root@server2 ~]# cd /var/ftp/pub
[root@server2 pub]# echo "abc123" > a.txt #创建文件a.txt,内容是abc123
[root@server2 pub]# cd
[root@server2 ~]# chmod -R 755 /var/ftp/pub/ #设置文件权限
[root@server2 ~]# chown -R ftp.ftp /var/ftp/pub/ #设置文件归属
[root@server2 ~]# systemctl start vsftpd #服务开启
[root@server2 ~]# netstat -anpt | grep vsftpd #查看服务
测试:
4.在客户机(20.0.0.15)上先安装ftp,然后进行匿名访问
yum -y install ftp #安装ftp
ftp 20.0.0.14 #用ftp连接20.0.0.14这ip的地址的机器
421 Service not available #显示服务不可用