Рейтинг:2

fail2ban не использует тип блока DROP

флаг cn

Используя Ubuntu 20.04 LTS, у меня есть это в /etc/fail2ban/jail.local:

[ПО УМОЛЧАНИЮ]
бантайм = 3600
запрет = iptables
тип блока = падение


[сшд]
включено = верно
протокол = TCP
порт = ssh
фильтр = sshd
путь к журналу = /var/log/auth.log
максимальная попытка = 3

Но вот что я вижу, когда перечисляю правила iptables:

â°â# iptables -L f2b-sshd -n -v
Цепочка f2b-sshd (1 ссылка)
 pkts bytes target prot opt ​​in out source target
   13 1356 REJECT all -- * * 222.187.232.205 0.0.0.0/0 reject-with icmp-port-unreachable
   18 1516 REJECT all -- * * 221.181.185.153 0.0.0.0/0 reject-with icmp-port-unreachable
   17 1064 ОТКЛОНИТЬ все -- * * 222.186.180.130 0.0.0.0/0 777 55854 ВОЗВРАТ все -- * * 0.0.0.0/0 0.0.0.0/0

Проблема в том, что он использует REJECT (с ICMP) вместо DROP.

В action.d/iptables.conf содержится следующее:

# Опция: бан действий
# Прим.: команда выполняется при бане IP. Позаботьтесь о том, чтобы
# команда выполняется с правами пользователя Fail2Ban.
# Теги: см. справочную страницу jail.conf(5)
# Значения: CMD
#
actionban = <iptables> -I f2b-<имя> 1 -s <ip> -j <тип блока>

Это файл действия iptables по умолчанию, поставляемый с официальным пакетом apt fail2ban для этой версии ОС.

Также пытался добавить «blocktype=drop» в [sshd], но это не дало результата.

Я не знаю, как это отладить, потому что служба fail2ban не регистрирует фактические команды iptables.

Что мне не хватает?

флаг jp
Dom
Вы должны установить DROP в action.d/iptables-common.conf, blocktype
флаг cn
Есть две проблемы с этим. Во-первых, это глобальная конфигурация. Тогда я не смогу установить разные типы блоков для разных фильтров. Вторая проблема заключается в том, что iptables-common.conf является частью пакета fail2ban. Если я изменю это, а позже выйдет новая версия fail2ban, то она будет перезаписана. Я даже не замечу. Или, может быть, он не будет перезаписан, и это может полностью нарушить действие iptables.
флаг jp
Dom
Затем вы можете использовать: action = iptables-multiport[blocktype="DROP", port="22,2222", name=sshd], установите в разделе [sshd]
Рейтинг:1
флаг il

Чтобы передать какой-либо параметр действию одиночного джейла, вы должны установить действие со всеми параметрами (также обычно поставляются в разделе по умолчанию тюрьма.conf) или в случае запрета действия вы можете использовать что-то вроде этого:

[некоторая_тюрьма]
banaction = %(известно/banaction)s[blocktype=DROP]

Что касается темы DROP vs. REJECT, дискуссия так же стара, как и сама подсистема сетевого фильтра, со многими плюсами и минусами для обеих сторон.
О запрете опасений см. https://github.com/fail2ban/fail2ban/issues/2217#issuecomment-423248516 для деталей.

флаг cn
Да, я согласен с DROP vs REJECT. У меня есть несколько фильтров, которые используются для атак с усилением DNS. Для них лучше использовать DROP (поскольку запросы имеют поддельные исходные адреса, поэтому отправка обратного ICMP-отклонения действительно помогает злоумышленнику...)
Рейтинг:0
флаг cn

Я принял решение @sebres, но хотел бы добавить несколько замечаний.

Для запрета iptables-allports тип блока reject может содержать пробелы внутри. Вам нужно это процитировать.

Пример:

[сшд]
banaction=iptables_allports[blocktype="REJECT --reject-with icmp-port-unreachable"]

Вторая интересная вещь: и в конфигурации бана, и в конфиге джейла есть параметр под названием «протокол». Сначала я был сбит с толку, когда приведенная ниже конфигурация не выдавала никаких ошибок, но не блокировала UDP-запросы:

[название-ddos]
banaction=iptables_allports[тип блока=DROP,протокол=все]

Это произошло из-за того, что мне не хватило настройки протокола=все из джейла. Вам нужно указать протокол = все на уровне тюрьмы:

[название-ddos]
banaction=iptables_allports[тип блока=DROP,протокол=все]
протокол=все

Причина этого в том, что секция named-ddos создает новую цепочку в iptables, а забаненные ips создают правила внутри этой цепочки. Если вы не укажете protocol=all на уровне тюрьмы, то цепочка будет определена так:

Цепочка INPUT (политика DROP 22 пакета, 952 байта)
 pkts bytes target prot opt ​​in out source target         
 1371 229K named-ddos TCP -- * * 0.0.0.0/0 0.0.0.0/0           

Это правда, что запрет создаст правила с proto=all внутри цепи, но сама цепочка не будет использоваться для пакетов, отличных от TCP. Вывод такой, что нужно указывать protocol=all как на уровне джейла, так и в банэкшене (если он его поддерживает), иначе не сработает.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.