# Go-Ips入侵防御系统 **Repository Path**: lmc2020/Go-Ips ## Basic Information - **Project Name**: Go-Ips入侵防御系统 - **Description**: 这是一个使用Go语言编写的轻量级入侵防御系统(IPS)。该系统能够实时监控网络流量,检测潜在的威胁,并自动采取相应的防御措施。 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-12-27 - **Last Updated**: 2025-06-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Go-IPS (入侵防御系统) 这是一个使用Go语言编写的轻量级入侵防御系统(IPS)。该系统能够实时监控网络流量,检测潜在的威胁,并自动采取相应的防御措施。 ## 功能特点 - 实时数据包捕获和分析 - 可配置的规则引擎 - 支持多种防御动作(阻断/限速/告警) - 邮件告警通知 - 自动清理过期封禁 - 支持CIDR格式的IP匹配 - 基于阈值的触发机制 ## 完善规则,主要关注: 暴力破解攻击 未授权访问 异常连接 服务扫描 内网横向监测和协议滥用等方面 ## 系统要求 - Go 1.16+ - libpcap - iptables (用于防御动作) - root权限 (用于数据包捕获和iptables操作) ## 日志留存 单文件大小限制为1MB 超过限制自动创建新文件 文件名格式:YYYYMMDD-UUID.log ##日志内容: 时间戳 规则ID 描述信息 源IP和目标IP 执行的动作 是否成功 详细信息 ##安全: 使用互斥锁保护文件操作 支持并发写入 ##关闭: 程序退出时自动关闭日志文件 确保所有日志都被写入 使用示例: [2024-01-20 15:04:05] Rule-11001: Nmap扫描特征检测 | Src: 192.168.1.100 | Dst: 192.168.1.1 | Action: block | Success: true | Details: Threat detected and processed ## 安装 1. 安装必要的系统依赖: 要部署此系统,需要: 确保系统有足够权限捕获网络数据包(通常需要root权限) 安装libpcap-dev库: ```bash go get github.com/google/gopacket Ubuntu/Debian sudo apt-get update sudo apt-get install libpcap-dev iptables CentOS/RHEL sudo yum install libpcap-devel iptables 2. 克隆仓库: ```bash git clone https://github.com/your-username/ips cd ips 3. 安装Go依赖: ```bash go mod init github.com/your-username/ips go get github.com/google/gopacket 4. 编译项目: ```bash go build -o ips cmd/main.go ## 配置 1. 创建配置目录: ```bash mkdir -p config 2. 编辑规则配置文件 `config/rules.json`: ```bash [ { "id": "1", "description": "检测SSH暴力破解", "protocol": "tcp", "dst_port": 22, "action": "block", "threshold": 5, "time_window": 60 }, { "id": "2", "description": "检测端口扫描", "protocol": "tcp", "action": "rate_limit", "threshold": 100, "time_window": 60 }, { "id": "3", "description": "检测异常流量", "protocol": "", "action": "alert", "threshold": 1000, "time_window": 300 } ] 3. 如果需要启用邮件告警,创建告警配置文件 `config/alert.json`: ```bash { "email": { "enabled": true, "smtp_server": "smtp.gmail.com", "smtp_port": 587, "username": "your-email@gmail.com", "password": "your-app-password", "from_email": "your-email@gmail.com", "to_email": ["alert-receiver@example.com"] } } ## 运行 由于需要捕获网络数据包和操作iptables,运行时需要root权限: ```bash go build -o ips cmd/main.go #编译 sudo ./ips ## 规则配置说明 规则文件支持以下字段: - `id`: 规则唯一标识符 - `description`: 规则描述 - `protocol`: 协议类型 (tcp/udp/*) - `src_ip`: 源IP地址 (支持CIDR格式) - `dst_ip`: 目标IP地址 (支持CIDR格式) - `src_port`: 源端口 - `dst_port`: 目标端口 - `action`: 防御动作 (block/rate_limit/alert) - `threshold`: 触发阈值 - `time_window`: 时间窗口(秒) ## 防御动作说明 系统支持三种防御动作: 1. `block`: 使用iptables阻断来源IP - 默认封禁时长为1小时 - 系统会自动清理过期的封禁规则 2. `rate_limit`: 对来源IP进行流量限制 - 使用iptables的limit模块 - 默认限制为每分钟10个包 3. `alert`: 仅发送告警通知 - 支持日志记录 - 支持邮件通知(需配置) ## 日志说明 系统日志包含三种类型: 1. `[ALERT]`: 告警日志 2. `[DEFENSE]`: 防御动作日志 3. 一般系统日志 日志默认输出到标准输出,可以通过重定向来保存到文件: bash sudo ./ips > ips.log 2>&1 ## 监控和维护 1. 查看当前iptables规则: bash sudo iptables -L 2. 清除所有IPS规则(如需重置): bash sudo iptables -F 3. 查看系统日志: bash tail -f ips.log ## 注意事项 1. 首次运行时请确保规则配置合理,避免误封禁正常流量 2. 建议先使用alert模式测试规则 3. 在生产环境部署前,建议充分测试 4. 确保系统有足够的资源处理网络流量 5. 定期检查和更新规则配置 ## 故障排除 1. 如果无法捕获数据包: - 检查是否使用root权限运行 - 确认网卡名称是否正确 - 检查libpcap是否正确安装 2. 如果防御动作不生效: - 检查iptables服务是否运行 - 确认是否有足够权限操作iptables - 检查规则配置是否正确 3. 如果邮件告警不工作: - 检查SMTP配置是否正确 - 确认网络连接是否正常 - 检查邮箱密码/令牌是否有效 ## 贡献 欢迎提交Issue和Pull Request来改进这个项目。 ## 许可证 MIT License ## 联系方式 如有问题,请通过以下方式联系: - 提交Issue