Настройка Dovecot

Заключительная часть базовой настройки почтового сервера. Который будет выполнять полноценную работу: функции приема, хранения и отправки сообщений. Обеспечивать возможность подключения через почтовые клиенты.

pacman -S dovecot
# dovecot --version
2.4.2 (0962ed2104)

Включаем автозагрузку:

systemctl enable dovecot

Создай пользователя и группу vmail:

getent passwd vmail || useradd -r -d /srv/mail -s /usr/bin/nologin vmail
getent group vmail  || groupadd -r vmail
usermod -g vmail vmail 2>/dev/null || true

Назначим права на каталог почты:

chmod 0700 /srv/mail/
chown -R vmail:vmail /srv/mail

Открываем конфигурационный файл:

nano /etc/dovecot/dovecot.conf

Сотрите все содержимое файла и добавьте параметры ниже.

# -------------------------------------------------------------------
# Include / modular config
# -------------------------------------------------------------------
!include_try conf.d/*.conf


# -------------------------------------------------------------------
# Protocols
# Enable the required protocols:
# - IMAP for mailbox access
# - LMTP for local mail delivery (e.g., from Postfix)
# -------------------------------------------------------------------
protocols {
  imap = yes
  lmtp = yes
}


# -------------------------------------------------------------------
# Mail storage (Maildir)
# Store mail in Maildir format under user's home directory
# -------------------------------------------------------------------
mail_driver = maildir
mail_path = ~/Maildir

namespace inbox {
  inbox = yes
  separator = /

  mailbox Trash {
    auto = create
    special_use = \Trash
  }
}

# -------------------------------------------------------------------
# Authentication (virtual users from file, no PAM)
# IMPORTANT:
# Do NOT use PAM to avoid binding authentication to system users.
# Authenticate virtual users from a password file instead.
# -------------------------------------------------------------------
auth_username_format = %{user | username}
auth_mechanisms = plain login

passdb passwd-file {
  passwd_file_path = /etc/dovecot/passwd
}

userdb static {
  fields {
    uid  = vmail
    gid  = vmail
    home = /srv/mail/%{user | username}
  }
}

# -------------------------------------------------------------------
# TLS / SSL
# Require TLS and use Let's Encrypt certificates
# -------------------------------------------------------------------
ssl = required
ssl_server {
  cert_file = /etc/letsencrypt/live/mx.codebeer.ru/fullchain.pem
  key_file  = /etc/letsencrypt/live/mx.codebeer.ru/privkey.pem
  dh_file   = /etc/dovecot/dh.pem
}

ssl_server_prefer_ciphers = server
ssl_min_protocol = TLSv1.2


# -------------------------------------------------------------------
# Services / sockets for Postfix integration
# -------------------------------------------------------------------
# LMTP socket for Postfix -> Dovecot delivery (to Maildir)
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

# SASL auth socket for Postfix (submission/587)
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

Обратите внимание на строки:

cert_file = /etc/letsencrypt/live/mx.codebeer.ru/fullchain.pem
key_file  = /etc/letsencrypt/live/mx.codebeer.ru/privkey.pem

Здесь нужно указать свой путь к файлам сертификата и ключа.

Далее необходимо сгенерировать сертификат Диффи-Хелмана:

openssl dhparam -out /etc/dovecot/dh.pem 4096

Далее необходимо создать файл с логинами и паролями, для подключения пользователей к почтовому серверу.
В примере ниже, я создаю аккаунт admin:

PASS='yFUTHESZIoqvLtFkbqiXbPypxIUQfcPL'
HASH="$(doveadm pw -s BLF-CRYPT -p "$PASS")"

printf "admin:%s\n" "$HASH" | tee /etc/dovecot/passwd >/dev/null
chown root:dovecot /etc/dovecot/passwd
chmod 640 /etc/dovecot/passwd

Перезапускаем Dovecot

systemctl restart dovecot

Включаем автозагрузку Dovecot, делаем рестарт сервиса, проверяем состояние процесса.

mkdir -p /etc/systemd/system/dovecot.service.d

cat > /etc/systemd/system/dovecot.service.d/restart.conf <<'EOF'
[Unit]
StartLimitIntervalSec=300
StartLimitBurst=5

[Service]
Restart=on-failure
RestartSec=5s
EOF

Применяем настройки:

systemctl daemon-reload
systemctl restart dovecot

Проверим, что Dovecot подымается после падения:

kill -9 $(pidof dovecot | awk '{print $1}')
sleep 2
systemctl --no-pager -l status dovecot
journalctl -u dovecot -n 30 --no-pager

После настройки необходимо выполнить базовую проверку работы авторизации:

doveadm auth test 'admin' 'ТВОЙ_ПАРОЛЬ'

Должно отобразится сообщение:

passdb: admin auth succeeded
extra fields:
  user=admin

Отправка тестового сообщения:

echo test | sendmail -v [email protected]
Mail Delivery Status Report will be mailed to .

Проверяем доставку файла:

# find /srv/mail/admin/Maildir -maxdepth 2 -type f \( -path '*/new/*' -o -path '*/cur/*' \) | tail
/srv/mail/admin/Maildir/cur/1770503717.M975925P7891.mx.powervps.net,S=1006,W=1029:2,a