MarcoRodrigues00/portal-academico-seguro

GitHub: MarcoRodrigues00/portal-academico-seguro

采用分层安全架构(WAF、MFA、网络隔离、SIEM监控)的学术门户Web应用,已在十支团队攻防演练中验证了纵深防御体系的有效性。

Stars: 0 | Forks: 0

# 🔐 安全学术门户 (PAS) ![Backend](https://img.shields.io/badge/backend-Node.js%20%C2%B7%20Express%20%C2%B7%20TypeScript-3178c6?logo=typescript&logoColor=white) ![Frontend](https://img.shields.io/badge/frontend-React%20%C2%B7%20Vite-61dafb?logo=react&logoColor=black) ![Auth](https://img.shields.io/badge/auth-Keycloak%20%C2%B7%20MFA%2FTOTP-blue) ![WAF](https://img.shields.io/badge/edge-Nginx%20%C2%B7%20ModSecurity%20(OWASP%20CRS)-009639?logo=nginx&logoColor=white) ![Infra](https://img.shields.io/badge/infra-Docker%20segmented%20network-2496ed?logo=docker&logoColor=white) ![Monitoring](https://img.shields.io/badge/monitoring-Wazuh%20%C2%B7%20Prometheus%20%C2%B7%20Grafana-orange) ## 概述 一个面向学生、教授和管理员的 Web 门户(包含成绩、注册证明、申请、公开课程),围绕分层安全和持续监控设计——随后在 10 支团队的实验室攻防演练中承受了真实的对抗压力。 ## 安全架构(纵深防御) | 层级 | 具体内容 | |------|--------------| | **边缘** | pfSense 防火墙(默认全部拒绝,仅开放 80/443 端口,WAN/服务器隔离) | | **DMZ** | Nginx 反向代理,采用 TLS 1.2/1.3,**ModSecurity WAF (OWASP CRS)** 防御 SQLi/XSS/CSRF,基于 IP 的速率限制,安全响应头(HSTS、X-Frame-Options、CSP) | | **App** | 集成 Keycloak 与 **MFA/TOTP**,基于角色的 RBAC(admin/professor/aluno/externo),`express-rate-limit`,Helmet.js,Zod 验证,审计日志 | | **数据** | PostgreSQL 隔离在其独立的网络区域中,从不对外暴露 | | **监控** | Wazuh SIEM,Prometheus metrics,Grafana dashboards,Restic 加密备份 | | **加固** | AppArmor,仅限 SSH 密钥登录,fail2ban,非 root containers,尽可能使用只读 volumes | ## 网络拓扑 ``` Internet ──> pfSense (NAT/FW, only 80/443) ──> nginx-proxy (DMZ) │ frontend · backend-api · keycloak (APP) │ postgres (DATA, internal only) App hosts ──logs/metrics──> Monitoring host: Wazuh · Prometheus · Grafana · Restic ``` ## 技术栈 - **后端:** Node.js, Express, TypeScript, Prisma - **前端:** React, Vite, TypeScript - **基础设施:** Docker / docker-compose, Nginx, Keycloak, PostgreSQL ## 仓库结构 ``` portal-academico-seguro/ ├─ backend/ # API: Express + TypeScript + Prisma ├─ frontend/ # React + Vite + TypeScript ├─ infra/ # docker-compose, keycloak themes, env examples └─ docker-compose.app.yml ``` ## 快速开始 ``` # 复制 env 模板并填入你自己的值 cp .env.example .env cp infra/.env.example infra/.env cp backend/.env.example backend/.env cp frontend/.env.example frontend/.env # 启动 stack docker compose -f docker-compose.app.yml up -d docker compose -f docker-compose.app.yml ps ``` ## 攻击下的有效性验证 在一场 10 支团队的演练中,该门户在测试其他团队系统的同时,也遭受了来自其他团队的实时攻击。 观测到的防御机制生效情况:WAF 针对SQLi/XSS返回 **403**,速率限制触发 **429**,并且在 Wazuh中生成了相应的警报。 ## 📸 截图 **网络拓扑 — pfSense 边缘,隔离的 DMZ / APP / DATA** ![网络拓扑](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/22df2a09b2093804.png) **带 MFA 的登录 — Keycloak SSO + TOTP** ![带 MFA 的登录](https://raw.githubusercontent.com/MarcoRodrigues00/portal-academico-seguro/main/docs/screenshots/02-login-mfa.png) **Keycloak — realm, roles 和 MFA 配置** ![Keycloak realm](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/fa0e7a8037093830.png) **应用 — 已认证的仪表板** ![仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/706c599f23093903.png) **应用 — 公开课程视图** ![公开课程](https://raw.githubusercontent.com/MarcoRodrigues00/portal-academico-seguro/main/docs/screenshots/05-cursos-publicos.png)
标签:AppImage, MITM代理, NIDS, Web应用防火墙, 学术门户, 安全架构, 容器化, 测试用例, 网络隔离, 自动化攻击, 自定义请求头, 请求拦截