起因
兩個 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 時代,還用密碼攻擊?