Serwer poczty na FreeBSD 13 (cz. 5): Dovecot — POP3, IMAP i skrzynki
Baza danych gotowa (część 4). Zanim postawimy SMTP (Postfix), instalujemy Dovecot — serwer POP3/IMAP, żeby najpierw zorganizować obsługę skrzynek. Skonfigurujemy Maildir, SSL/TLS, Sieve, quotę oraz uwierzytelnianie kont z bazy MySQL.
📅 Wersje z epoki (2021). To najbardziej „konfiguracyjna" część serii — ścieżki i opcje pochodzą z projektu z 2021 r. (Dovecot 2.x). Sprawdź składnię w dokumentacji swojej wersji.
Instalacja Dovecot (z obsługą MySQL)
Dovecota kompilujemy z portów, włączając opcję MYSQL:
make config -C /usr/ports/mail/dovecot
portmaster -dG mail/dovecot
portmaster -dG mail/dovecot-pigeonholedovecot-pigeonhole dodaje obsługę języka Sieve (RFC 5228) i protokołu ManageSieve (RFC 5804) — interpreter Sieve filtruje przychodzące wiadomości wg skryptu (dostarczanie do folderów, przekazywanie, odrzucanie itd.).


Dodajemy Dovecota do uruchamianych przy starcie systemu i kopiujemy przykładowe pliki konfiguracyjne.

Konfiguracja plików Dovecot
/usr/local/etc/dovecot/conf.d/10-auth.conf:
disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-sql.conf.ext/usr/local/etc/dovecot/conf.d/10-mail.conf:
# miejsce przechowywania skrzynek
mail_location = maildir:/usr/local/virtual/%d/%n
# organizacja folderów w skrzynce
namespace inbox {
type = private
separator = /
mailbox Sent { auto = subscribe special_use = \Sent }
mailbox Drafts{ auto = subscribe special_use = \Drafts }
mailbox Trash { auto = subscribe special_use = \Trash }
mailbox Junk { auto = subscribe special_use = \Junk }
}
# ustawienie uid i gid na vscan
first_valid_uid = 110
last_valid_uid = 110
first_valid_gid = 110
last_valid_gid = 110
# dodatkowe wtyczki
mail_plugins = mail_log notify/usr/local/etc/dovecot/conf.d/10-master.conf:
unix_listener auth-userdb {
mode = 0666
user = vscan
group = vscan
}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
/usr/local/etc/dovecot/conf.d/10-ssl.conf:
ssl = yes
ssl_cert = </usr/local/etc/ssl/dovecot/cert.pem
ssl_key = </usr/local/etc/ssl/dovecot/key.pem
ssl_ca = </usr/local/etc/ssl/dovecot/cert.pem
ssl_verify_client_cert = yes
ssl_dh = </usr/local/etc/ssl/dovecot/dh.pem
ssl_min_protocol = TLSv1.2
/usr/local/etc/dovecot/conf.d/15-lda.conf:
postmaster_address = bartosz@bryniarski.pl
hostname = projekt.brylka.net
sendmail_path = /usr/local/sbin/sendmail
lda_mailbox_autocreate = yes
protocol lda {
mail_plugins = $mail_plugins sieve
}
/usr/local/etc/dovecot/conf.d/20-imap.conf:
protocol imap {
mail_plugins = $mail_plugins quota imap_quota zlib
}
/usr/local/etc/dovecot/conf.d/20-pop3.conf:
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
protocol pop3 {
mail_plugins = $mail_plugins
}
/usr/local/etc/dovecot/conf.d/90-plugin.conf:
plugin {
expire = Trash
mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename
mail_log_fields = uid box msgid size
}
plugin {
sieve = /var/mail/vhosts/%d/%n/.dovecot.sieve
sieve_dir = /var/mail/vhosts/home/%d/%n/sieve
sieve_global_path = /var/mail/vhosts/default.sieve
mail_home = /var/mail/vhosts/%d/%n
}
/usr/local/etc/dovecot/conf.d/90-quota.conf — usługa ostrzegania o przepełnieniu + reguły quoty:
service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
user = dovecot
unix_listener quota-warning {
user = vscan
}
}
plugin {
quota = maildir:User quota
quota_rule = *:storage=1G
quota_rule2 = Trash:storage=+30%%
quota_rule3 = Sent:storage=+30%%
quota_warning = storage=90%% quota-warning 90 %u
quota_warning2 = storage=75%% quota-warning 75 %u
quota_exceeded_message = Storage quota for this account has been exceeded, please try again later.
}
Tworzymy skrypt /usr/local/bin/quota-warning.sh wysyłający informację o przepełnionej skrzynce:

Maildir, Sieve i Maia
Tworzymy katalog na skrzynki oraz domyślny skrypt Sieve, a następnie go kompilujemy:
mkdir -p /var/mail/vhosts
# utwórz /var/mail/vhosts/default.sieve (reguły antyspamowe)
sievec /var/mail/vhosts/default.sieve
Instalujemy Maia‑Mailguard (webowy interfejs do amavisd‑new i SpamAssassin). Włączamy opcje APACHE, DOVECOT2, PFA, POSTFIX, WEBHOST:
make config -C /usr/ports/security/maia
portmaster -dG --no-confirm security/maiaRazem z Maią doinstalują się m.in. Postfix, PostfixAdmin, SpamAssassin — ich konfigurację omówimy w kolejnych częściach.

Zmieniamy hasło użytkownika vscan i nadajemy prawa do katalogu skrzynek:
passwd vscan
Uwierzytelnianie z bazy MySQL
/usr/local/etc/dovecot/dovecot-sql.conf.ext — łączymy Dovecota z bazą postfix (skrzynki + quota):
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix_sql_password
default_pass_scheme = MD5
password_query = SELECT password, CONCAT('*:bytes=', quota) AS userdb_quota_rule \
FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT CONCAT('/usr/local/virtual/', maildir) as home, 110 AS uid, \
110 AS gid, CONCAT('*:bytes=', quota) AS quota_rule \
FROM mailbox WHERE username = '%u' AND active = '1'

Dodajemy użytkownika dovecot do grupy vscan i tworzymy certyfikaty oraz klucze:
pw usermod dovecot -G vscan

Co dalej
W części 6 instalujemy i konfigurujemy Postfix (SMTP) oraz PostfixAdmin — serce wysyłki poczty i zarządzanie domenami/skrzynkami z poziomu WWW.