Skip to content

JJApplication/Shield

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Shield 安全监控系统

Shield 是一个基于 Go 语言开发的综合性安全监控系统,提供实时的网络、系统、文件完整性和系统调用监控功能。

功能特性

核心监控模块

  • 网络监控: 监控网络连接、端口扫描检测、异常连接分析
  • SSH监控: SSH暴力破解检测、异常登录记录分析
  • 系统监控: 特权进程监控、CPU和内存使用率Top10进程
  • 文件完整性监控: 关键文件和目录的实时监控和完整性检查
  • 系统调用监控: 异常系统调用检测、特权操作监控
  • 网络流量监控: 可疑网络流量检测、带宽使用分析

技术特性

  • gRPC API: 提供高性能的gRPC接口
  • 实时监控: 支持实时数据流推送
  • 地理位置分析: 集成GeoIP数据库进行IP地理位置分析
  • 数据持久化: 使用SQLite数据库存储监控数据
  • 配置化管理: 支持YAML配置文件
  • 模块化设计: 各监控模块可独立启用/禁用

系统架构

Shield/
├── api/proto/          # gRPC协议定义文件
├── cmd/
│   ├── shield/         # 主程序
│   └── client/         # 客户端示例
├── config/             # 配置文件
├── internal/
│   ├── config/         # 配置管理
│   ├── database/       # 数据库操作
│   ├── geoip/          # GeoIP服务
│   ├── grpc/           # gRPC服务器
│   ├── models/         # 数据模型
│   └── monitors/       # 监控模块
└── Makefile           # 构建脚本

快速开始

环境要求

  • Go 1.21+
  • Protocol Buffers 编译器 (protoc)
  • Linux/Unix 系统(用于系统调用和文件监控)

安装依赖

# 安装 protobuf 工具
make install-protoc

# 安装 Go 依赖
go mod download

编译项目

# 生成 protobuf 代码
make proto

# 编译项目
make build

配置系统

  1. 复制配置文件模板:
cp config/config.yaml config/config.yaml.local
  1. 编辑配置文件 config/config.yaml.local,根据需要调整监控参数。

  2. 下载 GeoIP 数据库(可选):

# 下载 GeoLite2 数据库到 data/ 目录
wget -O data/GeoLite2-City.mmdb.gz "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=YOUR_LICENSE_KEY&suffix=tar.gz"

运行系统

# 运行主程序
make run

# 或者直接运行编译后的二进制文件
./bin/shield -config config/config.yaml

测试客户端

# 运行测试客户端
go run cmd/client/main.go

配置说明

主要配置项

# 服务器配置
server:
  port: 9090
  host: "0.0.0.0"

# 数据库配置
database:
  path: "./data/shield.db"
  retention_days: 30

# 监控模块配置
monitoring:
  network:
    enabled: true
    interval: 60
  ssh:
    enabled: true
    interval: 30
  system:
    enabled: true
    interval: 60

# 文件完整性监控
file_integrity:
  enabled: true
  watch_paths:
    - "/etc/passwd"
    - "/etc/shadow"
    - "/bin"
    - "/sbin"
  scan_interval: 3600

# 系统调用监控
syscall:
  enabled: true
  audit_log_paths:
    - "/var/log/audit/audit.log"
  suspicious_threshold: 100

# 网络流量监控
traffic:
  enabled: true
  bandwidth_threshold: 104857600  # 100MB/s
  connection_threshold: 100

API 使用

gRPC 接口

Shield 提供以下主要 gRPC 接口:

  • GetNetworkEvents: 获取网络事件
  • GetSSHEvents: 获取SSH事件
  • GetSystemEvents: 获取系统事件
  • GetFileEvents: 获取文件事件
  • GetSyscallEvents: 获取系统调用事件
  • GetTrafficEvents: 获取流量事件
  • GetEventStats: 获取事件统计
  • GetSystemStatus: 获取系统状态
  • GetRealtimeData: 获取实时数据流

客户端示例

package main

import (
    "context"
    "log"
    
    "google.golang.org/grpc"
    pb "shield/api/proto"
)

func main() {
    conn, err := grpc.Dial("localhost:9090", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()
    
    client := pb.NewShieldServiceClient(conn)
    
    // 获取系统状态
    resp, err := client.GetSystemStatus(context.Background(), &pb.GetSystemStatusRequest{})
    if err != nil {
        log.Fatal(err)
    }
    
    log.Printf("系统状态: %+v", resp)
}

监控指标

网络监控

  • 端口扫描检测
  • 异常连接分析
  • 高危地区IP连接
  • 连接频率统计

SSH监控

  • 暴力破解检测
  • 异常登录时间
  • 地理位置异常
  • 登录失败统计

系统监控

  • 特权进程监控
  • CPU使用率Top10
  • 内存使用率Top10
  • 系统负载监控

文件完整性监控

  • 文件修改检测
  • 文件创建/删除
  • 权限变更监控
  • 哈希值校验

系统调用监控

  • 可疑系统调用检测
  • 特权操作监控
  • 异常进程行为
  • 系统调用频率分析

网络流量监控

  • 带宽使用监控
  • 连接数统计
  • 异常流量模式
  • DDoS攻击检测

开发指南

添加新的监控模块

  1. internal/monitors/ 目录下创建新的监控器文件
  2. 实现监控器接口:
type Monitor interface {
    Start() error
    Stop()
}
  1. 在配置文件中添加相应配置项
  2. 在主程序中集成新的监控器

扩展数据模型

  1. internal/models/ 中定义新的数据结构
  2. internal/database/ 中添加相应的数据库操作
  3. 更新 protobuf 定义文件
  4. 重新生成 protobuf 代码

部署建议

生产环境部署

  1. 系统权限: 确保程序有足够权限读取系统日志和监控文件
  2. 资源配置: 根据监控规模调整数据库保留天数和检查间隔
  3. 网络安全: 配置防火墙规则,限制gRPC端口访问
  4. 日志轮转: 配置系统日志轮转,避免磁盘空间不足
  5. 监控告警: 集成外部告警系统,及时响应安全事件

性能优化

  1. 数据库优化: 定期清理过期数据,创建适当索引
  2. 监控间隔: 根据系统负载调整监控检查间隔
  3. 内存管理: 监控程序内存使用,避免内存泄漏
  4. 并发控制: 合理设置监控协程数量

故障排除

常见问题

  1. 权限不足: 确保程序有读取系统日志的权限
  2. 端口占用: 检查gRPC端口是否被其他程序占用
  3. 数据库锁定: 确保数据库文件路径可写且无其他程序占用
  4. GeoIP数据库: 确保GeoIP数据库文件存在且可读

日志分析

程序运行日志包含详细的错误信息和调试信息,可通过以下方式查看:

# 查看实时日志
tail -f /var/log/shield.log

# 搜索错误信息
grep "ERROR" /var/log/shield.log

许可证

本项目采用 MIT 许可证,详见 LICENSE 文件。

贡献指南

欢迎提交 Issue 和 Pull Request 来改进项目。在提交代码前,请确保:

  1. 代码符合 Go 语言规范
  2. 添加必要的单元测试
  3. 更新相关文档
  4. 通过所有测试用例

联系方式

如有问题或建议,请通过以下方式联系:

  • 提交 GitHub Issue
  • 发送邮件至项目维护者

注意: 本系统主要用于安全监控和分析,请确保在合法合规的前提下使用。

About

Shield

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors