fail2ban能防护哪些服务?
Fail2Ban 是一款基于日志分析来阻止暴力攻击的工具,可针对多种服务进行配置。
以下是其常见可配置的服务及对应配置文件示例:
1. SSH 服务 这是 Fail2Ban 最常用的场景,用于防范暴力破解 SSH 登录。配置文件路径通常为:/etc/fail2ban/jail.d/ssh.conf ini [sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
2. HTTP 服务 可防范针对网站的暴力攻击,如 WordPress 登录尝试等。配置文件路径通常为:/etc/fail2ban/jail.d/apache.conf ini [apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
3. FTP 服务 保护 FTP 服务器免受暴力破解。配置文件路径通常为:/etc/fail2ban/jail.d/vsftpd.conf ini [vsftpd]
enabled = true
port = ftp,ftp-data,ftps,ftps-data
filter = vsftpd
logpath = /var/log/vsftpd.log
maxretry = 5
4. MySQL 服务 保护数据库免受暴力攻击。配置文件路径通常为:/etc/fail2ban/jail.d/mysql.conf ini [mysql]
enabled = true
port = 3306
filter = mysql-auth
logpath = /var/log/mysql/error.log
maxretry = 3
5. Postfix(邮件服务) 保护邮件服务器的 SMTP、POP3 等服务。配置文件路径通常为:/etc/fail2ban/jail.d/postfix.conf ini [postfix]
enabled = true
port = smtp,submission,smtps
filter = postfix
logpath = /var/log/mail.log
maxretry = 5
6. Nginx 服务 保护基于 Nginx 的网站。配置文件路径通常为:/etc/fail2ban/jail.d/nginx.conf ini [nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 6
7. Redis 服务 保护 Redis 数据库免受未授权访问。配置文件路径通常为:/etc/fail2ban/jail.d/redis.conf ini [redis-server]
enabled = true
port = 6379
filter = redis
logpath = /var/log/redis/redis-server.log
maxretry = 3
8. RDP(远程桌面)服务 保护 Windows 远程桌面或类似服务。配置文件路径通常为:/etc/fail2ban/jail.d/rdp.conf ini [rdp]
enabled = true
port = 3389
filter = rdp
logpath = /var/log/auth.log
maxretry = 3
9. ProFTPD 服务 保护 ProFTPD 服务器。配置文件路径通常为:/etc/fail2ban/jail.d/proftpd.conf ini [proftpd]
enabled = true
port = ftp,ftp-data,ftps,ftps-data
filter = proftpd
logpath = /var/log/proftpd/proftpd.log
maxretry = 5
10. Lighttpd 服务 保护 Lighttpd Web 服务器。配置文件路径通常为:/etc/fail2ban/jail.d/lighttpd.conf ini [lighttpd-auth]
enabled = true
port = http,https
filter = lighttpd-auth
logpath = /var/log/lighttpd/error.log
maxretry = 3
配置说明: • enabled:是否启用该服务的监控 • port:服务监听的端口 • filter:使用的过滤规则,对应/etc/fail2ban/filter.d/目录下的配置文件 • logpath:服务日志文件路径 • maxretry:允许的最大失败尝试次数 • bantime:封禁时长(秒)
自定义服务配置: 若要配置未列出的服务,需创建对应的 filter 文件并在 jail 配置中引用。例如,配置自定义服务my-service: 1. 创建过滤规则:/etc/fail2ban/filter.d/my-service.conf ini [Definition]
failregex = ^%(__prefix_line)sERROR: Invalid login from <HOST>$
ignoreregex =
2. 在 jail 中启用:/etc/fail2ban/jail.d/my-service.conf ini [my-service]
enabled = true
port = 12345
filter = my-service
logpath = /var/log/my-service.log
maxretry = 3
通过以上配置,Fail2Ban 可以监控并保护多种服务免受暴力攻击。
在 Fail2Ban 的配置中,maxretry是一个关键参数,它表示允许的最大失败尝试次数。具体含义如下: 核心作用 当某个 IP 地址在指定时间内(由findtime参数控制,默认 10 分钟)达到或超过maxretry设定的失败尝试次数,Fail2Ban 会将该 IP 地址列入黑名单(封禁)。 典型场景举例 以 SSH 服务配置为例: ini [sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600 # 封禁1小时
这里的maxretry = 3意味着: • 如果一个 IP 在findtime内尝试 SSH 登录失败 3 次 • Fail2Ban 会自动封禁该 IP 1 小时(bantime = 3600) 与其他参数的协同 1. findtime:定义统计失败尝试的时间窗口。例如: ini findtime = 600 # 10分钟内
此时,maxretry = 3表示10 分钟内失败 3 次即封禁 2. bantime:封禁时长,可使用负值表示永久封禁: ini bantime = -1 # 永久封禁
常见服务的默认值 • SSH:通常设为 3-5 次 • HTTP / 网站登录:可设为 5-10 次(根据安全需求调整) • 数据库服务:建议设为 3 次(如 MySQL) 配置建议 • 安全性与可用性平衡: ◦ 关键服务(如 SSH)建议设低(3-5 次) ◦ 公共服务(如 HTTP)可适当提高(5-10 次) • 结合日志分析: bash # 统计SSH失败尝试最多的IP
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
根据实际攻击情况调整maxretry值 • 临时提高阈值:若遇到合法用户频繁输错密码,可临时增大maxretry,但需同步加强其他安全措施(如 2FA) 通过合理设置maxretry,Fail2Ban 能在防范暴力攻击和保障合法访问之间取得良好平衡。