
【免费下载链接】community-templatesZabbix Community Templates repository项目地址https://gitcode.com/gh_mirrors/co/community-templates点击查看免费下载Fail2ban 是 Linux 上经典的暴力破解防御工具通过持续扫描 SSH、Web 等服务日志对多次认证失败的来源 IP 执行封禁。本篇文章围绕 Zabbix Community Templates 仓库中的Fail2ban官方模板作者 Tomas Hermanek系统讲解如何利用 Zabbix agent 的 LLD低级别发现能力自动发现 Fail2ban 的全部 jail、按 jail 统计被封禁 IP 数量、监控 fail2ban-server 守护进程存活状态并在服务宕机时触发告警。读完本文你将掌握模板的完整安装步骤、用户参数脚本的底层实现原理、各监控对象监控项、触发器、值映射、图形原型的配置细节以及 5.0 到 7.0 各版本模板的差异。模板概览与核心能力该模板的关联文档位于 Applications/Firewall/template_fail2ban/5.0/README.md仓库同时维护了 5.0、5.4、6.0、7.0 四个版本对应目录分别为Applications/Firewall/template_fail2ban/5.0、5.4、6.0、7.0其中 5.0 为 XML 格式5.4 及以后为 YAML 格式。7.0 版 README 明确说明该模板适用于 Zabbix 5.0~7.0并已在 7.2.5 上实测通过。模板提供的四大核心能力Automatic discovery of jailsjail 自动发现通过fail2ban.discovery键自动枚举 fail2ban 守护进程中配置的全部 jail无需手工维护 jail 列表Monitor service status服务状态监控通过proc.num[fail2ban-server]检查 fail2ban-server 进程是否存活Monitor jailsjail 监控针对每一个被发现的 jail采集其当前被封禁的 IP 数量Jails graphjail 图表为每个 jail 自动生成封禁 IP 数量趋势图。模板自身未定义任何宏Macros used: None也未链接其他模板Template links: None属于完全自包含的独立模板导入后即可直接链接到目标主机使用。模板工作原理两条 UserParameter 是数据采集的根基模板的数据采集完全依赖 Zabbix agent 端的两条用户参数UserParameter它们定义在 7.0/files/fail2ban.conf 中整个模板的功能都由这两行脚本驱动UserParameterfail2ban.status[*],sudo /usr/bin/fail2ban-client status $1 | grep Currently banned: | grep -E -o [0-9] UserParameterfail2ban.discovery,sudo /usr/bin/fail2ban-client status | grep Jail list: | sed -e s/^.*:\W\// -e s/\(\(\w\|-\)\\)/{{#JAIL}:\1}/g -e s/.*/{data:[\0]}/逐条拆解其实现原理fail2ban.status[*]jail 封禁数采集$1接收监控项传入的 jail 名称如sshd命令拼接为sudo /usr/bin/fail2ban-client status sshdfail2ban-client status jail的输出中包含形如Currently banned: 5的一行先用grep Currently banned:过滤出该行再用grep -E -o [0-9]提取其中的数字最终只返回一个纯数字封禁 IP 计数与监控项units: count的数据类型完全匹配。fail2ban.discoveryjail 列表发现执行fail2ban-client status获取全局状态其中Jail list: sshd, frps-ssh-ban一行列出了全部 jail 名称随后通过三段式sed管道将其转换为 Zabbix LLD 所需的 JSON 结构第一步s/^.*:\W\//去掉行首的Jail list:前缀与空白第二步s/\(\(\w\|-\)\\)/{{#JAIL}:\1}/g将逗号分隔的每个 jail 名称含字母、数字、下划线、连字符因此正则中同时匹配\w和-分别包装成{{#JAIL}:名称}对象第三步s/.*/{data:[\0]}/将整体包裹成{data:[...]}的 LLD 标准载荷。例如一台配置了sshd与frps-ssh-ban两个 jail 的主机fail2ban.discovery会返回{data:[{{#JAIL}:sshd},{{#JAIL}:frps-ssh-ban}]}Zabbix server 据此为每个 jail 动态创建fail2ban.status[{#JAIL}]监控项并生成对应图形这就是自动发现 jail、自动监控 jail的核心机制。注意两条命令都通过sudo调用fail2ban-client这是因为 fail2ban 的状态查询需要 root 权限而 Zabbix agent 默认以zabbix用户运行。因此必须为zabbix用户配置免密 sudo 权限见下文安装步骤否则监控项会持续报权限错误。安装与配置完整步骤7.0 版 READMEApplications/Firewall/template_fail2ban/7.0/README.md给出了完整的安装流程这也是整个模板唯一的部署动作分五步第 1 步放置用户参数配置文件。将仓库中的 fail2ban.conf 复制到 Zabbix agent 的配置目录/etc/zabbix/zabbix_agentd.d/fail2ban.conf该目录是 agent 默认的Include配置片段目录agent 启动时会自动加载其中所有*.conf文件。第 2 步重启 Zabbix agent 服务。systemctl restart zabbix-agent重启后 agent 才会加载新增的用户参数。第 3 步配置 sudo 免密权限。创建文件/etc/sudoers.d/zabbix-fail2ban设置权限为 440、属主为 root:rootsudoers 片段文件的强制安全要求并写入一行zabbix ALLNOPASSWD: /usr/bin/fail2ban-client含义是允许zabbix用户在任意主机上以无需密码的方式执行/usr/bin/fail2ban-client。权限值被精确限定到该命令本身避免给zabbix用户过大的 sudo 权限面属于最小权限原则的实践。第 4 步验证权限与数据通路。以 zabbix 用户身份实际执行一次查询确认不再报 permission denied$ sudo -u zabbix sudo /usr/bin/fail2ban-client status Status |- Number of jail: 2 - Jail list: frps-ssh-ban, sshd得到上述输出即说明 sudo 配置生效。若出现sudo: no password was provided或permission denied需回头检查/etc/sudoers.d/zabbix-fail2ban的文件权限必须 440、root 属主与 sudoers 语法可用visudo -c校验。第 5 步导入模板并链接到主机。在 Zabbix Web 界面中导入对应版本的模板文件5.0 导入 template_fail2ban.xml5.4 及以上导入对应的 template_fail2ban.yaml然后在目标主机上链接Fail2ban模板。由于模板不依赖任何宏链接后无需额外填写宏参数即可开始采集。模板核心对象逐项详解以下对象定义可直接从模板导出文件中核对5.0 版见 template_fail2ban.xml5.4 版见 template_fail2ban.yaml。监控项Items collected模板定义了两类监控项名称类型键值更新间隔说明Fail2Ban service is runningZabbix agentproc.num[fail2ban-server]60s统计名为fail2ban-server的进程数量作为守护进程存活的ping探针应用了Service state值映射Fail2ban $1 banned IPsZabbix agentfail2ban.status[{#JAIL}]60sLLD 原型监控项{#JAIL}由发现规则填充统计指定 jail 当前封禁的 IP 数units: count归属 Fail2ban 应用服务探针proc.num[fail2ban-server]是 Zabbix agent 的内置键无需任何脚本即可工作返回值为 0 或 1fail2ban-server 通常为单进程。该监控项在 5.4 版本中带有Application: Fail2ban标签见 template_fail2ban.yaml。封禁数监控项的名称在 5.0/5.4 版为Fail2ban $1 banned IPs$1 为参数占位符6.0/7.0 版更名为更明确的Fail2ban {#JAIL} banned IPs其余定义一致。发现规则Discovery rules名称类型键值更新间隔说明Fail2ban discoveryZabbix agentfail2ban.discovery30s从 fail2ban 守护进程发现全部 jail见上文用户参数解析该发现规则附带两类原型监控项原型item prototypefail2ban.status[{#JAIL}]更新间隔 60s单位count图形原型graph prototypeCount of banned IPs on jail {#JAIL}将fail2ban.status[{#JAIL}]绘制为趋势线颜色00C800绿色。每个新发现的 jail 都会自动生成一张独立图表直观呈现该 jail 封禁 IP 数量的历史变化。7.0 版为发现规则额外配置了lifetime: 30d与enabled_lifetime_type: DISABLE_NEVER见 7.0/template_fail2ban.yaml并为其原型监控项设置了history: 90d即被自动创建出的原型监控项默认保留 90 天历史数据、30 天趋势数据。触发器与值映射关联文档的 README 中声明模板中没有触发器There are no triggers in this template但实际导出的模板文件里包含一个关键触发器这是 README 与模板定义不一致的地方需以模板文件为准触发器名称Fail2ban server is Down表达式5.0 XML 中为{last()}05.4 及以后为last(/Fail2ban/proc.num[fail2ban-server])0见 5.4/template_fail2ban.yaml告警级别AVERAGE平均即当proc.num[fail2ban-server]的最近值等于 0进程消失时触发告警第一时间提醒运维人员 fail2ban 守护进程已停止——此时所有暴力破解防御将失效属于需要尽快处理的中等级别故障。配合该触发器使用的是Service state值映射value map将原始数值翻译为人类可读状态值映射结果0Down1Up该值映射定义于模板文件的valuemaps段5.4/template_fail2ban.yaml在监控项详情中以直观的 Up/Down 替代 0/1 展示。宏与模板链接模板未使用任何用户宏README 中明确 There are no macros links in this template也未链接任何其他模板There are no template links in this template。这意味着模板零配置即可运行不继承其他模板的监控项也无需为不同主机调整宏参数——所有主机共享同一套采集逻辑。数据流与调用链全景将上述对象串联起来整个模板在 Zabbix 中的完整工作链路如下LLD 阶段每 30sZabbix server 向 agent 发起fail2ban.discovery请求 → agent 执行sudo /usr/bin/fail2ban-client status | grep Jail list: | sed ...→ 返回{data:[{{#JAIL}:sshd},...]}→ server 为每个 jail 创建原型监控项与原型图形数据采集阶段每 60sserver 依次采集proc.num[fail2ban-server]内置键直接读取进程表与fail2ban.status[{#JAIL}]执行sudo /usr/bin/fail2ban-client status jail并抽取Currently banned数值;评估阶段proc.num[fail2ban-server]最新值经Service state值映射展示若为 0 则触发Fail2ban server is DownAVERAGE告警可视化阶段每个 jail 的封禁数进入Count of banned IPs on jail {#JAIL}图形形成随时间变化的封禁趋势曲线。值得一提的是该模板的监控项全部由 Zabbix agent被动模式驱动server 端无需部署任何外部脚本或 HTTP 探针agent 端也仅依赖系统自带的sudo、grep、sed工具链没有引入额外的解释器或依赖部署成本极低。各版本差异与适用前提仓库为同一模板维护了 4 个版本差异总结如下版本文件格式与 5.0 相比的主要差异5.0XMLtemplate_fail2ban.xml基准版本触发器表达式为简写{last()}05.4YAMLtemplate_fail2ban.yaml引入 uuid、监控项Application: Fail2ban标签触发器改为完整表达式last(/Fail2ban/proc.num[fail2ban-server])06.0YAML6.0/template_fail2ban.yaml与 5.4 定义基本一致命名升级为Fail2ban {#JAIL} banned IPs7.0YAML7.0/template_fail2ban.yaml新增原型监控项history: 90d、发现规则lifetime: 30d与enabled_lifetime_type: DISABLE_NEVERREADME 注明兼容 5.0~7.0 并实测于 7.2.5适用前提与限制依据仓库内容务必注意目标主机必须安装 fail2ban 与 zabbix-agent且 agent 版本与所选模板版本匹配5.0 模板对应 Zabbix 5.0以此类推7.0 模板兼容面最广必须完成 sudoers 免密配置否则fail2ban.status[*]与fail2ban.discovery两个键都会因权限不足而无法返回数据模板仅采集当前被封禁 IP 的数量这一标量指标不采集封禁明细如具体 IP 地址、封禁时长若需要明细需自行扩展用户参数触发器的存在以模板文件为准——README 声称无触发器但实际模板中带有Fail2ban server is DownAVERAGE。常见问题与排障建议监控项显示 Unsupported item key多为用户参数文件未生效。检查fail2ban.conf是否位于 agent 的 Include 目录如/etc/zabbix/zabbix_agentd.d/、是否重启了 agent可用zabbix_agentd -t fail2ban.discovery在 agent 端直接测试键值是否返回 JSON。监控项返回权限相关错误执行sudo -u zabbix sudo /usr/bin/fail2ban-client status复现若提示权限问题核对/etc/sudoers.d/zabbix-fail2ban的权限440、root:root与 sudoers 语法visudo -c并确认 fail2ban-client 路径确为/usr/bin/fail2ban-client可用which fail2ban-client核实后按需调整 sudoers 与用户参数中的路径。发现规则不产生任何 jail在 agent 端手动执行fail2ban-client status确认Jail list:行存在且至少有一个 jail若 fail2ban 自身未配置任何 jailfail2ban.discovery将返回空{data:[]}此时不会创建任何监控项属预期行为。告警频繁误报确认服务器上存在名为fail2ban-server的进程fail2ban 守护进程的进程名若部署环境进程名不同需要同步调整模板中的proc.num[fail2ban-server]键与 sudoers 配置。通过以上配置你便能在 Zabbix 中完整掌握 Fail2ban 的运行状态任何 jail 的封禁规模变化一目了然fail2ban-server 进程异常退出也会在 60 秒内触发 AVERAGE 级告警为 SSH 等服务的暴力破解防御提供持续、自动化的观测能力。赞分享【免费下载链接】community-templatesZabbix Community Templates repository项目地址https://gitcode.com/gh_mirrors/co/community-templates点击查看免费下载相关推荐restic 备份监控 Zabbix 模板实战基于 resticprofile 状态文件实现失败与超时告警restic 备份监控 Zabbix 模板实战基于 resticprofile 状态文件实现失败与超时告警 本文面向 Zabbix 管理员与备份运维工程师深Zabbix 通过 ODBC 监控 MySQL 实战指南基于官方模板的部署、发现与告警解析Zabbix 通过 ODBC 监控 MySQL 实战指南基于官方模板的部署、发现与告警解析 本指南以当前仓库中 Zabbix 官方模板 templates/d指标监控可观测性告警运维Zabbix 监控 IBM Spectrum ProtectTSMJournal Service 服务状态模板应用与自动拉起实战指南Zabbix 监控 IBM Spectrum ProtectTSMJournal Service 服务状态模板应用与自动拉起实战指南 本指南围绕 Zabb上一篇终极加密货币交易机器人pytrader如何用机器学习预测价格走势下一篇hotel代码重构案例从JavaScript迁移到TypeScript的经验总结创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考