Regex для fail2ban для фильтрации почты из определенного домена верхнего уровня

Предыстория: я использую сервер Plesk CentOS 6.7 с более чем 30 доменами. Я получаю огромное количество спама от определенного домена верхнего уровня (в данном случае.top). Я использую SpamAssassin и использую список RBL (xbl.spamhaus.org). SpamAssassin помечает большинство этих сообщений как спам, но достаточно того, что мой сервер получает скорость, ограниченную почтовыми серверами Google (из-за того, что некоторые учетные записи моего пользователя пересылаются в Gmail). Я получаю ZERO легальную электронную почту с этого домена, и использование памяти в последнее время возросло на несколько процентов, поэтому я пытаюсь сэкономить некоторые ресурсы и улучшить репутацию своего сервера, блокируя эти сообщения еще до того, как они попадут в Postfix.

Я хотел бы написать фильтр для fail2ban, который бы соответствовал соединениям из этого TLD, и запретил бы соответствующие IP-адреса.

Вот примеры записей журнала:

Mar 20 03:12:43 mydomain postfix/smtpd[6557]: connect from whatevermonkey.top[66.199.245.168]
Mar 20 05:07:38 mydomain postfix/smtpd[13299]: connect from someonecat.top[216.169.126.67]

Так может ли кто-нибудь помочь с REGEX, который я мог бы подключить к fail2ban, который бы соответствовал всем соединениям "connect from", включая TLD ".top"?

Я пытался работать над этим на основе моего рабочего фильтра postfix-sasl (ниже), но мой regex chi недостаточно силен... Вот мой рабочий фильтр для postfix-sasl, который соответствует неудачным попыткам входа в систему:

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

Опять же, я просто хочу сопоставить IP-адреса, которым предшествует "somespammyserver.top". Любая помощь с благодарностью.

1 ответ

Нечто подобное может помочь:

connect from [\w.]+\.top\[([.\d]+)\]
# look for connect from literally
# followed by \w = a-z0-9_ and . greedily
# followed by .top[
# capture everything that is a digit or a dot into the first group
# (hence the ())
# followed immediately by a closing bracket ]

Смотрите демо на regex101.com.

Другие вопросы по тегам