Почтовый сервер с нуля. Часть первая.
Настраиваем Exim4, DNS-записи и защиту почтового сервера
В этой статье рассмотрим принципы работы электронной почты и настройку Exim4 — гибкого почтового сервера, который поддерживает различные варианты конфигурации. Также разберём основные DNS-записи, настройку DKIM, маршрутизацию сообщений, управление очередью, шифрование и аутентификацию.
В качестве основы для полноценного почтового решения рассматривается связка Exim4, Dovecot, PostfixAdmin и RainLoop. В первой части основное внимание уделено Exim4 и подготовке почтовой инфраструктуры.
Как работает электронная почта
Обмен электронными письмами основан на нескольких протоколах и механизмах, которые отвечают за передачу сообщений между серверами и доступ пользователей к почтовым ящикам.
Протокол SMTP
SMTP (Simple Mail Transfer Protocol) — протокол передачи электронной почты. Когда пользователь отправляет письмо через почтовый клиент, например Outlook или Gmail, клиент передаёт сообщение почтовому серверу отправителя. Затем сервер определяет, куда направить письмо, и организует его доставку получателю.
Для передачи сообщений SMTP обычно использует порт 25. Для отправки почты клиентами через сервер применяется порт 587.
Чтобы определить почтовый сервер получателя, отправитель обращается к DNS и получает MX-записи домена. Они указывают, какие серверы обрабатывают входящую почту для этого домена.
Защищённое соединение
Для защиты передачи данных используются SSL/TLS. Эти технологии позволяют шифровать соединение между почтовыми клиентами и серверами, а также между серверами, снижая риск перехвата сообщений.
Протоколы POP3 и IMAP
Для получения почты применяются два основных протокола:
- POP3 (Post Office Protocol 3) — позволяет загружать письма на устройство пользователя. В зависимости от настроек загруженные сообщения могут удаляться с сервера.
- IMAP (Internet Message Access Protocol) — хранит сообщения на сервере и синхронизирует изменения между устройствами пользователя.
По мере роста объёма электронной почты возрастает значение надёжного хранения сообщений, защиты от спама и обеспечения безопасности почтовой инфраструктуры.
Основные компоненты почтового сервера
В рассматриваемой конфигурации используются Exim4, Dovecot, PostfixAdmin и RainLoop. Каждый компонент выполняет свою задачу.
MTA, MUA и MDA
В архитектуре почтовых систем применяются три основных понятия:
- MTA (Mail Transfer Agent) — агент передачи почты. Он отвечает за отправку и маршрутизацию сообщений между почтовыми серверами. Примеры MTA — Exim и Postfix.
- MUA (Mail User Agent) — почтовый клиент, с помощью которого пользователь читает, отправляет и организует письма. В качестве MUA могут выступать настольные приложения и веб-интерфейсы, например RainLoop.
- MDA (Mail Delivery Agent) — агент доставки почты, который помещает сообщения в почтовые ящики и может выполнять дополнительные задачи, связанные с обработкой и сортировкой писем. Dovecot обеспечивает доступ к почтовым ящикам и поддерживает протоколы IMAP и POP3.
Используемые компоненты
- Exim4 — агент передачи почты. Он применяется в Unix-подобных операционных системах и предоставляет гибкие возможности настройки маршрутизации и обработки сообщений.
- Dovecot — компонент для работы с почтовыми ящиками. Он обеспечивает доставку и хранение писем, а также доступ к ним через IMAP и POP3.
- PostfixAdmin — инструмент управления почтовым сервером с веб-интерфейсом. Он позволяет администрировать основные параметры почтовой системы.
- RainLoop — веб-клиент электронной почты. Он предоставляет пользователям интерфейс для чтения, отправки и организации сообщений.
Как проходит отправка письма
Процесс передачи сообщения можно разделить на несколько этапов:
1. Создание письма. Почтовый клиент (MUA) формирует сообщение, указывая содержимое и адрес получателя.
2. Передача серверу отправителя. Клиент передаёт письмо агенту MTA. Обычно при отправке через SMTP Submission требуется аутентификация. В веб-интерфейсе механизм передачи может отличаться.
3. Определение сервера получателя. MTA отправителя использует DNS-записи MX или A, чтобы определить сервер и его IP-адрес.
4. Передача сообщения. Письмо отправляется на сервер получателя по SMTP.
5. Обработка входящего сообщения. Сервер получателя решает, следует ли доставить письмо локально или перенаправить его на другой сервер.
6. Доставка в почтовый ящик. MDA помещает сообщение в почтовый ящик получателя и при необходимости выполняет дополнительные операции, например фильтрацию спама.
7. Получение письма. Получатель открывает сообщение через почтовый клиент, используя POP3, IMAP или веб-интерфейс.
Настройка Exim4
Exim4 — гибкий почтовый сервер, который позволяет настраивать обработку сообщений, маршрутизацию, аутентификацию и другие параметры почтового обмена.
Установка Exim4
В Debian и Ubuntu обновите список пакетов и установите Exim4:
sudo apt-get update
sudo apt-get install exim4
В CentOS установка выполняется командой:
sudo yum install exim
После установки можно переходить к настройке сервера и DNS-записей, необходимых для отправки и получения почты.
Основная конфигурация
В Debian и Ubuntu основные параметры задаются в файле /etc/exim4/update-exim4.conf.conf. В CentOS конфигурация располагается в /etc/exim/exim.conf.
Изменить основные параметры можно также с помощью команды:
sudo dpkg-reconfigure exim4-config
Основные параметры:
- dc_eximconfig_configtype — тип конфигурации. Значение internet подразумевает отправку и приём почты через интернет.
- dc_other_hostnames — дополнительные доменные имена, которые обрабатывает Exim4.
- dc_local_interfaces — сетевые интерфейсы, на которых сервер принимает соединения. В примере указаны локальный интерфейс и внешний IP-адрес.
- dc_readhost — имя хоста, используемое в сообщениях.
- dc_relay_domains — домены, для которых сервер выполняет ретрансляцию.
- dc_minimaldns — определяет, используется ли минимальная конфигурация DNS.
- dc_relay_nets — IP-адреса, с которых разрешена ретрансляция почты.
- dc_smarthost — адрес внешнего почтового сервера, если используется промежуточный узел отправки.
- CFILEMODE — режим доступа к конфигурационным файлам.
- dc_use_split_config — определяет, используется ли разделённая конфигурация.
- dc_hide_mailname — параметр управления отображением локального имени почтового сервера.
- dc_mailname_in_oh — определяет, включается ли локальное имя хоста в заголовки отправленных сообщений.
- dc_localdelivery — способ локальной доставки почты. Значение mail_spool указывает на использование почтового хранилища.
В примере используются следующие обозначения:
- DOMAIN.RU — доменное имя сервера, указанное в обратной зоне.
- EXTERNAL_IP — внешний IP-адрес сервера.
- RELAY_FROM_HOST_IPs — IP-адреса дополнительных серверов, которым разрешена ретрансляция.
В файле /etc/exim4/exim4.conf.template также необходимо учитывать два параметра:
- primary_hostname — основное имя хоста, используемое Exim4 при формировании сообщений.
- qualify_domain — домен, который добавляется к неполному имени пользователя. Например, к адресу user может быть добавлен домен, указанный в этом параметре.
Настройка DNS-записей
Для корректной отправки и доставки электронной почты необходимо настроить DNS-записи MX, SPF, DKIM, DMARC и PTR. Они помогают определить почтовые серверы домена, проверить подлинность отправителя и установить соответствие между доменным именем и IP-адресом.
MX — определение почтового сервера
MX (Mail Exchange) указывает, какие серверы обрабатывают входящую почту для домена.
Пример записи:
DOMAIN.RU. IN MX priority mail_server_domain
Здесь:
- priority — числовой приоритет сервера. Чем меньше значение, тем выше приоритет.
- mail_server_domain — доменное имя сервера, который обрабатывает почту.
Проверить запись можно командой:
dig MX DOMAIN_NAME
SPF — проверка разрешённых отправителей
SPF (Sender Policy Framework) определяет, какие серверы имеют право отправлять письма от имени домена. Это помогает обнаруживать поддельные адреса отправителя.
Пример записи:
DOMAIN.RU. IN TXT "v=spf1 arguments"
Основные аргументы:
- v=spf1 — обязательный идентификатор версии SPF.
- +a — разрешает отправку с серверов, указанных в A-записях.
- +mx — разрешает отправку с серверов, указанных в MX-записях.
- ip4:EXTERNAL_IP — разрешает отправку с указанного IPv4-адреса.
- ~all — задаёт мягкий отказ для отправителей, которые не соответствуют перечисленным правилам.
Проверить TXT-запись можно командой:
dig TXT DOMAIN_NAME
DMARC — политика обработки писем
DMARC (Domain-based Message Authentication, Reporting, and Conformance) объединяет механизмы SPF и DKIM и позволяет задавать правила обработки сообщений, не прошедших проверку. Кроме того, DMARC поддерживает отправку отчётов о результатах проверок.
Пример записи:
_dmarc.DOMAIN.RU. IN TXT "v=DMARC1; p=policy; pct=percentage; rua=mailto:address; ruf=mailto:address; sp=action; aspf=alignment; fo=flag"
Параметры записи:
- v=DMARC1 — версия DMARC.
- p=policy — политика обработки сообщений, например reject для отклонения сообщений, не прошедших проверку.
- pct=percentage — доля сообщений, к которым применяется политика.
- rua=mailto:address — адрес для получения сводных отчётов.
- ruf=mailto:address — адрес для получения подробных отчётов.
- sp=action — политика для поддоменов.
- aspf=alignment — режим сопоставления SPF: r для ослабленного или s для строгого.
- fo=flag — параметр формирования отчётов о сбоях проверки.
Проверить запись можно командой:
dig +short -ttxt _dmarc.DOMAIN.RU
DKIM — цифровая подпись сообщений
DKIM (DomainKeys Identified Mail) позволяет проверять подлинность отправителя с помощью цифровой подписи. Отправляющий сервер подписывает сообщение закрытым ключом, а принимающий сервер проверяет подпись с использованием открытого ключа, опубликованного в DNS.
Для генерации ключей установите пакет opendkim-tools:
apt update
apt install opendkim-tools
Создайте каталог для хранения ключей:
mkdir /etc/exim4/dkim
cd /etc/exim/dkim
Создайте файл, в котором будут описаны расположение ключей и параметры подписи для доменов:
touch /etc/exim4/dkim_domain
Добавьте в него запись следующего вида:
DOMAIN.RU.: key=/etc/exim4/dkim/scfh.ru.key selector=DKIM_SELECTOR
Затем сгенерируйте открытый и закрытый ключи:
opendkim-genkey -D /etc/exim4/dkim/ -d DOMAIN.RU -s DKIM_SELECTOR -b 1024
DKIM_SELECTOR — селектор, по которому принимающий сервер находит открытый ключ. В качестве селектора часто используют mail.
В результате будут созданы два файла: mail.private с закрытым ключом и mail.txt с открытым ключом, который необходимо опубликовать в DNS. Для удобства дальнейшей настройки переименуйте файлы:
mv /etc/exim4/dkim/mail.private /etc/exim4/dkim/DOMAIN.RU.key
mv /etc/exim4/dkim/mail.txt /etc/exim4/dkim/DOMAIN.RU.txt
Настройте права доступа:
chown -R root:Debian-exim /etc/exim4/dkim
chmod 750 /etc/exim4/dkim
chmod 640 /etc/exim4/dkim/DOMAIN.RU.key
chmod 640 /etc/exim4/dkim/DOMAIN.RU.txt
Теперь укажите расположение ключей в конфигурации Exim4. В начало файла /etc/exim4/exim4.conf.template добавьте:
DKIM_DOMAIN = ${lookup{$sender_address_domain}lsearch*@{/etc/exim4/dkim_domain}{$sender_address_domain}{}}
DKIM_PRIVATE_KEY = ${extract{key}{${lookup{$sender_address_domain}lsearch*@{/etc/exim4/dkim_domain}}}{$value}{}}
DKIM_SELECTOR = ${extract{selector}{${lookup{$sender_address_domain}lsearch*@{/etc/exim4/dkim_domain}}}{$value}{}}
В блок remote_smtp того же файла добавьте параметры подписи:
remote_smtp:
driver = smtp
dkim_domain = DKIM_DOMAIN
dkim_selector = $DKIM_SELECTOR
dkim_private_key = DKIM_PRIVATE_KEY
В параметре $DKIM_SELECTOR указывается селектор, заданный при генерации ключа. DKIM_DOMAIN и DKIM_PRIVATE_KEY используются как переменные конфигурации.
В описанной конфигурации для всех доменов применяется один селектор DKIM. Если для первого домена используется селектор mail, такой же селектор должен быть настроен и для остальных доменов.
После создания ключей добавьте TXT-запись в DNS-зону домена. Её содержимое находится в файле DOMAIN.RU.txt. Пример:
DKIM_SELECTOR._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWtRUr0hse/k2csH1KtA3YrM2hrSiDxyhRDEV53LvDxjcN8rH5913j0N/5P48kotw0tVKlyaW6x9sJJPs7fjCsuoSQNQUpwjJrPKjH/r7fTBESFMOx6SHMpIC57GadCCmQfGEiI0IHPG0zqakDNUKtLaWBc71BLdRAApsbZ97ooQIDAQAB" )
Обновление DNS-записей может занимать до 72 часов, хотя на многих DNS-серверах изменения становятся доступны примерно в течение часа.
Проверить наличие записи через DNS-сервер Google можно командой:
dig @8.8.8.8 +short -ttxt DKIM_SELECTOR._domainkey.DOMAIN.RU
PTR — обратное разрешение имени
PTR-запись используется для обратного сопоставления IP-адреса с доменным именем. Она важна для проверки репутации почтового сервера при отправке сообщений.
В рассматриваемой конфигурации PTR-запись должна соответствовать имени, указанному в primary_hostname, и внешнему IP-адресу сервера.
Настроить запись можно через панель управления дата-центра или обратившись в службу технической поддержки, если самостоятельное управление обратной зоной не предусмотрено.
Для проверки используется команда:
dig -x DOMAIN_NAME

В примере из исходной конфигурации используются домен nixysmail.ru и IP-адрес 1.2.3.4.
Основные механизмы Exim4
После настройки DNS можно перейти к основным механизмам обработки сообщений в Exim4: маршрутизации, транспортам и управлению очередью.
Маршрутизация сообщений
Маршрутизация определяет, куда должно быть передано письмо. Для этого Exim4 использует маршрутизаторы — routers. После определения маршрута транспорт (transport) выполняет доставку сообщения: например, помещает письмо в локальный почтовый ящик или отправляет его на удалённый сервер через SMTP.
Пример настройки маршрутизаторов:
begin routers
local_user:
driver = accept
domains = +local_domains
check_local_user
transport = local_delivery
smtp_transport:
driver = smtp
hosts_try_auth = *
remote_smtp:
driver = smtp
dkim_domain = DKIM_DOMAIN
dkim_selector = $DKIM_SELECTOR
dkim_private_key = DKIM_PRIVATE_KEY
Здесь local_user обрабатывает сообщения для локальных пользователей, а remote_smtp отвечает за отправку почты на удалённые SMTP-серверы и использует параметры DKIM.
Настройка транспортов
Транспорт определяет, каким способом будет доставлено сообщение после выбора маршрута.
Пример конфигурации:
begin transports
local_delivery:
driver = appendfile
file = /var/mail/$local_part
delivery_date_add
envelope_to_add
return_path_add
group = Debian-exim
mode = 660
use_crlf
return_size_limit = 100K
directory = /var/mail
create_directory
user = Debian-exim
mode_fail_narrower = false
no_mode_fail_narrower
remote_smtp:
driver = smtp
hosts_try_auth = *
hosts_avoid_tls = *
tls_verify_certificates = /etc/ssl/certs/ca-certificates.crt
В этой конфигурации:
- local_delivery выполняет локальную доставку и сохраняет сообщения в /var/mail.
- driver = appendfile указывает на запись сообщения в файл.
- file задаёт путь к файлу почтового ящика.
- delivery_date_add, envelope_to_add и return_path_add добавляют в сообщение сведения о доставке и обратном пути.
- group и mode определяют группу и права доступа к файлам.
- directory задаёт каталог хранения почты.
- create_directory разрешает создание каталога, если он отсутствует.
- user задаёт пользователя, от имени которого выполняется доставка.
- remote_smtp использует SMTP для передачи сообщений на удалённые серверы.
Почтовые домены и пользователи
Почтовый домен — это домен, для которого Exim4 обрабатывает сообщения. Пользователи такого домена связаны с почтовыми ящиками.
Exim4 может обрабатывать почту для локальных пользователей и маршрутизировать сообщения во внешние домены. Для определения маршрута используются DNS-записи. В зависимости от конфигурации письмо может отправляться напрямую на сервер получателя или через промежуточный ретранслятор.
Управление очередью сообщений
Очередь Exim4 хранит сообщения, которые ожидают отправки. Это позволяет повторять попытки доставки при временных сбоях сети или недоступности принимающего сервера.
Процессы обработки очереди регулярно проверяют ожидающие сообщения и выполняют отправку согласно заданным параметрам. Сообщения могут ожидать отправки, находиться в процессе обработки, быть успешно отправленными или завершиться ошибкой.
Администратор может управлять интервалами повторных попыток, временем хранения сообщений и количеством процессов, обрабатывающих очередь.
Пример параметров:
queue_smtp_domains = ! +local_domains
queue_run_max = 5
queue_only_load = 4
queue_only_load_latch = 2
Эти параметры задают домены для SMTP-очереди и ограничения, связанные с обработкой очереди и загрузкой системы. Их следует адаптировать под требования конкретной инфраструктуры.
Безопасность и аутентификация Exim4
Для защиты передаваемых сообщений используется TLS. Дополнительно SMTP-аутентификация позволяет проверять пользователей, которым разрешено отправлять почту через сервер.
Включение TLS
Установите необходимые пакеты:
apt-get install openssl
apt-get install libsasl2-modules
Создайте сертификат и закрытый ключ:
openssl req -new -x509 -nodes -days 3650 -out /etc/exim4/exim.crt -keyout /etc/exim4/exim.key
В файл /etc/exim4/exim4.conf.template добавьте параметры:
MAIN_TLS_ENABLE = true
MAIN_TLS_CERTIFICATE = /etc/exim4/exim.crt
MAIN_TLS_PRIVATEKEY = /etc/exim4/exim.key
Затем пересоздайте конфигурацию Exim4:
update-exim4.conf
Настройка SMTP-аутентификации
Для настройки аутентификации через SASL в файл /etc/exim4/exim4.conf.template добавляются механизмы PLAIN и LOGIN.
plain_saslauthd_server:
driver = plaintext
public_name = PLAIN
server_condition = ${if saslauthd{{$2}{$3}{auth}}{1}{0}}
server_set_id = $2
server_prompts = :
login_saslauthd_server:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_condition = ${if saslauthd{{$1}{$2}{auth}}{1}{0}}
server_set_id = $1
Эти механизмы позволяют Exim4 взаимодействовать с saslauthd для проверки учётных данных пользователей.
Управление доступом с помощью ACL
ACL (Access Control Lists) — списки управления доступом, которые определяют, какие действия разрешены клиентам и какие ограничения применяются к почтовым сообщениям.
Пример настройки ACL в файле /etc/exim4/exim4.conf.template:
acl_smtp_rcpt = acl_check_rcpt
acl_check_rcpt:
accept hosts = :
deny message = Restricted domain
domains = example.com
В приведённом примере правило разрешает принимать сообщения от указанных хостов и задаёт отказ для домена example.com согласно условиям ACL. Перед применением подобных правил необходимо проверить их соответствие требуемой политике обработки почты.
Заключение
Exim4 предоставляет гибкие возможности настройки почтового сервера — от маршрутизации и локальной доставки сообщений до управления очередью, аутентификации и шифрования соединений.
При подготовке почтовой инфраструктуры важно правильно настроить DNS-записи, включая MX, SPF, DKIM, DMARC и PTR. Эти механизмы участвуют в маршрутизации сообщений и проверке подлинности отправителя.
Модульная архитектура Exim4 позволяет адаптировать конфигурацию под разные задачи — от небольших проектов до корпоративных систем. Сервер можно интегрировать с механизмами аутентификации, мониторинга и автоматизации.
В следующих частях цикла рассматриваются остальные компоненты почтового решения на базе Exim4, Dovecot, PostfixAdmin и RainLoop, а также вариант развёртывания этой связки в Docker и Docker Compose.
Оставьте заявку, чтобы обсудить проект
Спасибо за обращение
Мы свяжемся с вами в ближайшее время.