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

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

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

[DEFAULT]
bantime   = 3600
banaction = iptables
blocktype = drop


[sshd]
enabled   = true
protocol  = tcp
port      = ssh
filter    = sshd
logpath   = /var/log/auth.log
maxretry  = 3

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

╰─# iptables -L f2b-sshd -n -v
Chain f2b-sshd (1 references)
 pkts bytes target     prot opt in     out     source               destination
   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 REJECT     all  --  *      *       222.186.180.130      0.0.0.0/0                  777 55854 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

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

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

# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    See jail.conf(5) man page
# Values:  CMD
#
actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>

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

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

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

Что я упускаю?

решение1

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

[some_jail]
banaction = %(known/banaction)s[blocktype=DROP]

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

решение2

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

Для iptables-allports banaction, reject blocktype может иметь пробелы внутри. Вам нужно это заключить в кавычки.

Пример:

[sshd]
banaction=iptables-allports[blocktype="REJECT --reject-with icmp-port-unreachable"]

Вторая интересная вещь: и banaction, и jail config имеют параметр под названием "protocol". Я был сначала сбит с толку, когда конфигурация ниже не выдавала никаких ошибок, но и не блокировала UDP-запросы:

[named-ddos]
banaction=iptables-allports[blocktype=DROP,protocol=all]

Это произошло из-за того, что я пропустил настройку protocol=all из jail. Вам нужно указать protocol=all на уровне jail:

[named-ddos]
banaction=iptables-allports[blocktype=DROP,protocol=all]
protocol=all

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

Chain INPUT (policy DROP 22 packets, 952 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1371  229K named-ddos  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           

Это правда, что запрет создаст правила с proto=allвнутри цепи, но сама цепочка не будет использоваться для не-tcp пакетов. Вывод в том, что вам нужно указать protocol=all как на уровне jail, так и в banaction (если он поддерживает), иначе это не сработает.

Связанный контент