You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Fail2Ban中创建自定义动作执行Bash脚本打印横幅,或提供替代实现方案

如何在Fail2Ban中创建自定义动作执行Bash脚本打印横幅,或提供替代实现方案

嗨,我来帮你搞定这个问题!你之前直接在jail.conf里写脚本路径的做法不是Fail2Ban的标准玩法,咱们用官方推荐的自定义动作方式来实现,这样更规范也不容易出问题。另外,我还会给你一个替代方案,如果你想给攻击者直接显示警告横幅的话。


方法一:创建Fail2Ban自定义动作(IP被封禁时执行脚本)

这个方法适合你想在IP被Fail2Ban封禁时,执行脚本做通知(比如给管理员发消息、记录到专属日志)的场景。

1. 编写自定义动作配置文件

在/etc/fail2ban/action.d/目录下新建一个配置文件,比如custom-banner.conf,内容如下:

[Definition]
# 动作启动/停止/检查的操作(这里不需要的话留空即可)
actionstart =
actionstop =
actioncheck =
# 核心:当IP被封禁时执行你的脚本,还能传递Fail2Ban的内置变量
actionban = /bin/bash /etc/fail2ban/banner.sh <ip> <name>
# 可选:IP被解封时的操作(如果需要的话)
actionunban =

这里的<ip>会自动替换为被封禁的IP地址,<name>是对应的jail名称(比如sshd),你可以在banner.sh里接收这些参数,让输出内容更精准。

2. 修改Jail配置

打开jail.local(推荐用这个文件覆盖默认配置,避免系统升级时被重置),找到你要配置的jail(比如sshd),把自定义动作添加到action项里:

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
# 把默认动作和自定义动作结合,比如保留默认的邮件通知+日志记录,再加上你的脚本
action = %(action_mw)s
         custom-banner

如果你不需要默认动作,直接写action = custom-banner就行。

3. 给脚本加执行权限

别忘了让你的脚本能运行:

chmod +x /etc/fail2ban/banner.sh

4. 重启Fail2Ban生效

systemctl restart fail2ban

方法二:给攻击者显示动态警告横幅(替代方案)

如果你想要的是在攻击者尝试登录时,直接给他们显示警告横幅(比如提示他们已经被监控,再试会被封禁),那可以结合SSH的动态Banner功能来实现,不需要依赖Fail2Ban的动作触发:

1. 编写动态横幅脚本

创建/etc/ssh/custom-banner.sh,内容如下:

#!/bin/bash
# 获取当前尝试登录的远程IP
REMOTE_IP=$(echo "$SSH_CONNECTION" | awk '{print $1}')

# 检查该IP是否已经被Fail2Ban封禁
if fail2ban-client status sshd | grep -q "$REMOTE_IP"; then
    echo "⚠️ 警告:你的IP已因多次失败登录被封禁,请勿继续尝试!"
else
    # 统计该IP最近的失败登录次数
    FAILED_COUNT=$(grep "Failed password for" /var/log/auth.log | grep "$REMOTE_IP" | wc -l)
    if [ "$FAILED_COUNT" -ge 3 ]; then
        echo "⚠️ 警告:你已有$FAILED_COUNT次失败登录尝试,再试将被封禁!"
    else
        # 正常登录提示(可自定义)
        echo "欢迎登录本服务器,请注意账户安全!"
    fi
fi

2. 修改SSH配置

打开/etc/ssh/sshd_config,找到Banner项并修改:

Banner /etc/ssh/custom-banner.sh

保存后重启SSH服务:

systemctl restart sshd

这样,任何尝试SSH登录的用户都会根据自己的IP状态看到对应的横幅。


为什么你之前的尝试不生效?

Fail2Ban的action项需要引用已经定义好的动作配置(就是action.d目录里的文件),不能直接写命令路径,所以你之前在jail.conf里加的/bin/bash /etc/fail2ban/banner.sh不会被执行,用上面的自定义动作方法就没问题啦。

备注:内容来源于stack exchange,提问作者prince royce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:58:20