起因
两个 VPM/VPS,安装了 fail2ban 去拦截密码穷举攻击。每天的记录都在增长,以前复制屏幕输出就行,一屏的内容还容易粘贴出来的。昨天已经过 500 条,好奇 fail2ban 是如何存储这些内容的?就发现它在使用 SQLite3 数据库,有数据库就方便多了。
IP 地理分析实践
1. 从哪里下载? 地理位置 IP 数据
我用这个链接: https://www.maxmind.com/en/accounts/1121608/geoip/downloads
介绍:
每个连接到互联网的设备都会被分配一个独一无二的 IP 地址,Geo IP 数据库通过收集这些而成,建立起 IP 地址与地理位置之间的对应关系。
Geo IP 数据的应用:
- 根据用户的地理位置,实现本地化内容。
- 分析用户的 IP 地址位置,可以识别出欺骗行为。
- 根据用户的地理位置,精准广告投放。像百度、美团这些大公司,它们都在干这个,特擅长。
- 分析用户地理位置,可以推算出地域特征,可做为市场调研的数据,向政府、商业提供决策提数据支持。
- 识别标注出恶意 IP 地址,可以采取相应的安全措施。比如 fail2ban
- 中华的伟大防火墙也使用 IP 来过滤
- 应用有很多,不编了。
免费的地理IP数据库
对个人使用而言,国外有几家公司或机构提供 Lite 版的数据库下载。
- MaxMind GeoLite2
- P2Location LITE
- DB-IP Lite
有的需要注册,才能下载使用。我找时, MaxMind 在第一个,顺利注册并下载,就没再看其它的。
2. Fail2Ban
应用介绍 :
1)fail2ban 数据库
安装并配置后,数据库文件在: /var/lib/fail2ban/fail2ban.sqlite3
如果在 Ubuntu 中使用数据库,需要安装 sqlite3
apt update
apt install sqlite3
打开 fail2ban 数据库:
sqlite3 /var/lib/fail2ban/fail2ban.sqlite3
数据库的中结构查看:
a. 哪些表:
sqlite> SELECT name FROM sqlite_master WHERE type='table';
fail2banDb
jails
logs
bans
bips
sqlite>
b. 各个表的,记录个数:
SELECT 'jails' AS table_name, COUNT(*) AS row_count FROM jails
UNION ALL
SELECT 'logs' AS table_name, COUNT(*) AS row_count FROM logs
UNION ALL
SELECT 'bans' AS table_name, COUNT(*) AS row_count FROM bans
UNION ALL
SELECT 'bips' AS table_name, COUNT(*) AS row_count FROM bips;
结果:
jails|3
logs|5
bans|80
bips|592
c. 看来 f2bstate 输出用的 bips 表
我最早用的 bans 表内容,在 DashBoard 中显示。
2)MM GeoLite2 数据库
注册后就可以到下载界面:
分类:
三种精度: ASN ,City,Counrty
数据调用方式: APIs ,数据库,CSV
我用的版本是 GeoLite2-City_20250131 ,数据库不大,文件不到 56MB。中国区的数据是含糊的,你知道的原因,只有国家名。
使用:
GeoLite2-City.mmdb 可以在 Pyhone 用 geoip2
pip install geoip2
例,打开数据库:
reader = geoip2.database.Reader('GeoLite2-City.mmdb')
具体看:
Geolocate an IP address using Databases | MaxMind Developer Portal
或者问 AI
3. 应用 Dashboard
工作原理:
从服务器上用 scp 下载 fail2ban 数据库,用 sqlite 找出 fail2ban.bips 表中的 ip 列内容,在 GeIP 数据库中找到对应的地理位置,分析并统计,最后显示在页面上。
附带功能是,显示安装 fail2ban 后的记录天数 “ Uptime (Days)”,因为要统计 2 台主机,设计在主页右上角有2个按键来切换主机。
如下:
很好奇:伊朗排第五
AI 时代,还用密码攻击?