Git 原生协议与 9418 端口
9418 是 Git 原生协议 git:// 的默认端口。它对应 git daemon 提供的匿名访问:客户端只读克隆,服务端既不做加密也不做认证。协议简单、开销小,公共镜像站(发行版与内核仓库镜像)历史上大量使用;但它不支持推送与鉴权,企业内网应优先走 SSH 或 HTTPS。
基本信息
| 服务 | Git protocol(git daemon) |
|---|---|
| 端口/协议 | TCP 9418,无加密无认证 |
| 能力范围 | 默认仅只读克隆与抓取 |
| 启用方式 | git daemon 指定基础路径并导出仓库 |
| 权限要求 | 服务端需系统账号,客户端无需凭据 |
| 安全等级 | 仅公开数据可用,私有代码禁用 |
典型使用场景
- 公共镜像分发:镜像站用 9418 提供只读克隆
- 内网免密拉取:对确认为公开内容的代码做只读分发
- 构建加速:为大量构建机降低拉取开销
- 离线环境同步:镜像节点之间周期性抓取
- 流量排查:出口出现 9418 通常说明存在匿名 Git 抓取
克隆与协议切换
克隆与协议切换
git clone git://mirror.example.com/repo.git # 匿名只读克隆
# 服务端只读导出(谨慎使用)
# git daemon --reuseaddr --base-path=/srv/git --export-all --verbose
git remote set-url origin git@git.example.com:repo.git # 切回受控协议
ss -lntp | grep 9418 # 确认监听与进程
firewall-cmd --permanent --add-port=9418/tcp # 如确需放行再开三种传输对照
| 传输 | 端口 | 特性 |
|---|---|---|
| git:// | 9418 | 匿名只读,无加密无认证 |
| ssh | 22 | 认证加密,支持推送 |
| https | 443 | 证书与凭据,穿透性好,便于审计 |
运维要点
- 只读镜像用 9418,私有仓库一律用 SSH 或 HTTPS 承载
- 明确区分匿名抓取与受控访问,避免团队混用两套远端地址
- 防火墙阻断前先确认内网镜像站是否依赖它,否则会拖慢构建
- 镜像站定期核对仓库清单,避免悄悄导出了不该公开的仓库
- 把出口的 9418 流量纳入可视化,异常增长往往意味着配置被改动
9418 上没有传输加密,仓库内容与元数据都可能被链路上的中间人观察。公开镜像无所谓,私有代码必须换协议,别为省一点带宽把源码放在明文链路上。
git daemon 若启用接收推送又未限制来源,等于开放匿名推送,攻击者可改写分支与标签。除非是完全可控的内网环境,不要打开这个选项。