SSH远程管理和访问控制

时间:2022-10-25 17:03:58

SSH远程管理和访问控制

????博客主页: ​​微笑的段嘉许博客主页​

????欢迎关注????点赞????收藏⭐留言????

????本文由微笑的段嘉许原创!

????51CTO首发时间:????2022年10月日25????

✉️坚持和努力一定能换来诗与远方!

????作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

本文介绍

在此前的文章中曾陆续介绍了网站、FTP等各种网络服务,实际上给大多数企业服务器是通过远程登录的方式来进行管理的。当需要从一个工作站管理数以百计的服务器主机时,远程维护的方式将更占优势。本文将介绍如何针对Linux环境使用安全的方式远程管理,以及通过TCP Wreappers机制为应用提供访问控制。

????导航小助手????


????理论讲解:

SSH远程管理

SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH协议对通信双方数据传输进行了加密处理,其中包括用户登录时输入的用户口令。与早期的Telent(远程登录)、RSH(Remote Shell,远程执行命令)、RCP(Remote Copy,远程文件复制)等应用相比、SSH协议提供了更好大的安全性。

OpenSSH服务器

在CentOS 7.3系统中,OpenSSH服务器openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行"systemctl start sshd"命令即可启动sshd服务,包括root在内的大部分用户(只需要拥有合法的登录Shell)都可以远程登录系统。

sshd服务的配置文件默认位于/etc/ssh/ssd_config目录下,正确调整相关配置项,可以进一步提高SShd远程的安全性。

服务器监听选项

sshd服务使用的默认端口号为22,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提高在网络中的隐蔽性。除此之外,SSH协议的版本选用V2比V1的安全性要更好,禁用DNS反向解析可以提高服务器的响应速度。

[root@localhost ~]# vim /etc/ssh/sshd_config
port 22 //监听端口为22
ListenAddress 192.168.10.22 //监听地址为192.168.10.22
Protocol 2 使用SSH V2版本
……
UseDNS no //禁用DNS反向解析
……
[root@localhost ~]# systemctl start sshd

用户登录控制

sshd服务默认允许root用户登录,但在Internet中使用时是非常不安全的。普遍的做法如下:

先以普通用户远程登入,进入安全Shell环境后,根据实际需要使用su命令切换为root用户。

关于sshd服务的用户登录控制,通常应禁止root用户或密码为空的用户登录。另外,可以限制登录验证的时间(默认为2分钟)及最大重试次数,若超过限制后仍未能登录则断开连接。

登录验证方式

对于服务器的远程管理,除了用户账号的安全控制以外,登录验证的方式也非常重要。sshd服务支持两种验证方式——密码验证、密钥对验证,可以设置只使用其中一种方式,也可以两种方式都启用。

  • 密码验证:对服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破-解)攻-击时防御能力比较弱。
  • 密钥对验证:要求提供相匹配的密钥才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用时公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互式登录,在Shell中被广泛使用。

当密码验证、密钥对验证都启用时,服务器优先使用密钥对验证。对于安全性要求较高服务器,建议将密码验证方式禁用,只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可以启用。

[root@localhost ~]# vim/etc/ssh/sshd_config
PasswordAuthentication yes //启用密码验证
PubkeyAuthentication yes //启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys //指定公钥库文件
……
[root@localhost ~]# systemctl restart sshd

其中,公钥库文件用来保存多个客户端上传的公钥文本,以便与客户端本地的私钥文件进行匹配。关于密钥验证方式的使用,还涉及密钥对文件的创建、部署等操作

TCP Wrappers访问控制

在Linux系统中,许多网络服务针对客户端提供了访问控股之机制,如Samba、BIND、HTTPD、OpnSSH等。本文将介绍另一种防护机制——TCP Wrappers(TCP 封套),以作为应用服务与网络之间的一道特殊防线,提供额外的安全保障。

TCP Wrappers概述

TCP Wrappers将TCP服务程序" 包裹 "起来,代为监听TCP服务程序的端口,增加了uige安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序,如下图所示。TCP Wrappers还可以记录所有企图访问被保护服务的行为,为管理员提供丰富的安全分析资料。

SSH远程管理和访问控制

对于大对数Linux发行版,TCP Wrappers是默认提供的功能。CentOS 7.2中是使用的软件包是tcp_wrappers-7.6-77.e17 .x86_64.rpm,​​该软件包提供了执行程序tcpd和共享链接库文件libwrap.so​​​.*,对应TCP Wrapper保护机制的两种实现方式——直接使用tcpd程序对其他服务器进行保护,需要运行tcpd;​​由其他网络服务程序调用libwrap.so​​.\*链接库,不需要运行tcpd程序。

通常,链接库方式的应用要更加广泛,也更有效率。例如,vsftpd、sshd及超级服务器xinetd等,都调用了libwrap共享库(使用ldd命令可以查看程序的共享库)。

[root@localhost ~]#ldd /usr/sbin/sshd | grep "libwrap"
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fb178fce000)

????友情提示:

xinetd是一个特殊的服务管理程序,通常被称为超级服务器。xinetd通过在/etc/xinetd.d目录下为每个被保护的程序建立一个配置文件,调用TCP Wrappers机制来提供额外的访问控制保护。

TCP Wrappers的访问策略

TCP Wrappers机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。对应的两个策略文件为/etc/hosts.allow和/etc/hosts.deny,分别用来设置允许和拒绝的策略。

策略的配置格式

两个策略文件的作用相反,但配置记录的格式相同,如下所示。

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

服务程序列表、客户端地址列表之间以冒号分隔,在每个列表内的多个项之间以逗号分隔。

  1. 服务程序列表
    服务程序列表可分为以下几类。
  • ALL:代表所有的服务
  • 单个服务程序:如"vsftpd"
  • 多个服务程序组成的列表:如"vsftpd,sshd"。
  1. 客户端地址列表
    客户端地址列表可分为以下几类
  • ALL:代表任何客户端地址
  • LOCAL:代表本机地址
  • 单个IP地址:如"192.168.4.4"
  • 网络段地址:如"192.168.4.0/255/255/255/0"
  • 以" . "开始的域名:如" .bdqn.com "匹配bdqn.com域中的所有主机。
  • 以" . "结束的网络地址:如" 192.168.4. "匹配整个192.168.4.0/24网段、
  • 嵌入通配符" * " " ? ":前者代表任意长度字符,后者仅代表一个字符,如" 10.0.8.2* "匹配以10.0.8.2开头的所有IP地址。不可与以" . "开始或结束的模式混用。
  • 多个客户端弟子组成的列表:如" 192.168.1. ,172.16.16. ,.bdqn.com"。

访问控制的基本原则

关于TCP Wrappers机制的访问策略,应用时遵循以下顺序和原则:首先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问;否则继续检查/etc/hosts.deny文件如果找到相匹配的策略,则拒绝访问;如果检查上述两个文件都找不到相匹配的策略,则允许访问。

TCP Wrappers配置实例

实际使用TCP Wrappers机制时,较宽松的策略可以是"允许所有,拒绝个别",较严格的策略是"允许个别,拒绝所有"。前者只需在hosts.deny文件中添加相应的拒绝策略就可以了;后者则除了在hosts.allow中添加允许策略之外,还需要在hosts.deny文件中设置"ALL:ALL"的拒绝策略。

例如,若只希望从IP地址为61.63.67的主机或者位于192.168.2.0/24网段的主机访问sshd服务,其他地址被拒绝,可以执行以下操作。

[root@localhost ~]# vi /etc/hosts.allow
sshd:61.63.65.67,192.168.2.*
[root@localhost ~]# vi /etc/hosts.deny
sshd:ALL

????实验配置与实现:

拓扑图

SSH远程管理和访问控制

推荐步骤

  • 安装 ssh 服务器端和客户端设置服务开机自动启动,配置身份验证的 ssh,保证 ssh 服务器的安全性禁止为空密码访问,将 ssh 服务器端口修改为 2222,在 ssh 服务器端创建 bob 和 tom 两个用户允许客户端 192.168.100.20 登录 bob 和 root 账户,禁止 tom用户通过 192.168.100.20 登录
  • 配置免交互式身份验证 ssh,允许 Centos03 使用 root 用户和 alice 用户免交互式访问ssh 服务器端,配置访问控制阻止主机 192.168.100.30 访问 ssh 服务器

实验步骤:

一、安装 ssh 服务器端配置身份验证 ssh 限制用户访问

1、挂载系统盘安装服务

1) 挂载系统盘

SSH远程管理和访问控制

2)安装服务器端和客户端

SSH远程管理和访问控制

3)设置服务开机自动启动

SSH远程管理和访问控制

2、创建验证账户配置密码

1)创建验证账户 bob、tom

SSH远程管理和访问控制

2)设置密码

SSH远程管理和访问控制

3、配置 SSH 服务器控制用户访问

1)修改 ssh 主配置文件

SSH远程管理和访问控制

SSH远程管理和访问控制

SSH远程管理和访问控制

2)重启启动服务监听端口

SSH远程管理和访问控制

4、验证配置账户密码 ssh 服务器端

1)允许 bob 通过 192.168.100.20 登录

SSH远程管理和访问控制

2)禁止 tom 通过 192.168.100.20 登录

SSH远程管理和访问控制

3)允许 root 通过 192.168.100.20 登录

SSH远程管理和访问控制

二、配置免交互式身份验证 ssh,允许 Centos03 使用 root 用户和 alice 用户免交互式访问 ssh 服务器端,配置访问控制拒绝 192.168.100.30 访问 ssh 服务

1、修改 ssh 服务器支持免交互式验证

1)修改主配置文件

SSH远程管理和访问控制

2)重新启动服务

SSH远程管理和访问控制

2、配置客户端 root 用户免交互式验证

1)生成密钥对

SSH远程管理和访问控制

2)上传公钥到远程访问服务器

SSH远程管理和访问控制

3)验证使用 root 登录

SSH远程管理和访问控制

3、配置使用 alice 用户身份验证免交互式验证

1)创建 alice 用户设置密码

SSH远程管理和访问控制

2)切换到 alice 用户生成密钥对

SSH远程管理和访问控制

3)上传公钥

SSH远程管理和访问控制

4)alice 登录远程服务器

SSH远程管理和访问控制

4、配置访问控制限制 192.168.100.30 主机访问 ssh 服务

1)配置访问控制

SSH远程管理和访问控制

2) 验证远程管理无法访问

SSH远程管理和访问控制


????作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

SSH远程管理和访问控制