Konfiguracja transportu szyfrowanego TLS w Postfix
Transport Layer Security (TLS) to kluczowy mechanizm zabezpieczający komunikację SMTP przed podsłuchiwaniem i manipulacją wiadomościami e-mail. Wymuszenie szyfrowania TLS w Postfix pozwala na bezpieczną wymianę wiadomości między serwerami pocztowymi oraz zapewnia poufność i integralność danych.
W tym artykule omówimy:
✅ Jak działa TLS w SMTP i dlaczego jest ważny?
✅ Instalację i konfigurację certyfikatów TLS w Postfix.
✅ Wymuszanie szyfrowanych połączeń SMTP.
✅ Testowanie poprawności konfiguracji.
1. Jak działa TLS w SMTP i dlaczego warto go stosować?
TLS (następca SSL) to protokół szyfrujący dane przesyłane między serwerami pocztowymi. W przypadku SMTP z TLS transmisja wiadomości jest zaszyfrowana, co zapobiega:
🔹 Podsłuchiwaniu (eavesdropping) – dane są szyfrowane, więc nie mogą zostać przechwycone przez atakujących.
🔹 Atakom MITM (Man-in-the-Middle) – certyfikaty TLS potwierdzają tożsamość serwera i eliminują możliwość podszycia.
🔹 Modyfikacji wiadomości w trakcie transmisji – dzięki integralności kryptograficznej.

2. Instalacja certyfikatów TLS
Do obsługi TLS w Postfix potrzebujemy certyfikatów SSL/TLS. Możemy użyć:
✔ Darmowych certyfikatów Let’s Encrypt
✔ Certyfikatów samopodpisanych (do użytku wewnętrznego)
✔ Certyfikatów od zaufanego Urzędu Certyfikacji (CA)
2.1. Instalacja Let’s Encrypt (zalecane)
Jeśli mamy publiczny serwer, najprostszą opcją jest Let’s Encrypt:
sudo apt update
sudo apt install certbot
sudo certbot certonly --standalone -d mail.domena.pl
Po poprawnej instalacji certyfikaty znajdują się w katalogu:
/etc/letsencrypt/live/mail.domena.pl/fullchain.pem
/etc/letsencrypt/live/mail.domena.pl/privkey.pem
2.2. Generowanie certyfikatu samopodpisanego (alternatywa)
Jeśli serwer jest używany wewnętrznie, możemy wygenerować certyfikat:
sudo openssl req -new -x509 -days 365 -nodes \
-out /etc/ssl/certs/postfix.pem \
-keyout /etc/ssl/private/postfix.key
Pliki certyfikatu znajdują się w:
/etc/ssl/certs/postfix.pem
/etc/ssl/private/postfix.key
📌 Ważne: Klucz prywatny musi mieć odpowiednie uprawnienia:
sudo chmod 600 /etc/ssl/private/postfix.key
3. Konfiguracja TLS w Postfix
Edytujemy plik main.cf:
sudo nano /etc/postfix/main.cf
Dodajemy następujące ustawienia:
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.domena.pl/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.domena.pl/privkey.pem
smtpd_tls_CAfile=/etc/ssl/certs/ca-certificates.crt
smtpd_use_tls=yes
smtpd_tls_security_level=may
smtpd_tls_loglevel=1
smtpd_tls_received_header=yes
smtpd_tls_auth_only=yes
📌 Wyjaśnienie opcji:
smtpd_use_tls=yes
→ Włącza obsługę TLS.smtpd_tls_security_level=may
→ TLS jest opcjonalny (zmienimy to w następnym kroku).smtpd_tls_auth_only=yes
→ Wymaga TLS dla uwierzytelnionych użytkowników.smtpd_tls_received_header=yes
→ Dodaje nagłówek informujący o użyciu TLS.smtpd_tls_loglevel=1
→ Włącza podstawowe logowanie TLS.
4. Wymuszanie szyfrowania TLS dla wszystkich połączeń
Aby wymusić szyfrowanie TLS i uniemożliwić wysyłanie wiadomości bez zabezpieczeń, zmieniamy poziom zabezpieczeń:
smtpd_tls_security_level=encrypt
📌 Co to oznacza?
- Serwer będzie akceptował tylko zaszyfrowane połączenia SMTP.
- Nadawcy, którzy nie obsługują TLS, nie będą mogli wysyłać wiadomości.
📢 Po zmianie konfiguracji restartujemy Postfix:
sudo systemctl restart postfix
5. Testowanie konfiguracji TLS
5.1. Sprawdzenie logów Postfix
sudo tail -f /var/log/mail.log | grep TLS
Powinniśmy zobaczyć komunikaty informujące o szyfrowaniu:
postfix/smtpd[12345]: Anonymous TLS connection established using ECDHE-RSA-AES256-GCM-SHA384
5.2. Sprawdzenie dostępności TLS
Możemy użyć polecenia openssl
, aby zweryfikować obsługę TLS:
openssl s_client -starttls smtp -connect mail.domena.pl:25
Jeśli konfiguracja jest poprawna, zobaczymy odpowiedź zawierającą Certyfikat TLS i informacje o szyfrowaniu:
SSL handshake has read 3000 bytes and written 500 bytes
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
6. Opcjonalne zabezpieczenia TLS
6.1. Wymuszanie TLS dla wychodzących wiadomości
Domyślnie Postfix nie wymusza TLS przy wysyłaniu wiadomości. Możemy to zmienić:
smtp_tls_security_level=encrypt
smtp_tls_policy_maps=hash:/etc/postfix/tls_policy
Plik /etc/postfix/tls_policy
może zawierać reguły dla poszczególnych domen:
gmail.com encrypt
outlook.com encrypt
📌 Oznacza to, że Postfix nie wyśle wiadomości do tych domen, jeśli nie obsługują TLS.
📢 Po edycji regenerujemy mapy:
sudo postmap /etc/postfix/tls_policy
sudo systemctl restart postfix
7. Podsumowanie
✔ TLS w Postfix zapewnia poufność i bezpieczeństwo przesyłanych wiadomości.
✔ Wykorzystanie Let’s Encrypt lub certyfikatów samopodpisanych umożliwia łatwą implementację szyfrowania.
✔ Możemy wymusić TLS, aby uniemożliwić wysyłanie niezaszyfrowanych wiadomości.
✔ Testowanie konfiguracji pozwala upewnić się, że serwer jest dobrze zabezpieczony.
💡 Jeśli chcesz zapewnić maksymalne bezpieczeństwo, wymuszaj szyfrowanie TLS i monitoruj logi serwera!