IP流量监控与封禁工具
由于云服务器上线后经常出现带宽被占满的情况,导致服务使用不了,用户体验极差。通过禁用一些端口无效后,故写了个小脚本自动封禁高带宽消耗的IP地址。并附上被封禁的IP地址。
功能特性
- 实时流量监控:使用
iftop
捕获实时网络流量数据。 - 自动IP封禁:自动封禁超过特定带宽阈值的IP地址(例如,消耗超过100MB或1Gb带宽的IP)。
- 随机化间隔时间:在检查之间引入随机化的时间间隔,防止被预测。
- 错误处理:包含子进程调用的错误处理,确保程序的健壮性。
前提条件
在开始之前,请确保您已满足以下要求:
- Python 3.6或更高版本:脚本使用Python编写,需要Python 3.6或更高版本。
- iftop:命令行网络监控工具。可以通过包管理器安装(例如,在基于Debian的系统上使用
sudo apt-get install iftop
)。 - iptables:用户空间实用程序,允许系统管理员配置Linux内核防火墙的IP数据包过滤规则。
安装步骤
- 克隆仓库:
git clone https://github.com/Echo-she/ban_ip.git
使用方法
永久后台要运行脚本,只需执行以下命令:
nohup python main.py &
脚本将开始监控网络流量,并自动封禁超过预定义带宽阈值的IP地址。
工作原理
- 获取流量数据:脚本使用
subprocess
调用iftop
并捕获输出。 - 解析流量数据:解析
iftop
的输出,识别高带宽使用的IP地址。 - 封禁IP地址:将超过带宽阈值的IP地址添加到
iptables
的封禁列表中。 - 持续监控:脚本在循环中运行,持续监控并封禁IP地址,并在检查之间引入随机化的时间间隔。
配置
- 带宽阈值:脚本目前封禁消耗超过100MB或1Gb带宽的IP地址。您可以通过修改
parse_iftop_output
函数来调整这些阈值。 - 间隔时间:检查之间的间隔时间为1到2秒之间的随机值。您可以通过修改
main
函数中的time.sleep(1 + random.random())
行来调整此设置。
致谢
- 感谢
iftop
和iptables
的开发者,提供了强大的网络监控和管理工具。 - 灵感来源于现代IT环境中对自动化网络安全措施的需求。