Назад | Перейти на главную страницу

Как обнаружить попытки SMTP AUTH в Fail2Ban?

У меня есть тюрьма Fail2Ban, которая отслеживает неудачные SASL-аутентификации на моем SMTP-сервере Postfix. Когда это происходит, /var/log/mail.log содержит эти три строки:

postfix/smtpd[32591]: connect from unknown[x.x.x.x]
postfix/smtpd[32591]: warning: unknown[x.x.x.x]: SASL LOGIN authentication failed: authentication failure
postfix/smtpd[32591]: disconnect from unknown[x.x.x.x]

А Fail2Ban фильтрует строку с предупреждением: если он найден, IP считается для запрета.

Недавно я изменил Postfix, чтобы AUTH был доступен только через TLS (используя опцию smtpd_tls_auth_only). Как следствие, предупреждающая строка больше не генерируется, когда кто-то пытается пройти аутентификацию без TLS:

postfix/smtpd[22469]: connect from unknown[x.x.x.x]
postfix/smtpd[22469]: disconnect from unknown[x.x.x.x]

Это означает, что Fail2Ban больше не может отслеживать все попытки аутентификации SASL. Как я могу это сделать?

Решение, которое я придумал, - сделать SMTP более подробным (добавив -v к smtpd в /etc/postfix/master.cf) и разобрать соответствующие строки, но моя проблема в том, что -v опция делает журналы слишком подробными:

postfix/smtpd[23185]: connect from unknown[x.x.x.x]
postfix/smtpd[23185]: match_list_match: x.x.x.x: no match
postfix/smtpd[23185]: match_list_match: x.x.x.x: no match
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? 127.0.0.0/8
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? [::ffff:127.0.0.0]/104
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? [::1]/128
postfix/smtpd[23185]: match_list_match: x.x.x.x: no match
postfix/smtpd[23185]: send attr ident = smtp:x.x.x.x
postfix/smtpd[23185]: > unknown[x.x.x.x]: 220 example.org ESMTP Postfix (Debian/GNU)
postfix/smtpd[23185]: < unknown[x.x.x.x]: EHLO User
postfix/smtpd[23185]: match_list_match: x.x.x.x: no match
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-example.org
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-PIPELINING
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-SIZE 10240000
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-VRFY
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-ETRN
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-STARTTLS
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-ENHANCEDSTATUSCODES
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250-8BITMIME
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250 DSN
postfix/smtpd[23185]: < unknown[x.x.x.x]: RSET
postfix/smtpd[23185]: > unknown[x.x.x.x]: 250 2.0.0 Ok
postfix/smtpd[23185]: < unknown[x.x.x.x]: AUTH LOGIN
postfix/smtpd[23185]: > unknown[x.x.x.x]: 503 5.5.1 Error: authentication not enabled
postfix/smtpd[23185]: < unknown[x.x.x.x]: QUIT
postfix/smtpd[23185]: > unknown[x.x.x.x]: 221 2.0.0 Bye
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? 127.0.0.0/8
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? [::ffff:127.0.0.0]/104
postfix/smtpd[23185]: match_hostaddr: x.x.x.x ~? [::1]/128
postfix/smtpd[23185]: match_list_match: x.x.x.x: no match
postfix/smtpd[23185]: send attr ident = smtp:x.x.x.x
postfix/smtpd[23185]: disconnect from unknown[x.x.x.x]

Априори мне нужно только отфильтровать authentication not enabled линия. Можно ли сделать так, чтобы служба SMTP сообщала о запросах аутентификации, не добавляя полные подробные сообщения? В идеале мой mail.log файл будет содержать только:

postfix/smtpd[32591]: connect from unknown[x.x.x.x]
postfix/smtpd[32591]: warning: unknown[x.x.x.x]: authentication not enabled
postfix/smtpd[32591]: disconnect from unknown[x.x.x.x]

Возможно ли это? Если да, то как? Спасибо,

Ваша идея добавления -v к smtpd помог мне решить эту проблему. Я использую Debian.

Сначала я создал /etc/fail2ban/jail.local:

[postfix]
enabled = true
logpath = /var/log/mail.log
bantime = 86400
findtime = 86400
maxretry = 2

Это говорит fail2ban смотреть /var/log/mail.log с максимум 2 попытками в течение 24 часов, что также приведет к бану на 24 часа.

Затем я скопировал /etc/fail2ban/filter.d/postfix.conf к /etc/fail2ban/filter.d/postfix.local, и добавил эту строку:

failregex = ^%(__prefix_line)s> \S+\[<HOST>\]: 503 5\.5\.1 .*$

Это сработает при:

postfix/smtpd[23185]: > unknown[x.x.x.x]: 503 5.5.1 Error: authentication not enabled