CentOS 7下Fail2Ban与Firewalld联动防御SSH暴力破解实战
1. 为什么需要Fail2Ban与Firewalld联动防御SSH暴力破解最近几年服务器安全问题越来越受到重视尤其是SSH暴力破解攻击已经成为最常见的服务器入侵手段之一。我管理的几台云服务器就经常在/var/log/secure日志里看到大量来自不同IP的登录尝试有些攻击者甚至会持续尝试数周之久。传统的防火墙规则虽然能起到一定防护作用但面对这种自动化、分布式的暴力破解就显得力不从心了。Fail2Ban正好能解决这个问题。它会实时监控系统日志当检测到多次失败的登录尝试时自动将攻击者的IP加入防火墙黑名单。而Firewalld作为CentOS 7默认的防火墙管理工具与Fail2Ban配合使用可以形成更强大的防御体系。这种组合最大的优势在于动态防御传统防火墙只能静态封禁IP而Fail2Ban能根据日志分析动态调整规则资源节省相比iptables直接封禁使用ipset能大幅降低防火墙规则数量灵活配置可以根据不同服务SSH、Web等设置独立的防护策略2. 环境准备与基础配置2.1 确保Firewalld正常运行在开始之前我们需要确认Firewalld已经正确安装并运行。执行以下命令检查状态systemctl status firewalld如果显示未运行可以通过以下命令启动并设置开机自启systemctl start firewalld systemctl enable firewalld2.2 开放SSH端口如果你的SSH服务使用的是默认22端口需要确保Firewalld已经放行firewall-cmd --permanent --add-servicessh firewall-cmd --reload如果修改过SSH端口强烈建议这样做比如改为2222则需要单独放行firewall-cmd --permanent --add-port2222/tcp firewall-cmd --reload3. 安装与配置Fail2Ban3.1 安装EPEL源和Fail2BanCentOS 7默认仓库中没有Fail2Ban需要先安装EPEL源yum install -y epel-release yum install -y fail2ban fail2ban-systemd这里我特意加上了fail2ban-systemd包它能提供更好的systemd集成支持。3.2 基础配置文件设置Fail2Ban的主配置文件是/etc/fail2ban/jail.conf但我们不应该直接修改它而是创建jail.local来覆盖默认设置cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local vim /etc/fail2ban/jail.local在[DEFAULT]部分我建议设置以下参数[DEFAULT] ignoreip 127.0.0.1/8 192.168.1.0/24 bantime 1d findtime 1h maxretry 5 banaction firewallcmd-ipset这些参数的意思是ignoreip白名单IP不会被封禁bantime封禁时长1d表示1天findtime检测时间窗口1小时内maxretry最大尝试次数banaction使用firewalld的ipset功能封禁3.3 配置SSH防护规则在jail.local文件中找到[sshd]部分修改为[sshd] enabled true port 2222 filter sshd logpath /var/log/secure maxretry 3注意port要与你实际的SSH端口一致。maxretry设置为3表示同一IP在1小时内findtime有3次失败登录就会被封禁1天bantime。4. 高级防护策略配置4.1 邮件通知功能当有IP被封禁时让系统自动发送邮件通知非常实用。首先安装mailxyum install -y mailx然后配置/etc/mail.rc文件添加SMTP信息以QQ邮箱为例set fromyour_emailqq.com set smtpsmtps://smtp.qq.com:465 set smtp-auth-useryour_emailqq.com set smtp-auth-passwordyour_auth_code set smtp-authlogin set ssl-verifyignore接着修改jail.local的[DEFAULT]部分action %(action_mw)s mta mail sender your_emailqq.com destemail admin_emailexample.com4.2 自定义封禁动作Fail2Ban默认的邮件通知内容比较简略我们可以自定义更详细的通知模板。创建/etc/fail2ban/action.d/mail-enhanced.conf[Definition] actionban printf 安全警报\n服务器: host\n服务: name\n攻击IP: ip\n封禁时间: bantime\n\n详细日志:\ngrep ip logpath | mail -s [Fail2Ban] name: 封禁 ip dest然后在jail.local中引用这个动作action %(action_mw)s5. 实战测试与效果验证5.1 模拟攻击测试为了验证配置是否生效可以从另一台服务器尝试故意输错SSH密码ssh rootyour_server -p 2222连续输错3次密码后检查封禁状态fail2ban-client status sshd应该能看到攻击者的IP出现在封禁列表中。同时检查/var/log/maillog应该能看到通知邮件已发送。5.2 查看Firewalld封禁规则Fail2Ban通过ipset管理封禁列表查看当前封禁的IPfirewall-cmd --direct --get-all-rules这会显示类似以下的输出ipv4 filter INPUT 0 -m set --match-set f2b-sshd src -j REJECT5.3 日志分析与监控Fail2Ban的详细日志位于/var/log/fail2ban.log可以使用以下命令实时监控tail -f /var/log/fail2ban.log同时建议定期检查/var/log/secure了解攻击模式和趋势。6. 性能优化与注意事项6.1 调整封禁策略根据服务器实际负载情况可能需要调整封禁参数对于高流量服务器可以适当提高maxretry对于特别敏感的服务可以缩短findtime长期攻击的IP可以设置更长的bantime6.2 多维度防护建议除了Fail2Ban外还应该考虑修改SSH默认端口禁用root直接登录使用密钥认证替代密码定期更新系统和软件包6.3 常见问题排查如果发现Fail2Ban没有正常工作可以检查日志路径是否正确Fail2Ban服务是否正常运行Firewalld是否允许Fail2Ban修改规则时间设置是否合理findtime bantime我在实际部署中发现合理配置的Fail2Ban可以拦截90%以上的自动化攻击大大减轻服务器安全压力。但也要注意不要设置过于严格的规则避免误封正常用户。建议初期设置较短的封禁时间观察效果后再逐步调整。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2430237.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!