Każdy z nas wie czym jest poczta e-mail, czym jest serwer poczty elektronicznej i pewnie większość wie, jak wygląda proces od wysłania wiadomości do jej przesłanie i odebrania. W większości ludzie korzystają z darmowych skrzynek portalowych, takich jak wp, onet, interia czy gmail. Mają one niewątpliwie ogromną zaletę. Są darmowe i z reguły niezawodne. Na tym jednak niestety zalety się kończą, no może poza tym, że nie musimy się o nic martwić. Ilość reklam w portalowych skrzynkach potrafi nabawić bólu głowy nawet największych entuzjastów darmowych skrzynek. Na tym polu gmail, yahoo i inni zagraniczni dostawcy, jak choćby protonmail, daleko o lata świetlne wyprzedzają polskie firmy.
Jeśli jednak chcemy mieć pocztę własną, w naszej firmowej domenie to już tak “darmowo” i prosto nie jest. Zarówno w Polskich, jak i zagranicznych portalach istnieje możliwość wykupienia płatnej skrzynki, pozbawionej reklam, we własnej firmowej domenie, ale jest to już jakiś koszt. Kiedy więc o koszty chodzi, czasem warto zastanowić się czy nie lepiej mieć własną pocztę, we własnej domenie, na własnych serwerach. Z pewnością dla jednej czy dwóch skrzynek koszt dobrego serwera będzie przewyższał koszt skrzynki w portalu z firmową domeną, ale dla kilkunastu skrzynek lub kilkudziesięciu własne rozwiązanie często okaże się znacznie bardziej korzystne cenowo.
W dzisiejszym poradniku pokażę wam, jak w prosty sposób uruchomić własny serwer poczty e-mail, we własnej domenie. To nie będzie oczywiście kompendium wiedzy o tym co można zrobić, bo temat jest bardzo obszerny, ale mam nadzieję zarysować i pomóc rozwiać wątpliwości związane z tematem.
Rozeznanie i przygotowania
Mamy na rynku kilka serwerów poczty e-mail. Najbardziej popularne są dwa: postfix oraz exim. Istnieje jeszcze kilka mniejszych silników jak qmail, ale nie jest on już rozwijany od wielu wielu lat, przez co nie warto się nim zajmować.
W dzisiejszym poradniku uruchomimy serwer e-mail na przykładzie Postfix’a. Dorzucimy do niego panel do zarządzania serwerem przez www. Tutaj także mamy dwa najbardziej znane i używane rozwiązania: doskonale wszystkim znany postfixadmin oraz vimbadmin, równie proste, użyteczne i nieco ładniejsze rozwiązanie, które z powodzeniem spotykałem w wielu dużych firmach i to właśnie na przykładzie ViMbAdmin’a powstaje dzisiejszy tekst i rozwiązanie kompleksowego zarządzania serwerem e-mail.
Niezbędne:
- serwer z systemem Linux
- przynajmniej 2x vCPU, 4GB RAM, 40GB dysk (najlepiej SSD lub NVMe)
- domena, którą ustawimy w poczcie
- aplikacja pocztowa – np. darmowy Thunderbird
Przygotowanie serwera
Przygotowanie serwera powinno zacząć się od tego, że system powinien być czysty. Tak jest najlepiej, instalujemy niezbędne pakiety, unikamy konfliktów i problemów z wersjonowaniem. Instalujemy zatem czysty system operacyjny. Na potrzeby niniejszego poradnika będzie to najnowszy Debian 10 Buster.
Instalacja serwera e-mail, pop3, imap
Na początek musimy zainstalować niezbędne pakiety serwera pocztowego:
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql mariadb-server dovecot-sieve dovecot-managesieved
Podczas instalacji konfigurator pakietu zapyta nas o kilka ważnych informacji. Można je także potem zmienić.
Po zainstalowaniu wszystkich pakietów niezbędne będzie wykonanie przynajmniej podstawowej konfiguracji.
Koniecznym jest włączenie w dzisiejszych czasach szyfrowania komunikacji. W innym przypadku portale, głównie te zagraniczne mogą blokować, odrzucać lub przynajmniej oznaczać takie e-maile jako podejrzane. Z pewnością warto wykonać kilka kroków konfiguracyjnych nie tylko dla wpuszczania takich wiadomości, ale też z oczywistych powodów bezpieczeństwa komunikacji.
nano /etc/postfix/master.cf
Aby włączyć komunikację na porcie 587 oraz 465 konieczne będzie ustawienie jak poniżej opcji:
submission inet n – y – – smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_reject_unlisted_recipient=no
smtps inet n – y – – smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
Zapisujemy konfigurację.
Tworzymy niezbędne pliki do obsługi poczty w MySQL przez serwer postfix:
cd /etc/postfix
virtual_alias_maps.cf
user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = vimbadmin
query = SELECT goto FROM alias WHERE address = '%s’ AND active = '1′
virtual_domains_maps.cf
user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = vimbadmin
query = SELECT domain FROM domain WHERE domain = '%s’ AND backupmx = '0′ AND active = '1′
virtual_mailbox_maps.cf
user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = vimbadmin
table = mailbox
select_field = maildir
where_field = username
virtual_transport_maps.cf
user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = vimbadmin
table = domain
select_field = transport
where_field = domain
additional_conditions = and backupmx = '0′ and active = '1′
Konfigurujemy dovecot’a do działania z MySQL:
cd /etc/dovecot
dovecot-sql.conf.ext
driver = mysql
connect = host=localhost user=vimbadmin password=password dbname=vimbadmin
default_pass_scheme = MD5
password_query = SELECT username as user, password as password, \
homedir AS userdb_home, maildir AS userdb_mail, \
concat(’*:bytes=’, quota) as userdb_quota_rule, uid AS userdb_uid, gid AS userdb_gid \
FROM mailbox \
WHERE username = '%Lu’ AND active = '1′ \
AND ( access_restriction = 'ALL’ OR LOCATE( '%Us’, access_restriction ) > 0 )
user_query = SELECT homedir AS home, maildir AS mail, \
concat(’*:bytes=’, quota) as quota_rule, uid, gid \
FROM mailbox WHERE username = '%u’
dovecot-auth-sql.conf.ext
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = prefetch
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
Konfiguracja Dovecot
nano /etc/dovecot/conf.d/10-logging.conf
auth_verbose = no
auth_debug = no
auth_debug_passwords = no
mail_debug = no
verbose_ssl = no
Pozostałe pliki konfiguracyjne:
—
/etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
!include auth-sql.conf.ext
—-
/etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/srv/vmail/%d/%n
namespace inbox {
inbox = yes
}
mail_uid = 2000
mail_gid = 2000
mail_privileged_group = vmail
first_valid_uid = 2000
last_valid_uid = 2000
maildir_copy_with_hardlinks = yes
—
/etc/dovecot/conf.d/20-pop3.conf
protocol pop3 {
mail_plugins = $mail_plugins quota
}
—
/etc/dovecot/conf.d/20-managesieve.conf
service managesieve-login {
inet_listener sieve {
port = 4190
}
service_count = 1
}
service managesieve {
}
protocol sieve {
}
—
/etc/dovecot/conf.d/20-lmtp.conf
protocol lmtp {
postmaster_address = postmaster@example.com
mail_plugins = quota sieve
}
—
/etc/dovecot/conf.d/20-imap.conf
protocol imap {
mail_plugins = $mail_plugins quota imap_quota
}
—
/etc/dovecot/conf.d/15-lda.conf
postmaster_address = postmaster@example.com
hostname = mail.mojapoczta.hosterion.pl
quota_full_tempfail = yes
recipient_delimiter = +
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
protocol lda {
mail_plugins = $mail_plugins sieve quota
}
—
/etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_cert = </etc/postfix/ssl/mojapoczta.hosterion.pl.pem
ssl_key = </etc/postfix/ssl/mojapoczta.hosterion.pl.pem
ssl_require_crl = no
—
/etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
service_count = 0
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0666
user = postfix
}
}
service imap {
}
service pop3 {
}
service auth {
unix_listener auth-userdb {
mode = 0666
user = vmail
group = vmail
}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
service auth-worker {
}
service dict {
unix_listener dict {
}
}
Konfiguracja systemu
Aplikacja serwera pocztowego powinna być uruchomiona z użytkownikiem o niższych uprawnieniach, niż administrator root. W tym celu utworzymy dedykowaną grupę i dedykowanego użytkownika.
groupadd -g 2000 vmail
useradd -c 'Serwer poczty’ -d /srv/vmail -g 2000 -u 2000 -s /usr/sbin/nologin -m vmail
Generujemy certyfikat SSL dla Postfixa, Dovecota
mkdir -p /etc/postfix/ssl
openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/ssl/mojapoczta.hosterion.pl.pem -keyout /etc/postfix/ssl/mojapoczta.hosterion.pl.pem
chmod 0600 /etc/postfix/ssl/mojapoczta.hosterion.pl.pem
Aby dodatkowo wzmocnić bezpieczeństwo, skorzystamy z protokołu Diffiego Hellmana:
for len in 512 1024; do
openssl genpkey -genparam -algorithm DH -out /etc/postfix/dh_${len}.pem \
-pkeyopt dh_paramgen_prime_len:${len}
done
Dodatkowo wstawiamy do konfiguracji postfixa do pliku main.cnf w sekcji # TLS parameters zamiast tego, co tam jest:
smtpd_tls_cert_file = /etc/postfix/ssl/mojapoczta.hosterion.pl.pem
smtpd_tls_key_file = /etc/postfix/ssl/mojapoczta.hosterion.pl.pem
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
smtpd_tls_loglevel = 1
smtpd_tls_auth_only = yes
smtpd_tls_dh1024_param_file = /etc/postfix/dh_1024.pem
smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem
smtpd_tls_eecdh_grade = strong
UWAGA! Pamiętajmy, że powyższe czynności to tak na dobrą sprawę początek. Samopodpisane certyfikaty są dobre do testów, środowisk stagingowych, ale nie powinny być używane w środowiskach produkcyjnych.
Zapisujemy wszystkie zmiany i testujemy, restartujemy serwisy.
systemctl restart dovecot.service
cd /etc/postfix
postmap main.cf
Jeśli komenda nie zwróciła błędów to znaczy, że postfix jest poprawnie skonfigurowany.
Dodajemy informację do postfixa, aby korzystał z użytkowników i ustawień z bazy danych.
virtual_alias_maps = mysql:/etc/postfix/virtual_alias_maps.cf
virtual_gid_maps = static:2000
virtual_mailbox_base = /srv/vmail
virtual_mailbox_domains = mysql:/etc/postfix/virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/virtual_mailbox_maps.cf
virtual_minimum_uid = 2000
virtual_uid_maps = static:2000
#dovecot_destination_recipient_limit = 1
virtual_transport = lmtp:unix:private/dovecot-lmtp
systemctl restart postfix.service
Baza danych
Informacje o użytkownikach, domenach, aliasach itd. będziemy trzymać w bazie danych MySQL, dlatego musimy utworzyć niezbędną bazę i użytkownika dla naszej aplikacji.
CREATE DATABASE `vimbadmin`;
GRANT ALL ON `vimbadmin`.* TO `vimbadmin`@`localhost` IDENTIFIED BY 'password’;
FLUSH PRIVILEGES;
Instalacja PHP 7
Panel administracyjny ViMbAdmin według dokumentacji poprawnie pracuje aż do wersji PHP 7.4. My decydujemy się na PHP7.3 wyłącznie ze względu na to, że wersja ta jest dostępna bez dodatkowych repozytoriów już w Debianie 10.
apt-get install php7.3-cgi php-memcache php7.3-json php7.3-mysql php-gettext libapache2-mod-php7.3 apache2 php-zip zip unzip
Instalacja panelu administracyjnego serwerem pocztowym
export INSTALL_PATH=/srv/vimbadmin
Według mnie najlepszą metodą instalacji i późniejszej aktualizacji panelu jest skorzystanie z repozytorium gita, ale sam panel oferuje jeszcze instalację za pomocą composer’a, tar’a.
git clone https://github.com/opensolutions/ViMbAdmin.git $INSTALL_PATH
cd $INSTALL_PATH
composer install –prefer-dist –no-dev
Ustawiamy niezbędne uprawnienia:
chown -R www-data: $INSTALL_PATH/var
Konfiguracja aplikacji:
cp $INSTALL_PATH/application/configs/application.ini.dist $INSTALL_PATH/application/configs/application.ini
nano $INSTALL_PATH/application/configs/application.ini
resources.doctrine2.connection.options.driver = 'pdo_mysql’
resources.doctrine2.connection.options.dbname = 'vimbadmin’
resources.doctrine2.connection.options.user = 'vimbadmin’
resources.doctrine2.connection.options.password = 'password’
resources.doctrine2.connection.options.host = 'localhost’
cp $INSTALL_PATH/public/.htaccess.dist $INSTALL_PATH/public/.htaccess
Tworzymy tabele w bazie danych dla naszej aplikacji:
cd $INSTALL_PATH
./bin/doctrine2-cli.php orm:schema-tool:create
Konfiguracja vhost’a Apache2
Na początek upewniamy się, że mod_rewrite jest włączony. Jest on niezbędny.
a2enmod rewrite
nano /etc/apache2/conf-available/vimbadmin.conf
Alias /vimbadmin /srv/vimbadmin/public
<Directory /srv/vimbadmin/public>
Options FollowSymLinks
AllowOverride FileInfo
Require all granted
</Directory>
Zapisujemy konfigurację i aktywujemy:
a2enconf vimbadmin
Restartujemy apache2:
systemctl restart apache2
Przechodzimy do naszej strony, na której będzie pracował panel administracyjny. W naszym przypadku będzie to: http://mojapoczta.hosterion.pl/vimbadmin
Powinien pokazać się panel instalatora web.
Zgodnie z informacją, na początku podmieniamy ustawienia w pliku na te, które zostały wygenerowane w trakcie instalacji.
/srv/vimbadmin/application/configs/application.ini
Tworzymy nowego użytkownika:
Jeżeli wszystko zrobiliśmy poprawnie, powinniśmy otrzymać komunikat o poprawnym utworzeniu konta.
Musimy jeszcze wyedytować plik konfiguracyjny, aby wstawić odpowiedni algorytm haszowania haseł w bazie, taki sam, jak ustawimy w Dovecot. Na potrzeby niniejszego artykułu wykorzystamy MD5, ale są mocniejsze i warto z nich skorzystać. Aplikacja obsługuje wiele innych (dużo bezpieczniejszych) sposobów haszowania haseł.
Tworzenie domeny i kont
Ten końcowy etap nie powinien nikomu już sprawić problemów, ale na wszelki wypadek przejdźmy przez niego wspólnie.
Klikamy na górze w “Domain” oraz po prawej stronie na znaczek plusa, aby dodać nową domenę.
Dodajemy nowe konto poczty e-mail:
Sprawdzamy konto przy pomocy programu pocztowego, np. Thunderbird.
Nasz podstawowy serwer jest gotowy.
Podsumowanie
Umówmy się, że jest to wstępniak do prawdziwego systemu pocztowego na własnej infrastrukturze, we własnej domenie i na własnych serwerach. Niniejszy artykuł nie wyczerpuje całkowicie tematu związanego z systemem pocztowym, nie powinien być używany produkcyjnie. To jedynie zajawka do tego co można zrobić i jak to zrobić.
Przed przyszłym administratorem serwera pocztowego jest jeszcze masa pracy do wykonania, aby poprawnie skonfigurować serwer pocztowy, który będzie w pełni bezpieczny, niezawodny i funkcjonalny.
Zostaw komentarz
Musisz się zalogować lub zarejestrować aby dodać nowy komentarz.