远程访问及控制

走远了吗. 提交于 2020-12-29 12:40:26

标题 远程访问及控制

*学会构建SSH远程登录服务
*学会使用SSH客户端工具
*学会编写TCP Wrappers访问策略

实验环境:
开启2台linux虚拟机

  1. linux-1 openssh服务器
    仅主机 192.168.10.1
    nat 200.1.1.1

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 root@192.168.10.1

[root@localhost ~]# ssh root@200.1.1.1

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 jack@200.1.1.10 ***允许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

su - tom

$ 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 tom@192.168.10.1

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密码
tom@192.168.10.1’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 tom@192.168.10.1:tom.txt tom.txt

tom@192.168.10.1’s password:
tom.txt 100% 0 0.0KB/s 00:00

[lisi@localhost ~]$ scp lisi.txt tom@192.168.10.1:lisi.txt

tom@192.168.10.1’s password:
lisi.txt 100% 0 0.0KB/s 00:00

[lisi@localhost ~]$ ssh tom@192.168.10.1 ls

tom@192.168.10.1’s password:
lisi.txt
tom.txt

[lisi@localhost ~]$ touch test1.txt

[lisi@localhost ~]$ sftp tom@192.168.10.1

tom@192.168.10.1’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 客户机

  1. 在客户机中创建密钥对
    *ssh-keygen命令
    *可用的加密算法:escda或DSA

[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 zhangsan@localhost.localdomain
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 tom@192.168.10.1:zhangsan.key

  1. 在服务器中导入公钥文本
    *将公钥文本添加至目标用户的公钥库
    *默认公钥库位置:~/.ssh/authorized_keys
    SSH对公钥、私钥的权限和所有权的要求是非常严格的


— .ssh 目录权限 700
— .ssh/authorized_keys 权限644

— .ssh/id_rsa 私钥文件权限必须是600

[zhangsan@localhost ~]$ ssh tom@192.168.10.1

[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 tom@192.168.10.1

方法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 tom@192.168.10.1

— -i 指定公钥文件

[lisi@localhost ~]$ ssh tom@192.168.10.1

[tom@localhost ~]$ cat .ssh/authorized_keys

ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAZydP4XKVX6GGR9DLcKIW/nYZY+sLenMYnIaOrPrRhZ14tfGg1c+7JOWkd2yEL+VaXrhkRpjPCdOJfXoHT4vuU= zhangsan@localhost.localdomain
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBE/gMz/L6FSUJC7fSy/0/cW/8+DB4QSSvxLHhmdpIspy4EvQ5hzvCI1Q4N0He6kIf82U0rv3SJEofdsRcD7/8Yg= lisi@localhost.localdomain


	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

ldd /usr/sbin/sshd |grep “libwrap”

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 root@200.1.1.1

更改hosts.allow为sshd:192.168.10.*,200.1.1.2继续验证

总结:配置策略要2个文件都做配置

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!