fail2ban: досрочное завершение длительного времени блокировки recidive

Вопрос или проблема

Я заметил проблему в своей установке fail2ban. Все мои тюрьмы имеют короткое время блокировки, только “recidive” имеет гораздо более долгий период блокировки.

Я использую nftables. Заблокированные IP-адреса хранятся в наборах. (Изначально я думал, что есть только один набор, но это было ошибочным предположением). Вот что я вижу в журнале для данного единственного IP:

1. portscan BAN1 на короткое время
2. portscan UNBAN1 через некоторое время

3. portscan BAN2 на короткое время
4. portscan UNBAN2 через некоторое время

5. portscan BAN3 на короткое время
6. recidive BAN на ДОЛГОЕ время, потому что portscan был активирован 3 раза
7. portscan UNBAN3 через некоторое время (IP больше не заблокирован!!)

8. recidive UNBAN (ошибка зафиксирована в журнале, IP не найден в наборе)
  • В строке 5 IP заблокирован в тюрьме “portscan”
  • В строке 6 IP заблокирован в тюрьме “recidive”
  • В строке 7 IP разблокирован в “portscan”, но похоже, что он разблокирован глобально!

Реальный журнал:

NOTICE  [portscan] Ban 78.IP.XX.YY
NOTICE  [portscan] Unban 78.IP.XX.YY
NOTICE  [portscan] Ban 78.IP.XX.YY
NOTICE  [portscan] Unban 78.IP.XX.YY
NOTICE  [portscan] Ban 78.IP.XX.YY
NOTICE  [portscan] Unban 78.IP.XX.YY
NOTICE  [portscan] Ban 78.IP.XX.YY
NOTICE  [recidive] Ban 78.IP.XX.YY
NOTICE  [portscan] Unban 78.IP.XX.YY
NOTICE  [portscan] Ban 78.IP.XX.YY
NOTICE  [portscan] Unban 78.IP.XX.YY
NOTICE  [portscan] Ban 78.IP.XX.YY
NOTICE  [portscan] Unban 78.IP.XX.YY
NOTICE  [recidive] Unban 78.IP.XX.YY
ERROR   7fe663585fb0 -- exec: nft delete element inet f2b-table addr-set-recidive \{ 78.IP.XX.YY \}
ERROR   7fe663585fb0 -- stderr: 'delete element inet f2b-table addr-set-recidive { 78.IP.XX.YY }'
ERROR   7fe663585fb0 -- exec: nft delete element inet f2b-table addr-set-recidive \{ 78.IP.XX.YY \}
ERROR   7fe663585fb0 -- stderr: 'delete element inet f2b-table addr-set-recidive { 78.IP.XX.YY }'
ERROR   Failed to execute unban jail 'recidive' action 'nftables-allports' info 'ActionInfo({'ip': '78.IP.XX.YY', 'family': 'inet4', 'fid':  at 0x7fe671bb98a0>, 'raw-ticket':  at 0x7fe671bba020>})': Ошибка разблокировки 78.IP.XX.YY
NOTICE  [portscan] Ban 78.IP.XX.YY
NOTICE  [portscan] Unban 78.IP.XX.YY
NOTICE  [portscan] Ban 78.IP.XX.YY
NOTICE  [portscan] Unban 78.IP.XX.YY
NOTICE  [portscan] Ban 78.IP.XX.YY

Игнорируя изменения, не связанные с этой проблемой, моя конфигурация в основном такая:

banaction = nftables-multiport
banaction_allports = nftables-allports

Я не модифицировал ни одно из действий nftables-xxx, т.е. я использую стандартные определения действий. Указанные тюрьмы определены следующим образом:

[portscan]
enabled = true
filter = portscan
backend = systemd
journalmatch = _TRANSPORT=kernel
logpath = %(syslog_daemon)s

[recidive]
enabled = true
bantime = 18h

Где я допустил ошибку и как её исправить?

Ответ или решение

Отказ службы Fail2ban, связанный с преждевременным окончанием времени блокировки в джейле "recidive", может быть вызван определёнными настройками или конфликтами в действиях по разблокировке IP адресов. Рассмотрим детальнее возможные причины и способы их устранения.

Теория

Fail2ban используется для защиты серверов от несанкционированного доступа путём временной блокировки IP адресов, которые вызывают подозрение. Ваша система использует nftables, чтобы управлять этими блокировками. Когда IP заблокирован несколько раз в течение короткого времени (например, за повторный портскан), он должен быть перемещён в джейл "recidive" с более длительным временем бана. Однако, даже после перехода в джейл "recidive", IP адрес преждевременно разблокируется.

Пример

Проанализировав предоставленные вами журналы Fail2ban, видно, что каждый раз, когда происходит разблокировка IP из джейла "portscan", это приводит к разблокировке этого же IP-адреса из джейла "recidive". Проблема связана с тем, что действия по разблокировке не различают, в каком именно джейле находится IP адрес, и применяются ко всем джейлам.

Применение

Чтобы устранить данную проблему, можно предпринять следующие шаги:

  1. Отдельные действия для разных джейлов: Убедитесь, что действия по блокировке и разблокировке IP для джейла "recidive" отличаются от тех, что используются для "portscan". Это может потребовать создания или настройки индивидуальных действий в конфигурации Fail2ban. Например, для джейла "recidive" может потребоваться модификация действий nftables-allports так, чтобы они содержали уникальный набор правил.

  2. Проверка конфигурации: Обратите внимание на дефолтную конфигурацию в файлах nftables-multiport.conf и nftables-allports.conf. Убедитесь, что блоки, отвечающие за удаление записей из nftables, правильно сопоставляют IP адресам их джейлы.

  3. Логика последовательных блокировок: Проверьте, как логически организовано добавление и удаление IP из сетов nftables. Возможно, потребуется реализовать более тонкую логику, которая будет учитывать, какой именно джейл инициировал блокировку или разблокировку IP адреса.

  4. Логирование и отладка: Добавьте расширенное логирование для nftables, чтобы точнее отследить момент и причину, по которой IP-адрес удаляется из сетов.

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

Оцените материал
Добавить комментарий

Капча загружается...