公网开放服务通过 https+basic auth 是否能抵御一些 0day 漏洞? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
f1ynnv2
V2EX    问与答

公网开放服务通过 https+basic auth 是否能抵御一些 0day 漏洞?

  •  
  •   f1ynnv2 6 天前 1338 次点击
    从这次飞牛 0day 这么恶劣的影响来看,在公网上开放服务真的是非常危险,尤其是碰到 0day 漏洞持续这么久不作为,更加重了影响。

    我为了方便一些服务使用,比如 dokuwiki, mtphotos 以及自己用 docker 部署的一些小工具,都还是开放了公网的端口访问,采用 DDNS 。

    目前我的方案是这样,即使服务原生还权限验证包括什么 2FA 啥的,我都把它们部署在内网提供 http 服务,然后自己部署了一套 caddy (之前是用 nginx)来提供 https 再加一层 basic auth 认证。

    比如 dokuwiki 和 mtphotos ,他们本身都有用户名认证,但是我在外网需要访问的时,打开对应的端口时需要先输入外层的 basic auth 认证才会进入这些服务自己的登陆界面,再输入用户名密码。

    这套方案是之前在公司部署 jira 和 confluence 时折腾出来的,老早部署了 jira 之后三天两头被网关发邮件说有漏洞,后来在外面套了一层 https+basic auth 之后就再也没被扫到过了。

    按我的理解,这些漏洞不管怎么严重最终都是需要通过开放的端口来进行命令注入的,只要最外层的 https basic auth 不泄漏其实他们就进不去那些有漏洞的服务端口。

    这个方案有两个缺点,一是每次需要输入两次认证,有些浏览器似乎会较长时间记住外层的 basic auth 比如 firefox 但是 safari 就需要每次都输入(不过只要网页不关闭就不需要重复输入);二是有些服务是占用了 http header 里的 auth 字段导致外层的 basic auth 和服务的用户认证冲突。

    这里要表扬一下 mtphotos ,最早的时候 mtphotos 就是使用了 http header 里的 auth 字段来传输认证导致和我外层的 basic auth 冲突,后来在群里提出这种用户之后(虽然有其它用户不屑这种用法),作者很快就更新了认证机制,现在不管是网页打开 mtphotos 还是 app 连接 mtphotos 都支持这种双层认证。

    不知道这种方案有没有其它缺陷? https 的 basic auth 应该是最简单粗暴,除了中间人攻击外应该不会有什么漏洞绕过吧?
    16 条回复    2026-02-08 19:30:40 +08:00
    dushixiang
        1
    dushixiang  
       6 天前
    除了每次都需要输入账号密码之外没啥问题,但是 basic auth 设置的简单了容易被爆破,设置的复杂了有记不住,每次都要去密码本里面找。
    所以我的 Next-Terminal 就可以完美的解决这种问题,想要访问必须先登录鉴权,支持设置验证码、暴力破解账号 或 IP 锁定,也支持设置禁止密码登录,使用 Passkey 。

    一个演示地址 https://baidu.typesafe.cn
    登录 test/test 账号有权限访问,manager/manager 无权限访问
    f1ynnv2
        2
    f1ynnv2  
    OP
       6 天前
    @dushixiang 感谢大佬,看了一下这个方案,真的是完美啊比 basic auth 体验好多了,尤其是支持 passkey 。准备付费了。 有一些疑问,像是 mtphotos 这种 app 和网页连接一样的端口,网页登录的时候可以通过 next terminal 鉴权,那 app 登录的时候是不是就没办法通过 next terminal 了?
    dushixiang
        3
    dushixiang  
       6 天前
    @f1ynnv2 目前已经增加了一个临时 IP 白名单的功能,点击后会自动放行 IP XX 分钟(这个时间可以自定义),另外还可以通过内置的 API Token 来定时请求接口来放行 IP 。
    Heisenhower
        4
    Heisenhower  
       6 天前
    装一个雷池( safeline )社区版就够用了
    bigtan
        5
    bigtan  
       6 天前
    我家里的小主机啥的都是 ipv6 直接公网可以访问,不过我都是更新比较勤,而且 ssh 只开 key ,到现在还没出过事。
    gvdlmjwje
        6
    gvdlmjwje  
       6 天前
    搭楼问个问题,我也是 ddns 的方案,nginx proxy manager 做 https 反代的,如果我要加一层雷池 waf 应该加在哪里?现在的路径是这样的:腾讯云 DNS路由器公网映射 IP:8443NPM(泛域名+SSL)docker 。应该吧 waf 加在 NMP 前级吗?
    f1ynnv2
        7
    f1ynnv2  
    OP
       6 天前
    @dushixiang 感谢解惑,这种临时解决方案对于 app 访问来说还是不太完美,不过 app 需要访问的场景也有限,目前也只有 mtphotos 主动适配了 basic auth 的方案,其它要用 app 访问家里服务的使用 https+basic auth 也是无解。 感觉 next terminal 对于网页访问家里的服务来说已经是 99.99%的完美了。这两天研究下准备部署上。
    dushixiang
        8
    dushixiang  
       6 天前 via iPhone
    @f1ynnv2 还有一个 https 证书双向认证的方案,最近就要上了,原理可以看我之前写的文章

    https://mp.weixin.qq.com/s/_8toY107hVldpi8xAzJLoA?from=groupmessage&isappinstalled=1&scene=1&clicktime=1770119630&enterid=1770119630
    PerFectTime
        9
    PerFectTime  
       6 天前
    我在所有服务前面用 caddy 套了一层 oauth, 特定接口放开, 其他的都得过验证, 没有什么问题
    securityCoding
        10
    securityCoding  
       6 天前 via Android
    老哥,听过 cloudflare tunnel 吗。。。
    Danswerme
        11
    Danswerme  
       5 天前
    可以考虑用一下 Cloudflare access control
    jpyl0423
        12
    jpyl0423  
       5 天前
    如果只是网页访问可以用这个 Authelia
    Hozoy
        13
    Hozoy  
       5 天前
    你这样 99% 的 app 场景都用不了,包括飞牛/immich/Homeassistant 等 app
    jeesk
        14
    jeesk  
       5 天前 via Android
    只用 vpn , 其他的都不行 隧道安全得多
    skinfiter
        15
    skinfiter  
       3 天前
    @gvdlmjwje #6 是的 应该放在公网映射正后面
    flynaj
        16
    flynaj  
       1 天前 via Android
    可以用,Port Knocking ,也可以用 easytier 这类
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1160 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:42 PVG 07:42 LAX 15:42 JFK 18:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86