监控非法镜像拉取需构建认证、日志、策略、告警闭环体系:关闭匿名访问,强制HTTPS+Token认证;启用Harbor审计日志或Registry+docker_auth细粒度日志;识别401/403未授权请求、异常时段/频次/标签/侦察行为;接入Loki/ELK与Prometheus告警;Nginx层限流+GeoIP阻断;强制DCT签名与客户端校验,并用Trivy扫描敏感信息。

要监控非法镜像拉取,关键不是打开某个“开关”,而是构建一套覆盖认证、日志、策略和告警的闭环审计体系。单纯依赖仓库自带的日志功能远远不够,必须结合访问控制与行为分析才能识别“非法”——比如未授权用户、绕过签名的拉取、或来自异常IP的高频请求。
启用细粒度认证与操作日志
私有仓库(如Harbor、Docker Registry + docker_auth)必须关闭匿名访问,并强制HTTPS+Token/Basicauth。Harbor默认开启审计日志,路径为/data/log/audit.log;开源Registry需配合docker_auth服务,在其配置中启用log_level: debug并输出到标准输出,再由容器运行时统一收集。
- 确认
config.yml中auth段已启用,且token服务指向有效后端 - 所有
pull请求必须携带Authorization: Bearer xxx头,无此头即为非法尝试 - 定期检查日志中含
"method":"GET"且"status":"401"或"403"的条目,这是未授权探测的直接证据
识别高风险拉取行为
合法拉取通常具备可追溯的主体(服务账号、CI Job ID)、固定时段、有限频次和已知IP段。非法拉取往往暴露以下特征:
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
- 使用通用用户名(如
admin、test)或空凭证反复尝试登录 - 在非工作时间(如凌晨2–5点)集中拉取大量镜像,尤其含
:latest或:dev等非生产tag - 请求
/v2/_catalog或/v2/<repo>/tags/list但无后续pull,属典型侦察行为 - User-Agent为
curl/7.68.0、python-requests等非标准客户端,而非docker-cli或nerdctl
对接可观测平台做实时拦截
将仓库日志接入Loki或ELK,用Prometheus采集Harbor的harbor_core_http_request_total{code=~"4.."} 指标,设置如下告警规则:
- 15分钟内同一IP触发5次以上401响应 → 触发“暴力探测”告警
- 单个用户1小时内拉取镜像数超200个 → 触发“数据爬取”告警
-
harbor_replication_task_status{status="Failed"}连续失败2次 → 检查是否被恶意中断同步
更进一步,可在Nginx反向代理层配置limit_req限制单IP拉取频率,并用geoip2模块标记境外非常用区域请求,自动加入阻断名单。
验证镜像来源真实性
非法拉取常伴随不可信镜像引入。必须启用内容信任机制:
- 对私有仓库启用Docker Content Trust(DCT),要求所有
push必须带签名:DOCKER_CONTENT_TRUST=1 nerdctl push registry.example.com/app:signed - 客户端强制校验:
DOCKER_CONTENT_TRUST=1 nerdctl pull registry.example.com/app:signed,未签名则拒绝拉取 - 结合Trivy或Snyk定期扫描镜像层,发现含
aws_access_key、ssh_host_rsa_key等敏感字样的镜像立即下线并溯源拉取记录

















