Fail2ban

  • 优点:使用简单、灵活、功能强大

  • 公网网站如果一直被人暴力破解 SSHD 服务密码,会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢。

  • 然而 fail2ban 程序可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送 e-mail 通知系统管理员,很实用、很强大!

  • 简单来说其功能就是防止暴力破解。

  • 工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关 IP 利用 iptables 加入到 dorp 列表一定时间。

  • 下载软件包

  • 官方地址:http://www.fail2ban.org

  • 还可以使用 yum 的 epel 方式安装(方便)

  • yum -y install epel-release && yum -y install fail2ban

  • 首先 实现 Fail2ban + iptables 对 SSH 服务防护

  • 实验环境 CentOS 7.8.2003

  • iptables-services 为运行状态  

  • 需要 python 开发环境,并且版本要大于 2.4

  • 设置条件:SSH 远程登录 5 分钟内 3 次密码验证失败,禁止用户 IP 访问主机 1 小时,1 小时该限制自动解除,用户可重新登录。
            因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有 jail.conf 文件。启用 SSHD 服务的日志
     分析,指定动作阀值即可。

  • 编辑配置文件

  • vim /etc/fail2ban/jail.conf

  • [sshd] #单个服务检查设置,如设置 bantime、findtime、maxretry 和全局冲突,服务优先级大于全局设置。
  • port = ssh
  • logpath = %(sshd_log)s
  • backend = %(sshd_backend)s
  • enabled = true #是否激活此项(true/false)修改成 true。
  • filter = sshd #过滤规则 filter 的名字,对应 filter.d 目录下的 sshd.conf。
  • action = iptables[name=SSH, port=22, protocol=tcp] #动作的相关参数,对应action.d/iptables.conf 文件。
  • sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"] #触发报警的收件人。
  • logpath = /var/log/secure #检测的系统的登陆日志文件。这里要写 sshd 服务日志文件。默认为 logpath = /var/log/sshd.log(在 centos8 当中需要删除默认的 ssh 区域 logpath 选项) 。
  • #5 分钟内 3 次密码验证失败,禁止用户 IP 访问主机 1 小时。 配置如下。
  • bantime = 3600   #禁止用户 IP 访问主机 1 小时。单位:秒
  • findtime = 300     #在 5 分钟内内出现规定次数就开始工作。单位:秒
  • maxretry = 3       #3 次密码验证失败。

  • 启动服务

  • 测试:故意输入错误密码 3 次,再进行登录时,会拒绝登录。

  • 检测 fail2ban 工作状态

Status
|- Number of jail: 1
`- Jail list: sshd #具体看某一项的状态也可以看,如果显示被 ban 的 ip 和数目就表示成功了,如果都是 0,说明没有成功。

  • fail2ban-client status sshd

Status for the jail: sshd
|- Filter
|  |- Currently failed:    0
|  |- Total failed:    6
|  `- Journal matches:    _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:    2
   |- Total banned:    2
   `- Banned IP list:    192.168.2.2 192.168.2.4  #加入黑名单的 IP

  • fail2ban 从黑名单中移除 IP 的方法:
    fail2ban-client set sshd unbanip 192.168.2.2


  • 下面实现 Fail2ban + firewalld 对 SSH 服务防护

  • 实验环境: CentOS 8.2.2011
  • firewalld 为 开启状态,并且 SSH 端口已经添加
  • firewall-cmd --zone=public --add-port=2222/tcp --permanent
  • firewall-cmd --zone=public --list-ports
  • yum -y install epel-release && yum -y install fail2ban fail2ban-firewalld

  • 安装好 fail2ban 后 新建配置文件

  • vim /etc/fail2ban/jail.local 

    [DEFAULT]
    ignoreip = 127.0.0.1/8
    bantime  = 86400
    findtime = 600
    maxretry = 5
    #这里 banaction 必须用 firewallcmd-ipset ,这是 friewalld 支持的关键,如果是用 Iptables 请不要这样填写
    banaction = firewallcmd-ipset
    action = %(action_mwl)s

    [sshd]
    enabled = true
    filter  = sshd
    port    = 2222
    action = %(action_mwl)s
    logpath = /var/log/secure

  • ignoreip:IP白名单,白名单中的IP不会屏蔽,可填写多个以(,)分隔

  • bantime:屏蔽时间,单位为秒(s)

  • findtime:时间范围

  • maxretry:最大次数

  • banaction:屏蔽IP所使用的方法,上面使用firewalld屏蔽端口

  • [sshd]:名称,可以随便填写

  • filter:规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则

  • port:对应的端口

  • action:采取的行动

  • logpath:需要监视的日志路径

  • 重启服务
  • systemctl restart fail2ban.service firewalld.service
  • fail2ban-client status sshd
  • 测试

  • 防止CC攻击

    这里仅以Nginx为例,使用fail2ban来监视nginx日志,匹配短时间内频繁请求的IP,并使用firewalld将其IP屏蔽,达到CC防护的作用。

需要先新建一个nginx日志匹配规则 vim /etc/fail2ban/filter.d/nginx-cc.conf

[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =

然后修改 jail.local 追加如下内容:

[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 86400
logpath = /var/log/nginx/access.log

如果在60s内,同一IP达到20次请求,则将其IP ban 1小时,上面只是为了测试,请根据自己的实际情况修改。logpathnginx日志路径。

  • 测试,这里为了看到效果将访问次数调低

Fail2Ban 是一款用于监控系统日志并阻止恶意活动的入侵防御工具。它可以自动检测到多次尝试失败登录的行为,并通过更新防火墙规则来临时或永久封禁攻击者的 IP 地址,从而保护 SSH 服务等应用程序的安全。 ### 配置 Fail2Ban 保护 SSH 服务的基本步骤如下: #### 1. 安装 Fail2Ban 在大多数 Linux 发行版中,可以通过包管理器安装 Fail2Ban。例如,在基于 Debian 的系统上使用以下命令安装: ```bash sudo apt update sudo apt install fail2ban ``` 安装完成后,Fail2Ban 会自动启动,并设置为开机自启 [^1]。 #### 2. 配置 Jail 文件 Fail2Ban 的主要配置文件位于 `/etc/fail2ban/jail.conf`,但建议创建一个本地副本(如 `jail.local`)进行修改,以避免升级时被覆盖。 编辑 `/etc/fail2ban/jail.local` 文件,并确保包含以下内容来启用对 SSH 的防护: ```ini [sshd] enabled = true port = ssh logpath = %(sshd_log)s backend = auto maxretry = 5 bantime = 3600 findtime = 600 ``` - `enabled = true`:启用该模块。 - `port = ssh`:指定要监控的端口,默认为 `ssh`(即 22)。 - `logpath`:定义日志文件路径,通常为 `/var/log/auth.log` 或 `/var/log/secure`。 - `maxretry`:允许的最大失败尝试次数。 - `bantime`:IP 被封锁的时间(单位:秒),这里设置为 1 小时。 - `findtime`:在指定时间内发生的失败尝试次数上限 [^2]。 #### 3. 使用默认过滤规则 Fail2Ban 提供了针对 SSH 的默认过滤规则 `/etc/fail2ban/filter.d/sshd.conf`,它定义了如何解析日志中的失败登录尝试。一般无需更改此文件,除非有特殊需求。 #### 4. 重启 Fail2Ban 服务 完成配置后,需要重新加载或重启 Fail2Ban 服务以应用更改: ```bash sudo systemctl restart fail2ban ``` 可以使用以下命令检查当前状态和已封禁的 IP 地址: ```bash sudo fail2ban-client status sudo fail2ban-client status sshd ``` #### 5. 自定义通知与白名单 如果希望在发生封禁操作时收到通知,可以在配置中添加邮件通知功能。此外,还可以通过 `ignoreip` 指令将可信 IP 地址加入白名单,防止误封: ```ini ignoreip = 192.168.1.0/24 10.0.0.1 action = %(default_action)s mail-whois[name=SSH, [email protected]] ``` 这样,当有 IP 被封禁时,系统会发送一封包含相关信息的邮件通知给指定收件人 [^3]。 #### 6. 查看日志和调试信息 Fail2Ban 的运行日志通常位于 `/var/log/fail2ban.log` 中。可以通过查看该文件了解最新的封禁事件以及潜在的问题排查信息: ```bash tail -f /var/log/fail2ban.log ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值