О сервисе
Fail2ban уже формировал HTML-отчёты, но по ним было трудно быстро ответить на вопросы: «Какой jail заметил этот IP?» и «Блокировка ещё действует?».
Поэтому я сохранил прежний сбор данных и добавил отдельный API для поиска. HTML-отчёты при этом никуда не исчезли.
Архитектура
Путь от записи Fail2ban до ответа публичного API выглядит так:
Fail2ban (FreeBSD / PF, Linux / nftables)
→ f2b-report: HTML + JSON
→ submission queue: HTTPS, retries, heartbeat when nothing changed
→ f2b-ingest Worker: input validation, normalization, diff application
→ Cloudflare D1: per-jail collection state and IP observation history
→ f2b-api Worker: public GET API and this static sitef2b-ingest принимает и проверяет снимки состояния, а f2b-api отвечает на GET-запросы и раздаёт сайт Hugo. Они используют одну базу D1, но публичный API не может принимать новые записи или управлять PF и nftables. Что именно блокировать, решает Fail2ban на каждом исходном сервере.
Смысл этого сайта — не только показать записи, но и объяснить, по каким правилам они появились.
Языки
Сайт доступен на японском, английском, русском языках, а также на упрощённом и традиционном китайском. Запросы к корню направляются в /ja/, /en/, /ru/, /zh-cn/ или /zh-tw/ в зависимости от сохранённой настройки, языка браузера и страны подключения. Выбор языка в навигационной панели сохраняет предпочтение в cookie.
Существующие HTML-отчёты продолжают формироваться. Этот сайт описывает API и публичные политики и ссылается на сами отчёты.
Исходный код
- f2b-api: API, спецификация OpenAPI и этот сайт Hugo.
- f2b-report: разбор состояния Fail2ban и вывод HTML/JSON.
Содержимое Hugo и конфигурация темы находятся в f2b-api/site/. Сборка сайта и логика доставки Worker управляются в одном репозитории.
Лицензия
Исходный код f2b-api и оригинальная документация распространяются по лицензии BSD 2-Clause. Copyright (c) 2026, haturatu
Поиск по сайту использует FlexSearch, распространяемый по лицензии Apache 2.0. Текст лицензии и уведомление об авторских правах сохраняются в поставляемых ресурсах.