This commit is contained in:
sushen339
2025-11-18 18:26:32 +08:00
parent 0eec7dcb4a
commit 1e231274cc
5 changed files with 82 additions and 23 deletions
+1 -1
View File
@@ -75,7 +75,7 @@ clean:
# 清理所有文件(包括配置) # 清理所有文件(包括配置)
distclean: clean distclean: clean
rm -rf /etc/blockip rm -rf /etc/bip
rm -f /var/log/bip.log /var/log/bip.log.1 rm -f /var/log/bip.log /var/log/bip.log.1
@echo "深度清理完成" @echo "深度清理完成"
+68 -9
View File
@@ -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 ```bash
# 查看当前配置 # 查看当前配置
@@ -154,25 +176,29 @@ bip config retries 5
``` ```
支持的配置参数: 支持的配置参数:
**封禁时间 (time)**
- `24h` - 24小时 - `24h` - 24小时
- `12h` - 12小时 - `12h` - 12小时
- `1h` - 1小时 - `1h` - 1小时
- `30m` - 30分钟 - `30m` - 30分钟
- `""` - 永久封禁(空字符串) - `""` - 永久封禁(空字符串)
**最大重试次数 (retries)**
- 范围:1-10 次 - 范围:1-10 次
- 默认:3 次 - 默认:3 次
- 说明:SSH登录失败达到此次数后自动封禁 - 说明:SSH登录失败达到此次数后自动封禁
配置文件位置:`/etc/blockip/config` 配置文件位置:`/etc/bip/config`
### 静态配置(需要重新编译) ### 静态配置(需要重新编译)
`include/common.h` 中可以修改以下默认参数: `include/common.h` 中可以修改以下默认参数:
```c ```c
#define MAX_RETRIES 3 // 默认最大失败次数 #define DEFAULT_MAX_RETRIES 3 // 默认最大失败次数
#define DEFAULT_BAN_TIME "24h" // 默认封禁时长 #define DEFAULT_BAN_TIME "24h" // 默认封禁时长
#define NFT_TABLE "inet bip" // nftables表名
``` ```
修改后需要重新编译: 修改后需要重新编译:
@@ -185,11 +211,15 @@ sudo make install
## 文件说明 ## 文件说明
- `config` - 配置文件(封禁时间等) `/etc/bip/` 目录结构:
- `blacklist` - 封禁IP列表(持久化)
- `whitelist` - 白名单列表 - `config` - 配置文件(封禁时间、重试次数)
- `blacklist` - 封禁IP列表(持久化存储)
- `whitelist` - 白名单列表(持久化存储)
- `counts/` - 失败次数记录目录 - `counts/` - 失败次数记录目录
日志文件:`/var/log/bip.log`(自动轮转,最大10MB
## 卸载 ## 卸载
```bash ```bash
@@ -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: 封禁时间可以永久吗? ### Q: 封禁时间可以永久吗?
A: 修改 `include/common.h` 中的 `BAN_TIME` 为空字符串 `""`,然后重新编译 A: 使用命令 `bip config time ""` 设置永久封禁,无需重新编译
### Q: 支持自定义失败次数吗? ### 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二进制)
**享受更安全的服务器环境! 🛡️** **享受更安全的服务器环境! 🛡️**
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -15,7 +15,7 @@
/* 配置常量 */ /* 配置常量 */
#define BIP_VERSION "v25.11.18" #define BIP_VERSION "v25.11.18"
#define CONFIG_DIR "/etc/blockip" #define CONFIG_DIR "/etc/bip"
#define CONFIG_FILE CONFIG_DIR "/config" #define CONFIG_FILE CONFIG_DIR "/config"
#define LOG_FILE "/var/log/bip.log" #define LOG_FILE "/var/log/bip.log"
#define MAX_LOG_SIZE 10485760 // 10MB #define MAX_LOG_SIZE 10485760 // 10MB
+1 -1
View File
@@ -9,7 +9,7 @@ int setup_pam_hooks(void) {
/* 备份原文件 */ /* 备份原文件 */
char backup_cmd[MAX_COMMAND_LEN]; 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); system(backup_cmd);
/* 移除旧的钩子 */ /* 移除旧的钩子 */