[{"data":1,"prerenderedAt":2391},["ShallowReactive",2],{"site-search-articles":3,"article-\u002Fblog\u002F10\u002F20\u002Fluckyand":403,"article-around-\u002Fblog\u002F10\u002F20\u002Fluckyand":2332},[4,17,29,40,51,60,68,76,83,90,98,104,110,116,128,137,145,154,163,170,178,184,190,195,202,210,215,221,226,232,237,245,252,257,264,272,276,282,289,295,299,303,308,313,319,324,328,333,340,346,351,359,365,372,378,385,392,398],{"id":5,"path":6,"title":7,"description":8,"date":9,"tags":10,"category":14,"minutes":15,"pinned":16},"blog\u002Fblog\u002Fnuxt4-vuetify4-blog.md","\u002Fblog\u002Fnuxt4-vuetify4-blog","Nuxt 4 + Vuetify 4 个人博客搭建记录","从内容结构、组件分层到服务端渲染，记录这个博客从零开始的完整实现过程。","2026-08-30",[11,12,13],"Nuxt","Vuetify","博客","开发",12,true,{"id":18,"path":19,"title":20,"description":21,"date":22,"tags":23,"category":26,"minutes":27,"pinned":28},"blog\u002Fblog\u002Fphoto-migration.md","\u002Fblog\u002Fphoto-migration","Google 相册迁移到 iCloud 分享","梳理照片导出、元数据修复与共享图库迁移过程，记录几个容易忽略的细节。","2026-08-26",[24,25],"相册","iCloud","生活",8,false,{"id":30,"path":31,"title":32,"description":33,"date":34,"tags":35,"category":14,"minutes":39,"pinned":28},"blog\u002Fblog\u002Fdocker-proxy.md","\u002Fblog\u002Fdocker-proxy","Docker 部署与反向代理配置","使用多阶段构建、容器重启策略和 Nginx 反向代理完成博客服务的可重复部署。","2026-08-18",[36,37,38],"Docker","Nginx","部署",10,{"id":41,"path":42,"title":43,"description":44,"date":45,"tags":46,"category":49,"minutes":50,"pinned":28},"blog\u002Fblog\u002Fsummer-coast.md","\u002Fblog\u002Fsummer-coast","一组夏日海边照片","把散落在相机和手机里的片段整理成一篇安静的夏日相册。","2026-08-09",[47,48],"摄影","夏日","随记",5,{"id":52,"path":53,"title":54,"description":54,"date":55,"tags":56,"category":59,"minutes":50,"pinned":28},"blog\u002Fblog\u002F40-博客搭建\u002F09-CloudFlare 优选 IP.md","\u002Fblog\u002F40\u002F09-cloudflare-ip","CloudFlare 优选 IP","2026-07-22 03:17:28",[57,58],"Cloudflare","优选域名","Blog",{"id":61,"path":62,"title":63,"description":63,"date":64,"tags":65,"category":59,"minutes":50,"pinned":28},"blog\u002Fblog\u002F40-博客搭建\u002F08-Cloudflare ImgBed 免费私有图床完整部署手册.md","\u002Fblog\u002F40\u002F08-cloudflare-imgbed","Cloudflare ImgBed 免费私有图床完整部署手册","2026-07-19 02:09:08",[57,66,67],"对象存储","图床",{"id":69,"path":70,"title":71,"description":71,"date":72,"tags":73,"category":59,"minutes":50,"pinned":28},"blog\u002Fblog\u002F40-博客搭建\u002F07-腾讯云 EdgeOne 边缘函数实现七牛&S3 随机图床 API.md","\u002Fblog\u002F40\u002F07-edgeone-ands3-api","腾讯云 EdgeOne 边缘函数实现七牛云 & S3 存储随机图床 API","2026-07-13 21:25:48",[74,75,67],"EdgeOne","七牛云",{"id":77,"path":78,"title":79,"description":79,"date":80,"tags":81,"category":59,"minutes":50,"pinned":28},"blog\u002Fblog\u002F40-博客搭建\u002F06-腾讯 EdgeOne 部署 Twikoo 评论系统指南.md","\u002Fblog\u002F40\u002F06-edgeone-twikoo","腾讯EdgeOne部署Twikoo评论系统指南","2026-06-14 17:41:11",[74,82],"Twikoo",{"id":84,"path":85,"title":86,"description":86,"date":87,"tags":88,"category":59,"minutes":50,"pinned":28},"blog\u002Fblog\u002F40-博客搭建\u002F05-OpenList 接入 S3 对象存储完整使用教程.md","\u002Fblog\u002F40\u002F05-openlist-s3","OpenList 接入 S3 对象存储完整使用教程","2026-06-11 13:08:07",[66,89],"OpenList",{"id":91,"path":92,"title":93,"description":94,"date":95,"tags":96,"category":59,"minutes":50,"pinned":28},"blog\u002Fblog\u002F40-博客搭建\u002F04-赛博大善人Cloudflare R2 图床.md","\u002Fblog\u002F40\u002F04-cloudflare-r2","赛博大善人 Cloudflare R2 图床","基于 Cloudflare R2 + 腾讯 Edge One + PicList 搭建免费、全球加速的图床方案","2026-06-09 13:07:35",[59,67,97],"CDN加速",{"id":99,"path":100,"title":101,"description":101,"date":102,"tags":103,"category":59,"minutes":50,"pinned":28},"blog\u002Fblog\u002F40-博客搭建\u002F03-白嫖免费图床，套CDN加速.md","\u002Fblog\u002F40\u002F03-cdn","白嫖免费图床，套 CDN 加速","2026-06-09",[59,67,97],{"id":105,"path":106,"title":107,"description":107,"date":108,"tags":109,"category":59,"minutes":50,"pinned":28},"blog\u002Fblog\u002F40-博客搭建\u002F02-零基础优雅搭建静态博客全教程.md","\u002Fblog\u002F40\u002F02","零基础优雅搭建静态博客全教程","2026-06-04",[59],{"id":111,"path":112,"title":113,"description":113,"date":114,"tags":115,"category":59,"minutes":50,"pinned":28},"blog\u002Fblog\u002F40-博客搭建\u002F01-远古产物—博客.md","\u002Fblog\u002F40\u002F01","赛博空间的私人岛屿：博客架构与风格美学","2026-06-03",[59],{"id":117,"path":118,"title":119,"description":119,"date":120,"tags":121,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F15.关于NAT回流与内网域名直连的终极指南.md","\u002Fblog\u002F10\u002F20\u002Fnat","关于 NAT 回流与内网域名直连的终极指南","2026-05-13",[122,123,124,125,126],"docker","DNS","Lucky","NAT 回流","远程访问","软路由",{"id":129,"path":130,"title":131,"description":131,"date":132,"tags":133,"category":134,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F30-NAS\u002F25.基于QMediaSync的飞牛外网strm直连.md","\u002Fblog\u002F10\u002F30-nas\u002Fqmediasyncstrm","基于 Lucky 反代与 QMediaSync 的飞牛外网 STRM 直连","2026-02-08",[134,135,136],"NAS","飞牛 OS","Strm",{"id":138,"path":139,"title":140,"description":140,"date":141,"tags":142,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F14.基于飞牛漏洞安全访问lucky反代&雷池防护.md","\u002Fblog\u002F10\u002F20\u002Fluckyand","基于飞牛漏洞安全访问Lucky反代&雷池防护","2026-02-03",[122,143,124,144,126],"WAF","飞牛",{"id":146,"path":147,"title":148,"description":148,"date":149,"tags":150,"category":153,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F60-N1&玩客云&OEC\u002F03.oec-fnOS安装.md","\u002Fblog\u002F10\u002F60-n1andandoec\u002Foec-fnos","OEC-Turbo (RK3566) 安装飞牛 OS","2026-01-24",[151,152,134],"OEC","飞牛OS","N1&玩客云&OEC",{"id":155,"path":156,"title":157,"description":157,"date":158,"tags":159,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F13.Lucky反向代理终极指南.md","\u002Fblog\u002F10\u002F20\u002Flucky","Lucky 反向代理终极指南","2026-01-16",[122,160,161,124,162,126],"OpenWRT","IPv4","IPv6",{"id":164,"path":165,"title":166,"description":166,"date":167,"tags":168,"category":122,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F11.NAS 导航页的终极形态.md","\u002Fblog\u002F10\u002F10-docker\u002Fnas","告别繁琐配置：NAS 导航页的终极形态 —— 从 Sun-Panel 到 FlatNAS","2026-01-05",[122,134,169],"导航页",{"id":171,"path":172,"title":173,"description":173,"date":174,"tags":175,"category":122,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F10.LogVar 弹幕 API 部署指南.md","\u002Fblog\u002F10\u002F10-docker\u002Flogvar-api","LogVar 弹幕 API  (纯本地缓存版) 部署指南","2025-12-30",[122,176,177],"弹幕 API","媒体库",{"id":179,"path":180,"title":181,"description":181,"date":182,"tags":183,"category":134,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F30-NAS\u002F24.飞牛NAS第三方应用商店安装.md","\u002Fblog\u002F10\u002F30-nas\u002Fnas","飞牛 NAS 第三方应用商店 (FnDepot) 安装指南","2025-12-02",[134,135],{"id":185,"path":186,"title":187,"description":187,"date":188,"tags":189,"category":122,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F09.兰空图床和高清图标库.md","\u002Fblog\u002F10\u002F10-docker","兰空图床和高清图标库","2025-11-15",[122,67],{"id":191,"path":186,"title":192,"description":192,"date":193,"tags":194,"category":122,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F08.你是否需要一个图床？.md","你是否需要一个图床？","2025-11-14",[122,67],{"id":196,"path":197,"title":198,"description":198,"date":199,"tags":200,"category":134,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F30-NAS\u002F23.Hills播放器-Windows-安卓.md","\u002Fblog\u002F10\u002F30-nas\u002Fhills-windows","Hills 播放器（Windows + 安卓）","2025-11-10",[201],"Emby 第三方播放器",{"id":203,"path":204,"title":205,"description":205,"date":206,"tags":207,"category":208,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F50-Linux\u002F02.Debian13换源.md","\u002Fblog\u002F10\u002F50-linux\u002Fdebian13","Debian13 换源","2025-09-10",[208,209],"Linux","debian",{"id":211,"path":212,"title":213,"description":213,"date":206,"tags":214,"category":208,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F50-Linux\u002F04.Linux系统，音响有底噪.md","\u002Fblog\u002F10\u002F50-linux\u002Flinux","Linux 系统，音响有底噪怎么办？",[208],{"id":216,"path":217,"title":218,"description":218,"date":206,"tags":219,"category":208,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F50-Linux\u002F05.一键DD纯净系统脚本.md","\u002Fblog\u002F10\u002F50-linux\u002Fdd","一键 DD 纯净系统脚本",[208,220],"dd 系统",{"id":222,"path":223,"title":224,"description":224,"date":206,"tags":225,"category":208,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F50-Linux\u002F08.一行代码降低服务器功耗.md","\u002Fblog\u002F10\u002F50-linux","一行代码降低服务器功耗",[208,209],{"id":227,"path":228,"title":229,"description":229,"date":206,"tags":230,"category":153,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F60-N1&玩客云&OEC\u002F01.N1盒子永不为奴-Armbian.md","\u002Fblog\u002F10\u002F60-n1andandoec\u002Fn1-armbian","N1 盒子永不为奴 Armbian",[231,208],"N1",{"id":233,"path":234,"title":235,"description":235,"date":206,"tags":236,"category":153,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F60-N1&玩客云&OEC\u002F02.OEC站起来了-Armbian.md","\u002Fblog\u002F10\u002F60-n1andandoec\u002Foec-armbian","OEC 盒子永不为奴 Armbian",[151,208],{"id":238,"path":239,"title":240,"description":241,"date":242,"tags":243,"category":122,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F01.容器&docker&docker-compose.md","\u002Fblog\u002F10\u002F10-docker\u002Fanddockeranddocker-compose","容器 & docker & docker-compose","初识 yaml 语法和 docker","2025-08-05",[122,244],"yaml",{"id":246,"path":247,"title":248,"description":249,"date":242,"tags":250,"category":122,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F02.容器项目&下载类.md","\u002Fblog\u002F10\u002F10-docker\u002Fand","容器项目&下载类","采用docker搭建下载服务",[122,244,251],"下载",{"id":253,"path":247,"title":254,"description":255,"date":242,"tags":256,"category":122,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F03.容器项目&相册类.md","容器项目&相册类","采用 docker 搭建 AI 相册",[122,244,24],{"id":258,"path":247,"title":259,"description":260,"date":242,"tags":261,"category":122,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F04.容器项目&影视类.md","容器项目&影视类","采用 docker 影视媒体库",[122,244,262,263],"影视媒体库","Emby",{"id":265,"path":266,"title":267,"description":268,"date":242,"tags":269,"category":122,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F05.Emby直连115网盘（一）.md","\u002Fblog\u002F10\u002F10-docker\u002Femby115","Emby直连115网盘（一）","使用 Emby 直连 115 网盘",[122,244,262,263,270,271],"strm","115 网盘",{"id":273,"path":266,"title":274,"description":268,"date":242,"tags":275,"category":122,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F06.Emby直连115网盘（二）.md","Emby直连115网盘（二）",[122,244,262,263,270,271],{"id":277,"path":278,"title":279,"description":279,"date":242,"tags":280,"category":122,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F10-docker\u002F07.Adguard Home去广告.md","\u002Fblog\u002F10\u002F10-docker\u002Fadguard-home","Adguard Home 去广告",[122,281],"Adguard Home",{"id":283,"path":284,"title":285,"description":286,"date":242,"tags":287,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F01.新的篇章，软路由.md","\u002Fblog\u002F10\u002F20","新的篇章，软路由","初识软路由",[127,288,160],"爱快",{"id":290,"path":284,"title":291,"description":292,"date":242,"tags":293,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F02.如何玩公网，怎么远程访问（一）.md","如何玩公网，怎么远程访问（一）","公网远程访问，IPv6也是公网",[127,126,294],"公网 IP",{"id":296,"path":284,"title":297,"description":292,"date":242,"tags":298,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F03.如何玩公网，怎么远程访问（二）.md","如何玩公网，怎么远程访问（二）",[127,126,294],{"id":300,"path":284,"title":301,"description":292,"date":242,"tags":302,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F04.如何玩公网，怎么远程访问（三）.md","如何玩公网，怎么远程访问（三）",[127,126,294],{"id":304,"path":284,"title":305,"description":305,"date":242,"tags":306,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F05.白嫖域名，远程访问.md","白嫖域名，远程访问",[127,126,307],"免费域名",{"id":309,"path":284,"title":310,"description":310,"date":242,"tags":311,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F06.没有公网如何远程访问.md","没有公网如何远程访问",[127,126,312],"内网穿透",{"id":314,"path":315,"title":316,"description":316,"date":242,"tags":317,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F07.爱快与OpenWRT双软路由MAC地址重复问题修正.md","\u002Fblog\u002F10\u002F20\u002Fopenwrtmac","爱快与 OpenWRT 双软路由MAC地址重复问题修正",[288,160,318],"MAC 地址",{"id":320,"path":321,"title":322,"description":322,"date":242,"tags":323,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F08.OpenWRT扩容.md","\u002Fblog\u002F10\u002F20\u002Fopenwrt","OpenWRT 扩容",[160],{"id":325,"path":321,"title":326,"description":326,"date":242,"tags":327,"category":127,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F20-软路由\u002F09.OpenWRT旁路由一条龙教程.md","OpenWRT 旁路由一条龙教程",[160],{"id":329,"path":330,"title":331,"description":331,"date":242,"tags":332,"category":134,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F30-NAS\u002F01.Emby刮削以及尽可能刮削到中文.md","\u002Fblog\u002F10\u002F30-nas\u002Femby","Emby 刮削以及尽可能刮削到中文",[263,177],{"id":334,"path":335,"title":336,"description":336,"date":242,"tags":337,"category":134,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F30-NAS\u002F02.Kodi&CoreELEC安装指南.md","\u002Fblog\u002F10\u002F30-nas\u002Fkodiandcoreelec","Kodi & CoreELEC 安装指南",[338,339,177],"Kodi","CoreELEC",{"id":341,"path":342,"title":343,"description":344,"date":242,"tags":345,"category":134,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F30-NAS\u002F20.飞牛OS的安装.md","\u002Fblog\u002F10\u002F30-nas\u002Fos","飞牛 OS 的安装","初识飞牛 NAS",[134,135],{"id":347,"path":342,"title":348,"description":349,"date":242,"tags":350,"category":134,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F30-NAS\u002F21.飞牛OS安装后必要配置.md","飞牛 OS 安装后必要配置","飞牛 NAS 基础配置",[134,135],{"id":352,"path":353,"title":354,"description":355,"date":242,"tags":356,"category":358,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F40-虚拟机\u002F01.新的篇章，PVE虚拟机.md","\u002Fblog\u002F10\u002F40\u002Fpve","新的篇章，PVE虚拟机","初识 PVE 虚拟机",[208,209,357,358],"PVE","虚拟机",{"id":360,"path":361,"title":362,"description":363,"date":242,"tags":364,"category":358,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F40-虚拟机\u002F03.基于PVE系统安装LXC-debian.md","\u002Fblog\u002F10\u002F40\u002Fpvelxc-debian","基于 PVE 系统安装 LXC-debian","初识 LXC debian",[208,209,357,358],{"id":366,"path":367,"title":368,"description":368,"date":242,"tags":369,"category":358,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F40-虚拟机\u002F07.Ventoy多系统启动盘制作与使用全指南.md","\u002Fblog\u002F10\u002F40\u002Fventoy","Ventoy 多系统启动盘制作与使用全指南",[370,371],"Ventoy","PE 系统",{"id":373,"path":374,"title":375,"description":376,"date":242,"tags":377,"category":358,"minutes":50,"pinned":28},"blog\u002Fblog\u002F10-技术专栏\u002F50-Linux\u002F01.新的篇章，debian12的配置.md","\u002Fblog\u002F10\u002F50-linux\u002Fdebian12","新的篇章，debian12 的配置","初识 debian 12",[208,209],{"id":379,"path":380,"title":381,"description":381,"date":242,"tags":382,"category":383,"minutes":50,"pinned":28},"blog\u002Fblog\u002F20-生活感悟\u002F02.在裂缝中种满阳光.md","\u002Fblog\u002F20","让灵魂带着光行走：在裂缝中种满太阳",[383,384],"生活感悟","随笔记录",{"id":386,"path":387,"title":388,"description":388,"date":242,"tags":389,"category":391,"minutes":50,"pinned":28},"blog\u002Fblog\u002F30-学习笔记\u002F01.Typora学习笔记.md","\u002Fblog\u002F30\u002Ftypora","Typora学习笔记",[390],"Typora","学习笔记",{"id":393,"path":394,"title":395,"description":395,"date":242,"tags":396,"category":391,"minutes":50,"pinned":28},"blog\u002Fblog\u002F30-学习笔记\u002F02.Markdown 拓展.md","\u002Fblog\u002F30\u002Fmarkdown","Markdown 拓展",[397],"Markdown",{"id":399,"path":380,"title":400,"description":400,"date":401,"tags":402,"category":383,"minutes":50,"pinned":28},"blog\u002Fblog\u002F20-生活感悟\u002F01.拥抱生活中的光与热.md","拥抱生活中的光与热","2025-07-05",[383,384],{"id":138,"title":140,"body":404,"category":127,"date":141,"description":140,"draft":28,"extension":2324,"meta":2325,"minutes":50,"navigation":16,"path":139,"pinned":28,"seo":2328,"stem":2329,"tags":2330,"__hash__":2331},{"type":405,"value":406,"toc":2302},"minimark",[407,411,416,421,425,429,518,522,552,556,586,590,594,602,1921,1925,1928,1998,2001,2007,2013,2033,2038,2044,2048,2052,2055,2059,2065,2142,2147,2151,2155,2191,2195,2225,2229,2232,2237,2240,2245,2248,2253,2257,2264,2284,2292,2295,2298],[408,409,140],"h1",{"id":410},"基于飞牛漏洞安全访问lucky反代雷池防护",[412,413,415],"h2",{"id":414},"_1-序言","1 序言",[417,418,420],"h3",{"id":419},"_11-为什么要安全防护","1.1 为什么要安全防护？",[422,423,424],"p",{},"众所周知，飞牛 OS 最近有漏洞，被人当肉鸡。所以我害怕被**“光临偷看”**，所以一想之下暂时弄了这个防护。",[417,426,428],{"id":427},"_12-安全防护建议","1.2 安全防护建议",[430,431,432,440,445,456,498,511],"ul",{},[433,434,435,439],"li",{},[436,437,438],"strong",{},"关闭飞牛 FN Connect","，也就是关闭飞牛自带的内网穿透",[433,441,442],{},[436,443,444],{},"关闭飞牛 SSH 和修改默认 22 端口",[433,446,447,448,451,452,455],{},"推荐",[436,449,450],{},"优先使用内网穿透","访问飞牛，比如 ",[436,453,454],{},"Tailscale、星空组网","等",[433,457,458,459,144,462],{},"次推荐使用",[436,460,461],{},"公网访问",[430,463,464,479,492],{},[433,465,466,467,470,471,474,475,478],{},"使用",[436,468,469],{},"反向代理","并且",[436,472,473],{},"不泄露域名","，在网络上已经安全 ",[436,476,477],{},"90%"," 了",[433,480,466,481,483,484,487,488,491],{},[436,482,124],{},"反代时候 ",[436,485,486],{},"web"," 增加一个",[436,489,490],{},"账号密码验证","，那么相当于在飞牛外面加上一道锁。",[433,493,494,495],{},"如果需要更好的防护就再加上一道锁",[436,496,497],{},"雷池 WAF",[433,499,500,501,503,504,507,508,510],{},"如果增加 web ",[436,502,490],{},"，那么飞牛 ",[436,505,506],{},"APP"," 不能使用，毕竟 ",[436,509,506],{}," 不能弹出这个账号密码验证，网页端是正常的。",[433,512,513,514,517],{},"反代时候增加 ",[436,515,516],{},"IP 白名单","，我觉得没有必要，若想加也是可以的。",[417,519,521],{"id":520},"_13-防护思路","1.3 防护思路",[430,523,524,530,536],{},[433,525,526,529],{},[436,527,528],{},"雷池 WAF (Safeline)","：作为反向代理的下一跳，清洗恶意流量，实现“虚拟补丁”。",[433,531,532,535],{},[436,533,534],{},"Lucky 反代 + Basic Auth","：在入口处直接暴力验证账号密码，把连门都摸不清的人直接拒之门外。",[433,537,538,541,542,545,546,545,549],{},[436,539,540],{},"架构思路","： 外网请求 -> ",[436,543,544],{},"Lucky (SSL卸载+基础认证)"," -> ",[436,547,548],{},"雷池 WAF (清洗攻击)",[436,550,551],{},"飞牛 OS (业务)",[412,553,555],{"id":554},"_2-准备工作","2 准备工作",[430,557,558,564],{},[433,559,560,563],{},[436,561,562],{},"硬件","：已安装飞牛 OS 的 NAS（或同局域网下的其他机器）。",[433,565,566,569,570],{},[436,567,568],{},"软件","：\n",[430,571,572,575,580],{},[433,573,574],{},"Docker 环境（飞牛自带）。",[433,576,577,579],{},[436,578,124],{},"：用于端口转发、SSL 证书管理和第一道认证。",[433,581,582,585],{},[436,583,584],{},"雷池 (Safeline)","：用于 WAF 防护（只有 x86 免费）。",[412,587,589],{"id":588},"_3-雷池-waf","3 雷池 WAF",[417,591,593],{"id":592},"_31-安装雷池-waf","3.1 安装雷池 WAF",[422,595,596,597,601],{},"我这里采用 docker 安装雷池 WAF，以下是 ",[598,599,600],"code",{},"docker-compose.yaml","文件",[603,604,608],"pre",{"className":605,"code":606,"language":244,"meta":607,"style":607},"language-yaml shiki shiki-themes github-light github-dark","# 官方文档\n# https:\u002F\u002Fdocs.waf-ce.chaitin.cn\u002F\n# web 访问 https:\u002F\u002FIP:29443\n# 账号 admin 密码在 safeline-mgt 日志\n# 重置密码 docker exec safeline-mgt resetadmin\n\n# ---\n\nname: safeline\n# 最后编辑时间：2026-02-03\nservices:\n  # -----------------------\n  # 1. 数据库\n  # -----------------------\n  postgres:\n    container_name: safeline-pg\n    restart: always\n    image: chaitin\u002Fsafeline-postgres:15.2\n    volumes:\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fpostgres\u002Fdata:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n      - \u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n    environment:\n      - POSTGRES_USER=safeline-ce\n      - POSTGRES_PASSWORD=safeline-pwd-change-me\n    networks:\n      - safeline-ce\n    command: [postgres, -c, max_connections=600]\n    healthcheck:\n      test: pg_isready -U safeline-ce -d safeline-ce\n\n  # -----------------------\n  # 2. 管理后台\n  # -----------------------\n  mgt:\n    container_name: safeline-mgt\n    restart: always\n    image: chaitin\u002Fsafeline-mgt:latest\n    volumes:\n      - \u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fmgt:\u002Fapp\u002Fdata\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Flogs\u002Fnginx:\u002Fapp\u002Flog\u002Fnginx:z\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fsock:\u002Fapp\u002Fsock\n      - \u002Fvar\u002Frun:\u002Fapp\u002Frun\n    ports:\n      - 29443:1443\n    healthcheck:\n      test: curl -k -f https:\u002F\u002Flocalhost:1443\u002Fapi\u002Fopen\u002Fhealth\n    environment:\n      - MGT_PG=postgres:\u002F\u002Fsafeline-ce:safeline-pwd-change-me@safeline-pg\u002Fsafeline-ce?sslmode=disable\n    depends_on:\n      - postgres\n      - fvm\n    logging:\n      driver: \"json-file\"\n      options:\n        max-size: \"100m\"\n        max-file: \"5\"\n    networks:\n      - safeline-ce\n\n  # -----------------------\n  # 3. 检测引擎\n  # -----------------------\n  detect:\n    container_name: safeline-detector\n    restart: always\n    image: chaitin\u002Fsafeline-detector:latest\n    volumes:\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fdetector:\u002Fresources\u002Fdetector\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Flogs\u002Fdetector:\u002Flogs\u002Fdetector\n      - \u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n    environment:\n      - LOG_DIR=\u002Flogs\u002Fdetector\n    networks:\n      - safeline-ce\n\n  # -----------------------\n  # 4. 流量转发 (Tengine) \n  # -----------------------\n  tengine:\n    container_name: safeline-tengine\n    restart: always\n    image: chaitin\u002Fsafeline-tengine:latest\n    volumes:\n      - \u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n      - \u002Fetc\u002Fresolv.conf:\u002Fetc\u002Fresolv.conf:ro\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fnginx:\u002Fetc\u002Fnginx\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fdetector:\u002Fresources\u002Fdetector\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fchaos:\u002Fresources\u002Fchaos\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Flogs\u002Fnginx:\u002Fvar\u002Flog\u002Fnginx:z\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fcache:\u002Fusr\u002Flocal\u002Fnginx\u002Fcache\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fsock:\u002Fapp\u002Fsock\n    environment:\n      - TCD_MGT_API=https:\u002F\u002Fsafeline-mgt:1443\u002Fapi\u002Fopen\u002Fpublish\u002Fserver\n      - TCD_SNSERVER=safeline-detector:8000\n      - CHAOS_ADDR=safeline-chaos\n    ulimits:\n      nofile: 131072\n    ports:\n      - 29080:80\n      - 28443:443\n    networks:\n      - safeline-ce\n\n  # -----------------------\n  # 5. 任务调度\n  # -----------------------\n  luigi:\n    container_name: safeline-luigi\n    restart: always\n    image: chaitin\u002Fsafeline-luigi:latest\n    environment:\n      - MGT_IP=safeline-mgt\n      - LUIGI_PG=postgres:\u002F\u002Fsafeline-ce:safeline-pwd-change-me@safeline-pg\u002Fsafeline-ce?sslmode=disable\n    volumes:\n      - \u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fluigi:\u002Fapp\u002Fdata\n    logging:\n      driver: \"json-file\"\n      options:\n        max-size: \"100m\"\n        max-file: \"5\"\n    depends_on:\n      - detect\n      - mgt\n    networks:\n      - safeline-ce\n\n  # -----------------------\n  # 6. 威胁情报\n  # -----------------------\n  fvm:\n    container_name: safeline-fvm\n    restart: always\n    image: chaitin\u002Fsafeline-fvm:latest\n    volumes:\n      - \u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n    logging:\n      driver: \"json-file\"\n      options:\n        max-size: \"100m\"\n        max-file: \"5\"\n    networks:\n      - safeline-ce\n\n  # -----------------------\n  # 7. 混沌测试\n  # -----------------------\n  chaos:\n    container_name: safeline-chaos\n    restart: always\n    image: chaitin\u002Fsafeline-chaos:latest\n    logging:\n      driver: \"json-file\"\n      options:\n        max-size: \"100m\"\n        max-file: \"10\"\n    environment:\n      - DB_ADDR=postgres:\u002F\u002Fsafeline-ce:safeline-pwd-change-me@safeline-pg\u002Fsafeline-ce?sslmode=disable\n    volumes:\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fsock:\u002Fapp\u002Fsock\n      - \u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fchaos:\u002Fapp\u002Fchaos\n    networks:\n      - safeline-ce\n\n# 网络配置\nnetworks:\n  safeline-ce:\n    driver: bridge\n","",[598,609,610,619,625,631,637,642,648,654,658,673,678,687,692,698,703,711,722,733,744,752,761,769,777,785,793,801,809,835,843,854,859,864,870,875,883,893,902,912,919,926,934,942,950,958,966,974,981,991,998,1006,1014,1022,1030,1038,1049,1057,1068,1079,1086,1093,1098,1103,1109,1114,1122,1132,1141,1151,1158,1166,1174,1181,1188,1196,1203,1210,1215,1220,1226,1231,1239,1249,1258,1268,1275,1282,1290,1298,1305,1313,1321,1329,1336,1343,1351,1359,1367,1375,1387,1394,1402,1410,1417,1424,1429,1434,1440,1445,1453,1463,1472,1482,1489,1497,1505,1512,1519,1527,1534,1543,1550,1559,1568,1575,1583,1591,1598,1605,1610,1615,1621,1626,1634,1644,1653,1663,1670,1677,1684,1693,1700,1709,1718,1725,1732,1737,1742,1748,1753,1761,1771,1780,1790,1797,1806,1813,1822,1832,1839,1847,1854,1861,1869,1876,1883,1888,1894,1902,1910],{"__ignoreMap":607},[611,612,615],"span",{"class":613,"line":614},"line",1,[611,616,618],{"class":617},"sJ8bj","# 官方文档\n",[611,620,622],{"class":613,"line":621},2,[611,623,624],{"class":617},"# https:\u002F\u002Fdocs.waf-ce.chaitin.cn\u002F\n",[611,626,628],{"class":613,"line":627},3,[611,629,630],{"class":617},"# web 访问 https:\u002F\u002FIP:29443\n",[611,632,634],{"class":613,"line":633},4,[611,635,636],{"class":617},"# 账号 admin 密码在 safeline-mgt 日志\n",[611,638,639],{"class":613,"line":50},[611,640,641],{"class":617},"# 重置密码 docker exec safeline-mgt resetadmin\n",[611,643,645],{"class":613,"line":644},6,[611,646,647],{"emptyLinePlaceholder":16},"\n",[611,649,651],{"class":613,"line":650},7,[611,652,653],{"class":617},"# ---\n",[611,655,656],{"class":613,"line":27},[611,657,647],{"emptyLinePlaceholder":16},[611,659,661,665,669],{"class":613,"line":660},9,[611,662,664],{"class":663},"s9eBZ","name",[611,666,668],{"class":667},"sVt8B",": ",[611,670,672],{"class":671},"sZZnC","safeline\n",[611,674,675],{"class":613,"line":39},[611,676,677],{"class":617},"# 最后编辑时间：2026-02-03\n",[611,679,681,684],{"class":613,"line":680},11,[611,682,683],{"class":663},"services",[611,685,686],{"class":667},":\n",[611,688,689],{"class":613,"line":15},[611,690,691],{"class":617},"  # -----------------------\n",[611,693,695],{"class":613,"line":694},13,[611,696,697],{"class":617},"  # 1. 数据库\n",[611,699,701],{"class":613,"line":700},14,[611,702,691],{"class":617},[611,704,706,709],{"class":613,"line":705},15,[611,707,708],{"class":663},"  postgres",[611,710,686],{"class":667},[611,712,714,717,719],{"class":613,"line":713},16,[611,715,716],{"class":663},"    container_name",[611,718,668],{"class":667},[611,720,721],{"class":671},"safeline-pg\n",[611,723,725,728,730],{"class":613,"line":724},17,[611,726,727],{"class":663},"    restart",[611,729,668],{"class":667},[611,731,732],{"class":671},"always\n",[611,734,736,739,741],{"class":613,"line":735},18,[611,737,738],{"class":663},"    image",[611,740,668],{"class":667},[611,742,743],{"class":671},"chaitin\u002Fsafeline-postgres:15.2\n",[611,745,747,750],{"class":613,"line":746},19,[611,748,749],{"class":663},"    volumes",[611,751,686],{"class":667},[611,753,755,758],{"class":613,"line":754},20,[611,756,757],{"class":667},"      - ",[611,759,760],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fpostgres\u002Fdata:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n",[611,762,764,766],{"class":613,"line":763},21,[611,765,757],{"class":667},[611,767,768],{"class":671},"\u002Fetc\u002Flocaltime:\u002Fetc\u002Flocaltime:ro\n",[611,770,772,775],{"class":613,"line":771},22,[611,773,774],{"class":663},"    environment",[611,776,686],{"class":667},[611,778,780,782],{"class":613,"line":779},23,[611,781,757],{"class":667},[611,783,784],{"class":671},"POSTGRES_USER=safeline-ce\n",[611,786,788,790],{"class":613,"line":787},24,[611,789,757],{"class":667},[611,791,792],{"class":671},"POSTGRES_PASSWORD=safeline-pwd-change-me\n",[611,794,796,799],{"class":613,"line":795},25,[611,797,798],{"class":663},"    networks",[611,800,686],{"class":667},[611,802,804,806],{"class":613,"line":803},26,[611,805,757],{"class":667},[611,807,808],{"class":671},"safeline-ce\n",[611,810,812,815,818,821,824,827,829,832],{"class":613,"line":811},27,[611,813,814],{"class":663},"    command",[611,816,817],{"class":667},": [",[611,819,820],{"class":671},"postgres",[611,822,823],{"class":667},", ",[611,825,826],{"class":671},"-c",[611,828,823],{"class":667},[611,830,831],{"class":671},"max_connections=600",[611,833,834],{"class":667},"]\n",[611,836,838,841],{"class":613,"line":837},28,[611,839,840],{"class":663},"    healthcheck",[611,842,686],{"class":667},[611,844,846,849,851],{"class":613,"line":845},29,[611,847,848],{"class":663},"      test",[611,850,668],{"class":667},[611,852,853],{"class":671},"pg_isready -U safeline-ce -d safeline-ce\n",[611,855,857],{"class":613,"line":856},30,[611,858,647],{"emptyLinePlaceholder":16},[611,860,862],{"class":613,"line":861},31,[611,863,691],{"class":617},[611,865,867],{"class":613,"line":866},32,[611,868,869],{"class":617},"  # 2. 管理后台\n",[611,871,873],{"class":613,"line":872},33,[611,874,691],{"class":617},[611,876,878,881],{"class":613,"line":877},34,[611,879,880],{"class":663},"  mgt",[611,882,686],{"class":667},[611,884,886,888,890],{"class":613,"line":885},35,[611,887,716],{"class":663},[611,889,668],{"class":667},[611,891,892],{"class":671},"safeline-mgt\n",[611,894,896,898,900],{"class":613,"line":895},36,[611,897,727],{"class":663},[611,899,668],{"class":667},[611,901,732],{"class":671},[611,903,905,907,909],{"class":613,"line":904},37,[611,906,738],{"class":663},[611,908,668],{"class":667},[611,910,911],{"class":671},"chaitin\u002Fsafeline-mgt:latest\n",[611,913,915,917],{"class":613,"line":914},38,[611,916,749],{"class":663},[611,918,686],{"class":667},[611,920,922,924],{"class":613,"line":921},39,[611,923,757],{"class":667},[611,925,768],{"class":671},[611,927,929,931],{"class":613,"line":928},40,[611,930,757],{"class":667},[611,932,933],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fmgt:\u002Fapp\u002Fdata\n",[611,935,937,939],{"class":613,"line":936},41,[611,938,757],{"class":667},[611,940,941],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Flogs\u002Fnginx:\u002Fapp\u002Flog\u002Fnginx:z\n",[611,943,945,947],{"class":613,"line":944},42,[611,946,757],{"class":667},[611,948,949],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fsock:\u002Fapp\u002Fsock\n",[611,951,953,955],{"class":613,"line":952},43,[611,954,757],{"class":667},[611,956,957],{"class":671},"\u002Fvar\u002Frun:\u002Fapp\u002Frun\n",[611,959,961,964],{"class":613,"line":960},44,[611,962,963],{"class":663},"    ports",[611,965,686],{"class":667},[611,967,969,971],{"class":613,"line":968},45,[611,970,757],{"class":667},[611,972,973],{"class":671},"29443:1443\n",[611,975,977,979],{"class":613,"line":976},46,[611,978,840],{"class":663},[611,980,686],{"class":667},[611,982,984,986,988],{"class":613,"line":983},47,[611,985,848],{"class":663},[611,987,668],{"class":667},[611,989,990],{"class":671},"curl -k -f https:\u002F\u002Flocalhost:1443\u002Fapi\u002Fopen\u002Fhealth\n",[611,992,994,996],{"class":613,"line":993},48,[611,995,774],{"class":663},[611,997,686],{"class":667},[611,999,1001,1003],{"class":613,"line":1000},49,[611,1002,757],{"class":667},[611,1004,1005],{"class":671},"MGT_PG=postgres:\u002F\u002Fsafeline-ce:safeline-pwd-change-me@safeline-pg\u002Fsafeline-ce?sslmode=disable\n",[611,1007,1009,1012],{"class":613,"line":1008},50,[611,1010,1011],{"class":663},"    depends_on",[611,1013,686],{"class":667},[611,1015,1017,1019],{"class":613,"line":1016},51,[611,1018,757],{"class":667},[611,1020,1021],{"class":671},"postgres\n",[611,1023,1025,1027],{"class":613,"line":1024},52,[611,1026,757],{"class":667},[611,1028,1029],{"class":671},"fvm\n",[611,1031,1033,1036],{"class":613,"line":1032},53,[611,1034,1035],{"class":663},"    logging",[611,1037,686],{"class":667},[611,1039,1041,1044,1046],{"class":613,"line":1040},54,[611,1042,1043],{"class":663},"      driver",[611,1045,668],{"class":667},[611,1047,1048],{"class":671},"\"json-file\"\n",[611,1050,1052,1055],{"class":613,"line":1051},55,[611,1053,1054],{"class":663},"      options",[611,1056,686],{"class":667},[611,1058,1060,1063,1065],{"class":613,"line":1059},56,[611,1061,1062],{"class":663},"        max-size",[611,1064,668],{"class":667},[611,1066,1067],{"class":671},"\"100m\"\n",[611,1069,1071,1074,1076],{"class":613,"line":1070},57,[611,1072,1073],{"class":663},"        max-file",[611,1075,668],{"class":667},[611,1077,1078],{"class":671},"\"5\"\n",[611,1080,1082,1084],{"class":613,"line":1081},58,[611,1083,798],{"class":663},[611,1085,686],{"class":667},[611,1087,1089,1091],{"class":613,"line":1088},59,[611,1090,757],{"class":667},[611,1092,808],{"class":671},[611,1094,1096],{"class":613,"line":1095},60,[611,1097,647],{"emptyLinePlaceholder":16},[611,1099,1101],{"class":613,"line":1100},61,[611,1102,691],{"class":617},[611,1104,1106],{"class":613,"line":1105},62,[611,1107,1108],{"class":617},"  # 3. 检测引擎\n",[611,1110,1112],{"class":613,"line":1111},63,[611,1113,691],{"class":617},[611,1115,1117,1120],{"class":613,"line":1116},64,[611,1118,1119],{"class":663},"  detect",[611,1121,686],{"class":667},[611,1123,1125,1127,1129],{"class":613,"line":1124},65,[611,1126,716],{"class":663},[611,1128,668],{"class":667},[611,1130,1131],{"class":671},"safeline-detector\n",[611,1133,1135,1137,1139],{"class":613,"line":1134},66,[611,1136,727],{"class":663},[611,1138,668],{"class":667},[611,1140,732],{"class":671},[611,1142,1144,1146,1148],{"class":613,"line":1143},67,[611,1145,738],{"class":663},[611,1147,668],{"class":667},[611,1149,1150],{"class":671},"chaitin\u002Fsafeline-detector:latest\n",[611,1152,1154,1156],{"class":613,"line":1153},68,[611,1155,749],{"class":663},[611,1157,686],{"class":667},[611,1159,1161,1163],{"class":613,"line":1160},69,[611,1162,757],{"class":667},[611,1164,1165],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fdetector:\u002Fresources\u002Fdetector\n",[611,1167,1169,1171],{"class":613,"line":1168},70,[611,1170,757],{"class":667},[611,1172,1173],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Flogs\u002Fdetector:\u002Flogs\u002Fdetector\n",[611,1175,1177,1179],{"class":613,"line":1176},71,[611,1178,757],{"class":667},[611,1180,768],{"class":671},[611,1182,1184,1186],{"class":613,"line":1183},72,[611,1185,774],{"class":663},[611,1187,686],{"class":667},[611,1189,1191,1193],{"class":613,"line":1190},73,[611,1192,757],{"class":667},[611,1194,1195],{"class":671},"LOG_DIR=\u002Flogs\u002Fdetector\n",[611,1197,1199,1201],{"class":613,"line":1198},74,[611,1200,798],{"class":663},[611,1202,686],{"class":667},[611,1204,1206,1208],{"class":613,"line":1205},75,[611,1207,757],{"class":667},[611,1209,808],{"class":671},[611,1211,1213],{"class":613,"line":1212},76,[611,1214,647],{"emptyLinePlaceholder":16},[611,1216,1218],{"class":613,"line":1217},77,[611,1219,691],{"class":617},[611,1221,1223],{"class":613,"line":1222},78,[611,1224,1225],{"class":617},"  # 4. 流量转发 (Tengine) \n",[611,1227,1229],{"class":613,"line":1228},79,[611,1230,691],{"class":617},[611,1232,1234,1237],{"class":613,"line":1233},80,[611,1235,1236],{"class":663},"  tengine",[611,1238,686],{"class":667},[611,1240,1242,1244,1246],{"class":613,"line":1241},81,[611,1243,716],{"class":663},[611,1245,668],{"class":667},[611,1247,1248],{"class":671},"safeline-tengine\n",[611,1250,1252,1254,1256],{"class":613,"line":1251},82,[611,1253,727],{"class":663},[611,1255,668],{"class":667},[611,1257,732],{"class":671},[611,1259,1261,1263,1265],{"class":613,"line":1260},83,[611,1262,738],{"class":663},[611,1264,668],{"class":667},[611,1266,1267],{"class":671},"chaitin\u002Fsafeline-tengine:latest\n",[611,1269,1271,1273],{"class":613,"line":1270},84,[611,1272,749],{"class":663},[611,1274,686],{"class":667},[611,1276,1278,1280],{"class":613,"line":1277},85,[611,1279,757],{"class":667},[611,1281,768],{"class":671},[611,1283,1285,1287],{"class":613,"line":1284},86,[611,1286,757],{"class":667},[611,1288,1289],{"class":671},"\u002Fetc\u002Fresolv.conf:\u002Fetc\u002Fresolv.conf:ro\n",[611,1291,1293,1295],{"class":613,"line":1292},87,[611,1294,757],{"class":667},[611,1296,1297],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fnginx:\u002Fetc\u002Fnginx\n",[611,1299,1301,1303],{"class":613,"line":1300},88,[611,1302,757],{"class":667},[611,1304,1165],{"class":671},[611,1306,1308,1310],{"class":613,"line":1307},89,[611,1309,757],{"class":667},[611,1311,1312],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fchaos:\u002Fresources\u002Fchaos\n",[611,1314,1316,1318],{"class":613,"line":1315},90,[611,1317,757],{"class":667},[611,1319,1320],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Flogs\u002Fnginx:\u002Fvar\u002Flog\u002Fnginx:z\n",[611,1322,1324,1326],{"class":613,"line":1323},91,[611,1325,757],{"class":667},[611,1327,1328],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fcache:\u002Fusr\u002Flocal\u002Fnginx\u002Fcache\n",[611,1330,1332,1334],{"class":613,"line":1331},92,[611,1333,757],{"class":667},[611,1335,949],{"class":671},[611,1337,1339,1341],{"class":613,"line":1338},93,[611,1340,774],{"class":663},[611,1342,686],{"class":667},[611,1344,1346,1348],{"class":613,"line":1345},94,[611,1347,757],{"class":667},[611,1349,1350],{"class":671},"TCD_MGT_API=https:\u002F\u002Fsafeline-mgt:1443\u002Fapi\u002Fopen\u002Fpublish\u002Fserver\n",[611,1352,1354,1356],{"class":613,"line":1353},95,[611,1355,757],{"class":667},[611,1357,1358],{"class":671},"TCD_SNSERVER=safeline-detector:8000\n",[611,1360,1362,1364],{"class":613,"line":1361},96,[611,1363,757],{"class":667},[611,1365,1366],{"class":671},"CHAOS_ADDR=safeline-chaos\n",[611,1368,1370,1373],{"class":613,"line":1369},97,[611,1371,1372],{"class":663},"    ulimits",[611,1374,686],{"class":667},[611,1376,1378,1381,1383],{"class":613,"line":1377},98,[611,1379,1380],{"class":663},"      nofile",[611,1382,668],{"class":667},[611,1384,1386],{"class":1385},"sj4cs","131072\n",[611,1388,1390,1392],{"class":613,"line":1389},99,[611,1391,963],{"class":663},[611,1393,686],{"class":667},[611,1395,1397,1399],{"class":613,"line":1396},100,[611,1398,757],{"class":667},[611,1400,1401],{"class":671},"29080:80\n",[611,1403,1405,1407],{"class":613,"line":1404},101,[611,1406,757],{"class":667},[611,1408,1409],{"class":671},"28443:443\n",[611,1411,1413,1415],{"class":613,"line":1412},102,[611,1414,798],{"class":663},[611,1416,686],{"class":667},[611,1418,1420,1422],{"class":613,"line":1419},103,[611,1421,757],{"class":667},[611,1423,808],{"class":671},[611,1425,1427],{"class":613,"line":1426},104,[611,1428,647],{"emptyLinePlaceholder":16},[611,1430,1432],{"class":613,"line":1431},105,[611,1433,691],{"class":617},[611,1435,1437],{"class":613,"line":1436},106,[611,1438,1439],{"class":617},"  # 5. 任务调度\n",[611,1441,1443],{"class":613,"line":1442},107,[611,1444,691],{"class":617},[611,1446,1448,1451],{"class":613,"line":1447},108,[611,1449,1450],{"class":663},"  luigi",[611,1452,686],{"class":667},[611,1454,1456,1458,1460],{"class":613,"line":1455},109,[611,1457,716],{"class":663},[611,1459,668],{"class":667},[611,1461,1462],{"class":671},"safeline-luigi\n",[611,1464,1466,1468,1470],{"class":613,"line":1465},110,[611,1467,727],{"class":663},[611,1469,668],{"class":667},[611,1471,732],{"class":671},[611,1473,1475,1477,1479],{"class":613,"line":1474},111,[611,1476,738],{"class":663},[611,1478,668],{"class":667},[611,1480,1481],{"class":671},"chaitin\u002Fsafeline-luigi:latest\n",[611,1483,1485,1487],{"class":613,"line":1484},112,[611,1486,774],{"class":663},[611,1488,686],{"class":667},[611,1490,1492,1494],{"class":613,"line":1491},113,[611,1493,757],{"class":667},[611,1495,1496],{"class":671},"MGT_IP=safeline-mgt\n",[611,1498,1500,1502],{"class":613,"line":1499},114,[611,1501,757],{"class":667},[611,1503,1504],{"class":671},"LUIGI_PG=postgres:\u002F\u002Fsafeline-ce:safeline-pwd-change-me@safeline-pg\u002Fsafeline-ce?sslmode=disable\n",[611,1506,1508,1510],{"class":613,"line":1507},115,[611,1509,749],{"class":663},[611,1511,686],{"class":667},[611,1513,1515,1517],{"class":613,"line":1514},116,[611,1516,757],{"class":667},[611,1518,768],{"class":671},[611,1520,1522,1524],{"class":613,"line":1521},117,[611,1523,757],{"class":667},[611,1525,1526],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fluigi:\u002Fapp\u002Fdata\n",[611,1528,1530,1532],{"class":613,"line":1529},118,[611,1531,1035],{"class":663},[611,1533,686],{"class":667},[611,1535,1537,1539,1541],{"class":613,"line":1536},119,[611,1538,1043],{"class":663},[611,1540,668],{"class":667},[611,1542,1048],{"class":671},[611,1544,1546,1548],{"class":613,"line":1545},120,[611,1547,1054],{"class":663},[611,1549,686],{"class":667},[611,1551,1553,1555,1557],{"class":613,"line":1552},121,[611,1554,1062],{"class":663},[611,1556,668],{"class":667},[611,1558,1067],{"class":671},[611,1560,1562,1564,1566],{"class":613,"line":1561},122,[611,1563,1073],{"class":663},[611,1565,668],{"class":667},[611,1567,1078],{"class":671},[611,1569,1571,1573],{"class":613,"line":1570},123,[611,1572,1011],{"class":663},[611,1574,686],{"class":667},[611,1576,1578,1580],{"class":613,"line":1577},124,[611,1579,757],{"class":667},[611,1581,1582],{"class":671},"detect\n",[611,1584,1586,1588],{"class":613,"line":1585},125,[611,1587,757],{"class":667},[611,1589,1590],{"class":671},"mgt\n",[611,1592,1594,1596],{"class":613,"line":1593},126,[611,1595,798],{"class":663},[611,1597,686],{"class":667},[611,1599,1601,1603],{"class":613,"line":1600},127,[611,1602,757],{"class":667},[611,1604,808],{"class":671},[611,1606,1608],{"class":613,"line":1607},128,[611,1609,647],{"emptyLinePlaceholder":16},[611,1611,1613],{"class":613,"line":1612},129,[611,1614,691],{"class":617},[611,1616,1618],{"class":613,"line":1617},130,[611,1619,1620],{"class":617},"  # 6. 威胁情报\n",[611,1622,1624],{"class":613,"line":1623},131,[611,1625,691],{"class":617},[611,1627,1629,1632],{"class":613,"line":1628},132,[611,1630,1631],{"class":663},"  fvm",[611,1633,686],{"class":667},[611,1635,1637,1639,1641],{"class":613,"line":1636},133,[611,1638,716],{"class":663},[611,1640,668],{"class":667},[611,1642,1643],{"class":671},"safeline-fvm\n",[611,1645,1647,1649,1651],{"class":613,"line":1646},134,[611,1648,727],{"class":663},[611,1650,668],{"class":667},[611,1652,732],{"class":671},[611,1654,1656,1658,1660],{"class":613,"line":1655},135,[611,1657,738],{"class":663},[611,1659,668],{"class":667},[611,1661,1662],{"class":671},"chaitin\u002Fsafeline-fvm:latest\n",[611,1664,1666,1668],{"class":613,"line":1665},136,[611,1667,749],{"class":663},[611,1669,686],{"class":667},[611,1671,1673,1675],{"class":613,"line":1672},137,[611,1674,757],{"class":667},[611,1676,768],{"class":671},[611,1678,1680,1682],{"class":613,"line":1679},138,[611,1681,1035],{"class":663},[611,1683,686],{"class":667},[611,1685,1687,1689,1691],{"class":613,"line":1686},139,[611,1688,1043],{"class":663},[611,1690,668],{"class":667},[611,1692,1048],{"class":671},[611,1694,1696,1698],{"class":613,"line":1695},140,[611,1697,1054],{"class":663},[611,1699,686],{"class":667},[611,1701,1703,1705,1707],{"class":613,"line":1702},141,[611,1704,1062],{"class":663},[611,1706,668],{"class":667},[611,1708,1067],{"class":671},[611,1710,1712,1714,1716],{"class":613,"line":1711},142,[611,1713,1073],{"class":663},[611,1715,668],{"class":667},[611,1717,1078],{"class":671},[611,1719,1721,1723],{"class":613,"line":1720},143,[611,1722,798],{"class":663},[611,1724,686],{"class":667},[611,1726,1728,1730],{"class":613,"line":1727},144,[611,1729,757],{"class":667},[611,1731,808],{"class":671},[611,1733,1735],{"class":613,"line":1734},145,[611,1736,647],{"emptyLinePlaceholder":16},[611,1738,1740],{"class":613,"line":1739},146,[611,1741,691],{"class":617},[611,1743,1745],{"class":613,"line":1744},147,[611,1746,1747],{"class":617},"  # 7. 混沌测试\n",[611,1749,1751],{"class":613,"line":1750},148,[611,1752,691],{"class":617},[611,1754,1756,1759],{"class":613,"line":1755},149,[611,1757,1758],{"class":663},"  chaos",[611,1760,686],{"class":667},[611,1762,1764,1766,1768],{"class":613,"line":1763},150,[611,1765,716],{"class":663},[611,1767,668],{"class":667},[611,1769,1770],{"class":671},"safeline-chaos\n",[611,1772,1774,1776,1778],{"class":613,"line":1773},151,[611,1775,727],{"class":663},[611,1777,668],{"class":667},[611,1779,732],{"class":671},[611,1781,1783,1785,1787],{"class":613,"line":1782},152,[611,1784,738],{"class":663},[611,1786,668],{"class":667},[611,1788,1789],{"class":671},"chaitin\u002Fsafeline-chaos:latest\n",[611,1791,1793,1795],{"class":613,"line":1792},153,[611,1794,1035],{"class":663},[611,1796,686],{"class":667},[611,1798,1800,1802,1804],{"class":613,"line":1799},154,[611,1801,1043],{"class":663},[611,1803,668],{"class":667},[611,1805,1048],{"class":671},[611,1807,1809,1811],{"class":613,"line":1808},155,[611,1810,1054],{"class":663},[611,1812,686],{"class":667},[611,1814,1816,1818,1820],{"class":613,"line":1815},156,[611,1817,1062],{"class":663},[611,1819,668],{"class":667},[611,1821,1067],{"class":671},[611,1823,1825,1827,1829],{"class":613,"line":1824},157,[611,1826,1073],{"class":663},[611,1828,668],{"class":667},[611,1830,1831],{"class":671},"\"10\"\n",[611,1833,1835,1837],{"class":613,"line":1834},158,[611,1836,774],{"class":663},[611,1838,686],{"class":667},[611,1840,1842,1844],{"class":613,"line":1841},159,[611,1843,757],{"class":667},[611,1845,1846],{"class":671},"DB_ADDR=postgres:\u002F\u002Fsafeline-ce:safeline-pwd-change-me@safeline-pg\u002Fsafeline-ce?sslmode=disable\n",[611,1848,1850,1852],{"class":613,"line":1849},160,[611,1851,749],{"class":663},[611,1853,686],{"class":667},[611,1855,1857,1859],{"class":613,"line":1856},161,[611,1858,757],{"class":667},[611,1860,949],{"class":671},[611,1862,1864,1866],{"class":613,"line":1863},162,[611,1865,757],{"class":667},[611,1867,1868],{"class":671},"\u002Fmnt\u002Fdocker\u002Fapps\u002Fsafeline\u002Fresources\u002Fchaos:\u002Fapp\u002Fchaos\n",[611,1870,1872,1874],{"class":613,"line":1871},163,[611,1873,798],{"class":663},[611,1875,686],{"class":667},[611,1877,1879,1881],{"class":613,"line":1878},164,[611,1880,757],{"class":667},[611,1882,808],{"class":671},[611,1884,1886],{"class":613,"line":1885},165,[611,1887,647],{"emptyLinePlaceholder":16},[611,1889,1891],{"class":613,"line":1890},166,[611,1892,1893],{"class":617},"# 网络配置\n",[611,1895,1897,1900],{"class":613,"line":1896},167,[611,1898,1899],{"class":663},"networks",[611,1901,686],{"class":667},[611,1903,1905,1908],{"class":613,"line":1904},168,[611,1906,1907],{"class":663},"  safeline-ce",[611,1909,686],{"class":667},[611,1911,1913,1916,1918],{"class":613,"line":1912},169,[611,1914,1915],{"class":663},"    driver",[611,1917,668],{"class":667},[611,1919,1920],{"class":671},"bridge\n",[417,1922,1924],{"id":1923},"_32-配置雷池-waf","3.2 配置雷池 WAF",[422,1926,1927],{},"雷池不需要处理复杂的 HTTPS 证书，我们把它当做一个纯粹的 HTTP 过滤器。",[430,1929,1930,1944,1950,1964,1981,1995],{},[433,1931,1932,1933,1936,1937,545,1940,1943],{},"登录雷池后台  ",[598,1934,1935],{},"http:\u002F\u002F192.168.x.x:29443","，点击 ",[436,1938,1939],{},"【防护应用】",[436,1941,1942],{},"【添加站点】","。",[433,1945,1946,1949],{},[436,1947,1948],{},"配置关键点","：",[433,1951,1952],{},[430,1953,1954],{},[433,1955,1956,1959,1960,1963],{},[436,1957,1958],{},"域名","：填写你的公网域名（如 ",[598,1961,1962],{},"fnnas.example.com","）",[433,1965,1966],{},[430,1967,1968],{},[433,1969,1970,1973,1974,1977,1978],{},[436,1971,1972],{},"端口","：填写 ",[598,1975,1976],{},"80"," (HTTP)，把 443 那个关掉不然需要证书。",[436,1979,1980],{},"注意：这里不要开启 SSL，证书交给 Lucky 管。",[433,1982,1983],{},[430,1984,1985],{},[433,1986,1987,1990,1991,1994],{},[436,1988,1989],{},"上游服务器","：填写飞牛 NAS 的真实内网 IP + 端口（如 ",[598,1992,1993],{},"http:\u002F\u002F192.168.x.x:5666","）。",[433,1996,1997],{},"提交保存。",[422,1999,2000],{},"此时，雷池已经准备好接收流量并转发给飞牛了。",[422,2002,2003],{},[2004,2005],"img",{"alt":607,"src":2006},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F06\u002F04\u002F1780583322464.avif",[422,2008,2009,2010,1949],{},"进入站点详情 -> ",[436,2011,2012],{},"【高级配置】",[430,2014,2015,2024],{},[433,2016,2017,2020,2021,1943],{},[436,2018,2019],{},"获取客户端 IP 方式","：选择 ",[436,2022,2023],{},"“从 HTTP Header 获取”",[433,2025,2026,2029,2030,1943],{},[436,2027,2028],{},"HTTP Header","：填入 ",[598,2031,2032],{},"X-Forwarded-For",[422,2034,2035],{},[2004,2036],{"alt":607,"src":2037},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F06\u002F04\u002F1780583321047.avif",[422,2039,2040,2043],{},[436,2041,2042],{},"验证方法","：用手机流量访问一次 NAS，去雷池【防护日志】看一眼，如果源 IP 显示的是公网 IP，说明透传成功！",[412,2045,2047],{"id":2046},"_4-lucky-反向代理","4 Lucky 反向代理",[417,2049,2051],{"id":2050},"_41-安装-lucky","4.1 安装 Lucky",[422,2053,2054],{},"略，因为我前面文章详细说过了。",[417,2056,2058],{"id":2057},"_42-配置-lucky-反向代理","4.2 配置 Lucky 反向代理",[422,2060,2061,2062,2064],{},"这个我也详细说过了，关键接入",[436,2063,497],{},"，我着重说一下。Lucky 是流量的入口，它负责把外网的 HTTPS 流量“剥皮”成 HTTP，然后扔给雷池。",[430,2066,2067,2070,2078,2083,2104,2110,2129],{},[433,2068,2069],{},"在 Lucky 中添加一个子规则。",[433,2071,2072,2075,2076,1994],{},[436,2073,2074],{},"前端地址","：填写你的反代域名（如 ",[598,2077,1962],{},[433,2079,2080,1949],{},[436,2081,2082],{},"后端设置 (关键)",[433,2084,2085],{},[430,2086,2087],{},[433,2088,2089,2092,2093,2096,2097,2100,2101,1943],{},[436,2090,2091],{},"后端地址","：指向 ",[436,2094,2095],{},"雷池的 IP 和端口","（如 ",[598,2098,2099],{},"http:\u002F\u002F192.168.x.x:29080","），",[436,2102,2103],{},"千万不要直接指飞牛",[433,2105,2106,2109],{},[436,2107,2108],{},"SSL 证书","：在 Lucky 里配置好你的 HTTPS 证书。",[433,2111,2112,2115,2116,545,2119,2122,2123,2122,2126],{},[436,2113,2114],{},"安全设置","  ->  ",[436,2117,2118],{},"基本认证",[436,2120,2121],{},"网页认证","  -> ",[436,2124,2125],{},"认证信息设置",[598,2127,2128],{},"admin:admin123",[433,2130,2131],{},[430,2132,2133],{},[433,2134,2135,2138,2139],{},[598,2136,2137],{},"账号:密码","的格式，请注意中间有一个",[436,2140,2141],{},"英文的冒号",[422,2143,2144],{},[2004,2145],{"alt":607,"src":2146},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F06\u002F04\u002F1780583315142.avif",[412,2148,2150],{"id":2149},"_5-效果验收与取舍","5 效果验收与取舍",[417,2152,2154],{"id":2153},"_51-安全性验证","5.1 安全性验证",[430,2156,2157,2178],{},[433,2158,2159,2162,2163,2166,2167],{},[436,2160,2161],{},"漏洞测试","：尝试访问 ",[598,2164,2165],{},"http:\u002F\u002F域名\u002F漏洞路径","。\n",[430,2168,2169],{},[433,2170,2171,2174,2175,2177],{},[436,2172,2173],{},"结果","：首先需要在输入",[436,2176,490],{},"，雷池直接拦截，显示 403 Forbidden 大红脸。",[433,2179,2180,2183,2184],{},[436,2181,2182],{},"暴力测试","：在浏览器输入错误的 Basic Auth 密码。\n",[430,2185,2186],{},[433,2187,2188,2190],{},[436,2189,2173],{},"：直接 401 Unauthorized，连飞牛的影子的都见不到。",[417,2192,2194],{"id":2193},"_52-带来的副作用","5.2 带来的副作用",[430,2196,2197,2206],{},[433,2198,2199,2202,2203,1943],{},[436,2200,2201],{},"手机 APP 无法使用","：飞牛的手机 APP 无法处理 Basic Auth 弹窗，所以开启此功能后，",[436,2204,2205],{},"手机 APP 将无法连接",[433,2207,2208,569,2211],{},[436,2209,2210],{},"解决方案",[430,2212,2213,2219],{},[433,2214,2215,2218],{},[436,2216,2217],{},"日常使用","：电脑端网页访问（安全无忧）。",[433,2220,2221,2224],{},[436,2222,2223],{},"手机端","：建议配合 Tailscale \u002F WireGuard 等，走内网 IP 访问，绕过 Lucky 和雷池。",[417,2226,2228],{"id":2227},"_53-展示结果图","5.3 展示结果图",[422,2230,2231],{},"这是内网 oec-t 刷 飞牛自带漏洞的截图",[422,2233,2234],{},[2004,2235],{"alt":607,"src":2236},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F06\u002F04\u002F1780583316519.avif",[422,2238,2239],{},"这是雷池 WAF 防护到了的图",[422,2241,2242],{},[2004,2243],{"alt":607,"src":2244},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F06\u002F04\u002F1780583317991.avif",[422,2246,2247],{},"这是 Lucky Auth 验证的图",[422,2249,2250],{},[2004,2251],{"alt":607,"src":2252},"https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F06\u002F04\u002F1780583319450.avif",[412,2254,2256],{"id":2255},"_6-总结","6 总结",[422,2258,2259,2260,2263],{},"通过 ",[436,2261,2262],{},"Lucky (入口+认证) -> 雷池 (清洗) -> 飞牛 (业务)"," 的三层架构，我们实现了：",[430,2265,2266,2272,2278],{},[433,2267,2268,2271],{},[436,2269,2270],{},"HTTPS 自动续期","（Lucky 负责）。",[433,2273,2274,2277],{},[436,2275,2276],{},"WAF 虚拟补丁","（拦截 SQL 注入、路径遍历等攻击）。",[433,2279,2280,2283],{},[436,2281,2282],{},"真实 IP 封禁","（解决了反代 IP 丢失问题）。",[430,2285,2286],{},[433,2287,2288,2291],{},[436,2289,2290],{},"强制身份锁","（Basic Auth 物理隔绝）。",[422,2293,2294],{},"在官方彻底修复漏洞之前，这套方案能让你原本“裸奔”的 NAS 穿上一套“钢铁侠战衣”。折腾虽然麻烦，但数据安全无价！",[422,2296,2297],{},"Created with ❤️ by 十三",[2299,2300,2301],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":607,"searchDepth":621,"depth":621,"links":2303},[2304,2309,2310,2314,2318,2323],{"id":414,"depth":621,"text":415,"children":2305},[2306,2307,2308],{"id":419,"depth":627,"text":420},{"id":427,"depth":627,"text":428},{"id":520,"depth":627,"text":521},{"id":554,"depth":621,"text":555},{"id":588,"depth":621,"text":589,"children":2311},[2312,2313],{"id":592,"depth":627,"text":593},{"id":1923,"depth":627,"text":1924},{"id":2046,"depth":621,"text":2047,"children":2315},[2316,2317],{"id":2050,"depth":627,"text":2051},{"id":2057,"depth":627,"text":2058},{"id":2149,"depth":621,"text":2150,"children":2319},[2320,2321,2322],{"id":2153,"depth":627,"text":2154},{"id":2193,"depth":627,"text":2194},{"id":2227,"depth":627,"text":2228},{"id":2255,"depth":621,"text":2256},"md",{"published":141,"author":2326,"image":2327},"十三","https:\u002F\u002Fimg.nw177.cn\u002Fblog\u002F2026\u002F06\u002F04\u002F1780564682873.avif",{"title":140,"description":140},"blog\u002F10-技术专栏\u002F20-软路由\u002F14.基于飞牛漏洞安全访问lucky反代&雷池防护",[122,143,124,144,126],"oJ0YE9Xpxtk00ZYImkeZwZoFLKJBYkdz6wmwQj1zQcM",[2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390],{"path":6,"title":7,"date":9},{"path":19,"title":20,"date":22},{"path":31,"title":32,"date":34},{"path":42,"title":43,"date":45},{"path":53,"title":54,"date":55},{"path":62,"title":63,"date":64},{"path":70,"title":71,"date":72},{"path":78,"title":79,"date":80},{"path":85,"title":86,"date":87},{"path":92,"title":93,"date":95},{"path":100,"title":101,"date":102},{"path":106,"title":107,"date":108},{"path":112,"title":113,"date":114},{"path":118,"title":119,"date":120},{"path":130,"title":131,"date":132},{"path":139,"title":140,"date":141},{"path":147,"title":148,"date":149},{"path":156,"title":157,"date":158},{"path":165,"title":166,"date":167},{"path":172,"title":173,"date":174},{"path":180,"title":181,"date":182},{"path":186,"title":187,"date":188},{"path":186,"title":192,"date":193},{"path":197,"title":198,"date":199},{"path":204,"title":205,"date":206},{"path":212,"title":213,"date":206},{"path":217,"title":218,"date":206},{"path":223,"title":224,"date":206},{"path":228,"title":229,"date":206},{"path":234,"title":235,"date":206},{"path":239,"title":240,"date":242},{"path":247,"title":248,"date":242},{"path":247,"title":254,"date":242},{"path":247,"title":259,"date":242},{"path":266,"title":267,"date":242},{"path":266,"title":274,"date":242},{"path":278,"title":279,"date":242},{"path":284,"title":285,"date":242},{"path":284,"title":291,"date":242},{"path":284,"title":297,"date":242},{"path":284,"title":301,"date":242},{"path":284,"title":305,"date":242},{"path":284,"title":310,"date":242},{"path":315,"title":316,"date":242},{"path":321,"title":322,"date":242},{"path":321,"title":326,"date":242},{"path":330,"title":331,"date":242},{"path":335,"title":336,"date":242},{"path":342,"title":343,"date":242},{"path":342,"title":348,"date":242},{"path":353,"title":354,"date":242},{"path":361,"title":362,"date":242},{"path":367,"title":368,"date":242},{"path":374,"title":375,"date":242},{"path":380,"title":381,"date":242},{"path":387,"title":388,"date":242},{"path":394,"title":395,"date":242},{"path":380,"title":400,"date":401},1788281984643]