未鉴权gRPC接口暴露公网风险,gRPC网关安全配置

未鉴权的 gRPC 接口一旦暴露到公网,等于把你的后端服务直接交给任何人调用。
本文先教你用命令判断接口是否裸奔,再通过 JWT 鉴权和 Nginx 反向代理完成 gRPC 网关安全配置,全程给出可执行命令和验证方法,零基础也能跟着操作。

先确认 gRPC 接口是否真的暴露在公网

登录服务器后,先看端口监听情况:

ss -tlnp | grep 9090

如果监听地址是 0.0.0.0:9090 或 :::9090,说明服务绑定了所有网卡,公网 IP 也能直连。
再用 grpcurl 验证能否直接调用:

grpcurl -plaintext 你的公网IP:9090 list

只要返回服务列表或方法名,就说明未鉴权 gRPC 接口已经裸奔,任何知道地址的人都能操作你的后端。
即使没有 grpcurl,也可以用 nc -vz 你的公网IP 9090 快速判断端口是否可连通。

在 gRPC 网关层启用 JWT 鉴权

使用 grpc-gateway 时,可以写一个拦截器校验 JWT。
下面是一段常见中间件示例(Go):

func JWTInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
    token, err := auth.FromIncomingContext(ctx)
    if err != nil || !auth.ValidateToken(token) {
        return nil, status.Error(codes.Unauthenticated, "invalid token")
    }
    return handler(ctx, req)
}

初始化 gRPC Server 时挂上拦截器:

grpc.NewServer(grpc.UnaryInterceptor(JWTInterceptor))

如果你用 Envoy 作为 gRPC 网关,也能直接配置 JWT 认证过滤器,效果类似。
这里顺手提醒一下,JWT 签名密钥不要硬编码在代码里,建议放在环境变量或密钥管理服务中,并定期轮换。

用 Nginx 做 TLS 终结并隐藏源端口

Nginx 从 1.13 开始支持 gRPC 反向代理。
在站点配置中写:

server {
    listen 443 ssl http2;
    server_name api.example.com;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location / {
        grpc_pass grpc://127.0.0.1:9090;
    }
}

关键操作是让 gRPC 服务只监听 127.0.0.1:9090,防火墙只放行 Nginx 的 443 端口。
这样可以避免客户端不经过 TLS 和鉴权直接访问到原始服务。只要服务端口还能从公网访问,反向代理配置得再漂亮也没有意义。

避坑:这些细节会导致配置失效

配置完成后,至少验证三件事:

  1. 未带 token 是否正确拒绝:执行 grpcurl -plaintext 127.0.0.1:9090 list,预期返回 Unauthenticated 或 PermissionDenied,而不是服务列表。
  2. 通过 Nginx 是否能正常访问:执行 grpcurl -insecure -servername api.example.com -H "authorization: Bearer 你的token" api.example.com:443 list,预期返回服务列表。
  3. 源端口是否已从公网消失:用 nmap 你的公网IP -p 9090 检查,预期显示 filtered 或 closed,只有 443 是开放状态。

常见坑有两个:一是只改 Nginx 配置,没有关闭 gRPC 服务的公网监听,导致 9090 仍然可访问;
二是健康检查接口也需要鉴权,导致 Kubernetes 探活失败,应单独放行 /grpc.health.v1.Health/Check。

最后自查清单

完成上述操作后,建议把下面几条写进发布流程:服务监听只绑定内网 IP;
外部调用必须经 Nginx 走 TLS;
所有业务接口必须携带 JWT;
密钥通过环境变量注入;
定期检查访问日志中是否有大量未授权请求。
gRPC 网关安全配置不是一次性工作,每次改动端口、路由或新增接口时,都要重新确认公网暴露面。
只有把“未鉴权即拒绝”变成默认行为,接口才能真正安全。

分享到:
上一篇
漏洞应急响应标准流程:检测‑隔离‑修复‑验证‑复盘
下一篇
业务IP被墙后排查,区分是IP污染还是端口协议封禁
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 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意