入门系列之使用fail2ban防御SSH服务器暴力破解攻击

入门系列之使用fail2ban防御SSH服务器暴力破解攻击
最新回答
爱情,从来不晚

2022-03-11 15:49:45

fail2ban可通过监控登录失败记录并自动封禁异常IP的方式,有效防御SSH服务器的暴力破解攻击。 以下是具体实施步骤及关键配置说明:

一、安装fail2ban

Debian系统可通过默认仓库直接安装,命令如下:

sudo apt-get updatesudo apt-get install fail2ban

安装完成后服务会自动启动,无需额外配置。

二、核心配置流程
  1. 创建本地配置文件为避免系统升级时配置被覆盖,需复制默认配置文件:

    cd /etc/fail2bansudo cp jail.conf jail.localsudo nano jail.local
  2. 全局参数设置在[DEFAULT]部分修改以下关键参数:

    ignoreip:排除可信IP(如本地网络或办公IP),格式为ignoreip = 127.0.0.1/8 YOUR_IP_ADDRESS。

    bantime:封禁时长,默认10分钟(600秒),可根据需求调整。

    maxretry:允许的失败尝试次数,默认3次,建议保持默认值。

    banaction:封禁方式,默认使用iptables-multiport。

  3. 邮件警报配置(可选)若需接收封禁通知,需配置以下参数:

    destemail:接收通知的邮箱地址(如admin@example.com)。

    mta:邮件传输代理,默认sendmail,也可改为mail。

    action:修改为actionmw或actionmwl以启用邮件通知。

  4. SSH服务专项配置在文件末尾的[sshd]部分覆盖默认参数:

    [sshd]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 3bantime = 600

    logpath:需指向系统实际的SSH日志文件路径(如Ubuntu为/var/log/auth.log,CentOS为/var/log/secure)。

三、iptables规则解析

fail2ban通过iptables实现封禁,关键规则如下:

  1. 创建专用链

    iptables -N fail2ban-<name>iptables -A fail2ban-<name> -j RETURNiptables -I INPUT -p tcp -m multiport --dports ssh -j fail2ban-<name>

    此规则将SSH流量导向fail2ban-sshd链处理。

  2. 封禁与解封操作

    封禁IP:iptables -I fail2ban-sshd 1 -s <ip> -j DROP

    解封IP:iptables -D fail2ban-sshd -s <ip> -j DROP

  3. 查看当前规则

    sudo iptables -L -n | grep fail2ban

    输出示例:

    Chain fail2ban-sshd (1 references)target prot opt source destinationDROP all -- 192.0.2.100 anywhereRETURN all -- anywhere anywhere
四、服务重启与测试
  1. 应用配置修改后需重启服务:

    sudo systemctl restart fail2ban
  2. 测试封禁效果

    使用另一台主机或VPS连续输入错误密码(超过maxretry次数)。

    检查封禁状态:

    sudo fail2ban-client status sshd输出示例:Status for the jail: sshd|- Filter| |- Currently failed: 1| `- Total failed: 5`- Action |- Currently banned: 1 `- Total banned: 1
五、增强安全建议
  1. 禁用密码认证修改SSH配置文件/etc/ssh/sshd_config:

    PasswordAuthentication noChallengeResponseAuthentication noUsePAM no

    重启SSH服务生效:

    sudo systemctl restart sshd
  2. 使用密钥认证生成密钥对并上传公钥至服务器:

    ssh-keygen -t ed25519ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
  3. 多因素认证(MFA)结合Google Authenticator或Duo Security实现双因素认证。

六、常见问题处理
  1. 误封IP解封命令:

    sudo fail2ban-client unban <ip>
  2. 日志路径错误根据系统类型修正logpath参数:

    Ubuntu/Debian:/var/log/auth.log

    CentOS/RHEL:/var/log/secure

  3. 邮件发送失败检查邮件服务配置(如Postfix/Sendmail)或改用本地日志监控。

通过以上步骤,fail2ban可有效拦截99%的暴力破解攻击。但需注意,完全禁用密码认证并启用密钥认证才是最彻底的解决方案。更多高级配置可参考

腾讯云社区文档