在管理CentOS服务器时,SSH(Secure Shell)是进行远程管理的核心工具,其默认的22端口也使其成为自动化攻击脚本的主要目标,这些脚本会持续尝试猜测用户名和密码,即所谓的“暴力破解攻击”,为了保护服务器的安全,采取有效的防护措施至关重要,本文将详细介绍几种在CentOS系统上防止SSH暴力破解攻击的策略,从基础配置到高级防御,构建一个多层次的安全体系。
基础安全加固
在部署任何自动化防御工具之前,首先应确保SSH服务的基础配置已经足够安全,这些简单的调整可以立即降低被攻击的风险。
使用强密码或SSH密钥对
这是最基本也是最重要的一步,弱密码是暴力破解攻击能够成功的主要原因,应确保所有用户账户,尤其是具有sudo
权限的账户,都使用包含大小写字母、数字和特殊符号的复杂密码。
更优的选择是彻底禁用密码认证,转而使用SSH密钥对进行认证,SSH密钥对由一个私钥和一个公钥组成,其加密强度远超任何可记忆的密码,几乎不可能被暴力破解。
禁用root用户远程登录
攻击者通常会首先尝试使用root
用户名进行登录,禁止root
用户通过SSH直接登录,可以迫使攻击者必须同时猜测一个有效的用户名和对应的密码,大大增加了攻击的难度。
编辑SSH配置文件:
sudo vi /etc/ssh/sshd_config
找到以下行,并将其修改为:
PermitRootLogin no
保存文件后,重启SSH服务使配置生效:
sudo systemctl restart sshd
更改默认SSH端口
绝大多数自动化扫描工具都默认扫描22端口,将SSH服务更改为一个非标准高位端口(2222, 34567等),可以有效规避这些无差别的扫描攻击。
在/etc/ssh/sshd_config
文件中,找到并修改Port
配置:
#Port 22
Port 2222
同样,修改后需要重启SSH服务,注意,更改端口后,登录时需要使用-p
参数指定新端口,ssh user@your_server_ip -p 2222
。
主动防御:使用Fail2ban
尽管基础加固很重要,但它们是被动的防御措施,Fail2ban是一款非常流行的入侵防御软件,它能够主动监控服务日志,并根据预设规则自动封禁那些表现出恶意行为的IP地址。
工作原理:Fail2ban会持续扫描SSH的认证日志(/var/log/secure
),当它在指定时间内发现来自同一个IP地址的多次失败登录尝试时,会自动调用防火墙(如firewalld
或iptables
)来封禁该IP地址一段时间。
安装与配置Fail2ban
在CentOS上,Fail2ban通常包含在EPEL(Extra Packages for Enterprise Linux)仓库中。
安装EPEL仓库(如果尚未安装)
sudo yum install epel-release
安装Fail2ban
sudo yum install fail2ban
配置Fail2ban
Fail2ban的配置文件位于/etc/fail2ban/
,为了避免在软件更新时配置被覆盖,最佳实践是创建一个名为jail.local
的本地配置文件,而不是直接修改jail.conf
。sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo vi /etc/fail2ban/jail.local
在
jail.local
文件中,找到[sshd]
部分,并确保它已启用,可以根据需要调整全局默认参数或SSH专有参数。以下是一个示例配置片段:
[DEFAULT] # 封禁时长,单位:秒 (-1表示永久封禁) bantime = 3600 # 在多长时间内发现失败尝试,单位:秒 findtime = 600 # 最大失败尝试次数 maxretry = 3 # 忽略的IP地址,例如你的本地网络或固定办公IP ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 [sshd] enabled = true port = ssh,2222 # 如果你更改了SSH端口,请在这里一并指定 logpath = %(sshd_log)s
为了更清晰地理解这些参数,可以参考下表:
参数 | 默认值 | 说明 |
---|---|---|
bantime | 600 | IP地址被封禁的时长(秒)。-1代表永久。 |
findtime | 600 | 检测窗口期(秒),在此时间内的失败尝试会被计数。 |
maxretry | 5 | 在findtime 内允许的最大失败尝试次数。 |
ignoreip | 0.0.1/8 | 白名单IP列表,这些IP不会被Fail2ban封禁。 |
- 启动并启用Fail2ban服务
sudo systemctl start fail2ban sudo systemctl enable fail2ban
补充防御策略
除了上述主要方法,还可以结合其他策略进一步增强安全性。
- 利用TCP Wrappers:通过配置
/etc/hosts.allow
和/etc/hosts.deny
文件,可以限制特定IP地址或网段访问SSH服务,这是一种简单但有效的访问控制列表(ACL)机制。 - 定期检查日志:定期使用
cat /var/log/secure | grep "Failed password"
等命令检查SSH日志,可以了解攻击的频率和来源,以便及时调整安全策略。
通过将基础加固、主动防御和补充策略相结合,可以为CentOS服务器的SSH服务构建一个坚固的防护屏障,有效抵御暴力破解攻击,保障服务器的稳定与安全。
相关问答FAQs
问题1:如果我不小心被Fail2ban封禁了IP,该怎么办?
解答:这种情况时有发生,尤其是当你自己输错密码次数过多时,解决方法如下:
- 通过服务器的控制台(VPS提供商提供的Web Console或物理机直接连接)登录服务器。
- 使用以下命令查看被封禁的IP列表:
sudo fail2ban-client status sshd
- 找到被封禁的IP地址后,使用以下命令将其解封:
sudo fail2ban-client set sshd unbanip <你的IP地址>
sudo fail2ban-client set sshd unbanip 123.45.67.89
。 - 为了避免再次被封,可以将你的IP地址添加到
jail.local
文件的ignoreip
列表中,然后重启Fail2ban服务。
问题2:更改SSH端口和使用Fail2ban,哪个更好?
解答:这两者并非“二选一”的关系,而是相辅相成的最佳实践,它们从不同层面提供保护:
- 更改SSH端口:这是一种“规避”策略,它能让你躲开大量针对22端口的无差别、自动化扫描,显著降低日志的噪音和服务器被试探的频率,它的优点是简单高效,缺点是无法阻止针对性的端口扫描。
- 使用Fail2ban:这是一种“检测与响应”策略,它不关心你使用哪个端口,而是监视登录行为,一旦检测到暴力破解模式,它会主动采取行动(封禁IP),是一种动态的、智能的防御。
将两者结合使用,效果最佳:更改端口可以过滤掉绝大多数的“噪音”攻击,而Fail2ban则作为最后一道防线,捕获那些已经发现你新端口的顽固攻击者,这种“深度防御”的理念能最大化地提升安全性。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复