Files
tools/blockip/README.md
T
sushen339 43fc123cb4 c
2025-11-18 12:54:21 +08:00

280 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BIP (Block-IP) - C语言实现
基于 nftables 的自动封禁恶意IP工具,支持IPv4/IPv6和CIDR格式。
## 特性
## 模块划分
```
blockip/
├── include/ # 头文件目录
│ ├── common.h # 公共定义和工具函数
│ ├── log.h # 日志模块
│ ├── ip_utils.h # IP地址处理工具
│ ├── geo.h # 地理位置查询
│ ├── nftables.h # nftables操作接口
│ ├── whitelist.h # 白名单管理
│ ├── ban.h # 封禁/解封核心逻辑
│ ├── pam.h # PAM集成模块
│ ├── stats.h # 统计和展示
│ └── install.h # 安装/卸载功能
├── src/ # 源文件目录
│ ├── main.c # 主程序入口
│ ├── common.c # 公共函数实现
│ ├── log.c # 日志功能实现
│ ├── ip_utils.c # IP处理实现
│ ├── geo.c # 地理位置实现
│ ├── nftables.c # nftables实现
│ ├── whitelist.c # 白名单实现
│ ├── ban.c # 封禁逻辑实现
│ ├── pam.c # PAM集成实现
│ ├── stats.c # 统计功能实现
│ └── install.c # 安装功能实现
├── Makefile # 构建脚本
└── README.md # 本文档
```
## 系统要求
## 编译安装
### 1. 编译程序
```bash
cd blockip
make
```
### 2. 安装到系统(需要root权限)
```bash
sudo make install
```
### 3. 配置系统服务
```bash
sudo bip install
```
这将自动完成以下配置:
## 使用方法
### 查看状态和统计
```bash
# 查看实时统计、活跃封禁列表、日志
bip list
# 显示本地持久化封禁列表
bip show
```
### 手动封禁/解封IP
```bash
# 封禁单个IPv4地址
bip add 1.2.3.4
# 封禁IPv4网段(CIDR
bip add 1.2.3.0/24
# 封禁IPv6地址
bip add 2001:db8::1
# 封禁IPv6网段
bip add 2001:db8::/32
# 解封IP
bip del 1.2.3.4
```
### 白名单管理
```bash
# 添加IP到白名单
bip vip add 192.168.1.100
# 添加网段到白名单
bip vip add 192.168.0.0/16
# 从白名单移除
bip vip del 192.168.1.100
# 显示白名单列表
bip vip list
```
### 系统管理
```bash
# 从持久化文件恢复黑白名单
bip restore
# 卸载服务
bip uninstall
```
## 工作原理
1. **PAM集成**:通过PAM模块监控SSH登录尝试
2. **失败计数**:记录每个IP的失败登录次数
3. **自动封禁**:达到阈值(默认3次)后自动封禁IP
4. **异步处理**:使用fork子进程异步执行封禁和地理查询,不阻塞SSH登录
5. **nftables规则**:使用nftables的集合(set)功能高效封禁
6. **持久化存储**:封禁记录保存到磁盘,重启后自动恢复
7. **白名单保护**:白名单IP永不封禁
8. **自动解封**24小时后自动解封(可配置)
## 配置参数
### 动态配置(无需重新编译)
使用配置文件 `/etc/blockip/config` 灵活修改封禁时间:
```bash
# 查看当前配置
bip config
# 设置封禁时间为12小时
bip config time 12h
# 设置封禁时间为30分钟
bip config time 30m
# 设置为永久封禁
bip config time ""
# 设置最大重试次数为5次
bip config retries 5
```
支持的配置参数:
- `24h` - 24小时
- `12h` - 12小时
- `1h` - 1小时
- `30m` - 30分钟
- `""` - 永久封禁(空字符串)
- 范围:1-10 次
- 默认:3 次
- 说明:SSH登录失败达到此次数后自动封禁
配置文件位置:`/etc/blockip/config`
### 静态配置(需要重新编译)
`include/common.h` 中可以修改以下默认参数:
```c
#define MAX_RETRIES 3 // 默认最大失败次数
#define DEFAULT_BAN_TIME "24h" // 默认封禁时长
```
修改后需要重新编译:
```bash
make clean
make
sudo make install
```
## 文件说明
- `config` - 配置文件(封禁时间等)
- `blacklist` - 封禁IP列表(持久化)
- `whitelist` - 白名单列表
- `counts/` - 失败次数记录目录
## 卸载
```bash
# 完全卸载(会询问是否删除数据文件)
sudo make uninstall
```
或者:
```bash
sudo bip uninstall
```
## 开发和调试
### 编译调试版本
```bash
make debug
```
### 清理编译文件
```bash
make clean
```
### 深度清理(包括配置文件)
```bash
make distclean
```
## 性能优化
## 注意事项
1. **白名单优先**:请先将信任的IP加入白名单,避免误封
2. **网段封禁**:使用CIDR封禁时请谨慎,避免误伤
3. **日志监控**:定期查看日志,了解攻击情况
4. **备份配置**:重要服务器建议备份白名单配置
## 常见问题
### Q: 不小心把自己封禁了怎么办?
A: 通过控制台登录服务器,执行:
```bash
bip del YOUR_IP
bip vip add YOUR_IP
```
### Q: 如何查看当前封禁了多少IP?
A: 执行 `bip list` 查看统计信息
### Q: 封禁时间可以永久吗?
A: 修改 `include/common.h` 中的 `BAN_TIME` 为空字符串 `""`,然后重新编译
### Q: 支持自定义失败次数吗?
A: 修改 `include/common.h` 中的 `MAX_RETRIES` 值,然后重新编译
## 技术特点
## 贡献
欢迎提交Issue和Pull Request
## 许可证
MIT License
## 作者
原Shell版本:su
C语言重构:GitHub Copilot
## 更新日志
### v16.2-C (2025-11-18)
**享受更安全的服务器环境! 🛡️**