从裸奔到三层防护:aaPanel + Nginx + 雷池 WAF 构建应用安全链路

发布时间:2026/11/14 19:32:48

从裸奔到三层防护:aaPanel + Nginx + 雷池 WAF 构建应用安全链路 一个真实记录如何把 Python 项目从IP:3210直接暴露变成 WAF→Nginx→App 三层防护的完整过程。---------------------AI角色扮演网站安全加固实战篇二背景继 AI 角色扮演网站安全加固实战篇一之后我又把这个项目搬到了本地的一台老惠普本上刷了个 Linux Mint 22.3 LTS基于 Ubuntu 24.04 LTS当家庭服务器。这个 Python FastAPI 项目通过 aaPanel 面板部署图省事直接 IP:3210 裸奔访问。但这台机器就挂在家庭 WiFi 下跑着同一个局域网、甚至能摸到这个 IP 的人都可以直接打到应用端口。万一碰上恶意扫描、SQL 注入、暴力破解就凭代码里那点安全中间件分分钟被穿成筛子。这波操作模拟的就是最真实的业务防御场景同时也在模拟真实公网业务的防御。补充下原python项目架构之前忘记提及了技术栈层技术Web 框架FastAPI 0.115服务器uvicorn 0.30数据库SQLite (aiosqlite, WAL 模式)认证JWT (HS256, Cookie, 30天过期)HTTP 客户端aiohttp (调用外部 AI API)模板纯 HTML (templates 目录)静态资源FastAPI StaticFiles项目文件结构aichat/ ├── main.py ← 全部业务逻辑单文件 ├── data.db ← SQLite 数据库自动创建 ├── .env ← 环境变量SECRET_KEY / HOST / PORT ├── requirements.txt ← Python 依赖 ├── templates/ │ ├── chat.html ← 聊天主页面 │ ├── login.html ← 登录/注册页 │ └── settings.html ← 设置页 └── static/ ← CSS / JS 等静态资源这次需求很清楚基于 aaPanel 配置 Nginx 反向代理与 UFW 端口访问控制接入雷池 WAF 实现 HTTP 层防护构建适配局域网 IP端口访问模式的应用安全链路。翻译成人话外面的人只能走正门某个指定端口正门有安检WAF 查恶意请求再由传达室Nginx转交到真正干活的人Python 应用躲在内网。直通的后门端口3210焊死。最终架构局域网用户 → 雷池 WAF (:3211) → Nginx (:8081) → Python App (127.0.0.1:3210) HTTP 层攻击检测 反向代理限流 业务逻辑(外部不可达)每个端口谁负责、外面能不能访问端口服务外部可访问3211雷池 WAF唯一入口✅9443雷池管理面板✅8081Nginx 反向代理❌ 仅 127.0.0.13210Python 应用❌ 仅 127.0.0.1实施过程第1步加固应用自身让 Python 应用只监听本机回环地址放弃对外暴露。.env加一行HOST127.0.0.1main.py末尾启动参数加代理头支持uvicorn.run(app,hostHOST,portPORT,proxy_headersTrue,forwarded_allow_ips127.0.0.1)同时加了个中间件解析X-Forwarded-For经过 WAF/Nginx 后还能拿到真实客户端 IP。第2步aaPanel 配置 Nginx 反向代理在 aaPanel 新建站点端口填8081绕开 aaPanel 保留端口的限制。Nginx 配置upstream aichat_backend{# 应用只监听 127.0.0.1:3210不对外暴露server127.0.0.1:3210fail_timeout10smax_fails3;keepalive32;}# ---------- 限流区域 ----------# 常规请求每秒 30 个对 AI 聊天够用limit_req_zone$binary_remote_addrzoneaichat_limit:10mrate30r/s;# 登录接口每分钟 10 个防暴力破解limit_req_zone$binary_remote_addrzoneaichat_login:10mrate10r/m;# ---------- 服务器块 ----------server{# aaPanel 默认会生成 listen 80此处显式声明供 WAF 转发的端口listen8081;server_name _192.168.124.27;# 接受任意域名/IP 访问局域网场景# 日志aaPanel 通常已有日志配置按需调整access_log /www/wwwlogs/aichat_access.log;error_log /www/wwwlogs/aichat_error.log;# 上传限制聊天一般不需要大文件调小防滥用client_max_body_size 10m;client_body_buffer_size 128k;client_header_buffer_size 4k;large_client_header_buffers48k;# 超时SSE 流式响应需较长超时proxy_read_timeout 300s;proxy_send_timeout 300s;proxy_connect_timeout 10s;keepalive_timeout65;# ---------- 安全头 ----------add_header X-Content-Type-Optionsnosniffalways;add_header X-Frame-OptionsDENYalways;add_header X-XSS-Protection1; modeblockalways;add_header Referrer-Policystrict-origin-when-cross-originalways;# 隐藏 Nginx 版本号server_tokens off;# ---------- 主反向代理 ----------location /{# 限流limit_reqzoneaichat_limitburst50nodelay;proxy_pass http://aichat_backend;# ---- 关键传递客户端真实信息给后端 ----proxy_set_header Host$host;proxy_set_header X-Real-IP$remote_addr;# 追加本机 IP 到 X-Forwarded-ForWAF 已将客户端 IP 放在此头proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto$scheme;proxy_set_header X-Forwarded-Host$host;proxy_set_header X-Forwarded-Port$server_port;# ---- WebSocket / SSE 支持 ----proxy_http_version1.1;proxy_set_header Upgrade$http_upgrade;proxy_set_header Connectionupgrade;# ---- 缓冲流式响应关闭缓冲----proxy_buffering off;proxy_cache off;# ---- 错误处理 ----proxy_next_upstream errortimeoutinvalid_header http_500 http_502 http_503;proxy_next_upstream_tries2;}# ---------- 登录接口限流加强 ----------location /api/login{limit_reqzoneaichat_loginburst5nodelay;proxy_pass http://aichat_backend;proxy_set_header Host$host;proxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto$scheme;proxy_http_version1.1;}# ---------- 拒绝敏感文件访问 ----------location ~*\.(db|sqlite|sqlite3|env|pyc|py|git|svn)${deny all;return404;}# ---------- 健康检查 ----------location /health{access_log off;return200OK;add_header Content-Type text/plain;}}第3步安装雷池 WAF# 下载脚本wgethttps://waf-ce.chaitin.cn/release/latest/setup.sh# 如果 wget 报证书错就用这个curl-fsSLkhttps://waf-ce.chaitin.cn/release/latest/setup.sh-osetup.sh# 给执行权限chmodx setup.sh# 用 bash 运行注意直接用 bash 命令sudobashsetup.sh后续根据安装引导选Y即可可先按引导说的暂时关闭防火墙后续再开放对应端口然后打开防火墙也不迟。登录管理面板IP:9443建站点上游填127.0.0.1:8081监听端口3211开启攻击防护和CC防护上图为添加我的AI聊天网站截图上图为cc防护配置截图第4步UFW 防火墙配置sudoufw allow9443/tcp# 雷池管理sudoufw deny3210/tcp# 关闭端口封死应用直连sudoufw deny8081/tcp# 关闭端口封死 Nginx 直连sudoufwenable踩坑记录坑1aaPanel 不让用 8080 端口aaPanel 自己占用了 8080新建站点填不了。换成8081解决。端口号不重要只要整个链路一致就行。坑2配置 Nginx 后页面样式全丢Nginx 配置里我错误加了个/static/拦截块导致能访问网页但是格式全丢变成一大堆文字了。这是典型的过早优化——想着让 Nginx 直接托管静态文件提升性能但路径没搞清楚就先加上了。删掉这个块让静态文件透传给 Python 处理立刻恢复。教训先把主链路调通性能优化放最后。验证# 走正门经过 WAF Nginxcurlhttp://服务器IP:3211/ → ✅ 正常页面# 走后门直接摸应用curlhttp://服务器IP:3210/ → ❌ 超时/拒绝# 摸 Nginxcurlhttp://服务器IP:8081/ → ❌ 超时/拒绝总结整个方案让它实现了每一层只做一件事UFW— 只管端口里面跑的一概不管雷池 WAF— 只管 HTTP 层恶意流量不操心路由Nginx— 只管代理转发和限流不操心安全检测Python 应用— 只管业务逻辑躲在最后面套在一起就是一条完整的防护链。任何一层挂了另外两层还在。
延伸阅读

更多相关文章

2026/11/12 7:03:42

产品经理实战心法:从价值模型到决策机制,打造卓越产品

1. 从“用户价值”到“产品定义”:李想的产品实战心法最近几年,产品经理这个岗位的热度似乎有所回落,但“产品思维”却越来越成为各行各业从业者的底层能力。无论是做技术、做运营、做市场,甚至自己做点小生意,如何定义…

2026/11/13 9:21:31

自定义工具开发实战:把任意Python函数变成AI Agent可用的工具

自定义工具开发,把任意Python函数变成Agent工具 内置工具只能解决通用问题。真正做项目的时候,你肯定需要写自己的工具。 比如对接公司内部的API,操作特定的业务系统,调用内部的数据库。这些都得自己写。 好消息是,在L…

2026/11/12 0:59:12

基于 Flask Web 框架与 llama.cpp 推理引擎构建的本地 AI 智能对话助手

基于 Flask Web 框架与 llama.cpp 推理引擎构建的本地 AI 智能对话助手 智能助手采用 Qwen3.5-2B GGUF 量化模型,通过 llama-cpp-python 实现纯 CPU 环境下的大语言模型推理,无需依赖云端服务即可完成文本生成、多轮对话等任务。系统以 Flask 提供 Web 服务接口,实现模型加…

2026/11/14 19:27:36

湖南电工证在哪里看电子证书查询全国通用

湖南电工证在哪里看电子证书查询全国通用 证书过期了不知道怎么复审延期,这事儿真让人头疼。特别是湖南电工证在哪里看电子证书查询,如果自己不清楚流程,一不留神就可能影响工作。而且现在这些特种作业操作证全国通用,不能随便丢掉或放任不管。如果你正好…

2026/11/14 19:27:36

电工证如何领补贴湖北2026河南最新政策

电工证如何领补贴湖北2026河南最新政策 实操考试心里没底怕挂科?湖北电工证报考流程、补贴政策和考试技巧全在这儿! 一、湖北电工证补贴政策2026年有哪些新变化? 2026年,湖北在电工证补贴政策上有了新的调整。根据…

2026/11/14 19:27:36

宣城市电工证复审怎么过?郑州报考避坑指南全攻略

宣城市电工证复审怎么过?郑州报考避坑指南全攻略 怕考不过白交培训费?别慌,我这有实操经验,专治“复审焦虑症”。别再被那些“包过”“保分”的话术忽悠了,真金不怕火炼,电工证复审不靠运气,靠的是系统复习+真题训练。尤其是宣城市电工证复审,每年都…

2026/11/14 19:27:36

报考技能补贴南京电工证全攻略,保姆级教程教你避坑不踩雷

报考技能补贴南京电工证全攻略,保姆级教程教你避坑不踩雷 你是不是也遇到过这种情况:听说电工证能领技能补贴,想报个名,结果一搜信息,发现网上一堆培训机构,真假难辨,连报名流程都搞不清楚?其实你不是一个人,很多小伙伴都和你一样,…

2026/11/14 19:27:36

高级电工证多久有效?通过率揭秘:证书过期了不知道怎么复审延期

高级电工证多久有效?通过率揭秘:证书过期了不知道怎么复审延期 你是不是也遇到过这种情况:手里的高级电工证快到期了,但不知道怎么复审,更别提延期了。别急,今天我就从一个干了十年应急管理行业老手的角度,跟你聊聊高级电工证的有效期、复审流程、通过…

2026/11/14 19:22:35

电工证查询莱阳全流程办理指南

莱阳电工证查询全流程避坑指南 电工证值不值得考 你是不是也这样,听说要考电工证,却不知道从哪开始?跑了好几个地方,不是被说“等通知”,就是被推荐各种“包过班”,结果花了钱还没拿到证?别急,今天我就带你一步步搞清楚 电工证查询莱阳…

2026/11/13 22:33:32

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/14 0:06:39

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来

土木特种工考证官方报名入口怎么找 之前考的证在外省能不能转过来 之前考的证在外省能不能转过来?这个问题我太熟悉了,作为一名干了十几年的特种作业证书办理从业者,每年都会遇到不少像你一样在外地考了证,回来却发现无法直接使用的学员。别急,今天我就…

2026/11/14 0:06:39

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试

电工证要多久多钱保姆级教程:工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,你不是一个人。在信阳浉河区,很多刚进入工地的电工都面临这样的困境:工作强度大,时间碎片化,根本没有系统复习考试的机会。但电工证是上岗的硬门槛,…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑