debian12 fail2ban 配置说明及自定义规则

debian12 fail2ban 配置说明及自定义规则

fail2ban 是用来做自动配置防火墙用的,最大的用处也就是防止别人的ssh的爆破,自动的把多次尝试登录的ip,放入防火墙中,小黑屋关几天。
他的原理是读取日志,然后根据日志里面的规则编写相应的正则表达式,在fail2ban中这个正则叫做过滤器(filter)。过滤器来确定哪些放行,哪些要识别出来属于异常。根据 fail2ban 里面的规则来,确定如何处理异常的 ip 访问。

但是他的功能又不止于 SSH 的保护,实际上内部还有者特别多的默认模块可以使用。
下面来介绍一下,在debian 12 上安装配置,以及自定义的一些设置。

1. 安装配置

debian 12 没有这个日志记录了,要提前装才行

sudo apt-get install rsyslog 

如果没有日志记录,fail2ban不会其任何作用。

fail2ban 从github上装最新的
然后编辑,

bash cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑/etc/fail2ban/jail.local

[DEFAULT]
# 这是全局的
bantime  = 2w
# 屏蔽2周
findtime  = 9999
# 搜索时间 9999 秒
maxretry = 2
# 2次就干他
banaction = ufw
# 屏蔽的方式必须写,否则没用
banaction_allports = ufw

[sshd]

#mode   = normal
enabled = true
# 开启这个模块
port    = ssh
filter = sshd
# 过滤器
#logpath = %(sshd_log)s
logpath = /var/log/auth.log
# 日志的位置
backend = %(sshd_backend)s

2. fail2ban 配置说明

fail2ban 的配置文件是从 /etc/fail2ban/jail.local 开始识别的,

配置文件上,有模块、过滤器以及执行单元
模块是指如sshd这样的要过滤的规则
过滤器是指用什么样的正则表达式去判断正常还是异常
执行单元是指用什么防火墙去执行,如iptables,ufw,还是其他的

他的配置文件分两部分,一个是[DEFAULT] 的全局设置,另一部分是下面的个各个模块里面也可以单独设置。

默认情况下,各个模块是禁用的,需要手动去在每个模块下面edable = true来启用模块。
另外一点需要注意的是需要手动去开启如何去处理也就是banaction = ufw,也许你的系统就没装 ufw,如果要用 ufw 就要安装。

默认自带的过滤器在 /etc/fail2ban/filter.d/ 文件夹下。
默认自带的执行单元在 /etc/fail2ban/action.d文件夹下。

2.1. 默认sshd模块开启

[sshd]

#mode   = normal
enabled = true
# 开启这个模块
port    = ssh
filter = sshd
# 过滤器
#logpath = %(sshd_log)s
logpath = /var/log/auth.log
# 日志的位置
backend = %(sshd_backend)s

[sshd] 是模块
必有有enable = true 这个模块才开启。

2.2. 自定义模块开启

[ufw]
enabled=true
filter=ufw.aggressive
action=ufw
logpath=/var/log/ufw.log
maxretry=50
bantime=7d
ignoreip  = 127.0.0.1/8

root@localhost:~# cat /etc/fail2ban/filter.d/ufw.aggressive.conf
[Definition]
failregex = [UFW BLOCK].+SRC=<HOST> DST
ignoreregex =

上面这事必须要做的一步
模块[ufw] enable,过滤器也写好了,这样才能去打开。这里的防火墙用的ufw

2.3. backend = systemd

默认情况下
backend = auto
设置Fail2ban的后端要使用的文件系统监视器。有效的监视器有:pyinotify、gamin、polling、systemd和auto。
设置为"auto"则会轮询前面几个监视器,直到获取到有效的,一般情况下使用pyinotify。默认情况下安装时已经安
装了该监视器,所以该配置项无需设置。
当使用了systemd监视器时,则应该使用过滤器配置中的"journalmatch"配置项匹配日志。"logpath"选项则失效。
这部分请参考Fail2ban#Systemd_backend:_journald_filtering

当使用systemd后端来提高性能时,请使用journalmatch配置过滤器。例如,仅解析内核级日志消息:

/etc/fail2ban/filter.d/fwdrop.local

[Definition]
failregex = ^.\*DROP\_.\*SRC=<ADDR> DST=.\*$
journalmatch = \_TRANSPORT=kernel

3. 使用 drop 来实现 ufw 关小黑屋

默认的ufw的规则使用的是reject,还可以使用deny
deny 用的是drop,这样对方就不能得到任何应答

具体方法是修改配置文件
/etc/fail2ban/action.d/ufw.conf

[Definition]

actionstart =

actionstop =

actioncheck =

# ufw does "quickly process packets for which we already have a connection" in before.rules,
# therefore all related sockets should be closed
# actionban is using `ss` to do so, this only handles IPv4 and IPv6.

actionban = if [ -n "<application>" ] && ufw app info "<application>"
            then
              ufw <add> <blocktype> from <ip> to <destination> app "<application>" comment "<comment>"
            else
              ufw <add> <blocktype> from <ip> to <destination> comment "<comment>"
            fi
            <kill>

actionunban = if [ -n "<application>" ] && ufw app info "<application>"
              then
                ufw delete <blocktype> from <ip> to <destination> app "<application>"
              else
                ufw delete <blocktype> from <ip> to <destination>
              fi

# Option: kill-mode
# Notes.: can be set to ss or conntrack (may be extended later with other modes) to immediately drop all connections from banned IP, default empty (no kill)
# Example: banaction = ufw[kill-mode=ss]
kill-mode =

# intern conditional parameter used to provide killing mode after ban:
_kill_ =
_kill_ss = ss -K dst "[<ip>]"
_kill_conntrack = conntrack -D -s "<ip>"

# Option: kill
# Notes.: can be used to specify custom killing feature, by default depending on option kill-mode
# Examples: banaction = ufw[kill='ss -K "( sport = :http || sport = :https )" dst "[<ip>]"']
#           banaction = ufw[kill='cutter "<ip>"']
kill = <_kill_<kill-mode>>

[Init]
# Option: add
# Notes.: can be set to "insert 1" to insert a rule at certain position (here 1):
add = prepend

# Option: blocktype
# Notes.: reject or deny
blocktype = deny # MODIFIED: DROP connections instead of REJECT. 

# Option: destination
# Notes.: The destination address to block in the ufw rule
destination = any

# Option: application
# Notes.: application from sudo ufw app list
application =

# Option: comment
# Notes.: comment for rule added by fail2ban
comment = by Fail2Ban after <failures> attempts against <name>

# DEV NOTES:
#
# Author: Guilhem Lettron
# Enhancements: Daniel Black
root@C20240617226357:/etc/fail2ban/action.d#

有用的就是这一句

blocktype = deny # MODIFIED: DROP connections instead of REJECT. 

4. 手动解除

总会有误伤友军的时候,
我们先查看状态,太多了,只展示一部分。

root@C20240617226357:~# fail2ban-client status
Status
|- Number of jail:      2
`- Jail list:   sshd, ufw

root@C20240617226357:~# fail2ban-client status ufw
Status for the jail: ufw
|- Filter
|  |- Currently failed: 558
|  |- Total failed:     746
|  `- Journal matches:
`- Actions
   |- Currently banned: 1685
   |- Total banned:     1706
   `- Banned IP list:   1.15.172.243 1.161.52.238 1.200.128.158 1.70.12.222 1.70.126.164 1.70.141.13 1.70.9.182 100.42.187.124 101.126.21.63 101.133.153.24 101.133.233.145 101.34.210.148 101.36.108.133 101.37.205.32 101.37.225.65 101.37.85.27 ..... 47.76.86.139

4.1. 解除方法

fail2ban-client set ufw unbanip 125.36.101.127

fail2ban-client set 规则名称 unbanip xxx.xxx.xxx.xxx

操作后查看日志会有一条

cat /var/log/fail2ban.log
2024-08-07 08:38:07,792 fail2ban.actions        [672]: NOTICE  [ufw] Unban 125.36.101.127

4.2. 信任ip

可以在模块里面添加ignoreip = 127.0.0.1/8 来添加自己信任的ip
例如

[ufw]
enabled=true
filter=ufw.aggressive
action=ufw
logpath=/var/log/ufw.log
maxretry=50
bantime=7d
ignoreip  = 127.0.0.1/8

5. 参考链接

https://github.com/fail2ban/fail2ban/wiki
https://blog.fernvenue.com/zh/archives/ufw-with-fail2ban/
https://wiki.archlinux.org/title/Fail2ban
https://www.cnblogs.com/RidingWind/p/13853770.html

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇