Почтовый агент Exim может выполнять функции как почтового транспортного агента (англ. Mail Transfer Agent, MTA), так и агента начального приема почты (англ. Mail submission Agent, MSA.) Он может быть настроен для автономной работы (доставки почты между пользователями системы, без обращения к Internet), для обеспечения транзита почты (без поддержки локальных почтовых ящиков), для взаимодействия с вышестоящим почтовым узлом (англ. smarthost) и без такового.

Установка править

Проектом Debian поддерживаются два варианта сборки Exim:

  • exim4-daemon-heavy — собранный с поддержкой обращения к базам LDAP, SQLite, PostgreSQL и MySQL, а также (что может оказаться особенно важным для агента начального приема почты, MSA) — с поддержкой сверки с использованием SASL и SPA;
  • exim4-daemon-light — без такой поддержки.

Выбранный пакет можно установить используя APT, например:

# apt-get install exim4-daemon-heavy 

При этом, если соответствующие данные не были внесены в систему Debconf ранее, будет инициирована процедура начальной настройки.

Начальная настройка править

Предметом начальной настройки Exim в Debian являются файлы mailname(5) и /etc/exim/update-exim4.conf.conf. Эти файлы, разумеется, являются текстовыми, однако не подлежат непосредственному редактированию, поскольку могут быть перезаписаны при выполнении этапа настройки Debian-пакета (кодом exim4-config.config.) Поэтому, для их правки следует использовать средства Debconf, например:

# dpkg-reconfigure exim4-config 

В ходе начальной настройки будут заданы следующие вопросы.

Общий тип почтовой конфигурации править

Имя Debconf

exim4/dc_eximconfig_configtype

Имя update-exim4.conf.conf

dc_eximconfig_configtype


Основные варианты:

  • почтовый узел Internet (internet): доставка в соответствии с DNS-записями типа MX;
  • «внутренний» почтовый узел (smarthost): доставка исходящей почты через вышестоящий почтовый узел;
  • только локальная доставка (local.)

Почтовое имя править

Имя Debconf

exim4/dc_mailname

Пример

l33t.example.org


Определяет доменное имя, используемое для адресов по-умолчанию. Оно же будет использоваться в поле From: заголовка сообщения при приеме почты от локальных пользователей. (Кроме случаев использования опции dc_hide_mailname, транслируемой в определение Exim HIDE_MAILNAME.)

Так, при отправке в системе с почтовым именем baz.example.org почты от пользователя foo пользователю bar, поля From: и To: будут содержать foo@baz.example.org и bar@baz.example.org, соответственно.

Почтовое имя системы хранится в файле mailname(5).

Обслуживаемые сетевые интерфейсы править

Имя Debconf

exim4/dc_local_interfaces

Имя update-exim4.conf.conf

dc_local_interfaces

Значение по-умолчанию

(список пуст — все интерфейсы системы)

Пример

::1; 127.0.0.0/8; 2001:db8:1337:cafe::/64; 192.0.2.128/25

Рекомендуемое значение

(список пуст — все интерфейсы системы; ::1; 127.0.0.0/8 — только локальная петля)


Определяет обслуживаемые Exim сетевые интерфейсы. По-умолчанию, обслуживаются все активные (поднятые) сетевые интерфейсы системы.

Ограничивать список интерфейсов имеет смысл, главным образом, в случае использования Exim как агента начального приема почты для некоторой локальной сети, с последующей передачей почты вышестоящему почтовому узлу и получением почты извне без использования протокола SMTP (например, с помощью программы Fetchmail.) В этом случае, данный параметр будет содержать IP-адреса (и соответствующие длины сетевых префиксов) интерфейса, связывающего систему с обслуживаемой локальной сетью.

Кроме того, если обеспечение данной функции требуется лишь в пределах локальной системы, список интерфейсов можно ограничить значением ::1; 127.0.0.0/8.

Подчеркнем, что при наличии в системе, обслуживающей локальную сеть — или доставку входящей почты через оную по протоколу SMTP — единственного (помимо локальной петли lo) интерфейса (например, eth0), данный параметр является совершенно избыточным.

Дополнительные почтовые имена править

Имя Debconf

exim4/dc_other_hostnames

Имя update-exim4.conf.conf

dc_other_hostnames

Значение по-умолчанию

(список пуст — только localhost)

Пример

l33t.example.org : static.example.org

Определение Exim

MAIN_LOCAL_DOMAINS


Определяет список доменных имен, доставка на которые выполняется в локальные почтовые ящики пользователей.

В этом списке имеет смысл упомянуть основное почтовое имя системы, ее собственное доменное имя (если отлично от основного почтового), а также все функциональные псевдонимы.

Например, если основное почтовое имя системы, совпадающее с собственным доменным, — l33t.example.org, и система также используется как Web-сервер для «статичных» данных (изображения, аудио- и видеофрагменты, etc.), известный под именем static.example.org, значением этого параметра может быть: l33t.example.org : static.example.org.

Доменные имена, на которые разрешена пересылка почты править

Имя Debconf

exim4/dc_relay_domains

Имя update-exim4.conf.conf

dc_relay_domains

Значение по-умолчанию

(список пуст)

Пример

*.example.org; foo.example.com

Определение Exim

MAIN_RELAY_TO_DOMAINS


Определяет домены, сообщения для которых будут приняты для транзитной доставки.

Используется только для почтовых узлов Internet (общий тип конфигурации: internet.)

Применять этот параметр имеет смысл в следующих двух случаях:

  • при организации вторичного почтового узла для доменного имени (или группы имен) — в этом случае, в DNS должна присутствовать по меньшей мере одна более приоритетная MX-запись для каждого из перечисленных доменных имен;
  • при приеме почты на почтовый шлюз, с последующим распределением по локальным почтовым узлам — для чего соответствие доменных имен и адресов локальных почтовых узлов должно быть определено файлом exim4_hubbed_hosts(5).

Сети, из которых разрешена пересылка почты править

Имя Debconf

exim4/dc_relay_nets

Имя update-exim4.conf.conf

dc_relay_nets

Значение по-умолчанию

(список пуст — только адреса локальной петли)

Пример

2001:db8:1337:cafe::/64; 192.0.2.128/25

Рекомендуемое значение

(список пуст — только адреса локальной петли; для управление доступом использовать SASL, TLS, сертификаты X.509,)

Определение Exim

MAIN_RELAY_NETS


Определяет список сетевых префиксов, из которых данная система будет безусловно принимать почту для последующей пересылки (иными словами — являться вышестоящим почтовым узлом, или smarthost.)

Адреса локальной петли всегда присутствуют в этом списке.

Отметим, что для начального приема почты от пользовательских почтовых агентов (англ. Mail User Agent, MUA) имеет смысл полагаться скорее на сверку (англ. authentication) с использованием SASL, нежели чем на принадлежность IP-адреса пользовательского агента одному из префиксов обслуживаемых сетей. Такой подход позволит, при необходимости, точно установить пользовательскую учетную запись, с которой была выполнена отправка конкретного сообщения.

Аналогичный подход, но с использованием сертификатов X.509, можно применить и для приема почты от нижестоящих почтовых транспортных агентов (MTA.)

При исключительном использовании сверки (что рекомендуется), данный параметр следует оставить пустым.

Вышестоящие почтовые узлы править

Имя Debconf

exim4/dc_smarthost

Имя update-exim4.conf.conf

dc_smarthost

Значение по-умолчанию

(список пуст)

Пример

mx.example.org : xm.example.org::2525 : 2001::db8::1337::::25::25 : [2001::db8::1337::::f00::25]::2525 : 192.0.2.25 : 192.0.2.125::2525

Рекомендуемое значение

(доменное имя вышестоящего почтового узла, если таковой используется)

Определение Exim

DCsmarthost


Список доменных имен и адресов почтовых узлов, на которые будет отправляться исходящая почта.

Используется только если подразумевается общим типом конфигурации (smarthost, satellite.)

Отметим, что ввиду использования одиночного двоеточия (:) в качестве разделителя элементов данного списка, все двоеточия, входящие в состав элементов (разделители тетрад адреса IPv6; двоеточие, предваряющее номер порта) должны быть удвоены.

Формат локальных почтовых ящиков править

Имя Debconf

exim4/dc_localdelivery

Имя update-exim4.conf.conf

dc_localdelivery

Значение по-умолчанию

mail_spool — доставка в файлы директории /var/mail/ в формате Unix mbox

Рекомендуемое значение

maildir_home — доставка в поддиректории Maildir домашних директорий пользователей в формате Maildir

Определение Exim

LOCAL_DELIVERY


Определяет способ сохранения сообщений, доставляемых локально.

Традиционным для Unix-подобных систем является формат почтового ящика mbox: в директории /var/mail (или иной) создаются (обычные) файлы с именами, соответствующими регистрационным именам пользователей. Каждый из файлов содержит все сообщения, хранимые в почтовом ящике данного пользователя.

Основные проблемы, возникающие с этим форматом:

  • необходимость блокирования — чтение файла в процессе его правки другим процессом (или, тем более, — правка файла более чем одним процессом в одно время) может привести к непредсказуемому результату;
  • потеря производительности — удаление сообщения из ящика приводит к необходимости перезаписи по меньшей мере следующей за удаляемым сообщением части mbox-файла (поиск сообщения по номеру также требует обработки всего файла, что, однако, может быть решено ведением отдельного индекса; формат такого индекса, впрочем, не регламентируется форматом mbox.)

В общем, в настоящее время нет никаких причин отказываться от использования более нового формата Maildir, решающего вышеперечисленные проблемы хранением каждого сообщения в отдельном файле.

Формат конфигурации править

Имя Debconf

exim4/dc_use_split_config

Имя update-exim4.conf.conf

dc_use_split_config

Значение по-умолчанию

false — используется файл /etc/exim4/exim4.conf.template

Рекомендуемое значение

true — используется директория /etc/exim4/conf.d/


В своей работе Exim пользуется единственным основным конфигурационным файлом. В Debian такой файл формируется программой update-exim4.conf(8) на основе, с одной стороны, ее собственных настроек (update-exim4.conf.conf), с другой стороны, — шаблона, в качестве которого может выступать или содержимое директории conf.d, или файл exim4.conf.template (который, в свою очередь, может быть создан из содержимого conf.d программой update-exim4.conf.template(8).)

Далее мы будем предполагать, что Exim использует конфигурационные файлы, содержащиеся в директории conf.d.

Почта администратора править

Имя Debconf

exim4/dc_postmaster

Значение по-умолчанию

(доставка в /var/mail/mail)

Пример

real-jrh

Рекомендуемое значение

(пользовательская учетная запись администратора)


Сообщения, отправляемые на служебные адреса системы (включая требуемый действующими стандартами postmaster, а также nobody, webmaster, и другие), по-умолчанию перенаправляется на имя root, для чего используется файл /etc/aliases. В свою очередь сообщения, приходящие на имя root, для удобства чтения могут быть перенаправлены в почтовый ящик непривилегированного пользователя, имя которого задается данной опцией.

В случае отказа от этой возможности, почта root будет доставляться в /var/mail/mail.

Поскольку сообщения, приходящие на эти адреса, могут содержать информацию о проблемах с самой доставкой почты (в том числе делающих доставку почты на удаленные узлы невозможной), их следует направлять в локальный почтовый ящик. Принудительная локальная доставка (другими словами, без учета содержимого системного aliases, пользовательского .forward, и им подобных) может быть вызвана добавлением префикса real- к имени целевой учетной записи.

Использование TLS при соединении с вышестоящим узлом править

По состоянию на август 2013 года (версия 4.80-7 пакета exim4-config), использование TLS при соединении с вышестоящим узлом не поддерживается[1] шаблонами конфигурации Exim в Debian. Что, однако, несложно исправить, добавив следующие строки к файлу /etc/exim4/conf.d/transport/30_exim4-config_remote_smtp_smarthost:

.ifdef REMOTE_SMTP_SMARTHOST_TLS_PRIVATEKEY
  tls_privatekey = REMOTE_SMTP_SMARTHOST_TLS_PRIVATEKEY
.endif
.ifdef REMOTE_SMTP_SMARTHOST_TLS_CERTIFICATE
  tls_certificate = REMOTE_SMTP_SMARTHOST_TLS_CERTIFICATE
.endif
.ifdef REMOTE_SMTP_SMARTHOST_TLS_VERIFY_CERTIFICATES
  tls_verify_certificates = REMOTE_SMTP_SMARTHOST_TLS_VERIFY_CERTIFICATES
.endif
.ifdef REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS
  hosts_require_tls = REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS
.endif

Кроме того, потребуется определить вышеупомянутые параметры в main-файле (например: /etc/exim4/conf.d/main/00_local_tls_client), подобно:

### main/00_local_tls_client
# REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS =
REMOTE_SMTP_SMARTHOST_HOSTS_REQUIRE_TLS = *
REMOTE_SMTP_SMARTHOST_TLS_CERTIFICATE = MAIN_TLS_CERTIFICATE
REMOTE_SMTP_SMARTHOST_TLS_PRIVATEKEY  = MAIN_TLS_PRIVATEKEY
REMOTE_SMTP_SMARTHOST_TLS_VERIFY_CERTIFICATES = MAIN_TLS_VERIFY_CERTIFICATES
### main/00_local_tls_client ends here

Здесь мы предполагаем, что имена содержащих сертификат X.509 (MAIN_TLS_CERTIFICATE) и секретный ключ (MAIN_TLS_PRIVATEKEY) файлов, равно как и файла, содержащего доверенные сертификаты (MAIN_TLS_VERIFY_CERTIFICATES), уже определены используемой конфигурацией Exim. (По-умолчанию, код main/03_exim4-config_tlsoptions определяет их как CONFDIR/exim.crt, CONFDIR/exim.key и, если существует, /etc/ssl/certs/ca-certificates.crt, — но лишь при условии определения MAIN_TLS_ENABLE пользователем.)

Использование TLS при приеме почты править

Текущая версия Exim в Debian позволяет использовать TLS для входящих соединений, при наличии настроек, подобных нижеследующим, помещаемых в main-файл (например: /etc/exim4/conf.d/main/00_local_tls.)

### main/00_local_tls
MAIN_TLS_ENABLE = 1
MAIN_TLS_VERIFY_HOSTS = ${if  exists {CONFDIR/tls_verify_hosts} \
                              ${readfile {CONFDIR/tls_verify_hosts}}}
MAIN_TLS_TRY_VERIFY_HOSTS = *
### main/00_local_tls ends here

В данном случае, мы разрешаем (MAIN_TLS_ENABLE) использование TLS для входящих соединений; используем (MAIN_TLS_VERIFY_HOSTS) содержимое файла tls_verify_hosts конфигурационной директории Exim (CONFDIR, иными словами — /etc/exim4) в качестве списка систем, для которых проверка действительности сертификата является обязательной; а также запрашиваем (MAIN_TLS_TRY_VERIFY_HOSTS) выполнение такой проверки для всех без исключения входящих соединений.

По-умолчанию, необходимые для использования TLS закрытый ключ и сертификат X.509 будут загружены из файлов exim.key и exim.crt конфигурационной директории Exim, соответственно. Ради единообразия, можно поместить сертификат в директорию /etc/ssl/certs, подобно:

MAIN_TLS_CERTIFICATE  =   /etc/ssl/certs/esmtps-l33t.example.org.crt

Использование директории /etc/ssl/private для размещения закрытого ключа (параметр MAIN_TLS_PRIVATEKEY), по-видимому, лишено смысла, поскольку эта директория доступна только root, в то время как Exim будет выполняться от непривилегированного пользователя (Debian-exim) в момент обращения к файлу.

Сверка нижестоящих узлов с использованием TLS править

Конфигурация Exim в Debian допускает сообщение к пересылке, если оно было доставлено с использованием сверки (ESMTPSA), что реализуется следующим фрагментом acl/30_exim4-config_check_rcpt:

  accept
    authenticated = *
    control = submission/sender_retain
    control = dkim_disable_verify

Однако, эта функциональность предназначена прежде всего для приема почты от почтовых пользовательских агентов (MUA.) Для сверки нижестоящих узлов можно воспользоваться следующим фрагментом кода, который целесообразно поместить сразу же после кода проверки на вхождение IP-адреса удаленной системы в список relay_from_hosts.

  ## Accept if the message comes from one of the hosts for which we're
  ## an outgoing relay, provided that: the host provided a certificate,
  ## it was verified, and the DN matches one of the DNs listed.  The
  ## sender is assumed to be an MTA.
  accept
    hosts = +relay_from_hosts_tls_mta
    verify = certificate
    condition = ${if exists{CONFDIR/relay_tls_dn} \
                      {${lookup {$tls_peerdn} \
                             lsearch {CONFDIR/relay_tls_dn} {yes} {no}}} \
                      {no}}

Список адресов relay_from_hosts_tls_mta, для соединений с которых будет выполнена такая сверка, указывается в main-файле, подобно (в данном примере доступ не ограничивается конкретными IP-адресами):

### main/01_local_relay_from_hosts_tls_mta
## FIXME: too wide, but further limited based on TLS credentials
hostlist relay_from_hosts_tls_mta = <; 2000::/3; 0.0.0.0/0
### main/01_local_relay_from_hosts_tls_mta ends here

Список различительных имен (англ. distinguished name, DN) нижестоящих узлов помещается в файл relay_tls_dn конфигурационной директории Exim, и может быть подобен следующему:

CN=froc.example.org
CN=lewoico.example.net

Ссылки править

  1. TLS certificate not used for smarthost transport by default. Debian Bug#677826.

См. также править