创建一个脚本目录
jsmkdir -p /etc/zabbix/scripts
创建一个脚本
jsvi /etc/zabbix/scripts/check_login_ip.sh
脚本内容
js#!/bin/bash
# 基于lastlog命令检测用户异地登录(适配root用户,可扩展其他用户)
# ========== 配置项 ==========
TARGET_USER="root"
WHITELIST_IPS=( "192.168.201.101" "192.168.201.1" "192.168.201.0/24" )
TMP_DETAIL="/tmp/login_ip_detail.log"
# ===========================
# 初始化临时文件
> $TMP_DETAIL
# 步骤1:提取登录IP
LOGIN_IP=$(lastlog | grep "^${TARGET_USER}" | awk '{print $3}')
# 步骤2:处理特殊情况
if [ -z "$LOGIN_IP" ] || [ "$LOGIN_IP" = "*" ] || [ "$LOGIN_IP" = "localhost" ]; then
echo "0"
echo "用户${TARGET_USER}无有效登录IP:IP=${LOGIN_IP}" > $TMP_DETAIL
exit 0
fi
# 步骤3:对比白名单(核心修复:区分单个IP和网段)
ABNORMAL_FLAG=1 # 默认异常
for WHITELIST_IP in "${WHITELIST_IPS[@]}"; do
# 判定是否是网段(包含/)
if echo "$WHITELIST_IP" | grep -q "/"; then
# 网段:用ipcalc匹配
if ipcalc -s "$LOGIN_IP" "$WHITELIST_IP" >/dev/null 2>&1; then
ABNORMAL_FLAG=0
break
fi
else
# 单个IP:直接字符串精准匹配(避开ipcalc坑)
if [ "$LOGIN_IP" = "$WHITELIST_IP" ]; then
ABNORMAL_FLAG=0
break
fi
fi
done
# 步骤4:记录详细信息
if [ $ABNORMAL_FLAG -eq 1 ]; then
DETAIL_MSG="【异地登录告警】用户=${TARGET_USER}, 登录IP=${LOGIN_IP}, 白名单IP=${WHITELIST_IPS[*]}"
else
DETAIL_MSG="【正常】用户=${TARGET_USER}, 登录IP=${LOGIN_IP}(在白名单内)"
fi
echo "$DETAIL_MSG" > $TMP_DETAIL
# 步骤5:返回状态
echo $ABNORMAL_FLAG
js# 1. 脚本赋权
chmod +x /etc/zabbix/scripts/check_login_ip.sh
chown zabbix:zabbix /etc/zabbix/scripts/check_login_ip.sh
# 2. 测试脚本(切换zabbix用户,验证输出)
su - zabbix -s /bin/bash -c "/etc/zabbix/scripts/check_login_ip.sh"
# 预期输出:
# 情况1(IP在白名单):0
# 情况2(IP异地):1
创建一个配置文件
jsvi /etc/zabbix/zabbix_agent2.d/login_ip_monitor.conf
js# 监控项1:异地登录状态(0=正常,1=异常)- 数值型,用于触发器
UserParameter=system.login.ip.abnormal,/etc/zabbix/scripts/check_login_ip.sh
# 监控项2:登录IP详细信息 - 字符型,用于告警文案
UserParameter=system.login.ip.detail,cat /tmp/login_ip_detail.log 2>/dev/null || echo "无登录信息"
重启 Agent 生效
jssystemctl restart zabbix-agent
# 验证监控项(Agent本地测试)
zabbix_agentd -t system.login.ip.abnormal # 应返回0/1
zabbix_agentd -t system.login.ip.detail # 应返回详细信息
web页面进行配置

第一个监控项
第二个监控项

创建触发器

验证是否触发,把脚本的网段改别的ip
改了后立马触发,异常为1,正常为0

本文作者:松轩(^U^)
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!