SSH远程管理和访问控制

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
访问控制,不限时长
简介: 在此前的文章中曾陆续介绍了网站、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还可以记录所有企图访问被保护服务的行为,为管理员提供丰富的安全分析资料。


24551af7531d50066e86123ce5ae66b.png


对于大对数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,分别用来设置允许和拒绝的策略。


策略的配置格式

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

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


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

服务程序列表

服务程序列表可分为以下几类。

ALL:代表所有的服务

单个服务程序:如"vsftpd"

多个服务程序组成的列表:如"vsftpd,sshd"。

客户端地址列表

客户端地址列表可分为以下几类

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


📖实验配置与实现:


拓扑图:


0b4789ddde62c8e39354ea8375f4841.png


推荐步骤:


安装 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) 挂载系统盘


9f7a421100b829d2a1d97bb9ea36840.png


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


11c767b35dfeecd4aa17321e5ffde85.png


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


01774fb7de0e7346695287c19a39020.png


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


1)创建验证账户 bob、tom


180dcd4d839828ac177a44204ff2459.png


2)设置密码

b89df9555bcc2e09b88257fa5ee1724.png


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


1)修改 ssh 主配置文件

7b2072634b97531d15f34cd2e7c5e03.png

b1ad9b87ac1f6e288762d2bc6e2b174.png

486da70fed37fef7d2bca2e2c4b1abd.png


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

ce6f1118ecc2ac93a383dc13fda444b.png


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


1)允许 bob 通过 192.168.100.20 登录

cd62d694130ccd79e4256f6116fbf22.png


2)禁止 tom 通过 192.168.100.20 登录

954e7faa97c3b85edc17a2cfcd60611.png


3)允许 root 通过 192.168.100.20 登录


a27443f6cf44e903320b7f86b7b00f9.png



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


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


1)修改主配置文件

1542c6204c688554b2e7787feb4c59e.png


2)重新启动服务


cce863dd63877f41ceeee2f5beb76fc.png


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


1)生成密钥对


8ed270e6f21c85c1bd39a66ac0aa9fa.png


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


a5c1824259734c7a84327b844b0b995.png


3)验证使用 root 登录


b3ec1e00cfb921ee69687839cf24812.png


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


13c29d9ab200428a9dc4726ccc9fafc.png


3)上传公钥

73d2b06cc346ebdd5d5c619aa3c9c2c.png


4)alice 登录远程服务器


222c73a659db541f58d0095260144e9.png


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


1)配置访问控制

e49241ec1f0897ef7cece2351a46e09.png



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


b7052edabc1a4ae1db6c2ee7010a759.png

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
6月前
|
监控 安全 Linux
【专栏】Linux SSH 的安全对于远程管理至关重要,这几个小妙招安排上!
【4月更文挑战第28天】在数字化时代,Linux SSH 的安全对于远程管理至关重要。增强 SSH 安全包括:使用强密码,调整 SSH 配置文件,尤其是端口号和认证方式;采用密钥认证代替密码;限制登录用户,禁止密码登录;使用防火墙限制访问;定期更新系统和软件。此外,通过日志监控、入侵检测系统及及时应对攻击来提升安全监控。保持对安全知识的学习和更新,结合最佳实践,是保障 SSH 安全的关键。记得安全是个持续过程,时刻保持警惕!
147 1
|
3月前
|
运维 安全 网络安全
"革新远程访问体验:Docker化部署webssh2,一键启动Web SSH客户端,让远程管理如虎添翼!"
【8月更文挑战第2天】Docker作为软件开发与运维的关键工具,以其轻量级、可移植及强隔离特性简化了应用部署。结合webssh2这一开源Web SSH客户端,可通过浏览器安全便捷地访问SSH服务器,无需额外软件。首先确保已安装Docker,接着拉取webssh2镜像并运行容器,映射端口以便外部访问。配置好SSH服务器后,通过浏览器访问指定URL即可开始SSH会话。此方案不仅提升了用户体验,还加强了访问控制与系统安全。
319 7
|
6月前
|
网络安全
openstack 使用ssh远程管理云主机
在阿里云平台上,为云主机分配和配置浮动IP涉及以下步骤:首先,在“网络”部分分配一个公共IP,并将其关联到已创建的云主机。接着,在“浮动IP”页面确认绑定成功。然后,进入安全组,为默认安全组添加允许ping和SSH的新规则。通过控制台ping浮动IP以测试连通性。最后,从宿主机修改云主机的hostname并使用SSH登录。至此,SSH登录设置完成。
173 2
openstack 使用ssh远程管理云主机
|
6月前
|
网络安全 数据安全/隐私保护
银河麒麟v10系统SSH远程管理及切换root用户的操作方法
银河麒麟v10系统SSH远程管理及切换root用户的操作方法
2610 0
|
6月前
|
监控 安全 网络安全
局域网管理监控的远程访问控制:利用SSH和Python实现安全管理
在当今数字化时代,局域网管理监控对于确保网络安全至关重要。远程访问控制是一项关键任务,通过利用SSH(Secure Shell)和Python编程语言,我们可以实现更加安全的管理方法。本文将介绍如何使用这两者结合,为局域网管理提供可靠的远程访问控制。
291 1
|
Ubuntu 安全 网络协议
如何在 Ubuntu 上启用 SSH,安全地远程管理和传输数据
如何在 Ubuntu 上启用 SSH,安全地远程管理和传输数据
1717 0
如何在 Ubuntu 上启用 SSH,安全地远程管理和传输数据
|
网络安全 数据安全/隐私保护
访问控制列表与SSH结合使用,为网络设备保驾护航,提高安全性
访问控制列表与SSH结合使用,为网络设备保驾护航,提高安全性
149 0
访问控制列表与SSH结合使用,为网络设备保驾护航,提高安全性
|
存储 安全 网络协议
Linux网络——远程访问控制(SSH服务)
Linux网络——远程访问控制(SSH服务)
Linux网络——远程访问控制(SSH服务)
|
运维 网络协议 Shell
网工小白升级打怪篇(三)ssh实现远程管理
网工小白升级打怪篇(三)ssh实现远程管理
208 0
网工小白升级打怪篇(三)ssh实现远程管理
|
Linux 网络安全 数据安全/隐私保护
CentOS Stream 9通过配置sshd_config中AllowUsers实现SSH访问控制
CentOS Stream 9通过配置sshd_config中AllowUsers实现SSH访问控制
1511 0
CentOS Stream 9通过配置sshd_config中AllowUsers实现SSH访问控制