SSH远程访问与TCP Wrappers 访问控制(基础概述及配置操作)

OpenSSH服务器

基础概述

  • SSH(Secure Shell)协议
    • SSH是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能
    • SSH协议对通信双方的数据传输进行了加密处理,其中就包括了用户登录时输入的用户口令。因此SSH协议具有很好的安全性
    • SSH客户端有:Putty、Xshell、CRT
    • SSH服务端有:OpenSSH
  • OpenSSH
    • OpenSSH是实现SSH协议的开源软件项目,适用于各种UNIX、Linux操作系统
    • CentOS 7系统默认已安装openssh相关软件包,并已将sshd服务添加为开机自启动
      执行"systemctl star sshd"命令即可启动sshd服务
    • 服务器名称:sshd
    • sshd服务默认使用的端口号为22
    • sshd服务端主程序:/usr/sbin/sshd
    • sshd服务端配置文件:/etc/ssh/sshd_config
  • ssh_config和sshd_config都是ssh服务器的配置文件,区别在于ssh_config是针对客户端的配置文件,sshd_config是针对服务端的配置文件
  • SSH功能实现示意简图
    在这里插入图片描述

Windows远程桌面连接

在这里插入图片描述
在这里插入图片描述

配置OpenSSH 服务端

sshd_config配置文件的常用选项设置

[root@localhost /]# vim /etc/ssh/sshd_config 
Port 22                       【监听端口为22】
ListenAddress 0.0.0.0         【监听地址位任意网段,也可以指定OpenSSH服务器的具体IP】
LoginGraceTime 2m             【登录验证时间为2分钟】
PermitRootLogin no            【禁止root用户登录】
MaxAuthTries 6                【最大重试次数为6次】
PermitEmptyPasswords no       【禁止空密码用户登录】
UseDNS no                     【禁用DNS反向解析,从而提高服务器的响应速度】
....
Allowusers qz qz1 qz2 qz3@192.168.131.12    
【类似白名单。只允许qz,qz1,qz2,qz3用户登录,且其中qz3用户只能够从IP地址位192.168.131.12的主机远程登录】
DenyUsers qz                 【类似黑名单,禁止qz用户登录,用法同Allowusers,但不能与其同时使用】

[root@localhost /]# useradd qz
[root@localhost /]# passwd qz
[root@localhost /]# useradd qz1
[root@localhost /]# passwd qz1
[root@localhost /]# useradd qz2
[root@localhost /]# passwd qz2
[root@localhost /]# useradd qz3
[root@localhost /]# passwd qz3
[root@localhost /]# systemctl restart sshd

使用SSH客户端程序进行黑白名单登录测试

[root@localhost ~]# ssh -p 112 qz3@192.168.131.10-p:指定非默认的端口号,默认使用22端口】
[root@localhost ~]# ssh qz2@192.168.131.10
The authenticity of host '192.168.131.10 (192.168.131.10)' can't be established.
ECDSA key fingerprint is SHA256:26WehnS6rFjzdB17HMIEdTX1m52kBcloBqAQbwfSw4I.
ECDSA key fingerprint is MD5:8e:cc:61:dc:bf:1e:46:35:9f:45:	25:ca:c6:3e:9d:5e.
Are you sure you want to continue connecting (yes/no)? yes
【当用户第一次登陆SSH服务器时,必须接受服务器发来的ECDSA秘钥(根据提示输入"yes")后才能继续验证。接收的秘钥信息将保存
到~/ssh/know_host 文件中。密码验证成功以后,即可登陆目标服务器的命令行环境中】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用SSH客户端程序

sshd服务支持两种验证方式

  • 1.密码验证
    对服务器中本地系统用户的登录名称、密码进行验证。简便,但可能会被暴力破解
  • 2.秘钥对验证
    要求提供相匹配的秘钥信息才能通过验证。通常是先在客户端中创建一堆秘钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。当远程登录时,系统将使用公钥或私钥进行加密或解密的关联验证。能够增强安全性,且可以进行免交互登录
  • 当密码验证、秘钥对验证都启用时,服务器将优先使用秘钥对验证。可根据实际情况设置验证方式
[root@localhost /]# vim /etc/ssh/sshd_config 
PasswordAuthentication yes                       【启用密码验证】
PubkeyAuthentication yes                         【启用秘钥对验证】
AuthorizedKeysFile      .ssh/authorized_keys     【指定公钥库文件路径所】

scp远程复制及下载

[root@localhost boot]# scp initramfs-0-rescue-772f03018c3c43a59a9f24c6ae1af6fa.img root@192.168.131.11 /opt/222
【将远程主机中的init....6fa.img文件复制到本机】
[root@localhost /]# cd /opt/222
[root@localhost 222]# ls
initramfs-0-rescue-772f03018c3c43a59a9f24c6ae1af6fa.img  root@192.168.131.11
[root@localhost /]# scp -r /opt/222/ root@172.168.131.10:opt/112 
【将本机的init....6fa.img文件复制到远程主机】
[root@localhost /]# cd opt/
[root@localhost opt]# ls
112  222  rh
[root@localhost opt]# cd 222
[root@localhost 222]# ls
initramfs-0-rescue-772f03018c3c43a59a9f24c6ae1af6fa.img  root@192.168.131.11

sftp安全FTP

  • 由于使用了加密/解密技术,所以传输效率比普通的FTP要低,但是安全性高。操作语法与ftp几乎一样
[root@localhost /]# sftp root@192.168.131.11
root@192.168.131.11's password: 
Connected to 192.168.131.11.
sftp> ls
sftp> get 文件名    【下载文件到ftp目录】
sftp> put 文件名    【上传文件到ftp目录】
sftp> quit         【退出】

配置秘钥对验证

[root@localhost /]# ssh-agent bash
[root@localhost /]# ssh-add

1.在客户端创建秘钥对

  • 通过ssh-keygen工具为当前用户创建秘钥对文件。可用的加密算法有“RSA、ECDSA、DSA”等(ssh-keygen命令的“-t”选项用于指定算法类型)
[root@localhost /]# useradd admin                        【在客户机创建admin账号】
[root@localhost /]# echo "qweqwe" | passwd --stdin admin
[root@localhost /]# su - admin                           【切换到admin家目录】
[admin@localhost ~]$ 
[admin@localhost .ssh]$ ssh-keygen -t ecdsa              【-t指定ecdsa算法类】
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_ecdsa): 
【指定私钥位置,直接回车使用默认位置即可】   
Enter passphrase (empty for no passphrase):             【设置私钥的密码】 
Enter same passphrase again:                            【再次确认私钥的密码】
Your identification has been saved in /home/admin/.ssh/id_ecdsa.
Your public key has been saved in /home/admin/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:vDgvzIuyxFc5SzDrNhGGnlW9O+EstNmMH4gl6X1nlNg admin@localhost.localdomain
The key's randomart image is:
+---[ECDSA 256]---+
|      ..         |
|   . .  .        |
|  . *.   + .     |
| . +o=oo+ E      |
|  o.o*=XS+       |
| . .o+B+X.o      |
|  o =o++.=       |
| ..o o+o.        |
|  .o. .o.        |
+----[SHA256]-----+
【经过算法加密后的私钥密码】
[admin@localhost ~]$ ls -l .ssh/id_ecdsa*                   
-rw-------. 1 admin admin 314 117 19:34 .ssh/id_ecdsa     【私钥文件,默认权限为600-rw-r--r--. 1 admin admin 189 117 19:34 .ssh/id_ecdsa.pub 【公钥文件,用来提供给SSH服务】

2.将公钥文件上传到服务器

[admin@localhost ~]$ scp ~/.ssh/id_ecdsa.pub root@192.168.131.10:/opt/
或者
[admin@localhost ~]$ cd ~/.ssh/
[admin@localhost .ssh]$ ssh-copy-id -i id_ecdsa.pub qz@192.168.131.10
【此方法可以直接将公钥文本导入到服务器的/qz/home/ssh/中】

3.在服务器中导入公钥文本

[root@localhost /]# mkdir /home/qz.ssh/     
[root@localhost /]# cat /opt/id_ecdsa.pub >>/home/qz/.ssh/authorized_keys 
[root@localhost /]# cat /home/qz/.ssh/authorized_keys   
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFPS/mjLYYwFn9yy3C9pZ80+yqLdo7pIG1cJqE29Z3qXvwvfAn6X96rR3q8cp+QNh6B+TBYoqP8fY+VCOtvlBA8= admin@localhost.localdomain
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFPS/mjLYYwFn9yy3C9pZ80+yqLdo7pIG1cJqE29Z3qXvwvfAn6X96rR3q8cp+QNh6B+TBYoqP8fY+VCOtvlBA8= admin@localhost.localdomain

4.在客户端使用秘钥对验证


[root@localhost /]# ssh qz@192.168.131.10
qz@192.168.131.10's password:               【输入私钥的密码】
[qz@localhost ~]$ ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.131.10  netmask 255.255.255.0  broadcast 192.168.131.255

【这里192.168.131.11为客户机,192.168.131.10为服务端】

5.在客户机设置ssh代理功能,实现免交互登录

[admin@localhost ~]$ ssh-agent bash
[admin@localhost ~]$ ssh-add
Enter passphrase for /home/admin/.ssh/id_ecdsa:    【输入秘钥的密码】 
[admin@localhost ~]$ ssh qz@192.168.131.10
[qz@localhost ~]$ ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.131.10  netmask 255.255.255.0  broadcast 192.168.131.255

TCP Wrappers 访问控制

TCP Wrappers 访问控制概述

  • TCP Wrappers是将TCP服务程序“包裹”起来,代为监听TCP服务程序的端口,并增加了一个安全监测过程,外来的连接请求必须先通过这层安全监测,获得许可后才能访问真正的服务程序。
  • 大多数Linux发行版的TCP Wrappers 是默认提供的功能
[root@localhost /]# rpm -q tcp_wrappers
tcp_wrappers-7.6-77.el7.x86_64

TCP Wrappers保护原理简图
在这里插入图片描述

TCP Wrappers 保护机制的实现方式(共两种)

  • 1.直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd程序
  • 2.由其他网络服务程序调用libwrap.so.*链接库,不需要运行tcpd程序。此方式的应用更加广泛,也更有效率
  • 使用ldd命令可以查看程序的libwrap.so.*链接库
[root@localhost /]# ldd $(which ssh vsftpd)
/usr/bin/which: no vsftpd in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
	linux-vdso.so.1 =>  (0x00007ffe28f25000)
	libfipscheck.so.1 => /lib64/libfipscheck.so.1 (0x00007fb60559a000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fb605373000)
	libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007fb604f11000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fb604d0d000)
    ......
    ......
    ......

TCP Wrappers的访问策略

  • TCP Wrappers机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。

  • 格式
    <服务程序列表>:<客户端地址列表>

[root@localhost /]# vim /etc/hosts.allow       【TCP Wrappers允许访问的策略文件】
sshd,vsftpd:192.168.131.11,192.168.131.12
【允许IP地址11122个客户端使用sshd和vsftpd服务。多个服务程序间用“,”分隔】
[root@localhost /]# vim /etc/hosts.deny        【TCP Wrappers拒绝访问的策略文件】
sshd,vsftpd:ALL
【拒绝所有IP地址的客户端使用sshd和vsftpd,但除去允许策略里的2个IP地址。ALL代表任何客户端地址,LOCAL代表本机地址
多个地址用“,”分隔,且允许使用通配符“*”(代表任意长度字符)和“?”(仅代表一个字符)。
网段地址:192.168.131.或者192.168.131.0/255.255.255.0。
区域地址:如“.qz.com”匹配bdqn.com域中的所有主机】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/TaKe___Easy/article/details/114253417