jopolko/security-dashboard

GitHub: jopolko/security-dashboard

一个基于 PHP 的轻量级安全仪表板,通过解析 SSH 登录失败日志并结合地理定位,在交互式地图上实时可视化服务器遭受的攻击来源与威胁趋势。

Stars: 0 | Forks: 0

# 安全威胁情报仪表板 一个现代化、专业的仪表板,用于实时可视化 SSH 登录尝试和安全威胁。 ## 功能 - 🗺️ **全球攻击地图** - 在交互式世界地图上通过可变大小的节点可视化攻击来源 - 📊 **实时统计** - 跟踪总尝试次数、独立 IP、封禁 IP 和国家/地区分布 - 🎯 **热门国家/地区** - 通过动态条形图查看发起攻击最多的国家/地区 - 📝 **近期攻击** - 监控带有时间戳和位置的近期登录尝试 - 🎨 **专业设计** - 干净的奶油色/米色调色板与优雅的 UI 元素 - 🛡️ **Fail2ban 集成** - 支持永久封禁的实时 IP 封禁跟踪 - 📅 **滚动 7 天时间窗口** - 针对近期威胁的动态数据过滤 - 📱 **移动端响应式** - 全面适配各种屏幕尺寸和设备 ## 设置 ### 1. 授予日志访问权限 Web 服务器需要获取读取 auth.log 文件的权限: ``` # 选项 1:将 www-data 添加到 adm group(推荐) sudo usermod -a -G adm www-data # 选项 2:使用 cron job 创建可读副本 sudo cp /var/log/auth.log /var/www/html/security/auth.log sudo chmod 644 /var/www/html/security/auth.log # 添加到 crontab 以进行自动更新: */5 * * * * cp /var/log/auth.log /var/www/html/security/auth.log && chmod 644 /var/www/html/security/auth.log ``` ### 2. 创建缓存目录 ``` sudo mkdir -p /tmp/geo_cache sudo chmod 777 /tmp/geo_cache sudo chmod 777 /tmp ``` ### 3. 访问仪表板 打开浏览器并导航至: ``` http://your-server-ip/security/ ``` ## 工作原理 ### 后端 (`get_attacks.php`) - 解析 `/var/log/auth.log` 获取失败的 SSH 登录尝试 - 提取 IP 地址和时间戳 - 使用 ip-api.com 提供的免费 IP 地理定位(无需 API key) - 将结果缓存 5 分钟以提升性能 - 实施速率限制以遵守 API 限制(45 个请求/分钟) ### 前端 (`index.php`) - 采用浅色专业主题的交互式 Leaflet.js 地图 - 带有实时更新的实时统计数据显示 - 具有平滑过渡效果的动态 UI 元素 - 页面加载时动态加载数据 - 完美适配移动端和桌面端的响应式设计 ## 检测到的攻击模式 仪表板会检测以下身份验证失败模式: - 密码错误尝试 - 无效用户登录尝试 - 连接重置 - 协议违规 - 断开的身份验证会话 ## 性能 - **地理定位缓存**:每个 IP 的位置数据缓存 24 小时 - **实时数据**:每次请求都会重新解析攻击数据(无主缓存) - **速率限制**:内置 API 调用之间的 1.5 秒延迟,以遵守限制(45 个请求/分钟) - **优化**:按频率处理前 100 个发起攻击的 IP - **7 天滚动窗口**:仅分析过去 7 天内的攻击 - **Gzip 压缩**:对响应数据进行压缩以加快传输速度 ## 隐私与安全 - 仅监控**失败的**登录尝试(安全事件) - 不跟踪成功的登录记录 - 所有数据均保留在您的服务器上 - 使用免费、公共的 IP 地理定位服务 - 本地缓存最大限度地减少了外部 API 调用 ## 自定义 ### 更新颜色 编辑 `index.php` 中的 CSS 变量: - 背景:`--cream-bg: #FAF7F0`(奶油色) - 主强调色:`--accent-primary: #B8956A`(暖棕色) - 危险强调色:`--accent-danger: #C67B5C`(铁锈红) - 主文本色:`--text-primary: #2C2416`(深棕色) ### 更改时间窗口 编辑 `get_attacks.php` 以调整滚动窗口(默认:7 天): ``` function parseAuthLog($logFile, $daysBack = 7) { // Change 7 to desired days ``` ### 调整地理定位缓存 编辑 `get_attacks.php`(默认:24 小时): ``` if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < 86400) { // Change 86400 to desired seconds ``` ## 故障排除 ### 无数据显示 1. 检查 auth.log 是否可读: sudo ls -la /var/log/auth.log 2. 验证 PHP 是否能访问该文件: sudo -u www-data cat /var/log/auth.log 3. 检查 PHP 错误日志: sudo tail -f /var/log/apache2/error.log # 或 sudo tail -f /var/log/nginx/error.log ### 地图未加载 - 确保网络连接正常(需要 Leaflet.js 和地图瓦片) - 检查浏览器控制台是否存在 JavaScript 错误 - 验证是否可访问 CDN 资源 ### 地理定位失败 - 检查速率限制(ip-api.com 为 45 个请求/分钟) - 验证网络连接状况 - 检查 `/tmp/geo_cache/` 权限 ## 移动端优化 仪表板具有完全的响应式设计并针对移动设备进行了优化: ### 响应式断点 - **桌面端** (>1024px):带图例的完整并排布局 - **平板电脑** (768px-1024px):带全高地图的堆叠布局 - **移动设备** (480px-768px):紧凑的垂直布局,隐藏图例 - **小屏移动设备** (<480px):超紧凑设计,减小了文本尺寸 - **横屏模式**:地图与侧边栏并排的分割视图 ### 移动端特性 ✅ **触控优化** - 更大的点击目标(无障碍访问最低要求 44px) - 适用于触控的友好地图交互 - 禁用滚轮缩放(防止意外缩放) - 更大的点击容错率(15px),更容易选中标记 ✅ **自适应布局** - 页头在移动端垂直堆叠 - 统计数据以水平行显示 - 全宽刷新按钮 - 地图在移动端调整为 300-350px 高度 - 面板和文本适度缩放 ✅ **性能** - 地图为移动端自动调整缩放级别(缩放级别 1 与 2) - 移动端使用更细的滚动条(4px) - 在小屏幕上隐藏图例以节省空间 - 在触控设备上禁用悬停效果 ✅ **视觉反馈** - 刷新按钮上的加载指示器 - 数据加载期间按钮透明度发生变化 - 平滑的动画与过渡效果 ### 在移动端测试 1. **在移动端浏览器中打开**:http://your-server-ip/security/ 2. **竖屏模式**:垂直滚动布局 3. **横屏模式**:并排视图 4. **双指缩放**:可在地图上使用 5. **点击标记**:查看攻击详情 ## 浏览器兼容性 ### 桌面端 - Chrome/Edge 90+ - Firefox 88+ - Safari 14+ ### 移动端 - iOS Safari 14+ - Chrome Mobile 90+ - Samsung Internet 14+ - Firefox Mobile 88+ ## 许可证 可免费用于安全监控和教育目的。 ## 致谢 - 地图:Leaflet.js 及 CARTO Light 瓦片 - 地理定位:ip-api.com(免费层,45 个请求/分钟) - 设计:采用专业奶油色调色板及现代 UI - Fail2ban:用于永久 IP 封禁的集成
标签:Fail2ban, OpenVAS, PHP, SSH监控, 动态API解析, 威胁情报, 安全, 开发者工具, 数据可视化, 超时处理, 运维