jasimalnajjar/secure-api
GitHub: jasimalnajjar/secure-api
一个基于 FastAPI 的安全扫描 API,附带完整 CI/CD 流水线,自动化完成 SSL、标头与端口检查并部署至 AWS。
Stars: 0 | Forks: 0
# 🔒 SecureAPI — 完整 CI/CD 流水线安全扫描器
一个基于 Python 的安全扫描器 API,用于检查网站的 SSL 证书问题、缺失的安全标头和开放端口 — 通过 GitHub Actions、Docker 和 Terraform 自动部署到 AWS。







## 概述
SecureAPI 是一个轻量级 REST API,对任意网站执行三项关键安全检查:SSL 证书验证、安全标头分析和端口扫描。该项目的重点是展示生产级别的 CI/CD 流水线 — 每次推送到 `main` 分支都会触发自动化的代码检查、安全扫描、测试、Docker 镜像构建以及 AWS 部署。
## CI/CD 流水线
每次推送到 `main` 分支会触发以下自动化流程:
```
Push to main
│
├── Lint & Style Check (flake8)
│
├── Security Scan (Bandit)
│
└── Run Tests (pytest)
│
└── Build & Push Docker Image (Docker Hub)
│
└── Deploy to AWS (Terraform → EC2)
```
| 阶段 | 工具 | 目的 |
|------|------|------|
| Lint | flake8 | 捕获代码风格问题和常见 Python 错误 |
| 安全 | Bandit | 扫描源代码中的安全漏洞 |
| 测试 | pytest | 运行单元测试与集成测试 |
| 构建 | Docker | 容器化应用程序 |
| 推送 | Docker Hub | 存储版本化容器镜像 |
| 部署 | Terraform | 配置并管理 AWS 基础设施 |
## 安全扫描器功能
### SSL 证书检查
连接到网站的 443 端口并验证 SSL/TLS 证书。报告证书颁发者、过期日期、距过期的天数,并标记在 30 天内即将过期的证书。
### 安全标头分析
检查 HTTP 响应标头是否符合七项推荐的安全标头(Strict-Transport-Security、Content-Security-Policy、X-Content-Type-Options、X-Frame-Options、X-XSS-Protection、Referrer-Policy、Permissions-Policy)。返回 100 分制评分以及每个标头的详细信息。
### 端口扫描
对 11 个常见端口(FTP、SSH、SMTP、DNS、HTTP、HTTPS、MySQL、RDP、PostgreSQL、HTTP 代理、HTTPS 备用)执行 TCP 连接扫描。报告哪些端口开放及其对应服务。
## 技术栈
| 层级 | 技术 |
|------|------|
| API 框架 | FastAPI + Uvicorn |
| 编程语言 | Python 3.10+ |
| 测试 | pytest, httpx |
| 代码检查 | flake8 |
| 安全扫描 | Bandit |
| 容器化 | Docker |
| 镜像仓库 | Docker Hub |
| CI/CD | GitHub Actions |
| 基础设施 | Terraform |
| 云平台 | AWS EC2(免费层) |
| 状态存储 | AWS S3(Terraform 状态) |
## API 端点
| 方法 | 路径 | 描述 |
|------|------|------|
| GET | `/` | 健康检查 |
| GET | `/scan?url={url}` | 完整安全扫描(SSL + 标头 + 端口) |
| GET | `/scan/ssl?url={url}` | 仅 SSL 证书检查 |
| GET | `/scan/headers?url={url}` | 仅安全标头检查 |
| GET | `/scan/ports?url={url}` | 仅端口扫描 |
### 示例请求
```
curl "http://localhost:8000/scan?url=google.com"
```
### 示例响应
```
{
"target": "google.com",
"hostname": "google.com",
"scanned_at": "2026-04-12T10:30:00",
"ssl_certificate": {
"valid": true,
"issuer": {"organizationName": "Google Trust Services"},
"expires": "Jul 14 08:26:23 2026 GMT",
"days_until_expiry": 93,
"warning": false
},
"security_headers": {
"score": 43,
"summary": "3/7 security headers present",
"headers": { "..." }
},
"open_ports": {
"total_scanned": 11,
"total_open": 2,
"open_ports": [
{"port": 80, "service": "HTTP", "status": "open"},
{"port": 443, "service": "HTTPS", "status": "open"}
]
}
}
```
## 快速开始
### 先决条件
- Python 3.10+
- Docker(可选,用于容器化运行)
### 本地开发
```
git clone https://github.com/jasimalnajjar/secure-api.git
cd secure-api
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload
```
访问 `http://localhost:8000/docs` 获取交互式 API 文档。
### 使用 Docker 运行
```
docker build -t secure-api .
docker run -p 8000:8000 secure-api
```
### 运行测试
```
pytest app/tests/ -v
```
## 基础设施
### Terraform 资源
`terraform/` 目录定义以下 AWS 资源:
- **EC2 实例**(t3.micro,免费层)— 运行 Docker 容器
- **安全组** — 允许 22(SSH)和 8000(API)端口入站访问
- **S3 后端** — 存储 Terraform 状态以确保部署一致性
### 手动部署
```
cd terraform
terraform init
terraform plan
terraform apply
```
### 拆除
```
cd terraform
terraform destroy
```
## 项目结构
```
secure-api/
├── .github/
│ └── workflows/
│ └── ci.yml # CI/CD pipeline definition
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI application
│ ├── services/
│ │ ├── __init__.py
│ │ └── scanner.py # SSL, headers, and port scanner
│ └── tests/
│ ├── __init__.py
│ ├── test_api.py # API endpoint tests
│ └── test_scanner.py # Scanner function tests
├── terraform/
│ ├── main.tf # EC2 instance and security group
│ ├── variables.tf # Configurable parameters
│ └── outputs.tf # Server IP and API URL outputs
├── Dockerfile # Container definition
├── requirements.txt # Python dependencies
├── pytest.ini # Test configuration
└── README.md
```
## 运行流水线所需的 GitHub Actions 密钥
要在仓库中启用完整流水线,请在 **Settings → Secrets → Actions** 添加以下密钥:
| 密钥 | 说明 |
|------|------|
| `DOCKERHUB_USERNAME` | Docker Hub 用户名 |
| `DOCKERHUB_TOKEN` | Docker Hub 密码或访问令牌 |
| `AWS_ACCESS_KEY_ID` | AWS IAM 访问密钥 |
| `AWS_SECRET_ACCESS_KEY` | AWS IAM 秘密密钥 |
## 后续改进计划
- [ ] 集成 OWASP ZAP 进行动态应用安全测试
- [ ] 子域名枚举扫描器
- [ ] DNS 记录分析
- [ ] 历史扫描结果与趋势追踪
- [ ] 速率限制与 API 密钥认证
- [ ] 关键发现推送 Slack/Email 通知
- [ ] 多区域 Terraform 部署
- [ ] 定时扫描(Cron 作业)
标签:API, AV绕过, AWS, DNS解析, Docker, DPI, EC2, ECS, FastAPI, GitHub Actions, IaC, Python, SSL证书检查, Terraform, 代码安全扫描, 单元测试, 安全头检测, 安全扫描, 安全防御评估, 开源项目, 数据统计, 无后门, 时序注入, 测试用例, 漏洞利用检测, 特权提升, 生产环境, 端口扫描, 网络安全, 自动化部署, 自动笔记, 请求拦截, 逆向工具, 隐私保护