Я использовал fail2ban/iptables на сервере Centos 6.
Я перешел на Centos 7 и теперь использую fail2ban/firewallD (устанавливается Webmin/Virtualmin с их настройками по умолчанию)

Это скриншоты cat /var/log/maillog | grep "disconnect from unknown" введите здесь описание изображения введите здесь описание изображения введите здесь описание изображения
cat /var/log/fail2ban.log | grep Ban отображает только

2019-10-27 16:52:22,975 fail2ban.actions [8792]: УВЕДОМЛЕНИЕ [proftpd] Бан 111.225.204.32

Кроме того tailf /var/log/fail2ban.log отображает несколько "уже забаненных" одного и того же IP. В этом случае fail2ban после достижения maxretry пытается заблокировать IP-адрес. введите здесь описание изображения

Вот мои настройки (частичные), я оставил их такими, какие они были по умолчанию, но изменил bantimes.

jail.local

[постфикс]
включено = верно
порт = smtp,465,отправка
бантайм = -1

[постфикс-sasl]
включено = верно
порт = smtp, 465, отправка, imap3, imaps, pop3, pop3s
бантайм = -1

[голубятня]
включено = верно
порт = pop3,pop3s,imap,imaps,submission,465,сито
бантайм = -1

jail.conf

[ПО УМОЛЧАНИЮ]
время поиска = 600
максимальное количество попыток = 5
серверная часть = авто
фильтр = %(__name__)s
порт = 0:65535
banaction = iptables-multiport
banaction_allports = iptables-allports
action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="% > (port)s", protocol="%(protocol)s", chain=" %(цепочка)s"]
действие = %(действие_)с

jail.d/00-firewalld.conf

[ПО УМОЛЧАНИЮ]
banaction = firewallcmd-ipset

Существуют следующие файлы: action.d/firewallcmd-ipset.conf и filter.d/postfix.conf.

firewall-cmd --direct --get-all-rules

фильтр ipv4 INPUT_direct 0 -p tcp -m multiport --dports ssh -m set --match-set fail2ban-default src -j REJECT --reject-with icmp-port-unreachable
ipv4 filter INPUT 0 -p tcp -m multiport --dports ssh -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable
ipv4 filter INPUT 0 -p tcp -m multiport --dports 10000 -m set --match-set fail2ban-webmin-auth src -j REJECT --reject-with icmp-port-unreachable
ipv4 filter INPUT 0 -p tcp -m multiport --dports ssh,sftp -m set --match-set fail2ban-ssh-ddos src -j REJECT --reject-with icmp-port-unreachable

После ручного запуска
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='193.56.28.0/24' reject"
и
firewall-cmd --reload этот вывод tailf /var/log/fail2ban.log введите здесь описание изображения
остановился.

Как я могу заблокировать все эти IP-адреса после того, как они достигнут значения maxretry? Будут ли они забанены навсегда, несмотря на перезапуск или перезагрузку службы?

Редактировать 1: Из файла fail2ban.log с action=firewalld-cmd ipset
введите здесь описание изображения

Из файла fail2ban.log с action=iptables-allports
введите здесь описание изображения

Редактировать 2:
Кажется (я думаю), что-то сбрасывает конфигурации (я думаю, это будет Webmin), потому что через некоторое время я начинаю получать журналы ошибок, такие как failed to execute ban jail 'dovecot' action iptables-allports, поэтому я пытаюсь сделать это: в action.d создал banning.conf

[Definition]      

actionban = /usr/bin/firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='<IP>' reject"; ; /usr/bin/firewall-cmd --reload    

И в jail.local

[DEFAULT]
banaction = iptables-multiport 
            banning 

Но я получаю Error in action definition banning
Я знаю, что это не решение.
Перед перемещением сервера я годами использовал fail2ban/iptables (не firewalld), не обращая внимания на настройки по умолчанию.

1
dstonek 29 Окт 2019 в 15:07

1 ответ

Как я могу заблокировать все эти IP-адреса после того, как они достигнут значения maxretry?

Вероятно, ваша проблема не связана с maxretry и т. д.
Если вы видите [jail] Ban 192.0.2.1 и несколько сообщений [jail] 192.0.2.1 already banned в дальнейшем (особенно через несколько минут после сообщения "Бан" для того же Jail/IP), это означает только то, что ваше действие по бану (firewalld) вообще не работает (после бана злоумышленник-IP все еще может повторить свои попытки).

В последнее время у нас были определенные проблемы с этим (особенно с комбинацией firewalld + CentOS) - см., например, https://github.com/fail2ban/fail2ban/issues/1609, а также связанная с ним проблема firewalld — https://github.com/firewalld/firewalld/issues/515.
Поэтому проверьте свой собственный сетевой фильтр (iptables и т. д.), если вы видите какие-то правила (внесение установленного трафика в белый список) перед цепочками fail2ban, похоже, что ваша конфигурация не поддерживает fail2ban (или любую другую систему банов)... здесь может быть ответом для вас - https://github.com/fail2ban/fail2ban/ issue/2503#issuecomment-533105500.

Вот еще одна похожая проблема с выдержкой из примера, иллюстрирующей «неправильное правило iptables, которое обходит fail2ban» — https://github.com/fail2ban/fail2ban/issues/2545#issuecomment-543347684

В этом случае:

  • либо переключите серверную часть firewalld (как было предложено выше);
  • или переключите блокировку fail2ban на что-то родное (iptables/ipset/etc).
  • или даже добавить еще одно действие, сбрасывающее или убивающее активное установленное соединение забаненного IP (используя что-то вроде tcpkill, killcx, ss и т.д.).

ОБНОВЛЕНИЕ 1

Пример jail.local:

[DEFAULT]
banaction = iptables-multiport
banaction_allports = iptables-allports

[postfix-sasl]
enabled = true
[dovecot]
enabled = true
...

Если после перезагрузки fail2ban вы по-прежнему видите какие-то IP-адреса, делающие попытки после бана и already banned в fail2ban.log, предоставьте выдержку из журнала fail2ban по первому бану или еще какие-то возможные ошибки ( потому что already banned слишком поздно и совсем не помогает).
Если ошибок нет, предоставьте вывод iptables -nL.

2
sebres 12 Ноя 2019 в 12:35
Я не знаком с fail2ban/firewallD. Кажется, некоторые вещи были упущены при установке Centos 7/Webmin (от Contabo). По умолчанию действие для proftpd, dovecot++ — это firewallcmd-ipset. Для этого я нашел ERROR ipset add fail2ban-proftpd 222.182.57.235 timeout -1 -exist -- stderr: 'ipset v7.1: The set with the given name does not exist\n', изменил некоторые действия на iptables-allports и получил ERROR iptables -w -n -L INPUT | grep -q 'f2b-default[ \t]' -- stdout: '' и iptables -w -X f2b-default -- stderr: "iptables v1.4.21: Couldn't load target f2b-default':No such file or d
 – 
dstonek
5 Ноя 2019 в 19:13
Чтобы быть более понятным, чем мой предыдущий комментарий, я добавил к вопросу скриншоты файла журнала в двух случаях действия.
 – 
dstonek
5 Ноя 2019 в 21:29
Ваши скриншоты показывают только after эффекты, но конфигурация fail2ban (jail.local) кажется неправильной: либо вы должны установить только banaction, либо если установлено значение action/action_, вы должны указать все ожидаемые параметры, как это установлено в ПО УМОЛЧАНИЮ - см. conf#L174. Или предоставьте выдержку из fail2ban-client -d для джейла, который не работает.
 – 
sebres
6 Ноя 2019 в 20:21
Я только добавил bantime=-1 в файл jail.local по умолчанию. Вот вывод dovecot, proftpd и postfix-sasl docs.google. ком/документ/д/…
 – 
dstonek
7 Ноя 2019 в 16:46
Вы видите ... 'name', 'default' в выводе для каждой тюрьмы? Это означает, что вы неправильно установили action (в нем отсутствует имя параметра), поэтому внимательно прочитайте мой второй комментарий: либо используйте banaction = firewalld-ipset, либо action = firewalld-ipset[...all-parameters-action-needed...], как в github.com/fail2ban/fail2ban/blob/…
 – 
sebres
8 Ноя 2019 в 17:09