早上起来就刷到个真事:有位老哥用frp把内网Gitea穿透到公网,结果被人利用RCE漏洞直接打进NAS,CPU飙到800%挖了74分钟矿。幸亏发现得早,再晚一步就是勒索病毒全家桶。
![]()
看完他的攻击链复盘,我后背发凉——这每一步踩的坑,都是普通玩家最容易犯的错。
开放注册+没验证码,攻击者零成本注册账号;frp裸奔暴露,公网扫描器直接扫到端口;更离谱的是SSH还挂在公网上,给人家留了永久后门。
说实话,这根本不是Gitea的锅。你把内网服务直接捅到公网,等于在自家防盗门外面再搭个梯子,还挂了个牌子写"欢迎光临"。
内网穿透,到底谁在看你的流量?
很多人以为frp、nps这类工具只是"开个隧道",实际上你的所有请求——包括Cookie、Token、甚至请求Body——对穿透服务商都是透明的。更可怕的是,2024年已经有多家国内穿透服务商被攻破,攻击者直接从后台拿到你的隧道配置和内网IP。
自建穿透呢?frp本身不解析应用层协议,就是个纯TCP搬运工。Gitea的3000端口一旦暴露,恶意请求直达后端,没有任何清洗环节。
所以问题不是"要不要穿透",而是"穿透之后,谁来守门"。
三种方案,差距比你想的大
我直接说结论,普通玩家就三种选择:
![]()
方案A:裸奔frp(就是这位老哥的配置)
公网→frp隧道→Gitea:3000,直通。攻击者扫描到端口就能打漏洞,属于"裸奔"。
方案B:四层串行防御(请翻看本人历史文章介绍)
公网→路由ACL→雷池WAF→lucky反代→NAS。SSL证书在WAF层统一卸载,内网走明文HTTP,CPU开销大幅降低。雷池的语义分析能拦掉SQL注入、RCE、路径遍历这类自动化攻击,关键是社区版免费。
方案C:Nginx mTLS前置+雷池WAF(请翻看本人历史文章介绍)
私有域名强制双向证书认证——没有客户端证书,TLS握手直接失败,密码爆破、0day RCE统统失效。设备丢了?吊销证书就完事。分享域名给访客用?走雷池的身份认证,微信扫码或GitHub登录,管理员审核后才能进。
mTLS听着唬人,其实就三步:自建CA(我直接设10年有效期)、给每台设备签发客户端证书、Nginx里加一行`ssl_verify_client on`。配置一次,后面基本不用管。
![]()
雷池社区版到底能干啥?
说几个实测过的点:
第一,它的人机验证不是滑块,是无感知行为校验。分析你的浏览器环境、鼠标键盘习惯、有没有调试行为。爬虫和漏洞扫描器没有完整JS执行能力,直接拦在外面。
第二,支持微信扫码登录。访客扫完码,管理员在后台点一下确认才能放行,适合给家人或朋友开临时权限。
第三,SSL在WAF层终结后,内网用HTTP明文传输。很多人担心"内网明文不安全",其实你家内网如果都被人嗅探了,说明路由器已经沦陷,这时候加不加SSL都一样。
如果必须用frp暴露SSH,这六条给我刻进DNA:
1. frps只绑127.0.0.1,用Nginx stream模块前置代理
2. 开`tls_force = true`,没证书连不上
3. allow_ports严格白名单,22/3389绝不在列表里
4. Dashboard只许内网IP访问
5. auth_token定期换,旧token禁止复用
6. 上Fail2ban,同一IP失败3次直接封IP
最后说几句实在的
如果你只暴露Web服务(NAS管理页、Jellyfin、Nextcloud),无脑上方案C。私有域名走mTLS,分享域名走雷池认证,这是目前个人玩家能摸到的天花板。
如果想省钱省事,方案B足够挡住99%的自动化攻击。雷池社区版+爱快路由ACL+lucky反代,这一套下来零成本,就是多花半小时配置。
绝对不要干的蠢事:frp的bind_port和dashboard_port直接挂公网;Gitea、GitLab、phpMyAdmin这类"漏洞常客"裸奔暴露。
你现在的NAS是怎么暴露的?frp裸奔还是已经上了WAF?有没有被扫过端口、撞过密码?评论区说说,我帮你看看风险点在哪。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.