Hconk
1.5D
0.57D

建议给所有需要公网暴露的 web 服务套一层 authelia

  •  
  •   Hconk · Feb 5 · 14128 views
    This topic created in 119 days ago, the information mentioned may be changed or developed.
    飞牛的漏洞应该让很多人认识到了公网暴露的安全性问题,挺多人推荐通过 VPN 的方式来保护想公网暴露的服务,VPN 的方式安全性肯定很高,但是很多时候也相对比较麻烦,需要安装 VPN 终端,有时还会和科学上网没法共用。

    很多人玩 NAS 就是为了部署各种 web 服务,像 openclaw, matrix, memos 之类的,对外暴露本身就是为了方便能随时访问,如果每次访问都还要切 VPN 着实有点麻烦了。

    这里推荐另外一种折中一些的方案,通过 frp 穿透把内网服务映射到服务端,注意自建 CA, 启用 token + TLS 双重认证,映射的端口在服务器上禁用掉,然后通过 NPM 来管理二级域名反向代理内网 ip:端口,通过二级域名访问这个服务,开启 https, 同时在 NPM 的 advance 里配置好 authelia 认证,这样直接访问二级域名会跳转到认证页面,认证后可以访问,和正常直接访问没什么区别。通过这种方式可以将所有对外暴露的服务统一管理,很多小众的 web 服务安全性并没有什么保证,但是经过 authelia 叠加一层之后可以减小很多的安全攻击面。

    authelia 的服务比较单一,也得到过国际安全标准认证,相对于 github 上各种大小项目,安全性肯定高很多 level.
    152 replies    2026-02-20 12:42:15 +08:00
    1  2  
    Rorysky
        101
    Rorysky  
       Feb 5
    @cxin3813 这是什么软件
    lastxuan
        102
    lastxuan  
       Feb 5
    @wonderfulcxm 可以共存,各种代理软件都支持 ss ,wg ,会修改配置就行了。我现在是 nas 和阿里云组 wg 隧道,客户端通过 ss 连上阿里云,当初是为了绕过跨网 qos 才这样实践的,直接组 wg 隧道也可以
    concernedz
        103
    concernedz  
       Feb 5
    我的方案是 dns 配置通配符 *.nas.xxx.com ,服务器面板 1panel

    浏览器请求 https://home.nas.xxx.com

    DNS 解析:home.nas.xxx.com → 1Panel 服务器的公网 IP

    1Panel 的 OpenResty ( Nginx )接收 443 端口请求

    OpenResty 执行反向代理规则 → 转发到 FRPS 的 vhostHttpPort

    FRPS (运行在 1Panel 服务器)接收请求,匹配 FRPC 注册的 customDomains ( home.nas.xxx.com

    FRPS 通过 FRP 隧道( 7000 端口控制连接)转发请求到 NAS 上的 FRPC 客户端

    FRPC (运行在 NAS )接收请求 → 转发到 NAS 本地的 homepage 服务( 3000 端口)

    homepage 服务处理请求,生成响应

    响应沿原链路反向返回:NAS FRPC → 1Panel FRPS → OpenResty → 浏览器
    concernedz
        104
    concernedz  
       Feb 5
    @concernedz 我就部署了个 homepage 和 mt-photo ,就没弄授权了
    wonderfulcxm
        105
    wonderfulcxm  
       Feb 5 via iPhone
    @lastxuan ss 我知道可以,代理软件里可以用 openVPN ?
    js9528
        106
    js9528  
       Feb 5 via iPhone
    @9136347 我觉得你说的对,但为啥你就是 10%的人?墙为了保护你你却要破坏。因为你特殊?
    lastxuan
        107
    lastxuan  
       Feb 5
    @wonderfulcxm #105 不行,要在客户端共存肯定需要使用代理软件支持的协议,毕竟代理软件就那几个内核没得选,但是回家的方式可以选择 。openvpn 默认是 udp ,wireguard 应该更出色。指定 tcp 的话,也可以使用 ss 或者其他协议,封装 wireguard 作 tcp 的项目也可以折腾。
    zlbruce
        108
    zlbruce  
       Feb 5
    有个疑问,我当前是用 NPM 代理到后端服务的,认证都是每个服务自己的,不统一确实不太方便。
    用 authelia 后,后端服务应该不全都能用他带过来的 SSO 信息吧?这种有啥解决方法吗?
    wonderfulcxm
        109
    wonderfulcxm  
       Feb 5 via iPhone
    @lastxuan 那你和我的想法是一样的,家里自建梯子,当成众多节点的一员,代理软件分流。
    9136347
        110
    9136347  
       Feb 5
    @jhdxr “怎么互联网不安全内网就安全了?” 所以是不是你们公司的网络就没有区分内网外网,所有的服务器都直接暴露互联网相互连?
    ofnh
        111
    ofnh  
       Feb 5
    annotations:
    nginx.ingress.kubernetes.io/auth-method: 'GET'
    nginx.ingress.kubernetes.io/auth-url: 'http://authelia.default.svc.cluster.local/api/authz/auth-request'
    nginx.ingress.kubernetes.io/auth-signin: 'https://auth.example.com?rm=$request_method'
    nginx.ingress.kubernetes.io/auth-response-headers: 'Remote-User,Remote-Name,Remote-Groups,Remote-Email'


    在 ingress 上套一层即可
    Hconk
        112
    Hconk  
    OP
       Feb 5 via iPhone   ❤️ 1
    @zlbruce 这个可以分很多种情况来讨论,如果你的后端服务支持 OIDC ,那可以用 Authelia OIDC

    如果服务支持 LDAP ,你可以把身份源统一到 LDAP ,Authelia 也用同一套目录

    如果都不支持那可以用 oauth2-proxy 搞个中间件来做 OIDC 认证。

    如果都不支持你又不想/没法改代码那还是只用 authelia 来认证 web UI ,后端接口放行用 NPM 做白名单之类的访问限制。
    LnTrx
        113
    LnTrx  
       Feb 5
    看了下,感觉确实不错。而且中文圈现有的资料不多,在很多方向上都有进一步折腾的空间,例如:
    1. 结合各种系统、各种反代
    2. 替代各应用原有鉴权,实现自部署的真单点登录
    3. 融入到图形化的反代管理工具
    LnTrx
        114
    LnTrx  
       Feb 5   ❤️ 2
    @9136347 在民用的常见配置下,获得公网 IP 的一般是光猫或路由,不太可能会直接让存储敏感信息的系统直接暴露。即使默认给公网 IP ,对普通网民并不会构成显著的风险。运营商提供的设备也有不安全的风险,但连这一层都要考虑的话,以此推论,运营商的内网 IP 也不一定安全。
    作为一种保护,默认有 IPv4/v6 防火墙,允许需要的用户可自行调整就足够了,最多加一步授权确认。安全和方便是一种平衡,不应变成偏执。一刀切不给公网 IP 或者不允许开放公网,超出了保护的合理范畴,确实构成了对用户自由的限制。
    关于基础运营商将公网 IP 作为一种增值商品出售,是可行的方案。有的运营商默认给,有的运营商付费给,让用户自行选择即可。但需要注意到,中国大陆地区的基础运营商为国企垄断,因此有义务提供合理的价格。对于取之不尽的 IPv6 不应收费,对于 IPv4 也不宜高于商用云服务厂商的定价。另外,不应限制该公网 IP 进行 ICP 备案,否则合理的价格应该更低。
    IPIDEA 恰恰是单纯依赖 NAT 不足以保护家庭网络安全的案例。根据 Google 的报告:“住宅代理网络运营商需要在消费设备上运行代码,将其作为出口节点注册到网络中”。用户自己把代理网络的 SDK 带到内网环境里,再怎么禁止公网也没用。这更说明无论公网还是内网,都要按照零信任的标准设防。

    @otmself 即使存在有人因为自行开放公网 IP 受损而撒泼耍赖,也不代表就要断绝所有人的公网 IP ,不然实质上就是鼓励撒泼耍赖。换言之,是在暗示因为不开放公网 IP 而权益受损的人闹得不够狠。
    zlbruce
        115
    zlbruce  
       Feb 5
    @Hconk 感谢,很清晰明了
    看起来大部分都能通过 OIDC 来支持
    9136347
        116
    9136347  
       Feb 5   ❤️ 1
    @LnTrx 现在的 NAT 方式上网,和给一个公网 ip 的方式还是有很大的区别,最起码说没有公网 IP 的情况下,被扫描的几率还是小很多很多。另外就算光猫的方式,其实本质上还是运营商在托底,选择 nat 不给公网 IP 的方式,也是运营商在托底。为啥运营商托底的方式 A 能接受,运营商托底的方式 B 就接受不了。
    对于绝大多数人,这个比例肯定不低于 90%,公网不公网没有什么意义的。就算躲在光猫后面,威胁依然存在,结合我们网民的计算机素养,这个安全风险不可估量。还有一些刻意的搞灰产的,不说群魔乱舞吧,可能也和菜市场差不多。
    这个帖子炒得这么厉害,无非就是一些想要公网 IP 的少部分人(当然在 v2 这个环境下比例会高一些),基于自身的需要,屁股决定脑袋在不断的表达自己的观点而已。


    其实本质上来说,所谓的公网 IP 就只是一小部分人的诉求,但是我觉得绑定到是所有人的理由受损之类的,就有点扯虎皮拉大旗的感觉了。如果真的是 90%的人都有这个需求的话,你都不用去提,运营商自然会去迎合需求。
    LnTrx
        117
    LnTrx  
       Feb 5   ❤️ 1
    @9136347
    关键是选择权,运营商可以托底,但不能强制。公网 IP 给到光猫的方式通常都有办法自行打开防火墙。
    对于不少人公网 IP 没有直接意义,这些人公网 IP 给不给到光猫在安全性上区别不大。
    另外,公网 IP 对于所有人也有间接意义。如果所有家庭用户都不允许公网传入,那文件传输、远程桌面等服务更加可以肆无忌惮垄断或涨价。
    每个人表达符合自身需求的观点很正常,这又不是政策制定者的论坛。运营商很早就有收紧公网 IP 的动向了,但至今没有完全推进,也难说不是受到真正有需求的人的影响。
    ttxhxz
        118
    ttxhxz  
       Feb 5
    @9136347 #116 相比绝大多数网民,会主动要公网 ip 的有多少?有人主动要,给会有什么问题?会让绝大多数普通人暴露在网上么?你这就好像在说玩手机 root 才是大多数人,不 root 是少数人一样
    Cuhn1
        119
    Cuhn1  
       Feb 5
    @9136347 #116 按照你的说法,你作为被保护的对象,你就不应该出现在这里。既然你出现在这里,那我怀疑你就是破坏环境的那部分,你通过破坏环境来制造恐慌和威胁,让更多的人被禁锢和失去便利,这样就你能提供其所需或者和你竞争的人就少了。
    isnullstring
        120
    isnullstring  
       Feb 5
    有单独的软路由,FRP 隧道回去,把软路由当代理用,完美访问

    主要是没有手机网络访问家里服务的需求
    nnikooih
        121
    nnikooih  
       Feb 5
    谢谢分享,很的详细分析
    zhady009
        122
    zhady009  
       Feb 5
    wireguard 是可以用代理配置无缝回家的不需要手动自己切
    deepbytes
        123
    deepbytes  
       Feb 5 via iPhone
    @Hconk 受教了
    AkinoKaedeChan
        124
    AkinoKaedeChan  
       Feb 5
    我用的 Pocket ID ,只支持 Passkey ,优点就是配置更简单点、UI 好看。
    datou
        125
    datou  
       Feb 6
    openclaw 为啥要向公网暴露 web 服务?

    这玩意儿大部分人都配了 tgbot 远程对话交互的吧
    zhouu
        126
    zhouu  
       Feb 6
    pangolin 好了,需要的都有
    v1
        127
    v1  
       Feb 6
    @9136347 自由开放的话,v2 起码 70%的人能自给自足甚至创业,开发防火墙、安全软件,不是促进就业和消费了。不要只看片面的。
    Oct31Dec25
        128
    Oct31Dec25  
       Feb 6
    authelia 会改 http 响应头,对一些前后端分离的项目不太友好。。。
    otmself
        129
    otmself  
       Feb 6
    @LnTrx 所以我才说,想玩的拦不住,但是以我们这边的风格,稳为主。
    cxin3813
        130
    cxin3813  
       Feb 6
    @jayhuang0044 #53 accors/snell 我用的这个镜像
    cxin3813
        131
    cxin3813  
       Feb 6
    @Rorysky surge
    cfancc
        132
    cfancc  
       Feb 6
    @9136347 想多了,电信不给公网 ip 纯粹是自己嫌麻烦,很多风险无法管控。根本原因不可能是为了保护网民。所以你从限制公网得出电信是为了保护 90%的网民的结论是不正确的,这叫倒果为因
    qiuyue0
        133
    qiuyue0  
       Feb 6
    *有时还会和科学上网没法共用*,因为这个原因,我把手机端的代理换成了 singbox ,这样可以打开代理自动就可以穿透了。
    https://sing-box.sagernet.org/zh/configuration/endpoint/tailscale/
    skylancer
        134
    skylancer  
       Feb 6
    @9136347 保护了个寂寞,现在大多还是跑 fullcone, 本地甚至 cgnat 也是互通的,再加上现在 v6 默认设置都是开启的(江苏不谈,真小白一样存在巨大的安全风险,能折腾的安全风险面比这小多了
    skylancer
        135
    skylancer  
       Feb 6
    @9136347 不是哥们,你不如先好好统计一下从 Win7 之后能直接从网络上打爆的洞有多少个好吧
    skylight
        136
    skylight  
       Feb 6
    我是公网 IP+wireguard 方案,这方案可以直接使用家里 openwrt 搭建的 openclash ,这样其他任何设备上一般都不太需要其他科学上网客户端了
    UEVdugfw
        137
    UEVdugfw  
       Feb 6 via iPhone
    自建 ca 容易被证书链/中间人攻击。此外国内域名注册备案貌似很麻烦,而国内 vps 貌似不让绑国外域名吧。

    请问 op 如何解决这些问题
    mrabit
        138
    mrabit  
       Feb 6
    @COW #100 那人什么贴都在让人移民 哈哈哈哈
    Hconk
        139
    Hconk  
    OP
       Feb 6 via iPhone
    @UEVdugfw 自建 CA 并不会增加被证书链/中间人攻击的风险,除非你的 CA Key 泄露,甚至你不放心可以在离线电脑上保存和签发证书,比你用公共证书链更加安全,公共证书链反而可能存在恶意签发的风险(比如前几年的 WoSign 证书事件)。

    域名备案应该不算麻烦吧,我很久之前申请备案,我记得腾讯云发一张背景布过来拍张照填个表就行了。
    PeterTerpe
        140
    PeterTerpe  
       Feb 6 via Android
    @Greenm #20 我也是这样,设置个邮箱验证码就够了,也不用折腾别的。
    lmmir
        141
    lmmir  
       Feb 6
    easytier 代替 openvpn
    dushixiang
        142
    dushixiang  
       Feb 6
    觉得麻烦的可以直接使用 NextTerminal ,可以说集成了 OP 说的全部功能,自带反向代理、内网穿透、OIDC Server ,近期也支持了 mTLS 。

    演示环境 https://baidu.typesafe.cn
    账号 test/test

    mTLS 文档 https://docs.next-terminal.typesafe.cn/usage/mtls.html
    PVE 使用 NT OIDC 认证 https://docs.next-terminal.typesafe.cn/blog/pve-oidc/readme.html
    LnTrx
        143
    LnTrx  
       Feb 6
    @Hconk 自建 CA 主要是是在移动设备一些应用的证书信任比较难搞,应用面可能略显狭窄。对于个人应用来说,国际知名的免费证书应该就足够了。

    @UEVdugfw 现在域名备案比以前还要方便,全程可以在手机上操作,很多地区审批也很快。虽然对网站命名等还是有奇怪的要求,但如果目的只是拿到一个有 ICP 备案的域名的话并不难。
    thereone
        144
    thereone  
       Feb 6
    和我自建雷池 WAF 开启 黑白名单 用户认证 人机验证有区别吗?还是防护能力强一些?
    xiaomintongxue
        145
    xiaomintongxue  
       Feb 6
    我找电信要了公网 ip ,一直没做任何防护,主要是懒得折腾😂
    UEVdugfw
        146
    UEVdugfw  
       Feb 6
    @Hconk #139 理论上自建 ca 安全性高于公共 ca ,但现实落地,自建 ca 在私钥管理和客户端证书部署上是大坑,成本、风险权衡下我的观点是不如用公共 ca 。

    还有一个最致命的,自建 ca 被攻击了,可能很长一段时间发现不了,甚至永远发现不了。但公共 ca 出现问题,会很快传播。换句话说,整个行业、公众都是监督方(吃瓜方),漏洞可以及时发现并修复。损失肯定有,但会尽可能被缩小。
    junas7
        147
    junas7  
       Feb 6 via Android
    @9136347 法律和警察的意义上打击侵犯他人或公共权益的行为,你对自己的自由支配,如果不会侵犯他人,为什么要被剥夺
    fugu37
        148
    fugu37  
       Feb 7
    搞完了,网页鉴权很好用,但客户端需要主动适配,侵入性太强。用户需要的是一个 waf 。

    authelia 与 nginx 集成用的是 auth_request 模块,可以用同样的原理撸一个鉴权 API ,具体逻辑根据需求定制,比如最实用的基于 IP 、GEOIP 的黑白名单。
    julyclyde
        149
    julyclyde  
       Feb 7
    NPM 是什么呀?我猜 nginx proxy manager 但是为啥第一反应还是 nodejs package manager 呢?
    9136347
        150
    9136347  
       Feb 9
    @cfancc 你说得对,运营商主观上确实不是为了用户安全,但是客观上导致来用户的安全。但是只要用户获利,终究是好的。
    9136347
        151
    9136347  
       Feb 9
    @junas7 法律和警察的意义在于公平和保护弱者。或者按照政治说的,无非也是阶级统治的方式之一。“打击侵犯他人或公共权益的行为”,只是手段,不是目的。目的还是以名义上的维护公平,来达到统治的稳定。
    blender2017
        152
    blender2017  
       Feb 20
    不给公网 IP 是为了你的安全这话就和 GFW 是为了你的安全一样,用“为你好”的语言来剥夺你的自由。自由是最宝贵的东西。
    不懂网络的人可以默认不给,但是懂风险自负的人去申请公网为什么也不给?
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3680 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 110ms · UTC 04:55 · PVG 12:55 · LAX 21:55 · JFK 00:55
    ♥ Do have faith in what you're doing.