Wyszukiwanie w witrynie

Jak skonfigurować Postfix i Dovecot z użytkownikami domeny wirtualnej w systemie Linux — część 2


W poprzednim artykule z tej serii wyjaśniliśmy, jak bezpiecznie skonfigurować bazę danych serwera pocztowego i zarządzać nią za pomocą phpMyAdmin.

Wymóg:

  1. Zainstaluj serwer pocztowy Postfix i Dovecot z MariaDB – część 1

Teraz czas na skonfigurowanie wewnętrznych programów, które sprawią, że wysyłanie i odbieranie e-maili stanie się rzeczywistością: Postfix i Dovecot (odpowiednio do obsługi poczty wychodzącej i przychodzącej).

Konfiguracja serwera pocztowego Postfix

Zanim zaczniesz konfigurować Postfixa, warto rzucić okiem na jego strony podręcznika, kładąc szczególny nacisk na sekcję zatytułowaną „Informacje dla nowych użytkowników Postfixa” . Jeśli to zrobisz, łatwiej będzie ci postępować zgodnie z tym samouczkiem.

W kilku słowach powinieneś wiedzieć, że istnieją dwa pliki konfiguracyjne dla Postfix:

  1. /etc/postfix/main.cf (Parametry konfiguracyjne Postfixa, więcej szczegółów znajdziesz w man 5 postconf).
  2. /etc/postfix/master.cf (Konfiguracja głównego demona Postfixa, więcej szczegółów znajdziesz w man 5 master).

W /etc/postfix/main.cf zlokalizuj (lub dodaj, jeśli to konieczne) następujące wiersze i upewnij się, że odpowiadają wartościom wskazanym poniżej:


append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Kolejne trzy ustawienia mają szczególne znaczenie. W plikach zaznaczonych na żółto skonfigurujemy dostęp Postfixa do tabel Domains_tbl, Users_tbl i Alias_tbl:


virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf

Pamiętaj, że możesz wybrać różne nazwy plików powyżej, pod warunkiem, że je utworzysz i wstawisz do nich następującą zawartość. W każdym przypadku zastąp YourPassword hasłem wybranym dla użytkownika dba w Części 1 lub możesz także użyć MariaDB poświadczenia roota dla użytkownika i hasła poniżej.

Upewnij się także, że używasz dokładnie tych samych nazw bazy danych serwera poczty e-mail i tabel utworzonych w Części 1.

W /etc/postfix/mariadb-vdomains.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'

W /etc/postfix/mariadb-vusers.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'

W /etc/postfix/mariadb-valias.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'

Na koniec nie zapomnij zmienić uprawnień do tych plików na 640:


chmod 640 /etc/postfix/mariadb-vdomains.cf
chmod 640 /etc/postfix/mariadb-vusers.cf
chmod 640 /etc/postfix/mariadb-valias.cf

Oraz własność użytkownika root i grupy postfix:


chown root:postfix /etc/postfix/mariadb-vdomains.cf
chown root:postfix /etc/postfix/mariadb-vusers.cf
chown root:postfix /etc/postfix/mariadb-valias.cf

Następnie, aby włączyć bezpieczne połączenia, musimy upewnić się, że następujące ustawienia nie są skomentowane (lub dodane, jeśli to konieczne) w /etc/postfix/master.cf:


submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp

showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
#virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

Uwaga: wcięcie w wierszach rozpoczynających się od opcji -o ma kluczowe znaczenie; w przeciwnym razie sprawdzenie postfixa zwróci błąd:

Przed zapisaniem zmian dodaj na dole pliku następujące wiersze:


dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

W tym momencie konieczne jest sprawdzenie, czy Postfix ma dostęp do tabel bazy danych oraz domen, kont i aliasów, które utworzyliśmy w Części 1.

W tym celu użyjemy polecenia postmap, narzędzie do testowania komunikacji z tabelami, które Postfix będzie sprawdzał podczas działania, ale przede wszystkim będziemy musieli zrestartować Postfixa:


systemctl postfix restart
postmap -q linuxnewz.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q someotherdomain.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-valias.cf

Na poniższym obrazku widać, że dla istniejących rekordów w bazie danych zwracana jest wartość 1. W przeciwnym razie nic nie będzie wyświetlane na ekranie. W przypadku sprawdzania aliasu zwróć uwagę, że zwracane jest rzeczywiste konto e-mail, na które alias jest zamapowany:

Pamiętaj, że NIE uwierzytelniamy na podstawie danych uwierzytelniających ustawionych dla każdego konta e-mail, testujemy jedynie zdolność Postfixa do wykrycia tych rekordów w bazie danych.

Jeśli zatem otrzymasz inny wynik niż powyżej, upewnij się, że używasz prawidłowej pary użytkownik/hasło w plikach mariadb-vdomains.cf, mariadb-vusers.cf i mariadb-valias.cf (lub jakkolwiek nazwiesz te pliki).

Konfiguracja Dovecota

Jako serwer IMAP/POP3, Dovecot umożliwia użytkownikom korzystanie z Agenta użytkownika poczty (MUA lub znany również jako klient), taki jak Thunderbird lub Outlook, aby wymienić tylko kilka przykładów dostępu do poczty.

Na początek utwórzmy użytkownika i grupę do obsługi e-maili (będziemy tego potrzebować, ponieważ nasze konta e-mail nie są powiązane z użytkownikiem systemu). Możesz użyć innego UID i GID (innego niż 5000, jak to robimy poniżej), o ile nie jest on używany i ma dużą liczbę:


groupadd -g 5000 vmail 
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Ustawienia Dovecot są podzielone na kilka plików konfiguracyjnych (upewnij się, że poniższe linie nie są skomentowane i/lub edytuj je, aby pasowały do ustawień wskazanych poniżej).

W /etc/dovecot/dovecot.conf:


!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf

W /etc/dovecot/conf.d/10-auth.conf (włącz uwierzytelnianie tylko poprzez SQL i pozostaw inne metody uwierzytelniania w komentarzu):


disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

W /etc/dovecot/conf.d/auth-sql.conf.ext (pamiętaj, że e-maile będziemy przechowywać w katalogu o nazwie twojadomena.com wewnątrz / home/vmail, który musisz utworzyć, jeśli nie istnieje. W naszym przypadku zrobiliśmy mkdir /home/vmail/linuxnewz.com, aby zarządzać e-mailami dla tej domeny):


passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}

Indywidualne skrzynki odbiorcze dla kont użytkowników zostaną utworzone w momencie otrzymania pierwszej wiadomości e-mail dla tych kont.

W /etc/dovecot/conf.d/10-mail.conf:


mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
  inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl

W /etc/dovecot/conf.d/10-master.conf:


service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
   mode = 0600
   user = vmail
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}
service dict {
  unix_listener dict {
  }
}

W /etc/dovecot/conf.d/10-ssl.conf (zamień certyfikat i ścieżki kluczy, jeśli planujesz używać certyfikatu podpisanego przez urząd certyfikacji):


ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

W /etc/dovecot/dovecot-sql.conf.ext wprowadź informacje o bazie danych i dane uwierzytelniające użytkownika administracyjnego utworzonego w Części 1.

Ważne: jeśli Twoje hasło zawiera gwiazdkę (#), musisz dołączyć ciąg znaków łączący, jak pokazano w poniższym przykładzie:


driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=PassWith#Here"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';

Dodatkowo możesz skonfigurować rejestrowanie dla Dovecot tak, aby było oddzielne od Postfixa w /etc/dovecot/conf.d/10-logging.conf:


log_path = /var/log/dovecot.log

Na koniec upewnij się, że dziennik Dovecot jest dostępny dla użytkownika dovecot:


chown vmail:dovecot /var/log/dovecot.log
chmod 660 /var/log/dovecot.log

Sprawdź i napraw konfigurację Postifix oraz włącz SMTP, POP3 i IMAP w zaporze sieciowej

Jeśli zdarzy ci się napotkać jakiekolwiek problemy podczas konfigurowania Postfixa i/lub Dovecota, zamiast przesyłać wszystkie pliki konfiguracyjne z prośbą o pomoc, możesz uzyskać podsumowanie konfiguracji (tylko linie bez komentarza) za pomocą:


postconf –n # Summary for /etc/postfix/main.cf
postconf –M # Summary for /etc/postfix/master.cf
doveconf –n # Summary of all configuration files for Dovecot

Ponadto upewnij się, że skrzynki odbiorcze e-mail są czytelne tylko przez vmail:


chown –R vmail:vmail /home/vmail

Pliki konfiguracyjne powinny być także czytelne dla użytkowników vmail i dovecot:


chown -R vmail:dovecot /etc/dovecot 
chmod -R o-rwx /etc/dovecot 

Na koniec upewnij się, że w zaporze sieciowej włączono SMTP, POP3 i IMAP:


firewall-cmd --add-port=143/tcp
firewall-cmd --add-port=143/tcp --permanent
firewall-cmd --add-port=110/tcp
firewall-cmd --add-port=110/tcp --permanent
firewall-cmd --add-port=587/tcp
firewall-cmd --add-port=587/tcp --permanent

Skonfiguruj Thunderbirda jako klienta poczty e-mail dla Postfix

Po zabezpieczeniu dostępu przez zaporę sieciową do portów używanych w komunikacji e-mailowej czas skonfigurować klienta pocztowego. Używając [email  i odpowiadającego mu hasła, wraz z mail.linuxnewz.com jako serwerem IMAP (lub POP3) i SMTP, jesteśmy gotowi rozpocząć wysyłanie i odbieranie e-maili na adres i z takiego konta:

Możesz bezpiecznie zignorować wyświetlony komunikat ostrzegawczy, ponieważ używasz certyfikatu, który nie jest podpisany przez zaufany zewnętrzny urząd certyfikacji:

Stwórzmy krótki testowy e-mail i kliknij Wyślij:

Gdy pojawi się monit o zaakceptowanie certyfikatu z podpisem własnym dla serwera wychodzącego, potwierdź go wcześniej, tak jak poprzednio:

Na koniec przejdź do docelowej wiadomości e-mail, aby sprawdzić, czy otrzymałeś właśnie wysłaną wiadomość e-mail. Jeśli tak, odpowiedz na niego i sprawdź, czy został dostarczony z powrotem do źródłowej skrzynki odbiorczej e-mail (w przeciwnym razie zapoznaj się z dziennikiem Postfix pod adresem /var/log/maillog lub dziennikiem Dovecot pod adresem /var /log/dovecot.log, aby uzyskać informacje dotyczące rozwiązywania problemów):

Masz teraz działający serwer poczty e-mail Postfix i Dovecot i możesz rozpocząć wysyłanie i odbieranie wiadomości e-mail.

Streszczenie

W tym artykule wyjaśniliśmy, jak skonfigurować Postfix i Dovecot do obsługi ruchu e-mail na serwerze Linux. Jeśli coś nie działa zgodnie z opisem w tym artykule, poświęć trochę czasu na sprawdzenie dokumentacji Postfix i Dovecot.

Należy pamiętać, że chociaż konfiguracja serwera pocztowego Postfix nie jest łatwym zadaniem, jest to satysfakcjonujące doświadczenie dla każdego administratora systemu.

Jeśli po przejrzeniu dokumentacji nadal masz problemy z Postfix i/lub Dovecot, nie krępuj się i zostaw nam wiadomość, korzystając z poniższego formularza komentarza, a my z przyjemnością Ci pomożemy pomóc (nie zapomnij przesłać do usługi przechowywania online konfiguracji Postfix i Dovecot pobranej za pomocą postconf i doveconf zgodnie z opisem w tym artykule).