Автор Тема: Postfix SMTP Relay - sender_canonical_maps  (Прочетена 3138 пъти)

synner

  • Напреднали
  • *****
  • Публикации: 17
    • Профил
Postfix SMTP Relay - sender_canonical_maps
« -: May 05, 2018, 01:54 »
Здравейте, Колеги

Имам няколко тестови сървъра във вътрешна 10.0.0.0/24 мрежа.
На gateway-я съм си вдигнал Postfix за да мога да пращам мейли навън като си имам външен SMTP сървър, към който да пращам пощата.

На всеки сървър има всякакви тестови приложения, които пращат разни нотификации и репорти по мейла.
Всеки си е set-нал някакъв (полу-)random sender mail address, като повечето са във формата на: <app>@lab.local, но може и да е всичко друго.

Въпросът ми е как да конфигурирам Postfix (предполагам със sender_canonical_maps) да прави следния rewrite в SMTP envelope-а?

<app>@<randomlocal.domain> към <app>.<randomlocal.domain>@mylegitinternetdomain.com

Recipient-ите в SMTP envelope-а и header-а не трябва да се применят.

Докарал съм го до тук:
/etc/postfix/main.cf
Код:
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
smtpd_helo_required = yes

inet_interfaces = 127.0.0.1, 10.0.0.1
inet_protocols = ipv4

relayhost = [i][smtp.myisp.com][/i]

myhostname = mail.lab.local
mydomain = lab.local

myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

mynetworks_style = subnet
mynetworks = 127.0.0.0/8, 10.0.0.0/24

append_at_myorigin = no
append_dot_mydomain = no

local_header_rewrite_clients = permit_inet_interfaces, permit_mynetworks, reject
remote_header_rewrite_domain = domain.invalid

masquerade_domains = $mydomain

sender_canonical_classes = envelope_sender
sender_canonical_maps = regexp:/etc/postfix/canonical_maps_sender

/etc/postfix/canonical_maps_sender
Код:
if !/@mylegitinternetdomain\.com/i
/^.*?([^\s<]+?)@([^\s>]+?)>?\s*$/i      ${1}.${2}@mylegitinternetdomain.com
endif

Но regex-а нещо не ми се получава и в Inbox-а си от ISP-то получавам мейлите като от: "lab.local"@mylegitinternetdomain.com

Моля за помощ!
Благодаря предварително!
« Последна редакция: May 05, 2018, 12:11 от synner »
Активен

Прост народ - слаба държава!

remotexx

  • Напреднали
  • *****
  • Публикации: 3210
    • Профил
Re: Postfix SMTP Relay - sender_canonical_maps
« Отговор #1 -: May 05, 2018, 16:44 »
1) не мисля че си задал правилно формата на адреса - обик. формата е:
 Име Фамилия <emailname@somerandomservice.com>

2) ако мислиш че си го задал правилно то имаш бъг при групирането
https://regexr.com/
<app>@lab.local
група1: app>
група2: lab.local

3) като не можеш да се оправиш с изразите /и ако формата който си дал все пак е правилния/ що не заместиш само '@' -> '.' и да добавиш @mylegitinternetdomain.com
и ще стане /и без регулярни изрази/
<app>@<randomlocal.domain> към <app>.<randomlocal.domain>@mylegitinternetdomain.com
« Последна редакция: May 05, 2018, 16:46 от remotexx »
Активен

synner

  • Напреднали
  • *****
  • Публикации: 17
    • Профил
Re: Postfix SMTP Relay - sender_canonical_maps
« Отговор #2 -: May 05, 2018, 19:10 »
Привет, remotexx

По точка 1):
Ок, прав си, некоректно написах заданието. Използвах триъгълните скоби като placeholders, но в SMTP те си имат специално значение.
С tcpdump виждам, че SMTP envelope-а ми буквално изглежда така:
Код:
MAIL FROM:<appsrv1@lab.local>

А след DATA командата мейл клиента може да блъска в header-а каквото иска и никой mail server по пътя не би се заял (в общия случай).
Валидно формати могат да са:И вероятно и други.
В моя случай тези header-и след DATA командата не ги пипаме.

По точка 2):
Както изглежда SMTP envelope-а ми горе с tcpdump, мисля че regex-а ми е верен?

По точка 3):
Звучи супер, но би ли го написал с Postfix conf директиви? :)
« Последна редакция: May 05, 2018, 19:12 от synner »
Активен

Прост народ - слаба държава!

synner

  • Напреднали
  • *****
  • Публикации: 17
    • Профил
Re: Postfix SMTP Relay - sender_canonical_maps
« Отговор #3 -: May 05, 2018, 19:16 »
Наистина нещо може да не ми е наред с regex-а защото към external SMTP на ISP летят пакет със следния envelope:
Цитат
MAIL FROM:<.lab.local@myexternaldomain.com>
Активен

Прост народ - слаба държава!

Naka

  • Напреднали
  • *****
  • Публикации: 3395
    • Профил
Re: Postfix SMTP Relay - sender_canonical_maps
« Отговор #4 -: May 05, 2018, 20:09 »
Има много хубави online regex тестери. Потърси някой. Даже и за php ще стане за щото си мисля че ползват еднакъв енжин.

Тестваш тестваш он лине докато се получи правилен израз.

И на мен нещо не ми харесва израза. Сам ли си писал или си го копирал отнякъде? Имам горчив опит с копирани от нета изрази.

Тези  ? Заради   greedy  то ли са сложени. По добре да се напише израза без тях.
« Последна редакция: May 05, 2018, 20:13 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

synner

  • Напреднали
  • *****
  • Публикации: 17
    • Профил
Re: Postfix SMTP Relay - sender_canonical_maps
« Отговор #5 -: May 05, 2018, 20:14 »
Привет, Naka

Сам съм си го писал и според разни тестери ми хваща правилно mail адресите, със или без триъгълни скоби. Може и проблемът да е в това как Postfix обработва SMTP envelopes. Именно за това пиша във форума, Postfix conf ми е слаб. Надявам се да попадна на Postfix guru.

"?" са именно за да направя match-ването non-greedy, демек lazy, за да не ми изяжда юзъра и домейна около "@".
« Последна редакция: May 05, 2018, 20:16 от synner »
Активен

Прост народ - слаба държава!

remotexx

  • Напреднали
  • *****
  • Публикации: 3210
    • Профил
Re: Postfix SMTP Relay - sender_canonical_maps
« Отговор #6 -: May 06, 2018, 04:00 »
колега не съм запознат много с постфикса, но с така дадения пример израза го разпределя правилно, защо не ти се получава на изхода не знам
но на прима виста от официалната страница ги мачват спрямо целия хедър а ти само спрямо ст-те
..да не да мачваш нещо друго т.е. друг ред напр. името на сървъра вместо имейла
виж там ако ги добавиш т.е. да мачаваш спрямо целия хедър дали няма да се оправи

според това
http://www.postfix.org/regexp_table.5.html
хедъри не се мачват като тебе - само стойността /^.*?([^\s<]+?)@([^\s>]+?)>?\s*$/i
ами требе целия хедър да се фане и се мачват така
EXAMPLE HEADER FILTER MAP
       # These were once common in junk mail.
       /^Subject: make money fast/     REJECT
       /^To: friend@public\.com/       REJECT
т.е. твоето (за да не мачва който ред му падне) трябва да стане
/^MAIL FROM:.*?([^\s<]+?)@([^\s>]+?)>?\s*$/i

така поне си мисля аз...
Активен

synner

  • Напреднали
  • *****
  • Публикации: 17
    • Профил
Re: Postfix SMTP Relay - sender_canonical_maps
« Отговор #7 -: May 06, 2018, 14:59 »
RegEx процесора на Postfix е някакъв бъгав/странен. Явно недолюбва сложните regex.
С милион тестове and back to basics, постепенно усложнявах regex, докато накрая не стана с:

Цитат
root@mailsrv:/etc/postfix # cat canonical_maps_sender
if !/.+?@myinetdomain\.com/i
/(.+?)@(.+)/i           ${1}\.${2}@myinetdomain\.com
endif
Ще направя още малко тестове и вероятно ще затворя темата!
Благодаря на отзовалите се!
Активен

Прост народ - слаба държава!

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
postfix relay how
Настройка на програми
berov 2 1990 Последна публикация Sep 25, 2004, 18:31
от berov
Postfix relay denial
Хардуерни и софтуерни проблеми
Vik 6 3034 Последна публикация May 06, 2006, 22:30
от Vik
Relay с postfix
Настройка на програми
tony1975 3 2441 Последна публикация Feb 13, 2007, 17:57
от Ali Nebi
Postfix + postfix admin + courier + sasl
Хардуерни и софтуерни проблеми
TQ_ 1 3822 Последна публикация Apr 05, 2007, 12:44
от TQ_
Postfix relay
Хардуерни и софтуерни проблеми
morbid_viper 12 4993 Последна публикация Jun 26, 2013, 12:31
от laskov