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

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

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

Время чтения: 20 мин Электронная почта
mailpostfixdovecotsmtpimapsslспам-фильтрdocker
Автор
REXE Teknoloji Network & Security Team
Редактор
REXE Teknoloji Technical Editorial
Первая публикация
Последнее обновление

Настройка почтового сервера: 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 обеспечивает более простое управление.

Часто задаваемые вопросы

Стоит ли настраивать свой почтовый сервер или использовать внешний сервис?

Собственный сервер обеспечивает полный контроль, но требует обслуживания. Для небольшого числа пользователей с техническими знаниями собственный сервер может подойти. Для крупных организаций рекомендуются сервисы типа Google Workspace.

Почему мои письма попадают в спам?

Это может быть связано с отсутствием или ошибками в записях SPF, DKIM и DMARC, отсутствием PTR-записи, нахождением IP в чёрном списке или фильтрами содержимого.

Почему важна PTR-запись (обратная DNS)?

PTR-запись разрешает ваш IP-адрес в доменное имя. Многие почтовые серверы отклоняют или помечают как спам письма от серверов без PTR-записи.

Docker Mail Server или ручная установка?

Docker Mail Server предоставляет все компоненты в одном контейнере и упрощает управление. Ручная установка предлагает больше возможностей настройки, но сложнее.

Какие порты должны быть открыты для почтового сервера?

SMTP: 25, Submission: 587, SMTPS: 465, IMAPS: 993, POP3S: 995. Рекомендуется закрыть незашифрованные порты (110, 143).

Связанные статьи

Настройка SPF, DKIM и DMARC

Полное руководство по настройке SPF-записей, DKIM-подписи, политик DMARC, DNS-записей и инструментов тестирования для повышения доставляемости и безопасности электронной почты.

15 мин
spfdkimdmarc
Сетевой трафикВходящий GbpsИсходящий Gbps