main

Отчёт о ходе разработки f2b

Jan  4 19:52:33 f2b[4090]: jail 'portknock': restored ban of ip 85.121.165.15 (23.9hrs remain)
Jan  4 19:52:33 f2b[4090]: jail 'portknock': restored ban of ip 95.154.82.19 (23.9hrs remain)
Jan  4 19:52:33 f2b[4090]: jail 'portknock': restored ban of ip 78.171.148.130 (24.0hrs remain)
Jan  4 19:52:33 f2b[4090]: jail 'portknock': restored ban of ip 221.194.47.224 (24.0hrs remain)
# ... сидеть, обезьяны, срок ещё не вышел!

С момента предыдущего отчёта сделано следующее:

source сделан загружаемым модулем

... по аналогии с фильтром и бакендом. Ранее было прибито к файлам.

Тоже через libdl, интерфейс смотреть в sources/source.h, примеры реализации - в том же каталоге, любой /*.c/

redis source/backend

Предыдущий пункт позволил реализовать source для redis.

Это позволило "делиться" банами с другими хостами. Сейчас оно работает уже пару месяцев без перерыва, 4 хоста с f2b + 1 redis-сервер.

mcast source/backend

Также добавлен аналог предыдущего модуля, но работающий через multicast, что позволяет обойтись без redis-сервера, но ограничивает расположение хостов одним multicast-доменом (т.е. одна и та же сеть, если не применять костыль в виде igmpproxy и подобного).

Пока недостаточно оттестировано.

portknock source

Для выявления заведомых ботов. Позволяет повесить, например, /типа/ открытый telnet, а по коннекту -- банить подключившегося, ибо нехер.

Если скомбинировать с вышеупомянутым redis'ом - получим распределённый honeypot. Любой пидорас, спаленный за сканированием этого "telnet"'а будет немедленно забанен на всех хостах с f2b (а то и во всей защищаемой сети в случае граничного роутера).

Приготовьтесь сразу юзать ipset или нечто подобное, хостов будет много. За три часа часа работы в таком режиме набегает под две сотни, а за сутки - тысяча-полторы хостов (при бане на сутки).

doxygen и прочая документация

В всех заголовках добавлены doxygen'овы комментарии для структур, дефайнов и функций. Вобщем, задокументировано всё, на что оно ругалось при генерации доков.

Также, существенно расширены доки по установке и настройке, добавлены примеры конфигов.

state

Добавлена возможность хранить и восстанавливать список банов при рестарте. Сделано тупо через файлик с записямии, когда какой ip был забанен и когда его выпускать.

Особой производительности там не требуется, файлик переписывается только при очередном бане. Если будет тормозить - тогда будем думать.

Клиент / управление

Реализована команда set для jail'ов. Теперь порог срабатывания и прочие параметры можно поменять без рестарта. Реализована перезагрузка списка regexp'ов для фильтра (аналогично).

Для пришедшего пакета теперь проверяется количество аргументов. Сделано с прицелом на будущую реализацию управления по igmp.

Утилиты

Переработаны утилитки для тестов различных компонентов. Также, они переименованы для приведения к одному виду /f2b-*-test/. Все утилиты сейчас могут использовать тот же кусок конфига, что и сам демон (с минимальными исправлениями, вроде пути к библиотеке).

Переименованы некоторые команды, в частности:

  • ban -> ip ban
  • show -> ip status
  • release -> ip release
  • regex stats -> filter stats
  • regex add -> regex reload

TODO

Что ещё надо будет в ближайшее время.

  • select() вместо sleep() -- при большом списке файлов плывёт время обработки.
  • белый список для подсетей (реализация ipv4-only сложности не представляет, но хотелось бы её сделать и для ipv6 тоже)
  • реорганизовать имена загружаемых модулей (сложности с cmake, оно очень сильно хочет сделать именование вида libFOO.so)
  • reload для конкретного jail'а
  • добавить возможность использовать как просто udp, так и udp multicast для клиента (сейчас - только unix-сокет)