CentOS服务器如何安全地限制远程SSH登录防止暴力破解?

在服务器运维领域,安全始终是重中之重,SSH(Secure Shell)作为Linux系统远程管理的标准协议,其安全性直接关系到整个服务器的安危,CentOS作为企业级应用最广泛的发行版之一,其SSH服务的默认配置虽然稳健,但在面对日益复杂的网络攻击时,仍需进行精细化的加固,限制SSH登录是降低攻击面、防止未授权访问的有效手段,本文将系统性地介绍在CentOS系统中限制SSH登录的多种实用方法,从基础配置到高级策略,旨在构建一个多层次、纵深化的SSH安全防护体系。

CentOS服务器如何安全地限制远程SSH登录防止暴力破解?

核心配置文件:sshd_config 的精细调控

SSH服务的所有核心行为都由其主配置文件 /etc/ssh/sshd_config 定义,通过修改此文件,我们可以实现最直接、最根本的登录限制,在修改任何配置后,都需要使用 systemctl restart sshdservice sshd restart 命令重启SSH服务以使更改生效。

禁止root用户直接登录

这是安全加固的第一步,也是最基本的一步,root用户拥有系统的最高权限,一旦其账户被暴力破解,攻击者将获得完全的控制权,禁止root直接登录,可以迫使攻击者必须先破解一个普通用户,再通过susudo提权,增加了攻击的难度和步骤。

修改 /etc/ssh/sshd_config 文件,找到以下行:

#PermitRootLogin yes

将其修改为:

PermitRootLogin no

保存并退出后,root用户将无法再通过SSH直接登录,管理员应使用一个普通账户登录,然后根据需要执行 su - 切换到root环境,或使用 sudo 执行特定命令。

使用 AllowUsers 限制特定用户

AllowUsers 指令提供了一个白名单机制,只有明确列出的用户才能通过SSH登录,这是一种非常精确的控制方式。

我们只允许 admindeveloper 这两个用户登录,可以在配置文件末尾添加:

AllowUsers admin developer

更进一步,我们还可以限制用户只能从特定的IP地址登录,这在多IP管理或需要固定办公地点访问的场景下非常有用,格式为 用户名@IP地址

AllowUsers admin@192.168.1.100 developer@10.0.0.*

此配置表示:

  • admin 用户只能从 168.1.100 这个IP地址登录。
  • developer 用户可以从 0.0.0/24 网段内的任何IP地址登录。

使用 AllowGroups 限制特定用户组

当需要管理的用户数量较多时,逐个添加 AllowUsers 会变得繁琐且容易出错,使用用户组进行管理是更优雅、更具扩展性的方案。

创建一个专门用于SSH登录的用户组,sshusers

sudo groupadd sshusers

将需要允许登录的用户添加到这个组中:

sudo usermod -aG sshusers user1
sudo usermod -aG sshusers user2

-aG 参数表示将用户追加到指定的附加组中,而不会影响其原有的组成员身份。

/etc/ssh/sshd_config 文件中配置 AllowGroups

AllowGroups sshusers

这样,只有 sshusers 组内的成员才能登录SSH,未来有新用户需要授权时,只需将其加入该组即可,无需修改SSH配置文件。

CentOS服务器如何安全地限制远程SSH登录防止暴力破解?

网络层面的访问控制:TCP Wrappers

TCP Wrappers 是一个基于主机的网络访问控制列表系统,它可以在应用层(如SSH)之前,对TCP/IP连接进行过滤,在CentOS 7及之前版本中,SSH服务默认支持TCP Wrappers,它通过两个配置文件来工作:/etc/hosts.allow/etc/hosts.deny

其规则遵循“先允许,后拒绝”的原则:系统会先检查 /etc/hosts.allow,如果匹配到允许规则,则放行;如果未匹配,则继续检查 /etc/hosts.deny,如果匹配到拒绝规则,则拒绝连接;如果两个文件中都没有匹配的规则,则默认允许连接。

为了实现“默认拒绝,仅允许特定IP”的严格策略,推荐如下配置:

/etc/hosts.allow 中,明确允许受信任的IP或网段:

sshd: 192.168.1.0/24, 10.0.0.50

这表示允许来自 168.1.0/24 网段和 0.0.50 这个IP的SSH连接。

/etc/hosts.deny 中,拒绝所有其他来源的SSH连接:

sshd: ALL

ALL 是一个通配符,代表所有主机,这样配置后,只有 hosts.allow 中列出的地址能够成功连接SSH服务。

动态防御:使用 fail2ban 自动封禁恶意IP

静态的IP白名单在应对动态变化的攻击源时显得力不从心。fail2ban 是一款入侵防御软件,它可以监控日志文件(如SSH的认证日志),并根据预设的规则自动封禁那些行为异常(如多次密码错误)的IP地址。

安装EPEL仓库,然后安装 fail2ban

sudo yum install epel-release
sudo yum install fail2ban

fail2ban 的配置文件位于 /etc/fail2ban/jail.conf,但建议不要直接修改此文件,因为它可能在软件更新时被覆盖,最佳实践是创建一个 jail.local 文件来覆盖默认设置。

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑 /etc/fail2ban/jail.local,找到 [sshd] 部分,确保其已启用并配置合适的参数:

[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s
maxretry = 3
findtime = 300
bantime = 3600
  • enabled = true: 启用对SSH的监控。
  • maxretry = 3: 在 findtime 时间段内,最多允许3次失败尝试。
  • findtime = 300: 时间窗口为300秒(5分钟)。
  • bantime = 3600: 封禁时长为3600秒(1小时)。

配置完成后,启动并设置 fail2ban 开机自启:

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

fail2ban 将在后台默默守护你的SSH服务,任何尝试暴力破解的IP都会被自动封禁。

终极安全:基于密钥的认证并禁用密码认证

密码认证虽然方便,但永远存在被暴力破解或猜测的风险,基于SSH密钥对的认证方式则要安全得多,它使用非对称加密技术,私钥保留在客户端,公钥放置在服务器上,只有持有匹配私钥的客户端才能完成认证。

  1. 在客户端生成密钥对(如果尚未生成):

    CentOS服务器如何安全地限制远程SSH登录防止暴力破解?

    ssh-keygen -t rsa -b 4096

    按提示操作,可以为私钥设置一个更强的密码短语。

  2. 将公钥复制到CentOS服务器

    ssh-copy-id user@your_server_ip

    此命令会自动将公钥追加到服务器上对应用户家目录下的 ~/.ssh/authorized_keys 文件中,并设置正确的权限。

  3. 在服务器上禁用密码认证
    在确认密钥登录正常工作后,编辑 /etc/ssh/sshd_config,找到并修改以下行:

    PasswordAuthentication no

    重启SSH服务后,所有通过密码的登录尝试都将被拒绝,只能使用密钥对进行认证,这几乎可以杜绝所有类型的暴力破解攻击。

方法对比与小编总结

为了更直观地理解各种方法的特点,下表对它们进行了小编总结:

方法 优点 缺点 适用场景
sshd_config (用户/组) 精确控制,配置简单直接 无法动态封禁,需手动维护列表 基础安全,固定用户和IP的管理
TCP Wrappers 基于IP的快速过滤,与SSH服务解耦 功能相对单一,部分新系统默认不启用 作为第一道网络防线,配合其他策略使用
fail2ban 动态智能防御,自动封禁恶意IP 需要额外安装和配置,依赖日志系统 应对暴力破解和扫描攻击,提升主动防御能力
密钥认证 安全性极高,几乎无法破解 配置相对复杂,私钥管理需要谨慎 对安全要求极高的生产环境,替代密码认证

在实际应用中,最佳实践是组合使用上述多种方法,构建一个纵深防御体系,可以采用“禁止root登录 + AllowGroups限制用户组 + fail2ban动态防御 + 密钥认证”的组合策略,从而在多个层面上极大地提升CentOS服务器的SSH安全性。


相关问答FAQs

Q1: 我在修改了SSH配置并重启服务后,无法登录了,把自己锁在了服务器外面,该怎么办?

A1: 这是一个在远程配置SSH时可能遇到的严重问题,不要慌张,解决方法取决于您是否有其他访问服务器的途径:

  1. 通过控制台访问:如果您的服务器是托管在云服务商(如阿里云、腾讯云、AWS)或物理机房,通常都会提供Web VNC或KVM控制台,通过这个控制台,您可以直接获得服务器的命令行访问权限,就像在本地操作一样,登录后,检查 /etc/ssh/sshd_config 文件,找出配置错误(AllowUsers 写错了用户名,或 PasswordAuthentication 被意外设为 no 但您又没有配置密钥),修正后重启SSH服务即可。
  2. 物理访问:如果这是一台您可以物理接触的机器,直接连接键盘和显示器,以root身份登录,然后进行上述修复操作。
    预防措施:在进行SSH配置更改时,最佳实践是永远保持一个现有的、已成功登录的SSH会话处于活动状态,在新的会话中测试配置,如果测试失败,您还可以用原来的会话进行修复,只有在确认新配置完全正常工作后,才关闭旧的会话。

Q2: AllowUsers 和 TCP Wrappers (hosts.allow) 都可以限制IP,它们有什么区别?我应该用哪个?

A2: 它们的主要区别在于工作的层面和控制的粒度不同,可以协同工作,并不冲突。

  • 工作层面:TCP Wrappers 工作在网络层和应用层之间,它在SSH进程接收到连接请求之前就进行IP过滤,而 AllowUsers 是SSH服务(应用层)内部的功能,它在TCP连接已经建立、SSH进程开始进行用户认证时才生效。
  • 控制粒度:TCP Wrappers 只能基于“服务名(如sshd)”和“客户端IP地址”进行控制,而 AllowUsers 的粒度更细,它可以精确到“哪个用户”从“哪个IP”登录,user1@1.1.1.1
  • 协同工作:当一个SSH连接请求到达时,系统首先会检查TCP Wrappers的规则,如果IP被 hosts.deny 拒绝,连接会直接被切断,SSH进程甚至都不会收到请求,如果IP通过了TCP Wrappers的检查,连接才会被转交给SSH进程,然后SSH进程会根据 sshd_config 中的 AllowUsersAllowGroups 等规则进行下一步的用户认证检查。

建议两者结合使用,使用TCP Wrappers作为第一道防线,快速拒绝来自已知恶意IP或非信任网段的连接,减轻SSH服务的压力,然后使用 sshd_config 中的 AllowUsersAllowGroups 进行更精细化的用户和权限控制。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-11 11:23
下一篇 2025-10-11 11:25

相关推荐

  • 掌握服务器购买流程,关键步骤有哪些?

    服务器购买流程通常包括需求分析、预算设定、供应商选择、配置确认、价格谈判、下单订购、付款、安装调试和售后服务。买家需评估自身需求,比较不同供应商,确保性价比最高,并考虑后期的维护与升级服务。

    2024-07-28
    009
  • 分布式缓存技术_分布式缓存(Redis)

    分布式缓存Redis是一种高性能的内存数据库,支持多种数据结构,如字符串、列表、集合等。它主要用于存储和访问频繁访问的数据,以提高应用程序的性能和响应速度。

    2024-07-04
    0017
  • 服务器拷贝系统_”0“拷贝

    服务器拷贝系统”0拷贝”是一种高效的数据备份方案,它能实现零数据丢失和快速恢复,保障业务连续性和数据安全。

    2024-07-17
    003
  • CentOS8如何安装Cockpit实现Web图形化管理?

    在现代化的服务器运维领域,效率与易用性是衡量管理工具优劣的关键标准,对于广受欢迎的企业级Linux发行版CentOS 8而言,Cockpit提供了一个强大而优雅的解决方案,它并非一个全新的管理理念,而是将Linux底层强大的命令行工具与直观的Web图形界面(GUI)完美融合的桥梁,旨在简化服务器的日常管理、监控……

    2025-10-05
    005

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

广告合作

QQ:14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信