Почтовый сервер

Поднимаем собственный почтовый сервер

7.04.23
17.08.23

Ели по каким-то причинам не хотите или не можете использовать бесплатные или условно бесплатные почтовые сервисы от известных провайдеров, то это статья о том как настроить собственный почтовый сервер.

Вначале несколько слов о том как работает почта.

Все входящие письма, предназначенные для вашего сервера, должны приниматься MTA у нас это Postfix (SMTP), а затем передаваться MDA, у нас это Dovecot (LMTP) для хранения в папке «Входящие». Схематически можно представить так:

Incoming mail (Входящая почта откуда-либо) -> MTA: Postfix (SMTP) 
-> MDA: Dovecot (LMTP) -> MailBox/Inbox (локальное хранение)

В общем виде пересылка почтовых сообщений происходит по следующей схеме:
Отправитель использует Mail User Agent (MUA) или почтовый клиент, для отправки сообщения через один или несколько Mail Transfer Agents (MTA). Последний из которых, передает его Mail Delivery Agent (MDA) для доставки в почтовый ящик получателя, откуда оно будет получено почтовым клиентом получателя, обычно через сервер POP3 или IMAP.

Dovecot будет через IMAP/POP предоставлять почтовым клиентам доступ к входящий почте.

Все исходящие письма должны отправляться с помощью Postfix. Но только с аутентифицированных учетных записей. Схема такая:

Outgoing mail MUA (Thunderbird/Outlook) -> MTA: Postfix (SMTP)
-> Destination (SMTP) типа Яндекс/Майл/Gmail

Весь план работ выглядит так:

  • Установка и настройка MTA (Mail Transfer Agent). В нашем случае это Postfix
  • Установка и настройка MDA (Mail Delivery Agent). Это будет Dovecot

Это два обязательных сервиса. Есть ещё дополнительные, но о них позже.

Установка и настройка Postfix

Как уже сказал ранее, роль MTA у нас будет выполнять Postfix. Есть ещё похожие MTA, например exim4, но если вы также используете сервер на базе Ubuntu, то тут Postfix используется по умолчанию. И, соответственно, в Ubuntu 20.04 установка проста:

sudo apt install postfix

Если Postfix установлен ранее, то можно сделать реконфигурацию повторно:

sudo dpkg-reconfigure postfix

Далее, ответьте на вопросы:

Почтовый сервер

Нужно выбрать «Интернет-сайт», затем указать свой домен:

Затем указать имя пользователя, который будет получать системную почту, указать все поддомены для которых вы получаете почту, что-то типа: mail.example.com, localhost.localdomain, localhost и ещё ответить на ряд вопросов. Комментарии там подробные.

Все установки сохраняются в файле:

/etc/postfix/main.cf

Тут надо обратить внимание на две важных установки:

  • myorigin
  • myhostname

Если на сервере несколько почтовых доменов, то нужно выбрать один из них в качестве myorigin. Именно этот домен будет использован в качестве системных ответов, например, Mail Delivery System<MAILER-DAEMON@myorigin>. Обычно myorigin устанавливается в файле /etc/mailname Можно установить в файле в первой строке или можно напрямую установить

myorigin = example.com

myhostname это имя вашего сервера. Это именно то имя, которое должно быть прописано в поле MX в DNS. Это же имя должно быть указано и в поле SPF. Неплохой вариант это:

myhostname = mail.example.com

Следующий шаг — хранилище писем

Разных вариантов много, например, можно установить параметр home_mailbox = Maildir/ и в этом случае почта будет храниться в домашнем каталоге пользователя. Что-то типа: /home/user/Maildir/ Но в этом случае надо всем пользователям создавать домашние каталоги на сервере, если это ваш случай, то выбирайте этот вариант. Не забудьте в конце Maildir/ поставить слеш, тогда письма будут разбиваться на файлы. Иначе будут храниться в одном.

Либо можно хранить все письма в /var/mail или /var/spool/mail Это определяет параметр mail_spool_directory = /var/mail Тогда вся почта будет храниться в этом каталоге. Если у вас довольно много абонентов (100 и более), то вероятно, надо посмотреть в сторону БД.

Все эти установки делаем в файле /etc/postfix/main.cf Можно напрямую править конфиг, либо использовать команду postconf например: sudo postconf -e ‘mail_spool_directory = /var/mail’ (кавычки обязательны).

SMTP Authentication

SMTP аутентификация позволяет клиенту идентифицировать себя через механизм аутентификации SASL, используя Transport Layer Security (TLS) для шифрования процесса аутентификации. После аутентификации SMTP-сервер разрешает клиенту передавать почту.

Если рассматривать в связке с Dovecot-ом, то настройки будут такие:

postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_security_options = noanonymous,noplaintext'
postconf -e 'smtpd_sasl_tls_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'smtpd_relay_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'

Здесь мы сделали важные настройки, если их не сделать, спамеры быстро найдут ваш сервер и будут использовать его для рассылки.

Далее, надо выпустить сертификаты. Можно сделать это от Lets’encript либо самоподписные. После чего настраиваем TLS

postconf -e 'smtp_tls_security_level = may'
postconf -e 'smtpd_tls_security_level = may'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_key_file = /etc/ssl/private/server.key'
postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/server.crt'
postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'

Установка и настройка Dovecot

Чтобы установить базовый сервер Dovecot с общими функциями POP3 и IMAP, выполните следующую команду:

apt install dovecot-imapd dovecot-pop3d

Далее, основной файл конфигурации — /etc/dovecot/dovecot.conf Если в него заглянуть, то можно увидеть два включения: !include conf.d/*.conf и !include_try /usr/share/dovecot/protocols.d/*.protocol

В директории conf.d находятся все файлы настроек. Многое понятно из их названия.
Надо обратить внимание на три файла:

  • /etc/dovecot/conf.d/10-master.conf
  • /etc/dovecot/conf.d/10-ssl.conf
  • /etc/dovecot/conf.d/10-mail.conf

В первом надо установить авторизацию:

service auth {
  ...
# Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
...
}

Во втором задать сертификаты, там всё просто, надо подставить ссылки на сертификаты.

ssl_cert = </etc/dovecot/private/dovecot.pem

ssl_key = </etc/dovecot/private/dovecot.key

В третьем настроить хранилище писем. Там хорошая аннотация, однако, не всё просто. Для начала сделаем почту для тех пользователей, у которых есть аккаунты на сервере (pam-атентификация). Лучше избрать вариант хранения писем Maildir. Для этого надо выполнить команду для Postfix’a:

postconf -e 'home_mailbox = Maildir/'

Либо просто добавьте «home_mailbox = Maildir/» в файл /etc/postfix/main.cf
Далее, в файле /etc/dovecot/conf.d/10-mail.conf надо добавить или раскомментировать строку:

mail_location = maildir:~/Maildir:LAYOUT=fs

параметр LAYOUT=fs регламентирует формат почты по директориям.

Aliases (синонимы)

Если публикуете свои адреса где-угодно, то довольно скоро ваш ящик будет заваливать спамом. Неплохая идея — создавать синонимы и их публиковать. Когда спама станет нестерпимо много, синоним можно настроить на более жёсткую обработку спам-фильтром (поговорим позже), либо вообще удалить.

За синонимы отвечает файл: /etc/aliases Его формат простой: alias: user Пример:

# See man 5 aliases for format
postmaster: alex_pushkin

После редактирования файла надо выполнить команду: postalias /etc/aliases

Надо перезапустить postfix и dovecot:

systemctl restart postfix.service
systemctl restart dovecot.service

На этом базовая настройка закончена и почтовый сервер должен работать. Не забудьте открыть порты.
Для Dovecot это 110, 143, 993, 995 и для Postfix это 25, 465, 587

Следующим этапом можно настроить DKIM запись для всех исходящих писем. Вот краткая инструкция. И, избавиться от некоторых заголовков — вот инструкция