关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

在外网服务器上使用Fail2ban防止暴力破解(SSH, Web登录等)的配置详解

发布时间:2025-04-14


  暴露在公网上的外网服务器,无时无刻不在遭受各种自动化扫描和攻击尝试,其中最常见的就是针对SSH、FTP、邮件服务以及Web应用登录界面的暴力破解(Brute-force Attack)。攻击者利用程序自动尝试大量用户名和密码组合,试图猜中正确的登录凭证。一旦成功,服务器将完全沦陷。Fail2ban是一款非常流行且有效的开源入侵防御软件,通过监控服务器上的日志文件,识别恶意的、重複的登录失败尝试,并在达到预设阈值后,自动调用系统防火牆(如iptables, nftables, firewalld)或特定服务(如Cloudflare API)来临时(或永久)禁止攻击者的IP地址访问。在外网服务器上正确配置和使用Fail2ban,可以极大地增强抵御暴力破解攻击的能力。

  Fail2ban工作原理

  1.监控日志文件: Fail2ban持续扫描指定的日志文件(如SSH的/var/log/auth.log,Nginx的错误日志等)。

  2.匹配过滤规则 (Filter): 使用预定义或自定义的过滤规则(正则表达式)在日志中查找匹配特定模式的行(如“Failed password for invalid user”、“authentication failure”)。

  3.触发动作 (Action): 当来自同一个IP地址的匹配失败次数在指定时间窗口内(findtime)达到了最大重试次数(maxretry)时,Fail2ban就会触发一个预定义的动作。

  4.执行禁止动作: 最常见的动作是调用防火牆命令(如iptables -I INPUT ... -j DROP)将该攻击IP加入禁止访问列表,持续一段时间(bantime)。也可以配置发送邮件通知、调用API等其他动作。

  在外网服务器上安装和配置Fail2ban(以Debian/Ubuntu为例)

  1. 安装Fail2ban:Bash

  sudo apt update

  sudo apt install fail2ban -y

  安装完成后,Fail2ban服务通常会自动启动。

  2. 理解配置文件:

  - /etc/fail2ban/fail2ban.conf:主配置文件,定义全局设置(如日志级别)。通常不建议直接修改此文件。

  - /etc/fail2ban/jail.conf:包含了所有预定义的监狱(Jail)配置和默认参数。同样不建议直接修改此文件,因为软件包更新时可能会覆盖您的更改。

  - /etc/fail2ban/jail.d/目录:用于存放本地自定义配置。推荐在此目录下创建.local文件(如defaults-debian.local或自定义名称的.conf文件)来覆盖jail.conf中的默认设置或定义新的Jail。 .local文件的配置会优先于.conf文件。

  - /etc/fail2ban/filter.d/目录:存放过滤规则(正则表达式)。

  - /etc/fail2ban/action.d/目录:存放动作脚本。

  3. 配置本地覆盖文件 (jail.local):

  - 创建(或複製jail.conf为jail.local)并编辑/etc/fail2ban/jail.local文件。

  - 全局设置([DEFAULT]段):Ini, TOML

  [DEFAULT]

  # 忽略的IP地址(白名单),可以是IP或CIDR,空格分隔。务必加入您自己的可信IP!

  ignoreip = 127.0.0.1/8 ::1 YOUR_TRUSTED_IP1 YOUR_TRUSTED_IP2

  # 禁止时间(秒),-1表示永久禁止

  bantime = 1h # 禁止1小时

  # 查找时间窗口(秒)

  findtime = 10m # 在10分钟内查找失败次数

  # 最大重试次数

  maxretry = 5 # 失败5次触发禁止

  # 后端(用于监控日志文件变化,通常自动检测)

  # backend = auto

  # 禁止动作,常见的有:

  # %(action_)s 使用默认动作(通常是iptables-multiport)

  # %(action_mw)s 禁止并发送带whois信息的邮件

  # %(action_mwl)s 禁止并发送带whois和日志信息的邮件

  # %(action_cf_api)s 使用Cloudflare API禁止 (需要额外配置)

  # 推荐使用最简单的禁止动作,避免邮件通知过多

  banaction = iptables-multiport # 或 firewallcmd-ipset / nftables-multiport

  action = %(action_)s

  # 发送邮件通知设置(可选)

  destemail = your_email@example.com

  sender = fail2ban@your_server_hostname

  mta = sendmail

  - 启用和配置特定的Jail:

  - SSH防护(默认通常已启用,但需检查):Ini, TOML

  [sshd]

  enabled = true

  port = ssh # 可以指定端口,如 port = 2222

  # filter = sshd # 使用内置的sshd过滤规则

  logpath = %(sshd_log)s # 通常是 /var/log/auth.log

  maxretry = 3 # 可以为特定Jail覆盖默认值

  bantime = 1d # SSH失败禁止1天

  - Nginx HTTP认证防护(示例):Ini, TOML

  [nginx-http-auth]

  enabled = true

  port = http,https

  filter = nginx-http-auth # 内置过滤规则

  logpath = /var/log/nginx/error.log # Nginx错误日志路径

  maxretry = 6

  - Nginx恶意脚本/爬虫防护(示例):Ini, TOML

  [nginx-badbots]

  enabled = true

  port = http,https

  filter = nginx-badbots # 内置过滤规则

  logpath = /var/log/nginx/access.log

  maxretry = 2

  [nginx-noscript]

  enabled = true

  port = http,https

  filter = nginx-noscript # 内置过滤规则 (查找请求不存在的脚本)

  logpath = /var/log/nginx/access.log

  maxretry = 6

  - WordPress登录防护(需要自定义或第三方filter):

  - 需要创建一个filter.d/wordpress.conf文件,包含匹配WordPress登录失败日志的正则表达式。

  - 在jail.local中定义一个[wordpress] Jail,指定enabled = true, filter = wordpress, logpath (指向Nginx/Apache访问日志或WP安全插件日志),以及port, maxretry, bantime。

  4. 重启Fail2ban服务:Bash

  sudo systemctl restart fail2ban

  5. 验证与监控:

  - 查看状态: sudo fail2ban-client status (查看已启用的Jail列表)

  - 查看特定Jail状态: sudo fail2ban-client status sshd (查看sshd Jail的状态,包括当前被禁止的IP列表)

  - 手动禁止IP: sudo fail2ban-client set sshd banip

  - 手动解禁IP: sudo fail2ban-client set sshd unbanip

  - 检查防火牆规则: 使用sudo iptables -L -n查看iptables规则,确认Fail2ban创建的链(如f2b-sshd)和禁止规则是否存在。

  注意事项

  - 白名单(ignoreip)至关重要: 务必将您自己固定、可信的IP地址加入白名单,否则可能因为输错密码把自己锁在外面。

  - bantime设置: 禁止时间不宜过短(否则攻击者很快就能再次尝试),但也无需永久禁止(IP可能是动态的或被盗用的)。几小时到几天是常见设置。

  - maxretry和findtime平衡: maxretry设置过低可能误伤正常输错密码的用户,过高则给攻击者太多尝试机会。findtime定义了统计失败次数的时间窗口。

  - 日志路径准确性: logpath必须指向正确的日志文件。

  - 过滤规则的准确性: 内置规则通常可用,自定义规则需要仔细编写正则表达式,避免误匹配。

  - 防火牆动作兼容性: 确保banaction和action设置与您服务器使用的防火牆工具(iptables, nftables, firewalld)兼容。

  在外网服务器上部署和配置Fail2ban是防御自动化暴力破解攻击的有效且基础的措施。通过仔细配置jail.local文件,启用对关键服务(如SSH、Web登录)的监控,并设置合理的禁止策略,可以显著提高服务器的安全性,减少被入侵的风险。

  一万网络专业提供外网服务器租用/外网云服务器/外网服务器/外网vps/外网原生ip/外网虚拟主机/外网服务器地址(全国统一服务热线:4000-968-869)。



上一篇:外网服务器时钟同步(NTP)的重要性与配置实践

下一篇:在外网服务器上优化PHP-FPM性能:配置、监控与调优实践