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

synner

  • Участник
  • *****
  • Публикации: 17
    • Профил
Postfix SMTP Relay - sender_canonical_maps
« -: Май 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

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

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

remotexx

  • Участник
  • *****
  • Публикации: 747
    • Профил
Re: Postfix SMTP Relay - sender_canonical_maps
« Отговор #1 -: Май 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
« Последна редакция: Май 05, 2018, 16:46 от remotexx »
Активен

synner

  • Участник
  • *****
  • Публикации: 17
    • Профил
Re: Postfix SMTP Relay - sender_canonical_maps
« Отговор #2 -: Май 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 директиви? :)
« Последна редакция: Май 05, 2018, 19:12 от synner »
Активен

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

synner

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

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

Naka

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

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

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

Тези  ? Заради   greedy  то ли са сложени. По добре да се напише израза без тях.
« Последна редакция: Май 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 -: Май 05, 2018, 20:14 »
Привет, Naka

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

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

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

remotexx

  • Участник
  • *****
  • Публикации: 747
    • Профил
Re: Postfix SMTP Relay - sender_canonical_maps
« Отговор #6 -: Май 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 -: Май 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 1215 Последна публикация Сеп 25, 2004, 18:31
от berov
Postfix relay denial
Хардуерни и софтуерни проблеми
Vik 6 1968 Последна публикация Май 06, 2006, 22:30
от Vik
Relay с postfix
Настройка на програми
tony1975 3 1490 Последна публикация Фев 13, 2007, 17:57
от Ali Nebi
Postfix + postfix admin + courier + sasl
Хардуерни и софтуерни проблеми
TQ_ 1 2518 Последна публикация Апр 05, 2007, 12:44
от TQ_
Postfix relay
Хардуерни и софтуерни проблеми
morbid_viper 12 3109 Последна публикация Юни 26, 2013, 12:31
от laskov