2016-03-20 13 views
1

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

Я хотел бы написать фильтр для 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, что будет соответствовать всем «соединиться с», который включал «.TOP» TLD?

Я пытаюсь работать с этим на основе моего рабочего фильтра postfix-sasl (ниже), но мое регулярное выражение 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 ] 

См a demo on regex101.com.

+0

Спасибо за ответ. Выполнение этого в отношении моих журналов с помощью «grep» завершается неудачно (нет результатов), но «grep -P» работает отлично. Я не уверен, как fail2ban обрабатывает совпадение (независимо от того, совместим ли это с PCRE?). Я создал фильтр с этим регулярным выражением, и я получаю сообщение об ошибке: «Нет» группы хостов в [regex] ». Поэтому я думаю, что fail2ban имеет некоторые дополнительные требования, кроме простого регулярного выражения. Поэтому у меня есть еще несколько исследований. Еще раз спасибо! – cmpreshn

+0

@cmpreshn: Вы могли бы также согласиться с ['connect. +? \. Top \ [([. \ D] +) \]'] (https://regex101.com/r/yI2vC2/2) – Jan