当前位置: 首页 > 工具软件 > Fail2ban > 使用案例 >

frp与fail2ban结合禁用ip

程卓君
2023-12-01

1 安装fail2ban

# CentOS
yum install -y fail2ban
# ubuntu使用apt的系统
sudo apt-get install -y fail2ban

设置开机启动,并启动fail2ban

systemctl enable fail2ban
systemctl start fail2ban

1.1 fail2ban配置文件

fail2ban的配置文件位于 /etc/fail2ban 目录内,有以下重要配置文件(夹),分别对应三个核心概念:

  • jail.conf:对应核心概念“jail”(牢笼/监狱),一个jail由action和filter组成,代表监控目标。jail.conf配置软件监控目标及发现恶意IP后的操作;
  • action.d:对应核心概念action(动作),表示发现恶意IP后采取的操作。action.d目录中预定义了许多常用操作,例如调用iptables/firewalld封禁、sendmail发送通知邮件;
  • filter.d: 对应核心概念filter(过滤规则),过滤规则是用来匹配恶意行为的规则文件/正则表达式。filter.d目录内预定于了许多软件监控规则,例如SSH、Nginx、Apache。

2 定义frp过滤规则

过滤规则配置文件位于在 /etc/fail2ban/filter.d 目录下,我们新建 frps.conf 文件

vim /etc/fail2ban/filter.d/frps.conf

写入如下内容:

[Definition]

failregex = ^.*get a user connection \[<HOST>:[0-9]*\]
            ^.*get a new work connection: \[<HOST>:[0-9]*\]
ignoreregex =

配置文件总共三行,分表表示过滤规则的定义、恶意请求的正则表达式、以及应该忽略的正则。failregex中的<HOST>代表主机IP

3 配置fail2ban监控目标

系统内置的监控目标在 /etc/fail2ban/jail.conf 文件中,官方建议自定义的监控目标放在 /etc/fail2ban/jail.local 或者在 /etc/fail2ban/jail.d 目录中新建配置文件。本文将监控目标定义在 /etc/fail2ban/jail.local 文件里,写入下面内容:

[frp]
enabled = true
findtime = 600
maxretry = 10
bantime = 7200
filter = frps
logpath = /data/frp/log/frps.log
protocol = all
chain = all
port = all
action = iptables-allports[name=frp,protocol=tcp]

注: logpath需要根据实际的frps日志文件定义

配置说明

  • frp:监控目标名称
  • port:封禁全部端口
  • filter:过滤规则,我们使用自定义的frps
  • action:捕捉到恶意IP后执行的操作,本文使用iptables对IP封禁所有端口
  • logpath:需要监控的日志文件
  • bantime:封禁时间,单位为秒
  • findtime:查找时间段,单位为秒
  • maxretry:允许的最大失败次数,这里我们配置10分钟内触发10次规则,那么就封禁掉

修改配置文件后:

  • 重载服务:fail2ban-client reload
  • 查看服务状态:fail2ban-client status frp

4 测试正则规则是否起作用

# 语法:fail2ban-regex 日志文件 规则文件
fail2ban-regex /frps.log /etc/fail2ban/filter.d/frps.conf

输出内容如下

Running tests
=============

Use   failregex filter file : frps, basedir: /etc/fail2ban
Use         log file : /frps.log
Use         encoding : UTF-8


Results
=======

Failregex: 2419 total
|-  #) [# of hits] regular expression
|   1) [2419] ^.*get a user connection \[<HOST>:[0-9]*\]
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [2444] {^LN-BEG}ExYear(?P<_sep>[-/.])Month(?P=_sep)Day(?:T|  ?)24hour:Minute:Second(?:[.,]Microseconds)?(?:\s*Zone offset)?
`-

Lines: 2444 lines, 0 ignored, 2419 matched, 25 missed
[processed in 0.13 sec]

Missed line(s): too many to print.  Use --print-all-missed to print all 25 lines

输出显示匹配到的行数、忽略的行数已经未匹配上的行数。
如果输出与预期相符,说明过滤规则书写正确,否则应该编辑规则文件,修改正则表达式后再次测试。

5 查看监控状态

fail2ban提供了 fail2ban-client 查看监控状态。

# 查看fail2ban的运行状态
fail2ban-client status
# 输出内容如下:
# Status
# |- Number of jail:      2
# `- Jail list:   frp, ssh-iptables
# 查看指定监控的状态
fail2ban-client status frp
# 输出内容如下
# Status for the jail: frp
# |- Filter
# |  |- Currently failed: 0
# |  |- Total failed:     10
# |  `- File list:        /data/frp/log/frps.log
# `- Actions
#    |- Currently banned: 0
#    |- Total banned:     1
#   `- Banned IP list:

Banned IP list 列出了当前被封禁的IP。如果发现有误杀IP,可以用unbanip解封:

fail2ban-client set nginxcc unbanip IP地址

本文参考来源:
使用fail2ban防止恶意扫描和CC攻击
使用 fail2ban 保护 frp 服务

 类似资料: