网站后台异地登录提醒,邮件推送登录通知

网站后台如果只靠账号密码保护,一旦密码泄露,攻击者从异地登录你往往毫无察觉。
本文面向零基础站长,讲清楚如何通过邮件推送实现后台异地登录提醒,涵盖宝塔面板邮件配置、登录监控脚本编写、定时任务部署和验证方法。
跟着做完,你就能在有人异地登录后台时收到邮件通知。

准备工作:确认环境与邮件通道

动手之前先确认两件事:服务器能发邮件,以及你知道后台登录日志存在哪。

  • 服务器环境:本文以宝塔面板(Linux 版)为例,其他面板或纯命令行环境思路类似,路径需自行调整。
  • 邮件发送方式:推荐用 SMTP 发信。你需要一个支持 SMTP 的邮箱,比如 QQ 邮箱、163 邮箱或企业邮。以 QQ 邮箱为例,进入 设置 → 账户,开启 SMTP 服务,生成一串 授权码,后面脚本里用授权码而不是邮箱密码。
  • 登录日志位置:不同程序日志不同。常见的有宝塔面板自身的 /www/server/panel/logs/request/ 下的登录日志,或网站程序自带的 admin 登录记录表。本文以宝塔面板登录日志为例。
提示:如果服务器是全新环境,先执行 apt install mailutils 或 yum install mailx 安装基础邮件客户端,但用脚本发信更灵活。

配置邮件推送:用 Python 脚本发送登录通知

宝塔面板自带 Python 环境,我们直接写一个发信脚本。
登录服务器 SSH,执行 mkdir -p /www/wwwroot/login_alert 创建目录,然后新建脚本文件 vi /www/wwwroot/login_alert/send_mail.py,粘贴以下内容:

import smtplib
from email.mime.text import MIMEText
from email.header import Header
import sys

# 邮件配置
smtp_server = 'smtp.qq.com'
smtp_port = 465
sender = '你的邮箱@qq.com'
password = '你的SMTP授权码'
receiver = '接收通知的邮箱@qq.com'

# 获取登录信息
login_ip = sys.argv[1] if len(sys.argv) > 1 else '未知IP'
login_time = sys.argv[2] if len(sys.argv) > 2 else '未知时间'

subject = '网站后台异地登录提醒'
body = f'你的网站后台在 {login_time} 有登录行为,登录IP:{login_ip}。如非本人操作,请立即修改密码。'

msg = MIMEText(body, 'plain', 'utf-8')
msg['From'] = Header(sender)
msg['To'] = Header(receiver)
msg['Subject'] = Header(subject, 'utf-8')

try:
    smtp = smtplib.SMTP_SSL(smtp_server, smtp_port)
    smtp.login(sender, password)
    smtp.sendmail(sender, [receiver], msg.as_string())
    smtp.quit()
    print('邮件发送成功')
except Exception as e:
    print('发送失败:', e)

保存后,先手动测试一下:python3 /www/wwwroot/login_alert/send_mail.py 123.123.123.123 "2025-01-01 10:00:00"。
如果接收邮箱能收到提醒邮件,说明邮件通道已经打通。关键点:授权码不要写错,QQ 邮箱的 SMTP 端口用 465。

监控登录日志并触发通知

邮件能发出去之后,需要让脚本在有人登录时自动执行。
宝塔面板的登录日志在 /www/server/panel/logs/request/ 目录下,按日期命名。
我们可以写一个监控脚本,检测到新登录记录就调用发信脚本。

新建 vi /www/wwwroot/login_alert/check_login.sh,内容如下:

#!/bin/bash
LOG_DIR="/www/server/panel/logs/request"
TODAY=$(date +%Y-%m-%d)
LOG_FILE="$LOG_DIR/$TODAY.log"
LAST_FILE="/www/wwwroot/login_alert/last_line.txt"

if [ ! -f "$LOG_FILE" ]; then
    exit 0
fi

CURRENT_LINES=$(wc -l < "$LOG_FILE")
if [ -f "$LAST_FILE" ]; then
    LAST_LINES=$(cat "$LAST_FILE")
else
    LAST_LINES=0
fi

if [ "$CURRENT_LINES" -gt "$LAST_LINES" ]; then
    # 提取新增行中的登录IP和时间,这里简化处理,取最后一行
    NEW_LINE=$(tail -n 1 "$LOG_FILE")
    IP=$(echo "$NEW_LINE" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1)
    TIME=$(date '+%Y-%m-%d %H:%M:%S')
    python3 /www/wwwroot/login_alert/send_mail.py "$IP" "$TIME"
fi
echo "$CURRENT_LINES" > "$LAST_FILE"

赋予执行权限:chmod +x /www/wwwroot/login_alert/check_login.sh。
这个脚本会记录上次读取的行数,发现新增登录记录就发邮件。

设置定时任务与效果验证

脚本写好了,用 crontab 让它每分钟检查一次。
执行 crontab -e,添加一行:

* * * * * /bin/bash /www/wwwroot/login_alert/check_login.sh >/dev/null 2>&1

保存退出。
然后手动触发一次登录测试:退出宝塔面板,重新登录。
等待一分钟左右,检查接收邮箱是否收到主题为“网站后台异地登录提醒”的邮件。
如果没收到,按下面顺序排查:

  • 检查脚本权限:确保 check_login.sh 有执行权限,send_mail.py 能被 python3 正常调用。
  • 查看日志:手动执行 bash -x /www/wwwroot/login_alert/check_login.sh,看输出是否有报错;同时检查 /var/log/cron 里任务是否执行。
  • 邮件拦截:QQ 邮箱可能把通知邮件放进垃圾箱,检查垃圾邮件文件夹,并把发件人加入白名单。
  • IP 提取失败:如果日志格式不同,grep 提取 IP 可能为空,此时邮件仍会发送但 IP 显示“未知”。需要根据实际日志调整正则。

判断条件:只要手动执行发信脚本能收到邮件,且定时任务在运行,异地登录提醒就能生效。

避坑与安全加固建议

这套方案本质是“日志监控 + 邮件通知”,部署时注意以下几点:

  • 授权码泄露风险:不要把含授权码的脚本放在 Web 可访问目录,建议放在 /www/wwwroot 之外,比如 /root/scripts/。
  • 日志轮转:宝塔日志按天分割,脚本只检查当天文件,跨天时 last_line.txt 需要重置,可在脚本开头判断日期变化并清零。
  • IP 归属地:邮件里只显示 IP,如果想显示归属地,可以调用公开 IP 库 API,但注意隐私和频率限制。
  • 多重验证:邮件提醒只是事后通知,建议同时开启宝塔的二次验证或修改默认端口,降低被扫描风险。

另一个可独立摘录的结论:异地登录提醒不能替代强密码和二次验证,它只是让你更快发现异常。

常见疑问

问:没有宝塔面板,纯 LNMP 环境怎么实现?
答:思路一样,找到你的网站程序登录日志路径,比如 WordPress 可以监控 wp_users 表的 user_registered 或安装登录日志插件,然后用同样的脚本逻辑发邮件。

问:邮件发送频率太高怎么办?
答:可以在脚本里加一个判断,比如同一 IP 5 分钟内只发一次,用临时文件记录时间戳。

问:能改成微信推送吗?
答:可以,把发信部分换成企业微信机器人或 Server 酱的 API 调用,但需要额外申请和配置,新手建议先用邮件跑通。

问:为什么登录了却没收到邮件?
答:先手动执行 check_login.sh 看是否有输出,再检查 crontab 是否写对,最后确认日志文件路径和格式是否匹配。

按照以上步骤,你就能为网站后台加上异地登录邮件提醒。
整个过程不复杂,关键是邮件通道要通、日志路径要对、定时任务要跑起来。
配置完成后,建议再故意异地登录一次,确认邮件能正常送达。

分享到:
上一篇
网站上传目录禁止脚本执行,Nginx配置代码
下一篇
网站密码定期修改提醒,管理员账号安全策略
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意