Postfix to bardziej wydajny i bezpieczny demon SMTP aniżeli nadal powszechnie używany sendmail. Niemniej
źle skonfigurowany może stanowić poważne zagrożenie bezpieczeństwa w sieci (głownie jako open relay) jak "dziurawy" sendmail. W artykule przedstawimy
krótki opis jak skonfigurować postfixa oraz jak włączyć obsługę autoryzacji przy
wysyłaniu poczty w postfixie.
0. Wstęp
Niniejszy artykuł przedstawia konfigurację Postfixa z autoryzacją i
szyfrowanym połączeniem SMTP. Autoryzacja odbywa się na podstawie haseł
systemowych, czyli na podstawie hasła do konta shellowego. W związku z tym, że
taka autoryzacja wymaga przesyłania hasła za każdym razem kiedy chcemy wysłać
list (co nie jest zbyt bezpieczne) "dozbrajamy" jeszcze Postfixa o obsługę
TLS czyli szyfrowane połączenie SMTP. Ponadto SMTP AUTH i TLS jest wymuszony
na klientach. Co to znaczy? To znaczy, że bez autoryzacji po szyfrowanym połączeniu
nie zdołamy wysłać listu (jeżeli jest autoryzacja a nie ma szyfrowanego połączenia
i na odwrót również nie uda nam się wysłać emaila). Wniosek z tego taki,
że maila możemy wysłać tylko i wyłącznie gdy SMTP AUTH idzie w parze z
TLSem
1. Instalacja
Oczywiście polecam instalacje z portów. W naszym przypadku wykorzystywana
będzie biblioteka SASL2.
Jest ona potrzebna, aby móc wykorzystywać SMTP AUTH. W pierwszej kolejności wykonujemy
następujące kroki.
# cd /usr/ports/security/cyrus-sasl2
# make build && make install && make clean
# cd /usr/ports/security/cyrus-sasl2-saslauthd
# make build && make install && make clean
Następnie instalujemy Postfixa (w artykule 2.0.16). Podczas instalacji w menu zaznaczamy następujące opcje:
DB3, SASL2,
TLS:
# cd /usr/ports/mail/postfix
# make build && make install && make clean
2. Konfiguracja
Jeżeli podczas instalacji nie kazaliśmy aby zostały wprowadzone zmiany w
pliku /etc/mail/mailer.conf, musimy dokonać tego teraz. Prawidłowo plik
powinien wyglądać tak jak poniżej:
# cat /etc/mail/mailer.conf
sendmail /usr/local/sbin/sendmail
send-mail /usr/local/sbin/sendmail
mailq /usr/local/sbin/sendmail
newaliases /usr/local/sbin/sendmail |
Zgodnie z dokumentacją Postfixa powinniśmy jeszcze dodać
odpowiednie wpisy w pliku /etc/periodic.conf, jeżeli go nie mamy to musimy
utworzyć i dodać poniższe wpisy:
daily_clean_hoststat_enable="NO" # Purge sendmail host status cache daily
daily_status_mail_rejects_enable="NO" # Check mail rejects
daily_status_include_submit_mailq="NO" # Also submit queue
daily_submit_queuerun="NO" # Also submit queue |
a) podstawowa
Po instalacji konieczne jest skonfigurowanie Postfixa. Zmieniamy
następujące linie lub jeżeli ich brakuje to dodajemy do pliku main.cf:
# cd /usr/local/etc/postfix
# vi main.cf
--- main.cf ---
# nazwa hosta (może być taka sama jak domena)
myhostname = host.domena.pl# nazwa domeny
mydomain = domena.pl
myorigin = $mydomain
inet_interfaces = all
# przyjmujemy pocztę dla domen:
mydestination = $mydomain
# kod zwracany gdy nie ma w systemie odbiorcy
unknown_local_recipient_reject_code = 550
# adresy sieci, z których dopuszczony będzie relaying, jeżeli robisz
autoryzację
# i chcesz aby lokalni userzy również się autoryzowali pozostaw tylko
127.0.0.0/8
# w poniższych dwóch opcjach
mynetworks = ip_zewnetrzne, 127.0.0.0/8,
192.168.1.0/24
relay_domains = ip_zewnetrzne, 127.0.0.0/8, 192.168.1.0/24
# ścieżka do pliku i bazy z aliasami
alias_maps = hash:/usr/local/etc/postfix/aliases
alias_database = hash:/usr/local/etc/postfix/aliases
# ścieżka do katalogu z mailami
mail_spool_directory = /var/mail
# banner naszego smtp
smtpd_banner = $myhostname ESMTP $mail_name
# zmiana nagłówka maila z Postfix na cokolwiek
# (możemy tu wpisać co chcemy np. Qmail)
mail_name = Postfix
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
# max. wielkość maila (5MB):
message_size_limit = 5000000
# wielkość skrzynki pocztowej (25MB):
mailbox_size_limit = 25600000
# max. ilość wysłanych maili za jednym razem
smtpd_recipient_limit = 10
# blokowanie komendy SMTP VRFY (troszkę przystopuje spammerów)
disable_vrfy_command = yes
# dostarczanie maili jeżeli server jest wyłączony
# sprawdzaj zdalny server co pół godziny i zwracaj błąd do nadawcy po trzech dniach
queue_run_delay = 30m
maximal_queue_lifetime = 3d
# czas oczekiwania na komunikaty o błędach
smtpd_error_sleep_time = 3
smtpd_soft_error_limit = 3
smtpd_hard_error_limit = 5
|
--- end of main.cf ---
Aby dodać kilka aliasów wskazujących na jedno konto
pocztowe edytujemy plik /usr/local/etc/postfix/aliases, który ma następującą
składnię:
alias:konto
np.
admin:arti
co powoduje, że maile zaadresowane na admin@domena.pl zawsze
trafią na konto arti. Po utworzeniu aliasów i zapisaniu zmian w pliku wydajemy
komendę, która zbuduje nam bazę aliasów i bazę access (opisana w SMTP AUTH):
# newaliases
# postmap access
Dodajemy postfixa do grupy mail:
# pw mod group mail -M postfix
W tym momencie postfix już powinien zadziałać, odpalamy go
i telnetujemy się na jego port
# postfix start
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 domena.pl ESMTP Postfix
EHLO domena.pl
250-domena.pl
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-XVERP
250 8BITMIME
QUIT
221 Bye
Connection closed by foreign host.
W takim przypadku wydaje się być wszystko w porządku. Spróbuj
wysłać maila, jeżeli będą problemy to zaglądaj w logi /var/log/maillog
i sprawdź powyższe kroki.
UWAGA: Po każdorazowej zmianie w pliku main.cf lub
master.cf wydaj polecenie postfix reload aby Postfix zaczytał nową
konfigurację. Również po każdorazowym dodaniu nowego aliasu wydajemy
polecenie newaliases.
b) SMTP AUTH
do naszego configa main.cf dodajemy poniższe opcje:
# włączenie autoryzacji
smtpd_sasl_auth_enable = yes# to pozwoli na logowanie się
starszych klientów (np. MS OE 4)
broken_sasl_auth_clients = yes
# opcje, które z metod autoryzacji nie będą obsługiwane
smtpd_sasl_security_options = noanonymous
# autoryzacja jest wymagana przy wysyłaniu listów z domen(y)
smtpd_sasl_local_domain =
# poniższymi trzema opcjami możemy dowolnie manipulować i
ustawić odpowiedni prawa
# więcej opcji znajdziesz w pliku sample-smtpd.cf
# sposób sprawdzania nagłówka RCPT TO:
smtpd_recipient_restrictions =
permit_sasl_authenticated,
reject_unauth_destination
# sprawdzanie IP kompa, z którego wysyłany jest list
smtpd_client_restrictions =
permit_sasl_authenticated,
reject_unknown_client
# sposób sprawdzania nagłówka MAIL FROM:
smtpd_sender_restrictions =
permit_sasl_authenticated,
check_sender_access hash:/usr/local/etc/postfix/access
|
Teraz utworzymy sobie bazę adresów e-mail, z których można
wysyłać maile przez nasz serwer. Składnia tego pliku jest następująca:
adres e-mailco_zrobić
np.
arti@domena.plOK
pajac@domena.pl REJECT
co oznacza, że adres e-mail, który ma w nagłówku MAIL FROM
arti@domena.pl zostanie wysłany a mail z nagłówkiem pajac@domena.pl zostanie
zablokowany.
Po utworzeniu pliku i zapisaniu zmian, każdorazowo budujemy bazę access:
# postmap access
P.S. Aby pozbyć się cfaniaków (niektórzy nasi użytkownicy),
którzy po zautoryzowaniu się mogą dowolnie zmienić nagłówek MAIL FROM (np.
mogą podać się za admina i wpisać sobie MAIL FROM admin@domena.pl) musimy
stworzyć sobie plik, w którym zamieścimy adresy e-mail i loginy z jakich można
je wysłać. Jednym słowem mówiąc:
arti@domena.plarti
admin@domena.plarti
bolo@domena.plbolo
arti może mieć nagłówek MAIL FROM tylko taki jak zdefiniujemy
w tym pliku (czyli albo arti@domena.pl albo admin@domena.pl) a bolo może mieć
tylko bolo@domena.pl. W ten oto sposób nikt się nie podszyje pod nikogo.
Nazwijmy ten plik np. login i stwórzmy go w /usr/etc/local/postfix:
# cd /usr/local/etc/postfix
# vi login
# postmap login
Aby powyższe zadziałało musimy dodać dodatkową opcję do
naszego main.cf:
smtpd_sender_login_maps = hash:/usr/local/etc/postfix/login |
a w smtpd_sender_restrictions po znaku = dopisujemy:
reject_sender_login_mismatch
Tworzymy plik smtpd.conf w podanej lokalizacji z
odpowiednimi wpisami :
# vi /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: plain login |
Edytujemy plik /usr/local/etc/rc.d/saslauthd.sh i
zmieniamy wartość w saslauthd_flags z "-a pam" na
"-a getpwent". Teraz linijka ta powinna wyglądać tak jak poniżej:
saslauthd_flags="-a getpwent" |
Uruchamiamy postfixa i sasluthd:
# postfix start
# /usr/local/etc/rc.d/saslauthd.sh start
Następnie telnetujemy się na port 25 i sprawdzamy nasze dokonania:
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 domena.pl ESMTP Postfix
EHLO domena.pl
250-domena.pl
250-PIPELINING
250-SIZE 20480000
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-XVERP
250 8BITMIME
QUIT
221 Bye
Connection closed by foreign host.
To znaczy, że wszystko jest ok, autoryzacja działa. Aby się
upewnić spróbuj powysyłać kilka maili różnymi sposobami i z różnych miejsc. Możesz również spróbować wysłać maila z OE nie konfigurując go do
używania autoryzacji, jeżeli nie wyśle to jest OK.
Konfiguracja klientów do używania SMTP AUTH.
Czas na konfiguracje klientów na przykładzie (Outlook Express.) :
Menu --> Narzędzia --> Konta --> Właściwości -->Serwery
Zaznacz "Serwer wymaga uwierzytelnienia".
Oczywiście twój e-mail wychodzący ma mieć adres i użytkownika domeny $mydomain.
c) TLS
teraz do naszej autoryzacji dorzucimy szyfrowane połączenie SMTP (aby mieć
również szyfrowanego POP3 zainteresuj się programem Stunnel).
W tym wypadku będziemy musieli wygenerować odpowiednie certyfikaty dla naszego
serwera. Możemy się posłużyć artykułem o Stunnel,
w którym to jest opisane jak się takie certyfikaty tworzy. Na końcu naszego
pliku main.cf dopisujemy poniższe opcje:
# ścieżka do pliku z certyfikatem serwera
smtpd_tls_cert_file = /usr/local/etc/postfix/cert/smtpdcert.pem
# ścieżka do pliku z kluczem prywatnym serwera
smtpd_tls_key_file = /usr/local/etc/postfix/cert/smtpdkey.pem
# ścieżka do pliku z certyfikatem naszej organizacji CA
smtpd_tls_CAfile = /usr/local/etc/postfix/cert/cacert.pem
# chcemy używać TLSa
smtp_use_tls = yes
smtpd_use_tls = yes# używamy autoryzacji tylko i wyłącznie po szyfrowanym połączeniu
smtpd_tls_auth_only = yes
smtp_tls_note_starttls_offer = yes
# poziom logowania 0-4
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
|
Uruchamiamy postfixa i sasluthd:
# postfix start
# /usr/local/etc/rc.d/saslauthd.sh start
Następnie telnetujemy się na port 25 i sprawdzamy nasze dokonania:
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 domena.pl ESMTP Postfix
EHLO domena.pl
250-domena.pl
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS
250-XVERP
250 8BITMIME
QUIT
221 Bye
Connection closed by foreign host.
Wydaje się być wszystko w porządku. Spróbujmy wysłać
teraz maila bez dodatkowego konfigurowania klienta np. OE. Jeżeli nie wyśle to
jest wszystko tak jak należy. Dlaczego? Dlatego, że wymusiliśmy aby
autoryzacja odbywała się tylko po szyfrowanym połączeniu a tego jeszcze nie
ustawiliśmy w kliencie.
Konfiguracja klientów do używania SMTP AUTH i TLS.
Czas na konfiguracje klientów na przykładzie (Outlook Express.) :
Menu --> Narzędzia --> Konta --> Właściwości -->Serwery
Zaznacz "Serwer wymaga uwierzytelnienia".
Menu --> Narzędzia --> Konta --> Właściwości
-->Zaawansowane
Zaznacz "Ten serwer wymaga bezpiecznego połączenia SSL"
w miejscu SMTP.
Oczywiście twój e-mail wychodzący ma mieć adres i użytkownika domeny $mydomain.
Teraz powinniśmy osiągnąć efekt jaki pożądaliśmy.
Postfix + SMTP AUTH + TLS. Cóż więcej trzeba chcieć. Teraz wystarczy dobrze
przetestować serwer i zaglądać w logi.
3. Uruchamianie Postfixa podczas startu systemu.
Aby nasz Postfix zawsze był uruchamiany podczas startu systemu musimy napisać
sobie mały skrypt, który będzie za nas to robił.
# cd /usr/local/etc/rc.d
# vi postfix.sh
--- postfix.sh ---
#!/bin/sh
case $1 in
start)
if [ -x /usr/local/sbin/postfix ]; then
/usr/local/sbin/postfix start
fi
;;
stop)
/usr/local/sbin/postfix stop
;;
reload)
/usr/local/sbin/postfix reload
;;
*)
echo "USAGE $0 (start|stop|reload)"
exit 1
esac |
--- end of postfix.sh ---
Jeszcze tylko zmiana praw do pliku i gotowe
# chmod 755 postfix.sh
Po bardziej szczegółowe informacje na temat Postfixa i jego
konfiguracji odsyłam do dokumentacji /usr/local/share/doc/postfix oraz
do plików sample-* w /usr/local/etc/postfix.
Za wszelkie uwagi i poprawki będę wdzięczny.
Autor: Artur Kulda
arti(at)bsd4u.org
Powyższy artykuł został udostępniony na zasadach Licencji BSD |
Re: Pozdrownienia dla autora artykułu. Dodane przez tomus w dniu - 2004-04-03 21:24:53 | Witam, Początkowo ze skonfigurowaniem Postfix'a + SASL + TLS miałem trochę problemów, ale jakoś się z nimi uporałem - dobra rada dla początkujących, którzy chcieli by to skonfigurować: Czytać uważnie artykuł i w razie problemów przeczytać jeszcze dokumentację na stronie http://www.postfix.org. Pozdrowienia dla autora - wielkie dzięki arti! , Tomek. | Re: Postfix z autoryzacją i szyfrowanym Dodane przez sybnet w dniu - 2004-07-04 00:21:53 | | FreeBSD 5.2.1 --> po instalacji i konfiguracji wedłóg powyższego opisu NIE DZIAŁA. Po "telnet localhost 25" --> łączy się, ale nie wyśiwetla powitania, i nie odpowiada na żadne polecenia ( np. "ehlo wp.pl" ). Nie wiem co może być źle? POMOCY | Re: Postfix z autoryzacją i szyfrowanym Dodane przez planar w dniu - 2004-07-12 00:43:35 | Witam, Dla wszystkich, którym przy próbie wysłania maila pojawia się komunikat: "TLS not available due to temporary reason", w moim przypadku wina była po stronie klienta, a konkretnie oprogramowania antywirusowego (NAV). Po wyłączeniu skanowania poczty wychodzącej wszystko było OK. -- Pozdrawiam LJ | Re: Postfix z autoryzacją i szyfrowanym Dodane przez hellboy w dniu - 2004-08-01 11:23:40 | Przejżyj logi w /var/log/maillog, Ja mialem to samo jak brakowalo jakiegos pliku lub nie byl zrobiony jako DB. Zeby pliki byly rehashowane musisz wydac polecenie postmap nazwa_pliku. Jezeli nie bedzie wszystkich plikow uzytych w konfiguracji to podczas logowania postfix bedzie sie blokowal z powodu bledu. | Re: Postfix z autoryzacją i szyfrowanym Dodane przez slesh w dniu - 2004-09-07 15:14:34 | Tekst w miare czytelny i zrozumialy jednak mam problem w punkcie: "Edytujemy plik /usr/local/etc/rc.d/saslauthd.sh i zmieniamy wartość w saslauthd_flags z "-a pam" na "-a getpwent". Teraz linijka ta powinna wyglądać tak jak poniżej: saslauthd_flags="-a getpwent" " dokładnie chodzi o zamiane flagi -a pam na -a getpwent. Przy takim ustawieniu saslauthd zwraca bład o nieznanej metodzie autoryzacji i sie nie odpala. Ma ktos jakis pomysł? FreeBSD 5.2.1
| Re: Postfix z autoryzacją i szyfrowanym Dodane przez arti w dniu - 2004-09-07 18:31:23 | Witam, No to spróbuj z -a pam. Artykuł był pisany dla wersji 4.x niemniej powinien też działać w 5.x po małych zmianach. A dokładnie jaki błąd zwraca? | Re: Postfix z autoryzacją i szyfrowanym Dodane przez natan4 w dniu - 2004-10-05 21:16:27 | Witam Oto moj konfig myhostname = domena.pl alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = domena.pl relayhost = #relay_domains = mynetworks = 127.0.0.0/8 , 192.168.0.0/24 mailbox_command = mailbox_size_limit = 0 recipient_delimiter = + --cut--- dalej mam sasl i tls Jak chce wysylac poczte to musze miec odchaszowane "relay_domains = " i podac doemne czyli np zeby wyslac maila do hello.pl musze miec ustawione relay_domains = pl A jak wam to u was dziala ?
| Re: Postfix z autoryzacją i szyfrowanym Dodane przez al w dniu - 2005-01-16 21:00:22 | na wstepie dzieki za ten artykół, byl inspiracja do przejscia na posfix , ale jak sie domyslacie mam problem. nie dziala mi autoryzacja, nie robilem jeszcze tls, a po zalogowniu sie telnetem dostaje taka odpowiedz : 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 8BITMIME niestety, jak ustawiam w usawieniach serwer wymaga uwierzytelnienia dostaje odpowiedz command not implemented. kiedy to wylacze moge spokojnie wysylac maile. pewnie gdzies robie blad tylko nie wiem gdzie szukac, bo niby wszystko robie jak w artykole. dzieki za odp. pozdrawiam al |
Tylko zarejestrowani użytkownicy mogą pisać komentarze. Prosze zaloguj się i dodaj komentarz. Powered by AkoComment! |