Доброго времени суток, подскажите плиз как создать правильный header_cheks (что-то не въезжается в pcre-регулярные выражения однако.. )цель - проанализировать заголовок TO: надо пропустить почту в определенные домены в адреса либо postmaster@ либо support@ либо набор цифр (цифры могут начинаться с +) - все остальное в эти домены - зарежектить (в другие домены - пропустить)
на perl это получается отфильтровать:
$res !~ /\:\s<(postmaster|support|(\+)?(?>\d+))@((E|e)(2|(to))myplace|e2m\.(S|s)omewhere|email2myplace|te?xt(M|m)e)/
(отбрасывается все что не совпадает с темплэйтом - в перле все ок)Как описать это же в синтаксисе понятном pcre?
Заранее огромное спасибо!
>Заранее огромное спасибо!юзайте тулсу prce_test для проверки выражений
>
>>Заранее огромное спасибо!
>
>юзайте тулсу prce_test для проверки выраженийСпасибо за совет, обязательно воспользуюсь
pcre это _perl_ compatible regular expressions. Различия между ними и собственно perl минимальны. Самая частая проблема при переходе с perl на pcre это правила экранирования, убедитесь что вы правильно экранируете для postfix и/или покажите соответствующую строку конфига, если не уверены.
Кстати ваш регекс на perl несколько корявый, как вариант опишите _четко_ все условия и мы вам дадим более вменяемый вариант.
:) корявый не то слово (самой смотреть противно..)
условия - надо одним (желательно) разом отсортировать примерно так:
OK для аккаунтов
postmaster
support
(+)12345457347 (количество цифр варьируется, "+" появляется далеко не в каждом варианте)
в доменах
e2myplace.*
e2m.somewhere.*
email2myplace.*
txtme.*
textme.*(.* в хвосте - так как могут быть и .net и .com и тп)
REJECT для любых других вариантов аккаунтов в этих же доменах
OK для любых других аккаунтов в любых других доменаха строка конфига (пока что) ~такая же как и кривое перловое выражение в предыдущем посте
/etc/postfix/header_checks:
!/^To: (postmaster|support|(\+)?\d+)@(e(2|(to))myplace|e2m\.somewhere|email2myplace|te?xtme)/ WARN
Регекс:
(?:postmaster|support|\+?\d+)\@(?:e(?:2|to)myplace|e2m\.somewhere|email2myplace|te?xtme)\.[A-z]{2,3}Но тут нужно учесть необходимость ограничений по краям, например \s+ в начале и $(конец строки) в конце. Иначе под него попадет что-то вроде asdf1@txtme.wtf.somedomain.com
Не стоит забывать, что верхний регистр является допустимым в заголовках, а значит желательна опция i после закрывающего / или в конструкции вида (?i:шаблон). Также адрес может быть как в виде "To: email" так и "To: имя<email>", причем в To разрешается перечислять много адресов через запятую.
Ну и наконец главное, возможно у вас действительно задача проверки заголовков, но в большинстве случаев нужна проверка to: из конверта и не при локальной доставке, а еще на этапе smtp сессии дабы не порождать рикошет. Обычно MTA при принятии решений смотрит только на конверт, а в заголовке To: можно прописать вообще все что угодно.
angra, биг-биг спасибо, обязательно попробую!
и вот абсолютно точно - ведь не стого начала - именно конверт нужно проверять а не хедеры
так что сейчас подобный регэксп (предложенный - сечас попробую) помещен в /etc/postfix/recipient.regexp:в /etc/postfix/main.cf:
smtpd_recipient_restrictions =
warn_if_reject check_recipient_access regexp:/etc/postfix/recipient.regexp,
permit_mynetworks,
reject_unauth_destination,
warn_if_reject reject_unknown_sender_domain,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
permit
(сидит перед permit_mynetworks, поскольку и из своих сеток отосланное по ошибке не должно пролезать..)
вопрос кстати - а я дыру в секурити я не сделаю таким образом? все что не проанализировано этим правилом - куда попадает: в (ОК + --> к адресату) или по дальнейшему списку пойдет оцениваться?
нет.. все равно ничего не понимаю..
pcretest не жалуется на ситаксис - типа все ок
но заданный шаблон не работает.. пробую самое примитивное:/^To: support@/ WARN some errors
при этом ок - ожидаемый результат достигнут:
Aug 11 09:11:33 test-shaggy postfix/pickup[5643]: D10C1481CE: uid=0 from=<root>
Aug 11 09:11:33 test-shaggy postfix/cleanup[5650]: D10C1481CE: message-id=<20090810211133.D10C1481CE@myhost.e2myplace.com>
Aug 11 09:11:33 test-shaggy postfix/nqmgr[5644]: D10C1481CE: from=<root@myhost.e2myplace.com>, size=313, nrcpt=1 (queue active)
Aug 11 09:11:33 test-shaggy postfix/local[5652]: D10C1481CE: to=<taphy@myhost.e2myplace.com>, orig_to=<postmaster@myhost.e2myplace.com>, relay=local, delay=0, status=sent (mailbox)Aug 11 09:11:35 test-shaggy postfix/pickup[5643]: CEAFF481CE: uid=0 from=<root>
Aug 11 09:11:35 test-shaggy postfix/cleanup[5650]: CEAFF481CE: warning: header To: support@myhost.e2myplace.com from local; from=<root@myhost.e2myplace.com> to=<support@myhost.e2myplace.com>: some errors
Aug 11 09:11:35 test-shaggy postfix/cleanup[5650]: CEAFF481CE: message-id=<20090810211135.CEAFF481CE@myhost.e2myplace.com>
Aug 11 09:11:35 test-shaggy postfix/nqmgr[5644]: CEAFF481CE: from=<root@myhost.e2myplace.com>, size=310, nrcpt=1 (queue active)
Aug 11 09:11:35 test-shaggy postfix/local[5652]: CEAFF481CE: to=<support@myhost.e2myplace.com>, relay=local, delay=0, status=sent (mailbox)после попытки инвертировать шаблон - чушь какая-то - вываливается warning на header Received, но проверка ЭТОГО хедера не задана!! (подскажите плиз как же это вообще работает в таком случае? где я вру?):
!/^To: support@/ WARN some errorsAug 11 09:24:36 test-shaggy postfix/pickup[5677]: 1EDCD481CE: uid=0 from=<root>
Aug 11 09:24:36 test-shaggy postfix/cleanup[5697]: 1EDCD481CE: warning: header Received: by myhost.e2myplace.com (Postfix, from userid 0)??id 1EDCD481CE; Tue, 11 Aug 2009 09:24:35 +1200 (NZST) from local; from=<root@myhost.e2myplace.com to=<taphy@myhost.e2myplace.com>: some errors
Aug 11 09:24:36 test-shaggy postfix/cleanup[5697]: 1EDCD481CE: warning: header To: taphy@myhost.e2myplace.com from local; from=<root@myhost.e2myplace.com> to=<taphy@myhost.e2myplace.com>: some errors
Aug 11 09:24:36 test-shaggy postfix/cleanup[5697]: 1EDCD481CE: message-id=<20090810212435.1EDCD481CE@myhost.e2myplace.com>
Aug 11 09:24:36 test-shaggy postfix/nqmgr[5678]: 1EDCD481CE: from=<root@myhost.e2myplace.com>, size=308, nrcpt=1 (queue active)
Aug 11 09:24:36 test-shaggy postfix/local[5699]: 1EDCD481CE: to=<taphy@myhost.e2myplace.com>, relay=local, delay=1, status=sent (mailbox)
Aug 11 09:20:54 test-shaggy postfix/pickup[5677]: DF529481CE: uid=0 from=<root>
Aug 11 09:20:54 test-shaggy postfix/cleanup[5685]: DF529481CE: warning: header Received: by myhost.e2myplace.com (Postfix, from userid 0)??id DF529481CE; Tue, 11 Aug 2009 09:20:54 +1200 (NZST) from local; from=<root@myhost.e2myplace.com> to=<support@myhost.e2myplace.com>: some errors
Aug 11 09:20:54 test-shaggy postfix/cleanup[5685]: DF529481CE: message-id=<20090810212054.DF529481CE@myhost.e2myplace.com>
Aug 11 09:20:54 test-shaggy postfix/nqmgr[5678]: DF529481CE: from=<root@myhost.e2myplace.com>, size=310, nrcpt=1 (queue active)
Aug 11 09:20:55 test-shaggy postfix/local[5687]: DF529481CE: to=<support@myhost.e2myplace.com>, relay=local, delay=1, status=sent (mailbox)
понятно что при добавлении /^Received:/ IGNORE - все становится ок.. но я не вижу в хедерах письма ничего что могло бы заставить срабатывать /^To:/ шаблон на проверке Received: ..