核心是识别账号物理位置突变而非拦截所有远程登录:同一账号30分钟内从北京IDC切换至巴西圣保罗IP即告警,需基于经纬度、动态地理基线、球面距离与运维时段策略综合判断。

针对关键核心资产的管理端口异地访问告警,核心不是拦截所有远程登录,而是识别“物理位置突变”——同一账号从北京IDC出口登录属常态,若30分钟内又从巴西圣保罗IP发起SSH或RDP连接,即使凭证正确,也应立即告警。这依赖真实地理坐标(经纬度)而非单纯IP归属地,需结合用户历史可信位置基线、球面距离计算与运维时段策略。
建立用户级动态地理基线
每个管理员账号需独立维护其“可信地理画像”。不能用全公司统一白名单,而应按人聚合最近7天成功登录的Top3–5个源IP,调用本地MaxMind GeoLite2数据库解析出经纬度,加权计算地理中心点(避免被单次出差IP污染)。基线数据建议以JSON格式存于/var/lib/ssh/geo-baseline-{username}.json,含字段:center_lat、center_lon、last_updated、ip_list。新用户前3次登录可设为学习期,仅记录不告警。
实时计算球面偏移距离并触发分级告警
在登录认证完成后、会话建立前介入判断:
- 使用LoginNotifyCommand(OpenSSH ≥8.2必备)或PAM pam_exec模块获取客户端真实IP(%h或$PAM_RHOST),跳过127.0.0.1及RFC1918私有网段
- 查该IP经纬度,用Haversine公式计算与用户基线中心点的球面距离(单位km)
- 距离>500km 且当前时间不在08:00–20:00内 → 发送紧急告警(企业微信/短信)
- 距离>1500km 或跨时区数≥3 → 同步冻结该账号15分钟,并写入审计日志标记“GEO-DRIFT-SEV1”
适配移动办公与网络抖动场景
纯距离阈值易误报,需叠加上下文校正:
- 对4G/5G出口IP(如运营商AS号匹配China Telecom AS4847)自动放宽至800km,因基站切换可能导致短时坐标跳变
- 若本次IP与基线IP同属一个国家但城市不同(如北京→深圳),且时间在工作日09:00–18:00间,降级为“提示级”日志,不推通知
- 对连续2次登录IP地理距离递增(如200km→600km→1200km),启动日志聚类分析,判定是否为渐进式凭证盗用
确保IP地理位置数据真实可靠
避免依赖DNS反解或不可信API:
- 优先使用本地MaxMind GeoLite2 City数据库(免费版已足够),每月自动更新MMDB文件
- 禁用curl调用公网API(如ipinfo.io)做实时查询,防止网络延迟导致sshd阻塞;确需外联时,加500ms超时与本地缓存fallback
- 对CDN或代理出口IP(如Cloudflare ASN),标记为“UNVERIFIED”,距离计算时强制+300km容差,并附加告警说明“via CDN, location uncertain”
不复杂但容易忽略

















