Сетевые средства Debian/Exim
Почтовый агент 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
Основные варианты:
Почтовое имя
[править]
Имя 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
Ссылки
[править]
- ↑ TLS certificate not used for smarthost transport by default. Debian Bug#677826.
См. также
[править]