Restrykcje

Restrykcje tworzymy w tym celu, aby nasz serwer SMTP nie był tzw. serwerem OpenRelay-em, czyli uniemożliwiamy wysyłanie wiadomości z hostów nie będących członkami naszej sieci oraz użytkowników bez wcześniejszej autoryzacji itd.

Aby zrozumieć jak działają restrykcje (tzn. na jakim poziomie sesji SMTP są weryfikowane i ich kolejność) należy zrozumieć samą sesję SMTP. Poniżej przedstawiono przykład takiej sesji z zaznaczeniem odpowiednich restrykcji, które możemy wykorzystać w konfiguracji Postfix-a:

220 mail.moja-domena.pl ESMTP Postfix    # <-smtpd_client_restrictions
EHLO mail.moja-domena.pl    # <-smtpd_helo_restrictions
250 mail.moja-domena.com    #
MAIL FROM:    # <-smtpd_sender_restrictions
250 2.1.0 Ok    #
RCPT TO:    # <-smtpd_recipient_restrictions
250 2.1.5 Ok    #
DATA    # <-smtpd_data_restrictions
354 End data with .    #
To:    # <-header_checks
From:    #
Subject:SMTP Test    #
This is a test message    # <-body_checks
 


rn

Na najwyższm poziomie mamy restrykcję dotyczącą klienta nawiązującego połączenie (smtpd_client_restrictions). Poniżej smtpd_helo_restrictions (jak "przedstawia" się klient nawiązujący połączenie). Następne smtpd_sender_restrictions (MAIL FROM), czyli restrykcje dotyczące wysyłającego oraz smtpd_recipient_restrictions (RCPT TO) do kogo wiadomość zostaje przesłana. Kolejna restrykcja to smtpd_data_restrictions. Następna header_checks analizuje nagłówki wiadomości (np. temat – subject), a kolejna body_checks treść tej wiadomości (np. pod kątem zawartości słów niedozwolonych itp.).

Przykłady restrykcji:

smtpd_client_restrictions = permit_mynetworks, reject_unknown_client

W powyższym przypadku dopuszczaj połączenia z sieci wyszczególnionych w zmiennej konfiguracyjnej mynetworks oraz odrzuć hosty których brak w DNS. W przypadku poprawnej weryfikacji przejdź do sprawdzenia następnej restrykcji dotyczącej EHLO.

smtpd_helo_required = yes # wymagaj helo / ehlo. Ta opcja mówi, że jeżeli klient nie poda nic więcej po EHLO natychmiast zakończ połączenie.

smtp_helo_restrictions = permit_mynetworks, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, permit

reject_non_fqdn_helo_hostname – odrzuć połączenia od hostów, które w ehlo nie podały w pełni kwalifikowaną nazwę hosta (FQDN)

reject_invalid_helo_hostname – odrzuć połączenia klienta z niepoprawną nazwą hosta w ehlo.

permit – wyjdź z bieżącego łańcucha restrykcji i przejdź do sprawdzania kolejnego (jeżeli występuje).

smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_sender_domain

permit_sasl_authenticated – pozwolenie wysłania wiadomości tylko dla istniejącego użytkownika (po uprzedniej poprawnej autoryzacji).

reject_unknown_sender_domain – odrzucaj nadawcę jeżeli po znaku @ brakuje wyszczególnionej domeny lub tej domeny nie ma w DNS. Pamiętaj, że jeżeli to dotyczy użytkowników lokalnych wcale nie muszą podawać pełnej nazwy jeżeli ustawimy opcję myorgin.

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unknown_recipient_domain, reject_non_fqdn_recipient, reject_rbl_client zen.spamhaus.org

reject_unauth_destination – odrzuć połączenie nie sprawdzając pozostałych ograniczeń, jeżeli nasz serwer nie jest serwerem docelowym

reject_unknown_recipient_domain – odrzuć jeżeli adres docelowy nie istnieje w DNS

reject_non_fqdn_recipient – odrzuć jeżeli adres odbiorcy nie jest podany w postaci pełnokwalifikowanej (FQDN)

reject_rbl_client zen.spamhaus.org – odrzuć adresy które znajdują się na liście spamerów – RBL (w tym przypadku zen.spamhaus.org).
 


rn

Sprawdźmy działanie przykładowej restrykcji. W sesji telnet pominiemy ehlo i spróbujemy wysłać maila. Poniżej wynik testu:
telnet localhost 25
Trying ::1…
Connected to localhost.
Escape character is '^]'.
220 SMTP server

mail from: pkania@moja-domena.pl
503 5.5.1 Error: send HELO/EHLO first
quit

Przewijanie do góry