Fail2ban 0.9 вводит хранилище базы данных для сохранения запретов на перезапуск. Но я не могу понять, как это работает.
Там есть dbpurgeage
параметр, который контролирует время жизни старых банов, по умолчанию - 24 часа. Как я вижу из исследования кода, fail2ban сохраняет бан в базе данных с помощью timeofban
равно моменту сохранения бана. Затем каждый dbpurgeage
период снимает все баны с timeofban < MyTime.time() - self._purgeAge
Другими словами удаляет все баны, которые были сохранены более 24 часов назад.
Но что, если IP забанят на месяц? Значит ли это, что с dbpurgeage = 86400
после перезапуска через 24 часа я потеряю все баны дольше 24 часов?
Я просто хочу, чтобы все мои перманентные баны в любом случае сохранились.
Правила Netfilter не сохраняются при перезагрузке, поэтому Fail2ban 0.9 записывает баны в свою базу данных и восстанавливает их при запуске; однако он запоминает каждый запрет только на dbpurgeage секунд. Если вы перезагрузите свою систему более чем dbpurgeage через несколько секунд после введения определенного запрета этот запрет будет не быть восстановленным.
Такое поведение не зависит от продолжительности бана. Неважно, есть ли у вас месячный бан, если Fail2ban не забыл его восстановить. Это не проблема, если ваша система не перезагружается на время блокировки, но если вы хотите быть абсолютно уверены, что не потеряете ее из-за перезагрузки, вам придется увеличить dbpurgeage
. Я не уверен, есть ли простой способ полностью отключить очистку.