Home » Linux » CentOS » Защита почтового сервера postfix + dovecot с помощью fail2ban

Защита почтового сервера postfix + dovecot с помощью fail2ban

У меня есть много статей про настройку почтового сервера, где я постоянно пропускаю важную тему защиты почтового сервера от перебора паролей. Пришло время это исправить и рассказать, как защитить postfix и dovecot с помощью fail2ban от подбора паролей к почтовым ящикам. Метод традиционный, простой и надежный - будем банить по ip тех, кто будет пытаться пройти авторизацию с неверными учетными данными.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

Введение

Данная статья написана на примере настройки почтового сервера по моей статье - Настройка postfix + dovecot на CentOS 8. Но в контексте описываемого материала это не принципиально, так как fail2ban, postfix и dovecot имеют одинаковые конфиги и логи на всех дистрибутивах linux. Так что представленная в статье информация будет актуальна для любого сервера, где используется этот софт.

Второй важный момент. Я в своей работе везде использую нативные iptables. Для блокировки ip адресов с помощью fail2ban я буду использовать именно этот firewall. Если у вас его нет и вы хотите настроить, то добро пожаловать в мою статью по этой теме - настройка iptables. Далее я не буду останавливаться на этом.

Установка и настройка fail2ban

Установка fail2ban на любом дистрибутиве не представляет никаких сложностей, так как продукт популярный и присутствует почти во всех репозиториях. Ставим через пакетный менеджер в Centos 7,8. У вас должен быть подключен репозиторий epel.

# yum install fail2ban
# dnf install fail2ban

Установка fail2ban

В Ubuntu / Debian fail2ban ставится из базовых репозиториев.

# apt install fail2ban

В Centos по умолчанию используется firewalld для управления правилами фаервола. Чтобы изменить это и перейти на iptables, достаточно удалить файл 00-firewalld.conf.

# rm /etc/fail2ban/jail.d/00-firewalld.conf

Дальше нас будет интересовать конфигурационный файл jail.conf. По умолчанию в нем очень много параметров и комментариев. Мне не удобно работать с таким огромным файлом. Большая часть информации оттуда мне не нужна. Я привел его к такому виду.

[INCLUDES]
before = paths-fedora.conf

[DEFAULT]
ignoreip = 127.0.0.1/8  10.1.3.29/32
bantime  = 30m
findtime  = 30m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal

Я выделил ip адрес zabbix сервера, на котором настроен мониторинг работы почтового сервера и мониторинг tls сертификатов. Если его не добавить в исключения, то он будет забанен, так как регулярно подключается к почтовому серверу, но не проходит авторизацию. Ему это не нужно для работы.

Когда будете редактировать, не забудьте на всякий случай сохранить оригинал конфига. Базовая настройка fail2ban закончена. Все остальное я оставил дефолтное. Переходим к настройке правил блокировки.

Защита postfix с помощью fail2ban

Изначально fail2ban идет с комплектом готовых настроек и фильтров для защиты большинства популярных сервисов. К ним относится и postfix. Но когда я посмотрел в готовый набор с regexp для postfix, я слегка растерялся :) Он просто огромен. И самое главное, что в таком виде он не заработал на моем лог файле.

fail2ban regexp postfix

Мне стало лень ковыряться в этих правилах. Для защиты postfix от перебора паролей почтовых ящиков, достаточно банить ip адреса из следующих строк лога.

Jun 17 03:14:07 mail postfix/smtpd[175371]: warning: unknown[46.38.145.252]: SASL LOGIN authentication failed: UGFzc3dvcmQ6

Для этого достаточно относительно простого regexp.

^%(__prefix_line)swarning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$

Его придумал не я. Честно подсмотрел на просторах интернета. Примеров масса и у нас, и в англоязычном гугле. Далее создаем конфигурационный файл с фильтром из этого regexp - /etc/fail2ban/filter.d/postfix-sasl.conf.

[INCLUDES]
before = common.conf
[Definition]
_daemon = postfix/smtpd
failregex = ^%(__prefix_line)swarning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$
ignoreregex =

Можно сразу же проверить работу этого фильтра с помощью fail2ban-regex. Эта утилита никого не банит, а просто выводит информацию о работе фильтра.

# fail2ban-regex /var/log/maillog /etc/fail2ban/filter.d/postfix-sasl.conf

Команда успешно отработала и вывела результат.

Защита postfix с помощью fail2ban

24327 раз данный фильтр распознал строки, попадающие под работу фильтра. Изначально я напрягся, когда прикинул, что именно такое количество ip адресов поедет в бан с помощью iptables. Это еще не критично большое количество, но все равно достаточно много. По одному добавлять такое количество адресов не стоит. Нужно использовать списки, например, ipset.

На деле зря испугался. Никаких проблем не будет и дальше я покажу почему. Правило обработки лога мы проверили и убедились, что оно работает. Дальше добавляем в jail.conf новую секцию.

[postfix-sasl]
enabled	= true
filter	= postfix-sasl
port	= smtp,465,submission,imap,imaps,pop3,pop3s
action	= iptables[name=Postfix-sals, port=smtp, protocol=tcp]
logpath	= /var/log/maillog
bantime	= 60m
maxretry = 3
findtime = 60m

Пояснять тут особо нечего и так все понятно. Настройка блокировки будет проверять лог файл и записи в нем за последние 60 минут. Если будут 3 совпадения с regexp из фильтра postfix-sasl, ip адрес будет забанен на 60 минут. Таким образом, список забаненных ip адресов будет не очень большой, так как большая часть адресов будет повторяться.

Запускаем fail2ban и добавляем в автозагрузку.

# systemctl enable --now fail2ban

Проверяем лог файл /var/log/fail2ban.

log fail2ban

Смотрим правила iptables.

# iptables -L -v -n

Блокировка в iptables с помощью fail2ban

У вас должна появиться отдельная цепочка правил f2b-Postfix-sals с заблокированными ip адресами, которые добавил fail2ban. С защитой postfix с помощью fail2ban все. Переходим к Dovecot.

Защита dovecot с помощью fail2ban

Для защиты от перебора логинов в dovecot мы будем действовать аналогично. Единственное отличие, я буду использовать дефолтный фильтр для dovecot, который шел из коробки. Я его попробовал и он сразу заработал. Вот его содержимое.

# cat /etc/fail2ban/filter.d/dovecot.conf
[INCLUDES]

before = common.conf

[Definition]

_auth_worker = (?:dovecot: )?auth(?:-worker)?
_daemon = (?:dovecot(?:-auth)?|auth)

prefregex = ^%(__prefix_line)s(?:%(_auth_worker)s(?:\([^\)]+\))?: )?(?:%(__pam_auth)s(?:\(dovecot:auth\))?: |(?:pop3|imap)-login: )?(?:Info: )?.+$

failregex = ^authentication failure; logname=\S* uid=\S* euid=\S* tty=dovecot ruser=\S* rhost=(?:\s+user=\S*)?\s*$
            ^(?:Aborted login|Disconnected)(?::(?: [^ \(]+)+)? \((?:auth failed, \d+ attempts(?: in \d+ secs)?|tried to use (?:disabled|disallowed) \S+ auth|proxy dest auth failed)\):(?: user=<[^>]*>,)?(?: method=\S+,)? rip=(?:[^>]*(?:, session=<\S+>)?)\s*$
            ^pam\(\S+,(?:,\S*)?\): pam_authenticate\(\) failed: (?:User not known to the underlying authentication module: \d+ Time\(s\)|Authentication failure \(password mismatch\?\)|Permission denied)\s*$
            ^[a-z\-]{3,15}\(\S*,(?:,\S*)?\): (?:unknown user|invalid credentials|Password mismatch)\s*$
            <mdre->

mdre-aggressive = ^(?:Aborted login|Disconnected)(?::(?: [^ \(]+)+)? \((?:no auth attempts|disconnected before auth was ready,|client didn't finish \S+ auth,)(?: (?:in|waited) \d+ secs)?\):(?: user=<[^>]*>,)?(?: method=\S+,)? rip=(?:[^>]*(?:, session=<\S+>)?)\s*$

mdre-normal = 

mode = normal

ignoreregex = 

journalmatch = _SYSTEMD_UNIT=dovecot.service

datepattern = {^LN-BEG}TAI64N
              {^LN-BEG}

Полный лог dovecot у меня располагается в файле /var/log/dovecot/info.log. В параметрах dovecot у меня добавлено:

auth_verbose = yes

С этим параметром у вас дополнительно в логе будут следующие строки:

Jun 17 04:14:11 auth-worker(175697): Info: sql(mcm@mail.ru,87.246.7.66): unknown user

По дефолту их нет, а они помогут в нашей задаче по защите от перебора паролей учетных записей dovecot. Проверим работу фильтра.

# fail2ban-regex /var/log/dovecot/info.log /etc/fail2ban/filter.d/dovecot.conf

Защита dovecot с помощью fail2ban

Сработок очень много. Судя по всему, фильтр работает. Добавляем в конфиг jail.conf.

[dovecot]
enabled	= true
filter	= dovecot
port	= imap,imaps,pop3,pop3s
action	= iptables[name=Dovecot, port=imap, protocol=tcp]
logpath	= /var/log/dovecot/info.log
bantime	= 60m
maxretry = 3
findtime = 60m

Здесь ничего нового. Все то же самое, что мы сделали выше. Перезапускайте fail2ban и проверяйте его работу. В логе должна появиться информация по работе данного jail'а. А в правилах iptables новая цепочка Dovecot.

Отладка работы fail2ban

После добавления правил блокировки ip адресов с помощью fail2ban, я некоторое время наблюдаю за сервером, чтобы проверить правильность работы. Для этого делаю вот такое окно в отдельном мониторе и наблюдаю некоторое время.

Отладка работы fail2ban

Здесь открыт лог postfix, dovecot и fail2ban. Если вижу, что правила отрабатываются корректно, завершаю настройку. На этом этапе могут быть заблокированы валидные ip адреса пользователей, у которых одна из учеток указана с неверным паролем. В итоге он банится по ip и у него вообще перестает работать вся почта. Если это локальные пользователи, то можно всю их подсеть добавить в доверенные, но я бы не рекомендовал так делать. В этом случае вы не узнаете, что кто-то вас перебирает из локальной сети. А это случается не редко.

Удалить ip адрес из заблокированных fail2ban

Вам может понадобиться вручную удалить какой-то ip адрес из списка заблокированных fail2ban. Часто в блок попадают ip адреса при настройке учетной записи у пользователя. Пароль может быть перепутан или копироваться с лишними символами. Всякое бывает.

Можно напрямую удалить правило через iptables. Но это будет не очень правильно. Лучше воспользоваться готовым инструментом от fail2ban для удаления ip адресов из блокировки.

Смотрим список активных jail'ов.

# fail2ban-client status
Status
|- Number of jail:	2
`- Jail list:	dovecot, postfix-sasl

Смотрим список заблокированный ip адресов в jail.

# fail2ban-client status postfix-sasl
Status for the jail: postfix-sasl
|- Filter
|  |- Currently failed:	1
|  |- Total failed:	169
|  `- File list:	/var/log/maillog
`- Actions
   |- Currently banned:	27
   |- Total banned:	86
   `- Banned IP list:	46.38.150.193 87.246.7.66 212.70.149.2 141.98.80.150 46.38.150.203 185.143.75.153 212.70.149.18 46.38.150.191 87.246.7.70 185.143.75.81 185.143.72.34 46.38.150.142 46.38.150.190 185.143.72.27 185.143.72.25 185.143.72.23 46.38.145.6 46.38.145.252 46.38.150.188 46.38.145.249 46.38.145.5 46.38.145.250 46.38.145.248 46.38.145.254 46.38.145.253 185.143.72.16 46.38.145.251

Теперь разбаним один из адресов в fail2ban:

# fail2ban-client set postfix-sasl unbanip 46.38.150.193
1

Если получите одну из этих ошибок:

2020-06-17 20:15:14,809 fail2ban [77578]: ERROR NOK: ('Invalid command (no get action or not yet implemented)',)
2020-06-17 20:13:02,078 fail2ban [77464]: ERROR NOK: ("Invalid command '46.38.150.193' (no set action or not yet implemented)",)
2020-06-17 20:11:48,132 fail2ban [77382]: ERROR   NOK: ('list index out of range',)

Значит у вас более старая версия fail2ban. Тогда нужно использовать другую команду для разбана ip адреса:

# fail2ban-client get postfix-sasl actionunban 46.38.150.193

Для проверки можете посмотреть на цепочки правил iptables, чтобы убедиться, в том, что адреса реально удалены из блокировки.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

На практике правила в fail2ban для dovecot особо не нужны. Пробивкой учетных записей занимаются боты, которые сразу пробивают smtp и imap порты. Все эти боты первым делом попадают в блокировку postfix и до правил dovecot просто не доходят. Но для полноты картины можно оставить и их, хотя бы для того, чтобы выявлять сотрудников с настроенными неактивными учетками.

С помощью fail2ban можно так же банить различные почтовые серверы, которые не проходят встроенные проверки postfix на спам. Но я обычно этого не делаю, так как бывают ложные срабатывания. Потом приходится лишнее время тратить на разбор полетов, так как он усложняется. Так стоит делать, если левые коннекты реально замедляют работу почтового сервера. Обычно это не добавляет каких-то серьезных проблем, в отличие от перебора паролей.

Онлайн курс по Linux

Если у вас есть желание освоить операционную систему Linux, не имея подходящего опыта, рекомендую познакомиться с онлайн-курсом Administrator Linux. Basic в OTUS. Курс для новичков, адаптирован для тех, кто только начинает изучение Linux. Обучение длится 4 месяца. Что даст вам этот курс:
  • Вы получите навыки администрирования Linux (структура Linux, основные команды, работа с файлами и ПО).
  • Вы рассмотрите следующий стек технологий: Zabbix, Prometheus, TCP/IP, nginx, Apache, MySQL, Bash, Docker, Git, nosql, grfana, ELK.
  • Умение настраивать веб-сервера, базы данных (mysql и nosql) и работа с сетью.
  • Мониторинг и логирование на базе Zabbix, Prometheus, Grafana и ELK.
  • Научитесь командной работе с помощью Git и Docker.
Смотрите подробнее программу по .

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

29 комментариев

  1. Аватар
    Александр

    jail.d и jail.local религия не позволила использовать? Ну зачем людей плохому-то учить? Белым по черному же написано, как следует поступать.

    • Zerox

      Почему плохому? Каждый настраивает так, как ему нравится. Иногда, мне удобнее держать все в общем конфиге, а не в разрозненных. Тот же конфиг dovecot я делаю единый. А конфиги вирт. хостов в nginx отдельными. Я делюсь своим практическим опытом. Если кому-то он не подходит, это не моя вина.

  2. Аватар
    Алексей

    Добрый день!
    Похоже, ошибка в конфиге /etc/fail2ban/filter.d/postfix-sasl.conf:
    Строка failregex = ^%(__prefix_line)swarning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$
    выдает ошибку при проверке "ERROR: No failure-id group in '^mail.neovo.ru(?:\[\])?\s*(?:\s+)?(?:\S+\s+)?(?:kernel:\s?\[ *\d+\.\d+\]:?\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?\S*(?:\(\S+\))?[\]\)]?:?|[\[\(]?\S*(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?warning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*={0,2})?\s*$'

    Исправил. Вместо [-._\w]+\[\] дописал [-._\w]+\[\] и проверка прошла.

    • Аватар
      Алексей

      Прошу прощения, треугольные скобки не добавились в мой пост. В последнем блоке квадратных скобок надо было прописать слово HOST в треугольных скобках ДО слэша.

  3. Аватар

    Спасибо за статью. Обнаружил, что в iptables создается правило, которое "слушает" только порт 25:

    Chain INPUT (policy DROP 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    7764 8303K fail2ban-postfix-sasl tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25

    А попытки подбора пароля к почте идут на порт 465, т.к. из интернета нашей почтой можно пользоваться только через SSL.

    Изменил в файле /etc/fail2ban/jail.conf следущее:

    [postfix-sasl]

    enabled = true
    filter = postfix-sasl
    backend = polling
    action = iptables-multiport[name=postfix-sasl, port="smtp,465,submission,imap,imaps,pop3,pop3s", protocol=tcp]
    logpath = /var/log/maillog
    bantime = 3600
    maxretry = 3
    findtime = 3600

    ...и заработало, стали блокироваться айпишники реально, а не так как раньше в fail2ban.log пишется IP-такой-то - Already Banned, при этом в maillog всё равно записывались попытки подбора пароля (хоть и в iptables эти IP были забанены). Да, я добавил может и лишние порты, но главное что там есть 465-й))).

    Может кому-то будет полезно. Если что у меня Centos 5 и Fail2ban v0.8.14.

    • Аватар

      Забыл написать, правило в iptables стало выглядеть так:

      7764 8303K fail2ban-postfix-sasl tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 25,465,587,143,993,110,995

    • Zerox

      Centos 5 - сурово :) Она не поддерживается уже лет 5 наверно.

      • Аватар

        Да знаю))) Вот сделал по Вашему мануалу новый почтовик на Centos 8, надеюсь скоро переведу всех на него))) Так что спасибо большое за Ваш сайт))).

        • Zerox

          Проблем быть не должно. Я переносил как раз с Centos 5 на 8. Формат базы данных для postfixadmin не сильно поменялся. Можно поставить старую версию, накатить бэкап со старого сервера и обновить postfixadmin штатно через его обновление. А письма просто как файлы переносятся.

          • Аватар

            Postfixadmin мы не использовали, у нас самописные база и веб морда для управления ящиками, но я её данные уже перевел в базу postfixadmin, осталось перенастроить DNS-записи, перенести файлы ящиков и самое страшное всем юзерам перенастроить почтовые клиенты (включить авторизацию и указать логин не короткий, а с @domain.com), а юзеров куча))).

  4. Аватар

    После настройки по этой статье столкнулся с тем, что fail2ban банит меня даже при верном логине/пароле от почтового ящика.
    Я так понимаю, это из-за того, что в логах есть записи:
    auth-worker(557102): Info: pam(info@site.ru,0.0.0.0,): pam_authenticate() failed: Authentication failure (Password mismatch?) (given password: blablabla)
    auth-worker(557102): Info: passwd(info@site.ru,0.0.0.0,): unknown user

    Избавился от бана так - в файле /etc/dovecot/conf.d/auth-system.conf.ext закомментировал эти строки полностью:
    passdb {
    driver = pam
    # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=]
    # [cache_key=] []
    #args = dovecot
    }
    userdb {
    #
    driver = passwd
    # [blocking=no]
    #args =

    # Override fields from passwd
    #override_fields = home=/home/virtual/%u
    }

    • Zerox

      Не понял, почему при верном пароле, появляются эта запись:

      pam_authenticate() failed: Authentication failure (Password mismatch?)

      • Аватар

        Наверное, потому, что PAM не настроен. Я не специалист, первый раз выделенный сервер на Linux настраиваю под сайт и почту.

  5. Аватар
    Александр

    Добрый день, подскажите пожалуйста, происходит такая история, IP банит а потоп сразу же разбанивает.
    конфиг

    [postfix-my]
    enabled> = true
    filter = postfix-my
    port = smtp,465,submission,imap,imaps,pop3,pop3s
    action = iptables[name=Postfix-my, port=smtp, protocol=tcp]
    logpath> = /var/log/maillog
    bantime> = 10800
    maxretry = 3
    findtime = 86400

    лог

    2020-07-15 18:21:42,991 fail2ban.filter [31775]: INFO [postfix-my] Found 212.43.88.198 - 2020-07-14 18:33:15
    2020-07-15 18:21:42,992 fail2ban.filter [31775]: INFO [postfix-my] Found 212.43.88.198 - 2020-07-14 18:33:15
    2020-07-15 18:21:42,992 fail2ban.filter [31775]: INFO [postfix-my] Found 212.43.88.198 - 2020-07-14 18:33:15
    2020-07-15 18:21:42,992 fail2ban.filter [31775]: INFO [postfix-my] Found 212.43.88.198 - 2020-07-14 18:33:15
    2020-07-15 18:21:42,992 fail2ban.filter [31775]: INFO [postfix-my] Found 212.43.88.198 - 2020-07-14 18:33:15
    2020-07-15 18:21:42,992 fail2ban.filter [31775]: INFO [postfix-my] Found 212.43.88.198 - 2020-07-14 18:33:15
    2020-07-15 18:21:43,324 fail2ban.actions [31775]: NOTICE [postfix-my] Ban 212.43.88.198
    2020-07-15 18:21:45,417 fail2ban.actions [31775]: NOTICE [postfix-my] Unban 212.43.88.198
    2020-07-15 18:56:46,653 fail2ban.filter [31775]: INFO [postfix-my] Found 37.49.230.175 - 2020-07-15 18:56:46

    • Zerox

      Тут судя по всему ошибка:

      bantime> = 10800

      Символ > тут откуда?

      • Аватар
        Александр

        > в конфиге этого символа нет, это табуляция в mcedit

      • Аватар
        Александр

        [postfix-my]
        enabled = true
        filter = postfix-my
        port = smtp,465,submission,imap,imaps,pop3,pop3s
        action = iptables[name=Postfix-my, port=smtp, protocol=tcp]
        logpath = /var/log/maillog
        bantime = 10800
        maxretry = 3
        findtime = 86400

  6. Аватар
    Михаил

    Добрый день,

    Спасибо за статью!

    У Вас регулярка в примере конфига для postfix отличается от регулярки, приведенной выше.
    В конфиге указано

    [-._\w]+\[\]: SASL

    a в изначальном выражении -

    [-._\w]+\[\]: SASL 

    Соответственно выражение в конфиге выдает ошибку.

    • Аватар
      Михаил

      Хм, из комментария нужную часть вырезало :)

      [-._\w]+\[<HOST>\]: SASL

      • Zerox

        Движок съедает некоторые спецсимволы. В комментах из-за этого регулярки не получается писать.

  7. Аватар

    Спасибо за статью.

    У себя настроил связку postfix + dovecot + sogo + solr + tika (+ tesseract для распознавания текста во вложениях) . Postfix и dovecot слушают только localhost - все общение через веб. Случай частный, конечно, но тем самым исключил атаки на них извне. А sogo сама умеет блочить при неверных попытках аутен-ции (настраивается в .conf -файле).

    • Zerox

      Было бы здорово использовать только веб доступ, но если он не уровня gmail или яндекс, то все не очень удобно. Я вижу, что чаще всего пользователи, знакомые с Outlook из пакета офиса, предпочитают его. Особенно если с почтой идет плотная и интенсивная работа.

  8. Аватар

    Спасибо за статью, подскажите почему так получается?
    Debian 10
    Iptables
    Chain f2b-Postfix-sasl (1 references)
    pkts bytes target prot opt in out source destination
    8 320 REJECT all -- * * 178.33.107.212 0.0.0.0/0 reject-with icmp-port-unreachable
    0 0 REJECT all -- * * 87.246.7.74 0.0.0.0/0 reject-with icmp-port-unreachable
    20 1200 REJECT all -- * * 87.246.7.70 0.0.0.0/0 reject-with icmp-port-unreachable
    .....
    Chain f2b-dovecot-pop3imap (1 references)
    pkts bytes target prot opt in out source destination
    0 0 REJECT all -- * * 87.246.7.74 0.0.0.0/0 reject-with icmp-port-unreachable
    484 43462 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0

    Но при этом в логе fail2ban:
    2020-06-18 14:04:50,126 fail2ban.actions [175128]: WARNING [dovecot] 87.246.7.74 already banned
    2020-06-18 14:04:51,142 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:04:51
    2020-06-18 14:06:42,690 fail2ban.filter [175128]: INFO [dovecot] Found 87.246.7.74 - 2020-06-18 14:06:42
    2020-06-18 14:06:44,266 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:06:44
    2020-06-18 14:06:44,279 fail2ban.actions [175128]: WARNING [postfix-sasl] 87.246.7.74 already banned
    2020-06-18 14:07:19,175 fail2ban.filter [175128]: INFO [dovecot] Found 87.246.7.74 - 2020-06-18 14:07:19
    2020-06-18 14:07:21,179 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:07:21
    2020-06-18 14:09:08,988 fail2ban.filter [175128]: INFO [dovecot] Found 87.246.7.74 - 2020-06-18 14:09:08
    2020-06-18 14:09:09,241 fail2ban.actions [175128]: WARNING [dovecot] 87.246.7.74 already banned
    2020-06-18 14:09:10,491 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:09:10

    Конфигурация:
    [postfix-sasl]
    enabled = true
    filter = postfix[mode=auth]
    port = smtp,465,submission,imap,imaps,pop3,pop3s
    action = iptables[name=Postfix-smtp, port=smtp, protocol=tcp]
    logpath = /var/log/mail.log
    bantime = 180m
    maxretry = 3
    findtime = 60m

    [dovecot]
    enabled = true
    port = pop3,pop3s,imap,imaps,submission,465,sieve
    filter = dovecot
    action = iptables-multiport[name=dovecot-pop3imap,port="pop3,pop3s,imap,imaps", protocol=tcp]
    logpath = /var/log/dovecot/info.log
    maxretry = 3
    findtime = 60m
    bantime = 180m

    Ip попадает в бан на iptables но не банится по факту. Iptables настраивал так же по Вашей статье, добавил только проброс портов для почтовых сервисов.

    • Zerox

      Не понял, в чем вопрос и проблема? Какой ip не банится?

      • Аватар

        Вот этот IP 87.246.7.74 уже добавлен в цепочку Chain f2b-Postfix-sasl и в Chain f2b-dovecot-pop3imap, но при этом в логе fail2ban он продолжает мелькать:
        WARNING [postfix-sasl] 87.246.7.74 already banned
        WARNING [dovecot] 87.246.7.74 already banned
        несмотря на то, что в iptables он уже вписан

        • Аватар

          2020-06-18 13:59:26,468 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 13:59:26
          2020-06-18 13:59:26,930 fail2ban.actions [175128]: WARNING [postfix-sasl] 87.246.7.74 already banned
          2020-06-18 14:00:01,213 fail2ban.filter [175128]: INFO [dovecot] Found 87.246.7.74 - 2020-06-18 14:00:01
          2020-06-18 14:00:03,126 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:00:03
          2020-06-18 14:01:48,181 fail2ban.filter [175128]: INFO [dovecot] Found 87.246.7.74 - 2020-06-18 14:01:48
          2020-06-18 14:01:48,656 fail2ban.actions [175128]: NOTICE [dovecot] Ban 87.246.7.74
          2020-06-18 14:01:50,251 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:01:50
          2020-06-18 14:02:23,874 fail2ban.filter [175128]: INFO [dovecot] Found 87.246.7.74 - 2020-06-18 14:02:23
          2020-06-18 14:02:25,377 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:02:25
          2020-06-18 14:02:25,955 fail2ban.actions [175128]: WARNING [postfix-sasl] 87.246.7.74 already banned
          2020-06-18 14:04:20,704 fail2ban.filter [175128]: INFO [dovecot] Found 87.246.7.74 - 2020-06-18 14:04:20
          2020-06-18 14:04:22,206 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:04:22
          2020-06-18 14:04:49,608 fail2ban.filter [175128]: INFO [dovecot] Found 87.246.7.74 - 2020-06-18 14:04:49
          2020-06-18 14:04:50,126 fail2ban.actions [175128]: WARNING [dovecot] 87.246.7.74 already banned
          2020-06-18 14:04:51,142 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:04:51
          2020-06-18 14:06:42,690 fail2ban.filter [175128]: INFO [dovecot] Found 87.246.7.74 - 2020-06-18 14:06:42
          2020-06-18 14:06:44,266 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:06:44
          2020-06-18 14:06:44,279 fail2ban.actions [175128]: WARNING [postfix-sasl] 87.246.7.74 already banned
          2020-06-18 14:07:19,175 fail2ban.filter [175128]: INFO [dovecot] Found 87.246.7.74 - 2020-06-18 14:07:19
          2020-06-18 14:07:21,179 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:07:21
          2020-06-18 14:09:08,988 fail2ban.filter [175128]: INFO [dovecot] Found 87.246.7.74 - 2020-06-18 14:09:08
          2020-06-18 14:09:09,241 fail2ban.actions [175128]: WARNING [dovecot] 87.246.7.74 already banned
          2020-06-18 14:09:10,491 fail2ban.filter [175128]: INFO [postfix-sasl] Found 87.246.7.74 - 2020-06-18 14:09:10

        • Zerox

          А у вас выше нигде нет правила в iptables, по которому может проходить разрешение для этого IP? Подозрительны нулевые счетчики на правилах блокировки для этого адреса. Запросы до правил блокировки вообще не доходят, попадая в резрешенные где-то выше по списку.

          • Аватар

            Проверил, в правилах ничего необычного, даже сравнил с вашими построчно. Сделал сброс всех цепочек, применил скрипт и рестартнул f2b ip в логах больше не появлялся и на ipt счетчик побежал.

            • Zerox

              Возможно этот ip подключался через правило с установленным соединением. А после сбора правил его отключило и больше подключиться не смог.

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

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.