styliteag/open-port-monitor
GitHub: styliteag/open-port-monitor
分布式网络端口扫描与监控系统,支持多站点部署、SSH安全审计和实时告警。
Stars: 0 | Forks: 0
# Open Port 监控
用于安全用途的分布式网络端口扫描与监控系统,支持多站点扫描器、告警功能和 Web 仪表板。
## 功能特性
- **端口扫描**:基于 Masscan 的高速端口扫描,支持服务检测
- **SSH 安全分析**:自动化 SSH 服务器安全审计,包括:
- 认证方式检测(publickey、password、keyboard-interactive)
- 弱加密算法和密钥交换算法检测
- SSH 版本跟踪及过时版本告警
- 扫描间的配置回退检测
- **多站点扫描**:在不同位置部署扫描器 Agent
- **告警功能**:针对新端口、策略违规和 SSH 安全问题的可配置告警
- **合规报告**:导出 SSH 安全合规性的 PDF 和 CSV 报告
- **Web 仪表板**:基于 React 的 UI,支持深色模式
## 快速开始
### 前置条件
- Docker 和 Docker Compose
- Git
### 开发环境设置
1. 克隆仓库:
git clone
cd open-port-monitor
2. 复制环境文件并进行配置:
cp .env.example .env
# 根据您的偏好设置编辑 .env
3. 启动开发环境:
docker compose -f compose-dev.yml up --build
4. 访问服务:
- 前端:http://localhost:5173
- 后端 API:http://localhost:8000
- API 文档:http://localhost:8000/docs
- 数据库:localhost:3306
### 服务
| Service | Port | Description |
|----------|------|--------------------------------------|
| frontend | 5173 | React + Vite web dashboard |
| backend | 8000 | FastAPI REST API |
| db | 3306 | MariaDB database |
| scanner | - | Masscan-based network scanner agent |
### 开发
开发环境使用绑定挂载(bind mounts)实现热重载:
- `./backend/src` -> `/app/src`(后端)
- `./frontend/src` -> `/app/src`(前端)
- `./scanner/src` -> `/app/src`(扫描器)
源文件的更改将自动触发重载。
### 运行测试
#### 后端测试
后端使用 pytest 并支持异步(async)的完整测试套件。
```
cd backend
# 安装 dev dependencies (如果尚未安装)
uv pip install -e ".[dev]"
# 运行所有 tests
.venv/bin/pytest tests/ -v
# 运行特定 test file
.venv/bin/pytest tests/test_auth.py -v
# Run with coverage
.venv/bin/pytest tests/ --cov=app --cov-report=term-missing
```
测试分类:
- `test_security.py` - 密码哈希、JWT token 处理
- `test_auth.py` - 认证端点
- `test_users.py` - 用户管理
- `test_networks.py` - 网络 CRUD 操作
- `test_scans.py` - 扫描生命周期管理
- `test_alerts.py` - 告警操作
#### 前端测试
前端使用 Vitest 和 React Testing Library。
```
cd frontend
# 安装 dependencies (如果尚未安装)
npm install
# 运行所有 tests
npm test
# Run tests in watch mode
npm run test:watch
# Run with coverage
npm run test:coverage
```
测试分类:
- `api.test.ts` - API 工具、错误处理、fetch 封装
- `scanEstimate.test.ts` - 扫描估算计算(CIDR 解析、端口计数)
- `scanLogs.test.ts` - 日志格式化和日期解析工具
- `formatRelativeTime.test.ts` - 相对时间格式化(例如 "5m ago")
- `ThemeContext.test.tsx` - 主题提供者、localStorage 持久化
- `AuthContext.test.tsx` - 认证 Hook、登录/登出流程
- `ProtectedRoute.test.tsx` - 路由守卫组件
### 环境变量
有关所有可用的配置选项,请参阅 `.env.example`。
关键变量:
- `JWT_SECRET`:用于 JWT token 签名的密钥(生产环境中请务必修改!)
- `ADMIN_EMAIL` / `ADMIN_PASSWORD`:初始管理员凭据
- `SMTP_*`:用于告警的邮件配置
## 运行扫描器 Agent
扫描器 Agent 可以部署在不同的主机上,以连接到您的主 Open Port Monitor 服务器。这实现了从多个位置进行的分布式扫描。
### 前置条件
- 扫描器主机上已安装 Docker
- 来自主服务器的 API 密钥(通过 Web 仪表板或 API 创建)
- 到主服务器后端 API 的网络连接
### 方式 1:Docker Run
首先,(从项目根目录)构建扫描器镜像:
```
docker build -f scanner/Dockerfile --build-arg VERSION=$(cat VERSION) -t opm-scanner:latest scanner
```
或者使用 Registry 中的预构建镜像:
```
docker pull your-registry/open-port-monitor-scanner:latest
```
然后运行扫描器:
```
docker run -d \
--name opm-scanner \
--cap-add=NET_RAW \
--cap-add=NET_ADMIN \
--restart unless-stopped \
-e BACKEND_URL=https://your-server.com:8000 \
-e API_KEY=your-api-key-here \
-e POLL_INTERVAL=60 \
-e LOG_LEVEL=INFO \
opm-scanner:latest
```
**必需的环境变量:**
- `BACKEND_URL`:主服务器后端 API 的完整 URL(例如 `https://monitor.example.com:8000`)
- `API_KEY`:从主服务器获取的扫描器 API 密钥
**可选的环境变量:**
- `POLL_INTERVAL`:任务轮询之间的秒数(默认值:60)
- `LOG_LEVEL`:日志级别 - DEBUG、INFO、WARNING、ERROR(默认值:INFO)
### 方式 2:Docker Compose
1. 进入扫描器目录:
cd scanner
2. 使用您的配置创建一个 `.env` 文件:
cat > .env << EOF
BACKEND_URL=https://your-server.com:8000
API_KEY=your-api-key-here
POLL_INTERVAL=60
LOG_LEVEL=INFO
EOF
3. 启动扫描器:
docker compose up -d
4. 查看日志:
docker compose logs -f
扫描器将自动连接到您的主服务器并开始处理扫描任务。
**注意:** 扫描器需要 `NET_RAW` 和 `NET_ADMIN` 权限才能执行网络扫描。这些权限已在 compose 文件中自动配置。
## 架构
```
+-------------+ +---------+ +----------+
| Frontend |<--->| Backend |<--->| Database |
| (React/Vite)| | (FastAPI)| | (MariaDB)|
+-------------+ +---------+ +----------+
^
|
+----------+----------+
| | |
+--------+ +--------+ +--------+
|Scanner1| |Scanner2| |Scanner3|
+--------+ +--------+ +--------+
(Distributed at different sites)
```
## 文档
有关完整的文档,请参阅 [docs 文件夹](docs/README.md):
- **[API 参考](docs/README.md#api-reference)** - 完整的 API 文档
- **[扫描器文档](docs/README.md#scanner-documentation)** - 部署和操作指南
- **[开发指南](docs/README.md#development)** - 设置和贡献指南
## 许可证
MIT
标签:AV绕过, Docker, FastAPI, HTTP/HTTPS抓包, MariaDB, Masscan, Qt框架, React, SOC, SSH安全分析, Syscalls, Vite, Web仪表盘, 分布式监控, 加密算法审计, 占用监测, 合规报告, 告警系统, 多站点管理, 子域名侦测, 安全规则引擎, 安全防御评估, 态势感知, 插件系统, 数据统计, 暗黑模式, 服务识别, 端口扫描, 网络安全, 请求拦截, 资产管理, 逆向工具, 防御监控, 隐私保护