Перейти к основному содержимому
Вернуться в категорию

Настройка почтового сервера: Postfix и Dovecot

Полное руководство по настройке Postfix MTA, Dovecot IMAP/POP3, конфигурации SSL/TLS, поддержке виртуальных доменов, фильтрации спама и Docker Mail Server.

Время чтения: 20 мин Электронная почта
mailpostfixdovecotsmtpimapsslспам-фильтрdocker

Содержание

Настройка почтового сервера: Postfix и Dovecot

Настройка собственного почтового сервера даёт полный контроль над электронной почтой. В этом руководстве рассматривается Postfix MTA, Dovecot IMAP/POP3, конфигурация SSL/TLS, поддержка виртуальных доменов и Docker Mail Server.

Управление почтовым сервером сложно и требует постоянного обслуживания. Репутация IP, фильтрация спама и обновления безопасности должны регулярно контролироваться.

Предварительные требования

DNS-записи

# A-запись — IP почтового сервера
mail.example.com    A       185.x.x.x

# MX-запись — маршрутизация почты
example.com         MX  10  mail.example.com

# SPF-запись
example.com         TXT     "v=spf1 mx ip4:185.x.x.x -all"

# Обратная DNS (PTR) запись
185.x.x.x           PTR     mail.example.com

PTR-запись (обратная DNS) может быть настроена через панель клиента REXE или через запрос в поддержку. Письма без PTR-записи могут быть помечены как спам.

Настройка hostname

hljs bash
sudo hostnamectl set-hostname mail.example.com
echo "185.x.x.x mail.example.com mail" | sudo tee -a /etc/hosts
hostname -f

Установка Postfix (MTA)

hljs bash
sudo apt update
sudo apt install postfix postfix-mysql -y
# Выберите "Internet Site" при установке

Базовая конфигурация

hljs ini
# /etc/postfix/main.cf
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost

inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8

home_mailbox = Maildir/

# Настройки TLS
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_use_tls = yes
smtpd_tls_auth_only = yes

# Аутентификация SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

# Ограничения
smtpd_recipient_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unauth_destination,
    reject_invalid_hostname,
    reject_non_fqdn_hostname,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    reject_rbl_client zen.spamhaus.org

message_size_limit = 52428800

Порт Submission (587)

hljs ini
# /etc/postfix/master.cf
submission inet n       -       y       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_auth_only=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

Установка Dovecot (IMAP/POP3)

hljs bash
sudo apt install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd -y

Конфигурация

hljs bash
# /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp

# /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir

# /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login

# /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
ssl_min_protocol = TLSv1.2

# /etc/dovecot/conf.d/10-master.conf
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}

SSL/TLS-сертификат

hljs bash
sudo apt install certbot -y
sudo certbot certonly --standalone -d mail.example.com

Docker Mail Server (альтернатива)

hljs yaml
version: '3.8'
services:
  mailserver:
    image: ghcr.io/docker-mailserver/docker-mailserver:latest
    container_name: mailserver
    hostname: mail.example.com
    ports:
      - "25:25"
      - "465:465"
      - "587:587"
      - "993:993"
    volumes:
      - ./docker-data/dms/mail-data/:/var/mail/
      - ./docker-data/dms/mail-state/:/var/mail-state/
      - ./docker-data/dms/mail-logs/:/var/log/mail/
      - ./docker-data/dms/config/:/tmp/docker-mailserver/
      - /etc/letsencrypt:/etc/letsencrypt:ro
    environment:
      - ENABLE_SPAMASSASSIN=1
      - ENABLE_CLAMAV=1
      - ENABLE_FAIL2BAN=1
      - SSL_TYPE=letsencrypt
    restart: always
hljs bash
docker exec -it mailserver setup email add user@example.com
docker exec -it mailserver setup config dkim
docker compose up -d

Фильтрация спама

hljs bash
sudo apt install spamassassin spamc -y
sudo systemctl enable spamassassin
sudo systemctl start spamassassin

Тестирование и проверка

hljs bash
sudo systemctl status postfix
sudo systemctl status dovecot
sudo ss -tlnp | grep -E '25|587|993|995'
echo "Тестовое письмо" | mail -s "Тест" user@example.com
sudo tail -f /var/log/mail.log
openssl s_client -connect mail.example.com:587 -starttls smtp
openssl s_client -connect mail.example.com:993

После настройки проверьте свой спам-рейтинг на mail-tester.com. Убедитесь, что SPF, DKIM и DMARC правильно настроены для получения оценки 10/10.

Заключение

Настройка собственного почтового сервера обеспечивает полный контроль, но требует регулярного обслуживания. Комбинация Postfix + Dovecot предлагает надёжное решение, а Docker Mail Server обеспечивает более простое управление.