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

Ubuntu环境下配置Fail2Ban检测SSH登录失败时执行Shell脚本并获取封禁IP的方法

Ubuntu环境下配置Fail2Ban检测SSH登录失败时执行Shell脚本并获取封禁IP的方法

当然可以实现!我来一步步教你配置Fail2Ban,让它在检测到SSH暴力登录并封禁IP时自动执行你的脚本,还能把被封的IP信息传给脚本~

一、修改SSH Jail配置

首先找到你的Fail2Ban jail配置文件,推荐修改/etc/fail2ban/jail.local(如果没有这个文件,就复制/etc/fail2ban/jail.conf并重命名为jail.local,避免系统更新覆盖默认配置)。找到你已有的[ssh]配置块,添加action项来关联你的脚本:

[ssh]
findtime = 10m
maxretry = 3
# 配置动作:先执行默认的iptables封禁,再调用你的脚本并传入被封IP
action = iptables-multiport[name=SSH, port="ssh", protocol=tcp]
         /home/MyUser/scripts/send-mail <ip>

这里的<ip>是Fail2Ban的内置变量,会自动替换为被封禁的IP地址,作为参数直接传给你的脚本。

二、确保脚本有执行权限并正确接收IP

  1. 先给你的脚本加上可执行权限:
chmod +x /home/MyUser/scripts/send-mail

要是遇到权限问题,可以检查fail2ban用户是否能访问脚本目录,比如把fail2ban用户加到你的用户组:

sudo usermod -aG MyUser fail2ban
  1. 修改脚本内容,用$1接收Fail2Ban传入的被封IP。以发送告警邮件为例,你的send-mail脚本可以写成这样:
#!/bin/bash

# 获取被封禁的IP地址
BANNED_IP="$1"

# 发送告警邮件(替换成你的目标邮箱)
/usr/bin/mail -s "Fail2Ban SSH封禁告警" your-email@example.com << EOF
以下IP因多次SSH登录失败被封禁:
$BANNED_IP
EOF

⚠️ 注意:脚本里的命令尽量写全路径(比如/usr/bin/mail),因为Fail2Ban运行时的环境变量和普通用户不一样,避免出现找不到命令的问题。

三、重启Fail2Ban服务使配置生效

执行以下命令重启服务:

sudo systemctl restart fail2ban

(如果是老版本Ubuntu,也可以用sudo service fail2ban restart)

四、测试验证

你可以故意输错SSH密码3次(对应你的maxretry=3),然后检查是否收到告警邮件,或者查看脚本的执行日志(如果脚本有输出的话),确认配置是否生效。

额外提示:自定义完整动作(可选)

如果需要更复杂的动作(比如解封时也执行脚本),可以自定义一个完整的Fail2Ban动作配置文件:

  1. 在/etc/fail2ban/action.d/目录下创建custom-ssh-action.conf:
[Definition]
actionstart =  # 服务启动时执行的命令(可选)
actionstop =   # 服务停止时执行的命令(可选)
actioncheck =  # 检查配置时执行的命令(可选)
actionban = /home/MyUser/scripts/send-mail <ip>  # 封禁时执行的命令
actionunban =  # 解封时执行的命令(可选,比如发送解封通知)
  1. 然后在[ssh]块里把action改成这个自定义动作:
[ssh]
findtime = 10m
maxretry = 3
action = custom-ssh-action

这样配置更灵活,适合后续扩展其他动作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:42:52