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. 编译程序
cd blockip
make
2. 安装到系统(需要root权限)
sudo make install
3. 配置系统服务
sudo bip install
这将自动完成以下配置:
使用方法
查看状态和统计
# 查看实时统计、活跃封禁列表、日志
bip list
# 显示本地持久化封禁列表
bip show
手动封禁/解封IP
# 封禁单个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
白名单管理
# 添加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
系统管理
# 从持久化文件恢复黑白名单
bip restore
# 卸载服务
bip uninstall
工作原理
- PAM集成:通过PAM模块监控SSH登录尝试
- 失败计数:记录每个IP的失败登录次数
- 自动封禁:达到阈值(默认3次)后自动封禁IP
- 异步处理:使用fork子进程异步执行封禁和地理查询,不阻塞SSH登录
- nftables规则:使用nftables的集合(set)功能高效封禁
- 持久化存储:封禁记录保存到磁盘,重启后自动恢复
- 白名单保护:白名单IP永不封禁
- 自动解封:24小时后自动解封(可配置)
配置参数
动态配置(无需重新编译)
使用配置文件 /etc/blockip/config 灵活修改封禁时间:
# 查看当前配置
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 中可以修改以下默认参数:
#define MAX_RETRIES 3 // 默认最大失败次数
#define DEFAULT_BAN_TIME "24h" // 默认封禁时长
修改后需要重新编译:
make clean
make
sudo make install
文件说明
config- 配置文件(封禁时间等)blacklist- 封禁IP列表(持久化)whitelist- 白名单列表counts/- 失败次数记录目录
卸载
# 完全卸载(会询问是否删除数据文件)
sudo make uninstall
或者:
sudo bip uninstall
开发和调试
编译调试版本
make debug
清理编译文件
make clean
深度清理(包括配置文件)
make distclean
性能优化
注意事项
- 白名单优先:请先将信任的IP加入白名单,避免误封
- 网段封禁:使用CIDR封禁时请谨慎,避免误伤
- 日志监控:定期查看日志,了解攻击情况
- 备份配置:重要服务器建议备份白名单配置
常见问题
Q: 不小心把自己封禁了怎么办?
A: 通过控制台登录服务器,执行:
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)
享受更安全的服务器环境! 🛡️