- 设置一个白名单列表
- 检查到登录用户IP信息不在白名单,发送信息到指定邮箱
#!/bin/bash
KNOWN_IP_FILE="/path/to/known_ips.txt"
EMAIL_TO="test@163.com"
LOG_FILE="/var/log/monitor_login.log"
if [ ! -f "$KNOWN_IP_FILE" ]; thenecho "$(date) - ERROR: 常用IP地址列表文件 $KNOWN_IP_FILE 不存在。" >> "$LOG_FILE"exit 1
fi
current_login_info=$(who)
if [ -z "$current_login_info" ]; thenecho "$(date) - ERROR: 无法获取当前登录信息。" >> "$LOG_FILE"exit 1
fi
current_ips=$(echo "$current_login_info" | awk '{print $5}' | tr -d '()' | sort | uniq)
if [ -z "$current_ips" ]; thenecho "$(date) - INFO: 当前无登录用户或无法提取IP地址。" >> "$LOG_FILE"exit 0
fi
for ip in $current_ips; doif ! grep -q "$ip" "$KNOWN_IP_FILE"; thenmail_subject="警报: 检测到来自IP $ip 的异常登录"mail_body="检测到来自IP: $ip 的异常登录\n\n当前登录详细信息:\n$current_login_info"echo "$mail_body" | mail -s "$mail_subject" "$EMAIL_TO"echo "$(date) - ALERT: 发送警报邮件,检测到来自IP $ip 的异常登录。" >> "$LOG_FILE"elseecho "$(date) - INFO: 登录IP $ip 在常用列表中。" >> "$LOG_FILE"fi
done