diff --git a/blockip/Makefile b/blockip/Makefile index 15ae467..1de7a63 100644 --- a/blockip/Makefile +++ b/blockip/Makefile @@ -75,7 +75,7 @@ clean: # 清理所有文件(包括配置) distclean: clean - rm -rf /etc/blockip + rm -rf /etc/bip rm -f /var/log/bip.log /var/log/bip.log.1 @echo "深度清理完成" diff --git a/blockip/README.md b/blockip/README.md index 25d0a90..91241ee 100644 --- a/blockip/README.md +++ b/blockip/README.md @@ -4,6 +4,16 @@ ## 特性 +- **PAM集成**:自动监控SSH登录失败尝试 +- **双栈支持**:完整支持IPv4/IPv6和CIDR网段 +- **智能聚合**:自动检测并聚合为更大网段,减少规则数量 +- **白名单保护**:白名单规则优先级高于黑名单,保护信任IP +- **地理位置**:显示IP归属国家/地区 +- **实时统计**:树状层级显示聚合统计,包含散落IP计数 +- **灵活配置**:支持动态修改封禁时长和重试次数 +- **高性能**:C11实现,nftables集合优化,52K stripped binary +- **Watch模式**:2秒自动刷新监控界面 + ## 模块划分 @@ -38,6 +48,12 @@ blockip/ ## 系统要求 +- **操作系统**:Linux (Debian/Ubuntu/CentOS/RHEL) +- **内核**:nftables 支持 (>= 3.13) +- **编译器**:GCC (支持 C11 标准) +- **PAM开发库**:libpam0g-dev (Debian/Ubuntu) 或 pam-devel (CentOS/RHEL) +- **权限**:安装和运行需要root权限 + ## 编译安装 @@ -62,6 +78,12 @@ sudo bip install 这将自动完成以下配置: +- 创建配置目录 `/etc/bip` +- 初始化nftables表和规则集(`inet bip`表) +- 配置PAM模块(修改`/etc/pam.d/sshd`) +- 设置systemd服务自动启动 +- 从持久化文件恢复黑白名单 + ## 使用方法 ### 查看状态和统计 @@ -134,7 +156,7 @@ bip uninstall ### 动态配置(无需重新编译) -使用配置文件 `/etc/blockip/config` 灵活修改封禁时间: +使用配置文件 `/etc/bip/config` 灵活修改封禁时间: ```bash # 查看当前配置 @@ -154,25 +176,29 @@ bip config retries 5 ``` 支持的配置参数: - - `24h` - 24小时 - - `12h` - 12小时 - - `1h` - 1小时 - - `30m` - 30分钟 - - `""` - 永久封禁(空字符串) - - - 范围:1-10 次 - - 默认:3 次 - - 说明:SSH登录失败达到此次数后自动封禁 -配置文件位置:`/etc/blockip/config` +**封禁时间 (time)** +- `24h` - 24小时 +- `12h` - 12小时 +- `1h` - 1小时 +- `30m` - 30分钟 +- `""` - 永久封禁(空字符串) + +**最大重试次数 (retries)** +- 范围:1-10 次 +- 默认:3 次 +- 说明:SSH登录失败达到此次数后自动封禁 + +配置文件位置:`/etc/bip/config` ### 静态配置(需要重新编译) 在 `include/common.h` 中可以修改以下默认参数: ```c -#define MAX_RETRIES 3 // 默认最大失败次数 -#define DEFAULT_BAN_TIME "24h" // 默认封禁时长 +#define DEFAULT_MAX_RETRIES 3 // 默认最大失败次数 +#define DEFAULT_BAN_TIME "24h" // 默认封禁时长 +#define NFT_TABLE "inet bip" // nftables表名 ``` 修改后需要重新编译: @@ -185,10 +211,14 @@ sudo make install ## 文件说明 - - `config` - 配置文件(封禁时间等) - - `blacklist` - 封禁IP列表(持久化) - - `whitelist` - 白名单列表 - - `counts/` - 失败次数记录目录 +`/etc/bip/` 目录结构: + +- `config` - 配置文件(封禁时间、重试次数) +- `blacklist` - 封禁IP列表(持久化存储) +- `whitelist` - 白名单列表(持久化存储) +- `counts/` - 失败次数记录目录 + +日志文件:`/var/log/bip.log`(自动轮转,最大10MB) ## 卸载 @@ -225,6 +255,12 @@ make distclean ## 性能优化 +- **nftables集合**:使用集合(set)数据结构,O(1)查询效率,支持超大规模IP封禁 +- **智能聚合**:自动检测/24和/64网段,减少规则数量,提升匹配速度 +- **异步处理**:fork子进程执行封禁和地理查询,不阻塞SSH登录 +- **内存优化**:静态缓冲区,避免频繁malloc/free +- **编译优化**:`-O2` 优化级别,自动strip符号表,二进制仅52KB + ## 注意事项 @@ -249,14 +285,23 @@ A: 执行 `bip list` 查看统计信息 ### Q: 封禁时间可以永久吗? -A: 修改 `include/common.h` 中的 `BAN_TIME` 为空字符串 `""`,然后重新编译 +A: 使用命令 `bip config time ""` 设置永久封禁,无需重新编译 ### Q: 支持自定义失败次数吗? -A: 修改 `include/common.h` 中的 `MAX_RETRIES` 值,然后重新编译 +A: 使用命令 `bip config retries <次数>` 动态修改,范围1-10次 ## 技术特点 +- **C11标准**:现代C语言实现,高性能低资源消耗 +- **模块化设计**:头文件与源文件分离,职责清晰 +- **POSIX兼容**:遵循POSIX标准,跨Linux发行版可移植 +- **PAM集成**:标准PAM接口,无侵入式监控 +- **nftables优化**:使用集合(set)而非单条规则,支持timeout自动过期 +- **日志轮转**:日志文件自动轮转,避免磁盘占用过大 +- **零依赖**:除PAM库外无额外依赖,部署简单 +- **安全性**:白名单规则优先,root权限检查,防止误封 + ## 贡献 @@ -273,7 +318,21 @@ C语言重构:GitHub Copilot ## 更新日志 -### v16.2-C (2025-11-18) +### v25.11.18 (2025-11-18) + +**完整C语言重构版本** + +- 从Shell脚本完全重写为C11代码 +- 实现PAM模块集成,自动监控SSH登录 +- nftables集合优化,支持IPv4/IPv6双栈 +- 智能网段聚合算法(/24和/64) +- 树状层级显示,包含散落IP统计 +- 动态配置系统(封禁时长、重试次数) +- 地理位置查询(IP归属国家/地区) +- 白名单优先规则(accept before drop) +- Watch模式实时监控(2秒刷新) +- 数字IP排序(同数量按IP第一段排序) +- Makefile自动strip优化(52KB二进制) **享受更安全的服务器环境! 🛡️** diff --git a/blockip/bip b/blockip/bip index c08e051..ce71501 100644 Binary files a/blockip/bip and b/blockip/bip differ diff --git a/blockip/include/common.h b/blockip/include/common.h index 5a70b2b..c600b89 100644 --- a/blockip/include/common.h +++ b/blockip/include/common.h @@ -15,7 +15,7 @@ /* 配置常量 */ #define BIP_VERSION "v25.11.18" -#define CONFIG_DIR "/etc/blockip" +#define CONFIG_DIR "/etc/bip" #define CONFIG_FILE CONFIG_DIR "/config" #define LOG_FILE "/var/log/bip.log" #define MAX_LOG_SIZE 10485760 // 10MB diff --git a/blockip/src/install.c b/blockip/src/install.c index ce465d7..8dc9c15 100644 --- a/blockip/src/install.c +++ b/blockip/src/install.c @@ -9,7 +9,7 @@ int setup_pam_hooks(void) { /* 备份原文件 */ char backup_cmd[MAX_COMMAND_LEN]; - snprintf(backup_cmd, sizeof(backup_cmd), "cp -f %s %s.bak.blockip", pam_file, pam_file); + snprintf(backup_cmd, sizeof(backup_cmd), "cp -f %s %s.bak.bip", pam_file, pam_file); system(backup_cmd); /* 移除旧的钩子 */