图片来自:Wallhaven
728 字
2 分钟
Fail2ban 入门教程
什么是 Fail2ban?
Fail2ban 是一款开源的入侵防御工具,它可以监控服务器日志,自动识别暴力破解等恶意行为,并通过防火墙规则暂时封禁攻击者的 IP 地址。
简单来说,Fail2ban 就是服务器的”保安”,它会24小时监控日志,一旦发现有人恶意攻击,就会自动把他拉黑。
为什么需要 Fail2ban?
你可能会想:我的服务器有密码保护,还需要 Fail2ban 吗?
答案是
- 暴力破解攻击很常见:攻击者会用程序自动尝试成千上万的密码组合
- 密码再强也不安全:如果攻击者尝试的次数足够多,再强的密码也可能被破解
- 防患于未然:与其等到被攻击后再补救,不如提前做好防护
真实案例有一台服务器,一天内被尝试登录超过1000次!还好装了 Fail2ban,攻击者很快就被封禁了。
安装 Fail2ban
在 Debian/Ubuntu 上安装
# 更新软件包列表sudo apt update
# 安装 Fail2bansudo apt install fail2ban -y在 CentOS/RHEL 上安装
# 安装 EPEL 仓库sudo yum install epel-release -y
# 安装 Fail2bansudo yum install fail2ban -y启动并设置开机自启
# 启动 Fail2bansudo systemctl start fail2ban
# 设置开机自启sudo systemctl enable fail2ban
# 查看状态sudo systemctl status fail2ban基本配置
Fail2ban 的配置文件位于 /etc/fail2ban/ 目录下。
主配置文件
# 编辑主配置文件sudo vim /etc/fail2ban/jail.conf但不建议直接修改 jail.conf,而是创建一个 jail.local 文件来覆盖默认配置:
# 创建自定义配置文件sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# 编辑自定义配置sudo vim /etc/fail2ban/jail.local常用配置项说明
[DEFAULT]# 封禁时间(秒),默认 600 秒(10分钟)bantime = 600
# 检测时间窗口(秒),默认 600 秒(10分钟)findtime = 600
# 最大尝试次数,超过这个次数就封禁maxretry = 5
# 是否发送邮件通知sendmail-whois = root@localhost
# 忽略的 IP 地址(不会被封禁)ignoreip = 127.0.0.1/8 192.168.1.0/24启用 SSH 防护
SSH 是最常被攻击的服务,一定要启用防护:
[sshd]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 3bantime = 3600 # 封禁1小时常用命令
查看状态
# 查看整体状态sudo fail2ban-client status
# 查看特定服务的状态sudo fail2ban-client status sshd查看被封禁的 IP
# 查看被 SSH 服务封禁的 IPsudo fail2ban-client status sshd手动解封 IP
# 解封特定 IPsudo fail2ban-client set sshd unbanip 192.168.1.100手动封禁 IP
# 手动封禁特定 IPsudo fail2ban-client set sshd banip 192.168.1.100重新加载配置
# 修改配置后需要重新加载sudo fail2ban-client reload保护其他服务
Fail2ban 不仅可以保护 SSH,还可以保护其他服务。
保护 Nginx
[nginx-http-auth]enabled = truefilter = nginx-http-authlogpath = /var/log/nginx/error.logmaxretry = 3bantime = 3600保护 WordPress
[wordpress]enabled = truefilter = wordpresslogpath = /var/log/nginx/access.logmaxretry = 5bantime = 3600保护 FTP
[vsftpd]enabled = truefilter = vsftpdlogpath = /var/log/vsftpd.logmaxretry = 3bantime = 3600自定义过滤规则
如果默认的过滤规则不够用,可以创建自定义规则。
创建自定义过滤器
# 创建过滤器文件sudo vim /etc/fail2ban/filter.d/myapp.conf[Definition]failregex = ^.*Failed login from <HOST>.*$ignoreregex =使用自定义过滤器
在 jail.local 中添加:
[myapp]enabled = truefilter = myapplogpath = /var/log/myapp.logmaxretry = 3bantime = 3600常见问题解答
Q1:Fail2ban 不生效怎么办?
# 检查日志sudo tail -f /var/log/fail2ban.log
# 检查防火墙是否正常sudo iptables -L
# 检查配置是否正确sudo fail2ban-client -dQ2:不小心封禁了自己的 IP 怎么办?
# 立即解封sudo fail2ban-client set sshd unbanip 你的IP
# 将自己的 IP 添加到白名单sudo vim /etc/fail2ban/jail.local# 在 ignoreip 中添加你的 IPQ3:如何永久封禁某个 IP?
# 使用 iptables 永久封禁sudo iptables -A INPUT -s 192.168.1.100 -j DROP
# 保存规则sudo iptables-save > /etc/iptables/rules.v4Q4:如何设置更长的封禁时间?
# 修改 bantime 参数sudo vim /etc/fail2ban/jail.local# 设置 bantime = 86400 # 封禁一天安全建议
WARNING安全加固建议:
- 更改 SSH 默认端口(22)
- 禁用密码登录,改用密钥认证
- 限制允许登录的用户
- 定期检查 Fail2ban 状态
- 将重要 IP 添加到白名单
总结
Fail2ban 是一款简单实用的服务器安全工具,配置好后可以自动保护你的服务器免受暴力攻击。
安装步骤总结:
- ✅ 安装 Fail2ban
- ✅ 配置 jail.local
- ✅ 启用需要保护的服务
- ✅ 启动并设置开机自启
现在你的服务器就多了一层安全保护!
保护服务器安全,从配置 Fail2ban 开始!🔒
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Fail2ban 入门教程
https://wxh168.vip/posts/fail2ban-tutorial/ 部分信息可能已经过时
相关文章 智能推荐






粤公网安备44200102445710号