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
- 先给你的脚本加上可执行权限:
chmod +x /home/MyUser/scripts/send-mail
要是遇到权限问题,可以检查
fail2ban用户是否能访问脚本目录,比如把fail2ban用户加到你的用户组:sudo usermod -aG MyUser fail2ban
- 修改脚本内容,用
$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动作配置文件:
- 在
/etc/fail2ban/action.d/目录下创建custom-ssh-action.conf:
[Definition] actionstart = # 服务启动时执行的命令(可选) actionstop = # 服务停止时执行的命令(可选) actioncheck = # 检查配置时执行的命令(可选) actionban = /home/MyUser/scripts/send-mail <ip> # 封禁时执行的命令 actionunban = # 解封时执行的命令(可选,比如发送解封通知)
- 然后在
[ssh]块里把action改成这个自定义动作:
[ssh] findtime = 10m maxretry = 3 action = custom-ssh-action
这样配置更灵活,适合后续扩展其他动作。
备注:内容来源于stack exchange,提问作者gabogabans
相关产品推荐
相关产品推荐

