Jak wymusić nadawcę adresu „logged-in-user@example.org” w Postfix?


15

Skonfigurowałem serwer Postfix z SMTP AUTH (STARTTLS na porcie 587). Wszyscy moi użytkownicy są w domenie „example.org”. Chcę wymusić, aby adres nadawcy był „logged-in-user@example.org”.

Dowiedziałem się, że można to osiągnąć za pomocą opcji main.cf

smtpd_sender_restrictions = reject_sender_login_mismatch, ...
smtpd_sender_login_maps = hash:/etc/postfix/smtpd_sender_login_maps

z plikiem login_maps, takim jak:

a@example.org a
b@example.org b
c@example.org c
...

(patrz także Blokowanie fałszowania adresów nadawców za pomocą SMPT AUTH ), ale oznaczałoby to, że będę musiał edytować plik login_maps za każdym razem, gdy mam nowego użytkownika. Nie potrzebuję tak elastycznego mapowania: zawsze powinien to być „logged-in-user@example.org”. Czy jest łatwiejsza opcja?

Odpowiedzi:


14

Najpierw sprawdź, czy twoja instalacja Postfix obsługuje pcre, wpisując polecenie postconf -mi szukając linii zpcre . Po upewnieniu się, że masz wsparcie PCRE, możesz wykonać następujące czynności:

/etc/postfix/login_maps.pcre:

/^(.*)@example\.org$/   ${1}

W main.cf:

smtpd_sender_login_maps = pcre:/etc/postfix/login_maps.pcre

To powinno działać dobrze.


To jest doskonałe. Dokładnie tego szukałem!
Chris Lercher,

3
Dla użytkowników Ubuntu możesz uzyskać postfix pcre sudo apt-get install postfix-pcre. Może dla większości było to oczywiste.
NeilMonday

Nie ma możliwości pominięcia domeny w wyrażeniu regularnym lub $myhostnamezmiennej referencyjnej ?. Tutaj możesz zobaczyć, że Postfix jest w stanie przeszukiwać tabelę wyszukiwania według części użytkownika wiadomości e-mail ...
Jaime Hablutzel,

Wierzę, że będziesz chciał uciec przed ukośnikiem „.” znak w nazwie domeny, więc jest interpretowany jako dosłowne dopasowanie: /^(.*)@example\.org$/
Arnon

W przeciwnym razie odpowiada to „test @ exampleXorg” oraz „test@example.org”, co może nie być dokładnie zamierzonym zachowaniem.
Arnon

6

Wyrażenie regularne wspomniane w drugiej odpowiedzi odpowiada części użytkownika adresu e-mail ( zalogowany użytkownik @ example.org). Oto kilka dodatkowych informacji.

Aby użyć pełnego adresu e-mail jako nazwy użytkownika, użyj następującego wyrażenia regularnego (na przykład w /etc/postfix/login_map):

/^(.*)$/   ${1}

Oznacza to, że twoja nazwa użytkownika jest zawsze pełnym adresem e-mail ( logged-in-user@example.org ) - żadna inna istniejąca nazwa użytkownika nie może wysyłać z tego adresu - i nie musisz aktualizować dodatkowego pliku konfiguracyjnego Postfix za każdym razem, gdy dodaj użytkownika.

Może to być użyte na serwerze, na którym skonfigurowano wiele domen. Użytkownik jan.doe@example.com może wysyłać tylko z tego adresu, ale nie z jan.doe@example.org (inny użytkownik i adres e-mail, inna osoba). W takim przypadku nazwa użytkownika jan.doe byłaby niejednoznaczna.

Ponadto, w zależności od konfiguracji, ustawienie smtpd_sender_login_maps, które musi wskazywać na ten plik, może znajdować się w pliku master.cf (zamiast main.cf). Oficjalna dokumentacja Dovecot zawiera następujący przykład (jeśli używasz SASL / submission):

submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
  -o smtpd_sender_restrictions=reject_sender_login_mismatch
  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

W tym przykładzie ustawienie należy wyregulować tak, aby wskazywało właściwy plik i używać jako typu wyrażenia regularnego lub (lepiej) pcre. Zwłaszcza jeśli plik o nazwie „wirtualny” jest już używany w innym celu (na przykład dla virtual_alias_maps, jak pokazano w oficjalnym przykładzie Postfix ), do mapowania logowania należy użyć innego pliku.

Od:

smtpd_sender_login_maps=hash:/etc/postfix/virtual

Do:

smtpd_sender_login_maps=pcre:/etc/postfix/login_map

0

Czy możesz użyć kombinacji wyrażenia regularnego w nagłówku, jak pokazano tutaj: http://www.akadia.com/services/postfix_uce.html ? Następnie możesz połączyć się z wyrażeniem regularnym, takim jak [*@example.org], aby zapewnić tylko nadawcę z example.org.


Załóżmy, że mogę użyć „regexp:” tutaj (?) Jak mogę określić regexp, aby użytkownik „a” mógł wysłać jako „a@example.org”, ale nie jako „b@example.org”?
Chris Lercher,

@sonstabo byłoby miło, gdybyś uwzględnił próbkę konfiguracji
Jaime Hablutzel
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.