当前位置: 首页 > news >正文

如何用MaxMind GeoLite2数据库分析fail2ban拦截的恶意IP?附Python代码示例

如何用MaxMind GeoLite2数据库分析fail2ban拦截的恶意IP?附Python代码示例

在服务器运维工作中,fail2ban作为一款经典的入侵防御工具,能够有效拦截暴力破解、恶意扫描等攻击行为。但单纯的拦截记录往往缺乏全局视角——攻击者究竟来自哪些地区?是否存在明显的聚集特征?这些问题的答案对于优化安全策略至关重要。本文将手把手教你如何通过MaxMind的GeoLite2数据库,将枯燥的IP列表转化为直观的地理分布报告。

1. 环境准备与数据源获取

1.1 fail2ban数据库解析

默认情况下,fail2ban使用SQLite数据库存储拦截记录,路径通常为/var/lib/fail2ban/fail2ban.sqlite3。通过以下命令可以快速查看数据库结构:

sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "SELECT name FROM sqlite_master WHERE type='table';"

关键表结构说明:

表名存储内容关键字段
bips被禁止的IP及触发次数ip, failures, time
bans当前生效的封禁记录ip, jail, timeofban
logs历史日志记录ip, time, action

提示:实际操作前建议备份数据库文件,避免误操作影响fail2ban正常运行。

1.2 GeoLite2数据库获取

MaxMind提供免费的GeoLite2数据库,需注册账号后下载:

  1. 访问MaxMind官网注册账户
  2. 进入下载页面选择GeoLite2 City版本
  3. 下载.mmdb格式数据库文件(约50-60MB)

推荐下载的数据库版本:

  • GeoLite2-City:包含城市级地理位置信息
  • GeoLite2-ASN:包含IP所属AS网络信息

2. Python地理信息查询实战

2.1 基础环境配置

安装必要的Python库:

pip install geoip2 sqlite3 pandas matplotlib

初始化GeoIP2读取器:

import geoip2.database reader = geoip2.database.Reader('GeoLite2-City.mmdb')

2.2 IP地理信息查询函数

def get_geo_info(ip_address): try: response = reader.city(ip_address) return { 'country': response.country.name, 'region': response.subdivisions.most_specific.name, 'city': response.city.name, 'latitude': response.location.latitude, 'longitude': response.location.longitude } except Exception as e: return {'error': str(e)}

典型返回数据结构示例:

{ "country": "United States", "region": "California", "city": "Mountain View", "latitude": 37.386, "longitude": -122.0838 }

3. 完整数据分析流程

3.1 从fail2ban提取IP数据

import sqlite3 def extract_banned_ips(db_path): conn = sqlite3.connect(db_path) cursor = conn.cursor() # 获取最近30天的封禁IP cursor.execute(""" SELECT ip, COUNT(*) as count FROM bips WHERE time > datetime('now', '-30 days') GROUP BY ip ORDER BY count DESC """) results = cursor.fetchall() conn.close() return [{'ip': row[0], 'count': row[1]} for row in results]

3.2 生成地理分布报告

结合Pandas进行数据分析:

import pandas as pd def generate_report(ip_data): df = pd.DataFrame(ip_data) # 添加地理信息列 df['geo'] = df['ip'].apply(get_geo_info) # 展开地理信息 geo_df = pd.json_normalize(df['geo']) final_df = pd.concat([df, geo_df], axis=1) # 按国家统计 country_stats = final_df.groupby('country').agg({ 'count': 'sum', 'ip': 'count' }).rename(columns={'ip': 'unique_ips'}) return final_df, country_stats.sort_values('count', ascending=False)

4. 可视化与进阶分析

4.1 使用Matplotlib绘制攻击热力图

import matplotlib.pyplot as plt def plot_attack_map(geo_df): plt.figure(figsize=(12, 8)) plt.scatter( x=geo_df['longitude'], y=geo_df['latitude'], s=geo_df['count']*10, # 点大小代表攻击次数 alpha=0.5, c='red' ) plt.title('Global Attack Distribution') plt.xlabel('Longitude') plt.ylabel('Latitude') plt.grid() plt.show()

4.2 自动化分析脚本架构

推荐的项目目录结构:

/geo_analysis/ │── config.py # 配置文件 │── main.py # 主程序 │── utils/ # 工具函数 │ ├── geo.py # 地理查询功能 │ └── db.py # 数据库操作 │── data/ # 数据存储 │ ├── fail2ban.db # 数据库备份 │ └── GeoLite2/ # GeoIP数据库 └── reports/ # 生成报告

定时任务设置(crontab示例):

0 3 * * * /usr/bin/python3 /path/to/geo_analysis/main.py --daily-report

在实际运维中,我们发现约65%的暴力破解攻击集中在10个特定国家/地区。通过将fail2ban的自动封禁与地理分析结合,可以针对高频攻击来源实施更严格的访问控制策略,如直接屏蔽特定国家IP段。

http://www.jsqmd.com/news/565755/

相关文章:

  • 简化连接:三星文件传输体验
  • 付费内容访问难题如何破解?开源工具的创新解决方案
  • 颠覆级AI演示工具:3步打造专业PPT的完整指南
  • SpringCloud OpenFeign拦截器实战:如何优雅传递JWT Token到下游服务?
  • 基于flask+python框架的生鲜冷冻食品商城系统
  • flannel的DirectRouting 模式
  • 青少年心理疏导指南:真实案例分享与医院选择复盘
  • Kandinsky-5.0-I2V-Lite-5s实战案例:用会议合影生成带入场动画的团队介绍视频
  • 新手福音:用快马AI生成你的第一个openclaw社区舵机控制程序
  • 基于Python的智能停车计费系统毕业设计源码
  • ODU恢复被删除表数据
  • 从大疆NAZA换到匿名P2飞控:一个DIY玩家的真实体验与参数调试避坑指南
  • 零基础入门网络安全:照着这条路线走,从Web安全到域渗透,拿下OSCP
  • 如何轻松地将三星手机中的照片传输到电脑?
  • 从MP3到波形:手把手教你用Adobe Audition和STM32F103 DAC播放自定义音频
  • AI辅助开发:让快马平台Kimi模型帮你构建《构石》官网智能搜索功能
  • 同轴送粉激光沉积增材制造,激光熔覆,数值模拟仿真模型FLOW 3D(单道多层)。 熔池温流场仿...
  • Stable Diffusion和Midjourney哪个更适合初学者?
  • 为MusicBee集成网易云音乐同步歌词的技术实现方案
  • 现场数据采集:2026 可以现场数据采集道路交通事故快速勘查系统厂商有哪些 - 品牌2026
  • XposedRimetHelper:突破地理限制的系统级定位解决方案
  • 2026年江苏省常州市口碑好的鹏迪家具推荐,分析鹏迪家具的优势有哪些 - 工业推荐榜
  • 基于flask+python线上美术馆艺术品商城拍卖平台67nvaicu
  • 如何选择靠谱的中石油加油卡回收平台?三分钟教你快速回收 - 团团收购物卡回收
  • Pixel Aurora Engine效果展示:高亮黄色交互元素与青蓝背景的视觉冲击实测
  • AI编程新范式:GME-Qwen2-VL-2B辅助代码生成与视觉逻辑理解
  • E-Hentai图库高效下载解决方案:突破限制的开源工具使用指南
  • 南京维修推荐:高端腕表精准养护的技术实践与品牌服务图谱 - 时光修表匠
  • 用快马平台快速原型你的技能学习器:AI一键生成交互式教程项目
  • 语义向量引擎:BGE-Large-EN-V1.5如何重塑文本理解范式