Полная конфигурация.

Manjary имеет довольно объёмную конфигурацию позволяющую тонко настроить различные аспекты работы. Большое количество параметров не требует изменений и может использовать значения по-умолчанию. Самые необходимые изменения в конфигурации описаны в Быстрая конфигурация. Минимально необходимые настройки.

Корневым узлом конфигурации является server. Конфигурация состоит из основной части и конфигураций модулей в соответствующих узлах.

<server>
  <pid-file overwrite="0|1">filename</pid-file>
  <logging>...</logging>
  <name-resolution>...</name-resolution>
  <module-dir>path</module-dir>
  <load-module>filename</load-module>
  ...
  <TLS-certificate-file>filename</TLS-certificate-file>
  <TLS-key-file>filename</TLS-key-file>
  <TLS-key-password>secret</TLS-key-password>
  <TLS-min-version>none|SSLv3|TLSv1|TLSv1.1|TLSv1.2|TLSv1.3</TLS-min-version>
  <module-XXXXX>...</module-XXXXX>
  ...
</server>

<pid-file>

<pid-file overwrite="0|1">filename</pid-file>

Задаёт имя т.н. pid-файла - текстового файла в котором будет записан числовой идентификатор процесса manjary. При нормальном завершении процесса pid-файл удаляется. Если атрибут overwrite установлен в 1 и pid-файл на момент запуска уже существует - он будет перезаписан. Если значение узла пустое, используется имя файла по-умолчанию (его можно найти в лог-файле). По-умолчанию, если узел не задан, файл создаваться не будет.

<logging>

Настройки журналирования.

<logging>
  <file>filename</file>
  <screen>Yes|No</screen>
  <level>N</level>
  <history>N</history>
  <size-max>bytes</size-max>
</logging>
file

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

screen

Переключатель. Указывает, следует ли выводить записи на консоль. По-умолчанию: yes.

level

Уровень детализации лог-файла. От 1 (наименьший) до 5 (самый подробный). По-умолчанию: 4.

history

Количество лог-файлов в ротации. Когда нужно начать новый файл, текущий file.ext переименовывается в file-000.ext, перед этим старый file-000.ext переименовывается в file-001.ext и т.д., самый старый файл удаляется. По-умолчанию: 0.

Ротация может быть выполнена принудительно в любой момент времени, для этого необходимо послать сигнал SIGALRM процессу manjary. Для автоматизации этого используйте пакетный файл rotate.cmd.

size-max

Максимальный размер лог-файла. Когда достигается это значение выполняется ротация лог-файлов. Если size-max установлено в 0, ротация будет происходить каждый раз при переходе на новые сутки, а формат имён лог-файлов в ротации будет следующим: file-YYYYMMDD.ext. По-умолчанию: 0.

<name-resolution>

Узел name-resolution позволяет настроить подсистему разрешения доменных имён. Если данный узел отсутствует - будут использованы системные настройки.

<name-resolution>
  <use-hosts-first>Yes|No</use-hosts-first>
  <domain>name</domain>
  <server>IP address</server>
  ...
</name-resolution>
use-hosts-first

Переключатель, задающий когда будет просматриваться файл hosts - до обращения к серверу DNS или после, если имя или адрес IP не найдены.

domain

Имя домена по-умолчанию.

server

Один или несколько узлов server задают адреса IP серверов DNS.

Загрузка модулей: <module-dir>, <load-module>.

module-dir

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

load-module

Множество узлов указывающих какие модули следует загружать. Значения узлов - имена файлов модулей. Каждый модуль имеет заданное имя (не путать с именем файла модуля). Конфигурации модулей находятся в узлах с именами module-XXXXX, где XXXXX - имя модуля.

Таблица 3.1. Имена модулей и их файлов.

Имя модуляЗагружаемый файлДерево XML конфигурации
Mailmail.dllmodule-Mail
SMTPsmtp.dllmodule-SMTP
POP3pop3.dllmodule-POP3
IMAPimap4.dllmodule-IMAP
HTTPhttp.dllmodule-HTTP
SpamCheckspamchk.dllmodule-SpamCheck
Helpershelpers.dllmodule-Helpers
ABab.dllmodule-AB
Sievesieve.dllmodule-Sieve
SMTPWeaselsmtpwsl.dllmodule-SMTPWeasel


<module-Mail>

Модуль Mail отвечает за хранение и управление информацией о доменах, пользователях, почтовых ящиках и сообщениях. Также данный модуль реализует командный строковый интерфейс (CLI) использующийся для управления сервером.

<module-Mail>
  <log-level>N</log-level>
  <plain-auth>Yes|No</plain-auth>
  <mail-root>path</mail-root>
  <hostname>host.name.dom</hostname>
  <default-domain>name.dom</default-domain>
  <trusted>
    <addr>...</addr>
    ...
  </trusted>
  <DKIM l="0|1" t="0|1" sha1="0|1">
    <canonicalization>[simple|relaxed]/[simple|relaxed]</canonicalization>
    <fields>From, To, +Subject</fields>
    <body-limit>1 mb</body-limit>
  </DKIM>
  <host>...</host>
  ...
  <pswd-complexity>
    <condition length="N" complexity="weak|good|strong">
      <case-mix>Yes|No</case-mix>
      <alpha-dig-mix>Yes|No</alpha-dig-mix>
      <alnum-other-mix>Yes|No</alnum-other-mix>
      <alphabetic>N</alphabetic>
      <lowercase>N</lowercase>
      <uppercase>N</uppercase>
      <digits>N</digits>
      <alphanum>N</alphanum>
      <others>N</others>
    </condition>
    ...
  </pswd-complexity>
</module-Mail>
plain-auth

Переключатель, устанавливающий возможность авторизации в интерфейсе CLI с открытым паролем через незашифрованное сетевое соединение. По-умолчанию авторизация с открытым паролем запрещена.

mail-root

Указывает директорию где будут храниться данные доменов, пользователей, почтовых ящиков, сообщения в почтовых ящиках, очередь входящих и исходящих сообщений и другая информация. Это единственный узел который при изменении требует остановки и повторного запуска сервера.

hostname

Основное DNS-имя хоста на котором запущен сервер.

default-domain

Главный почтовый домен или домен по-умолчанию который будет обслуживаться данным сервером. Это имя будет использоваться в различных ситуациях, например, при авторизации пользователя без указания в имени пользователя доменной части. По-умолчанию используется имя домена хоста на котором работает сервер.

trusted

Необязательный узел ACL задающий адреса IP клиентов которым будет разрешено отправлять почту на другие домены без авторизации. Как правило, к таким клиентам относятся пользователи локальных сетей.

DKIM

Необязательный узел описывающий свойства сигнатуры DKIM создаваемой для почтовых сообщений отправляемых на другие серверы. Атрибуты l, t, sha1 могут принимать значения 1 (включено) или 0 (выключено): l - устанавливать тег l подписи даже если сообщение не превышает ограничения (см. узел body-limit), t - указывать в подписи метку времени, sha1 - использовать алгоритм sha1 вместо rsa-sha256 (не рекомендуется).

DKIM/canonicalization

Устанавливает алгоритмы канонизации заголовка и тела сообщения: simple или relaxed. Требует указания двух алгоритмов через слэш.

DKIM/fields

Список полей заголовка сообщения использующихся для подписи. Имена разделяются пробелом, запятой, двоеточием или точкой с запятой. Если имя начинается с символа "+", оно будет добавлено в подпись (без символа "+") даже если отсутствует в заголовке, что защищает сообщение с подписью от добавления этого поля на пути следования до адресата. По-умолчанию используется предопределённый список полей.

DKIM/body-limit

Устанавливает максимальный размер тела сообщения который будет использоваться для подписи. Если тело сообщения превышает это значение, для подсчёта сигнатуры будет использовано только указанное число байт, а в подпись будет добавлен тег l с указанием количества использованных байт.

host

Узел описывает сетевой сервер для CLI.

pswd-complexity

Необязательный параметр. Устанавливает требования к сложности паролей задаваемых через CLI. По-умолчанию используются предустановленные настройки. Представляет собой список узлов condition описывающих различные сложности паролей и присваивающих им уровни weak, good или strong. Если вводимый пароль подходит под одно из условий, он считается допустимым. Уровни сложности представляют из себя подсказки для пользователя: weak - слабый пароль, рекомендуется усложнить, good - достаточно сложный пароль, strong - надёжный пароль. WEB-интерфейс использует эти значения для показа пользователю соответствующих текстовых подсказок при вводе паролей. Узлы condition имеют обязательный параметр минимальной длинны пароля и сортируются по нему, при проверке пароля узлы просматриваются от самого большого значения этого параметра к наименьшему.

pswd-complexity/condition

Условие для назначения вводимому паролю уровня сложности. Атрибут length задаёт минимальную длину пароля при которой проверяется условие. Атрибут complexity устанавливает уровень сложности пароля если он соответствует данному условию: weak, good, strong. Все дочерние узлы являются необязательными, можно указать несколько из них, только одно или ни одного.

pswd-complexity/condition/case-mix

Переключатель, задаёт требование к наличию как прописных, так и строчных букв алфавита.

pswd-complexity/condition/alpha-dig-mix

Переключатель, задаёт требование к наличию букв алфавита и цифр.

pswd-complexity/condition/alnum-other-mix

Переключатель, задаёт требование к наличию букв алфавита/цифр и других символов.

pswd-complexity/condition/alphabetic

Задаёт минимальное количество букв алфавита.

pswd-complexity/condition/lowercase

Задаёт минимальное количество строчных букв алфавита.

pswd-complexity/condition/uppercase

Задаёт минимальное количество прописных букв алфавита.

pswd-complexity/condition/digits

Задаёт минимальное количество цифр.

pswd-complexity/condition/alphanum

Задаёт минимальное количество цифр/букв алфавита.

pswd-complexity/condition/others

Задаёт минимальное количество символов не являющихся цифрами и буквами алфавита.

<module-SMTP>

Модуль реализует сервер и клиент протокола SMTP, а также управляет очередью исходящих (отправляющихся на другие серверы) сообщений.

<module-SMTP>
  <queue>
    <log-level>N</log-level>
    <scan-queue-dir>timeout</scan-queue-dir>
    <mem-queue-length-max>N</mem-queue-length-max>
    <original-size-max>N</original-size-max>
    <gateway-for>domain1 domain2 ...</gateway-for>
    ...
    <attempts>
      <max>N</max>
      <notify-attempt>N</notify-attempt>
      <delay after="1">time</delay>
      <delay after="N">time</delay>
      ...
    </attempts>
  </queue>
  <server>
    <log-level>N</log-level>
    <host>...</host>
    ...
    <no-auth-port>N</no-auth-port>
    ...
    <greeting>string</greeting>
    <hops-max>N</hops-max>
    <plain-auth>Yes|No</plain-auth>
    <hide-received>Yes|No</hide-received>
    <TLS-only>No|All|Foreign</TLS-only>
    <instant-delivery>Yes|No</instant-delivery>
    <message-max>bytes</message-max>
    <auth-fail-max>N</auth-fail-max>
    <bad-cmd-max>N</bad-cmd-max>
    <bad-cmd-delay>N</bad-cmd-delay>
    <relays>...</relays>
  </server>
  <client>
    <log-level>N</log-level>
    <host>...</host>
    <connections-max>N</connections-max>
    <timeout-greeting>timeout</timeout-greeting>
    <timeout-MAIL>timeout</timeout-MAIL>
    <timeout-RCPT>timeout</timeout-RCPT>
    <timeout-DATA>timeout</timeout-DATA>
    <timeout-DATA-transit>timeout</timeout-DATA-transit>
    <timeout-DATA-end>timeout</timeout-DATA-end>
    <ignore-8BITMIME>Yes|No</ignore-8BITMIME>
    <relays>
      <relay>
        <to>domain1 domain2 ...</to>
        <to>domain3</to>
        ...
        <via>server1 server2 ...</via>
        <via>server3</via>
        ...
      </relay>
      ...
    </relays>
    <using-TLS>
      <destination type="domain|server"
                   TLS="allow|deny|required">name</destination>
      ...
    </using-TLS>
    <first-chunk-max>bytes</first-chunk-max>
    <chunk-max>bytes</chunk-max>
  </client>
</module-SMTP>        
queue/scan-queue-dir

Интервал времени между сканированиями директории очереди сообщений. При каждом сканировании загружаются те задания на отправку, которые должны быть выполнены до следующего сканирования. Таким образом, при меньшем интервале несколько снижается расход памяти, но увеличивается частота обращения к файловой системе. По-умолчанию: 5 min.

queue/mem-queue-length-max

Максимальное количество заданий на отправку исходящих сообщений находящихся в памяти. По-умолчанию: 2048.

queue/original-size-max

Максимальный размер оригинального сообщения включающегося в автоматическое информационное сообщение DSN (Delivery Status Notification). По-умолчанию: 1 Mb.

queue/gateway-for

Список имён внешних доменов в которые разрешена пересылка неавторизованным и недоверенным пользователям. Другими словами, домены для которых мы являемся шлюзами. Имена доменов могут быть разделены пробелами и/или находиться в отдельных узлах gateway-for.

queue/attempts

XML дерево attempts задаёт интервалы и количество попыток отправить сообщение если целевой сервер не отвечает или занят. Узел max задаёт максимальное количество попыток. Узел notify-attempt устанавливает после какой попытки отправителю будет отправлено уведомление о том что доставка сообщения задерживается. Множество узлов delay изменяет увеличивающийся интервал времени между попытками, в атрибутах after узлов delay задаются номера попыток после которых устанавливаются новые интервалы.

server/host

В узле host рекомендуется указать порты 25 и 587 без SSL и порт 465 с SSL. Тайм-аут рекомендуется установить 5 min, согласно требованиям RFC 5321 (п. 4.5.3.2.7.). Как и в других частях конфигурации, возможно указание нескольких узлов host с разными списками портов, ключами, сертификатами и ACL.

server/no-auth-port

Запрещает авторизацию на указанном порту. Порт должен прослушиваться, т.е. быть настроенным в XML дереве host. Возможно использование нескольких узлов no-auth-port. Имеет смысл указать порт 25 как не предназначенный для авторизации, т.к. этот порт используется для доставки сообщений между серверами, клиенты обычно отправляют сообщения используя порты 587 или 465.

server/greeting

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

server/hops-max

Максимальное число пересылок (полей Received) для отдельного сообщения после которого оно будет отвергнуто с ошибкой протокола 554 5.4.6. По-умолчанию: 30.

server/plain-auth

Переключатель, устанавливающий возможность авторизации с открытым паролем через незашифрованное сетевое соединение. По-умолчанию авторизация с открытым паролем запрещена.

server/hide-received

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

server/TLS-only

Разрешает работу исключительно через зашифрованное соединение: no - любой клиент может работать через незашифрованное соединение, all - любой клиент должен устанавливать зашифрованное соединение, foreign - только клиенты не являющиеся доверенными, т.е. не перечисленные в ACL module-Mail/trusted должны устанавливать зашифрованное соединение. По-умолчанию: no.

server/instant-delivery

Переключатель, устанавливающий немедленную доставку сообщения после его получения от клиента. Если выключено, сообщение начнёт доставляться только после нормального завершения сеанса SMTP (команды QUIT) или после получения следующей команды MAIL. По-умолчанию включено.

server/message-max

Максимальный размер сообщения. По-умолчанию - не ограничено.

server/auth-fail-max

Максимальное количество безуспешных попыток авторизации после которого соединение будет разорвано. По-умолчанию: 3.

server/bad-cmd-max

Количество ошибок, таких как неверный синтаксис, неизвестная команда или неизвестный адрес в команде MAIL, после которых соединение будет разорвано. По-умолчанию: 4.

server/bad-cmd-delay

Задержка в миллисекундах (целое положительное число) ответа сервера на ошибочную команду или неуспешную попытку авторизации. По-умолчанию: 2000.

server/relays

Узел типа ACL задающий серверы пересылающие почту нам. Например, если все входящие сообщения из Интернет пересылаются с MTA провайдера, их адреса следует указать в этом списке.

client/host

XML дерево описывает клиентские сетевые подключения к другим серверам SMTP. Имеют смысл только узлы threads, threads-max, timeout. Это единственное место в конфигурации где не предполагается задание более одного узла host.

client/connections-max

Максимальное количество одновременных подключений к серверам SMTP. По-умолчанию: 16.

client/timeout-greeting

Тайм-аут ожидания ответа сервера при подключении. По-умолчанию: 5 min.

client/timeout-MAIL

Тайм-аут ожидания ответа сервера после команды MAIL. По-умолчанию: 5 min.

client/timeout-RCPT

Тайм-аут ожидания ответа сервера после команды RCPT. По-умолчанию: 5 min.

client/timeout-DATA

Тайм-аут ожидания ответа сервера после команды DATA. По-умолчанию: 2 min.

client/timeout-DATA-transit

Тайм-аут ожидания ответа сервера после не последней команды BDAT. По-умолчанию: 3 min.

client/timeout-DATA-end

Тайм-аут ожидания ответа сервера после передачи всего сообщения. По-умолчанию: 10 min.

client/ignore-8BITMIME

Переключатель, устанавливающий разрешение пересылать сообщения заявленные клиентом как 8BITMIME на серверы не объявляющие о поддержке 8BITMIME. По-умолчанию включено.

Важно

Документ RFC 6152 (п. 3) не предполагает такого поведения: [A client SMTP has two options in this case: first, it may implement a gateway transformation to convert the message into valid 7bit MIME, or second, or may treat this as a permanent error and handle it in the usual manner for delivery failures].

client/relays

XML дерево relays позволяет указать целевые серверы для некоторых доменов без обращения к службе DNS. Если сообщение направлено в один из доменов перечисленных в узлах relay/to (через пробел, либо в отдельных узлах to), то сервер попытается отправить такое сообщение сначала на первый сервер в списке заданном узлами via (через пробел, либо в отдельных узлах via) в том же relay, затем на второй и т.д. Возможно указание нескольких узлов relay.

client/using-TLS

Список целевых серверов и доменов описывающий использование шифрования при доставке сообщений. Значения узлов destination задают имя домена, если атрибут type имеет значение domain или опущен, или имя сервера, если атрибут type имеет значение server. Атрибуты TLS узлов destination устанавливают использование шифрования: allow - использовать шифрование если целевой сервер поддерживает его, deny - не использовать шифрование, required - использовать шифрование если сервер его поддерживает или не доставлять сообщения в противном случае.

client/first-chunk-max

Если целевой сервер поддерживает передачу сообщений частями (команда BDAT), данный узел задаёт максимальный размер первой отправляемой части. Имеет смысл отправлять небольшую первую часть, т.к. после неё сервер может сообщить о возникновении какой-либо проблемы не позволяющей продолжить передачу сообщения.

client/chunk-max

Если целевой сервер поддерживает передачу сообщений частями (команда BDAT), данный узел задаёт максимальный размер частей следующих за первой.

<module-POP3>

Модуль реализует протокол получения почты POP3.

<module-POP3>
  <log-level>N</log-level>
  <host>...</host>
  ...
  <greeting>string</greeting>
  <plain-auth>Yes|No</plain-auth>
  <TLS-only>No|All|Foreign</TLS-only>
  <POP-before-SMTP filter-order="0">timeout</POP-before-SMTP>
  <bad-cmd-max>N</bad-cmd-max>
  <bad-cmd-delay>N</bad-cmd-delay>
</module-POP3>
host

В узле host рекомендуется указать порты 110 без SSL и 995 с SSL. Тайм-аут рекомендуется установить 10 min, согласно требованиям RFC 1939 (п. 3). Как и в других частях конфигурации, возможно указание нескольких узлов host с разными списками портов, ключами, сертификатами и ACL.

greeting

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

plain-auth

Переключатель, устанавливающий возможность авторизации с открытым паролем через незашифрованное сетевое соединение. По-умолчанию авторизация с открытым паролем запрещена.

TLS-only

Разрешает работу исключительно через зашифрованное соединение: no - любой клиент может работать через незашифрованное соединение, all - любой клиент должен устанавливать зашифрованное соединение, foreign - только клиенты не являющиеся доверенными, т.е. не перечисленные в ACL module-Mail/trusted должны устанавливать зашифрованное соединение. По-умолчанию: no.

POP-before-SMTP

Устанавливает время в течении которого пользователь который авторизировался через протокол POP3 считается авторизированным клиентом для сервера SMTP. Это устаревший способ авторизации в SMTP, когда пользователь может отправлять сообщения в другие домены после прохождения авторизации по POP3. Атрибут filter-order устанавливает порядок в котором модули получают события от модуля SMTP. Если атрибут filter-order не указан, используется значение 0 (рекомендуется), что означает наивысший приоритет. По-умолчанию механизм авторизации "POP-before-SMTP" не используется.

bad-cmd-max

Количество ошибок, таких как неверный синтаксис, неизвестная команда, ошибка авторизации и т.п., после которых соединение будет разорвано. По-умолчанию: 4.

bad-cmd-delay

Задержка в миллисекундах (целое положительное число) ответа сервера сообщающего об ошибке. По-умолчанию: 2000.

<module-IMAP>

Модуль реализует протокол получения почты IMAP4.

<module-IMAP>
  <log-level>5</log-level>
  <host>...</host>
  ...
  <greeting>string</greeting>
  <plain-auth>Yes|No</plain-auth>
  <TLS-only>No|All|Foreign</TLS-only>
  <auth-fail-max>N</auth-fail-max>
  <bad-cmd-max>N</bad-cmd-max>
  <bad-cmd-delay>2000</bad-cmd-delay>
</module-IMAP>
host

В узле host рекомендуется указать порты 143 без SSL и 993 с SSL. Тайм-аут рекомендуется установить 30 min, согласно требованиям RFC 9051 (п. 5.4). Как и в других частях конфигурации, возможно указание нескольких узлов host с разными списками портов, ключами, сертификатами и ACL.

greeting

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

plain-auth

Переключатель, устанавливающий возможность авторизации с открытым паролем через незашифрованное сетевое соединение. По-умолчанию авторизация с открытым паролем запрещена.

TLS-only

Разрешает работу исключительно через зашифрованное соединение: no - любой клиент может работать через незашифрованное соединение, all - любой клиент должен устанавливать зашифрованное соединение, foreign - только клиенты не являющиеся доверенными, т.е. не перечисленные в ACL module-Mail/trusted должны устанавливать зашифрованное соединение. По-умолчанию: no.

auth-fail-max

Максимальное количество безуспешных попыток авторизации после которого соединение будет разорвано. По-умолчанию: 3.

bad-cmd-max

Количество ошибок, таких как неверный синтаксис, неизвестная команда, ошибка авторизации и т.п., после которых соединение будет разорвано. По-умолчанию: 4.

bad-cmd-delay

Задержка в миллисекундах (целое положительное число) ответа сервера сообщающего об ошибке. По-умолчанию: 2000.

<module-HTTP>

Модуль протокола HTTP не привязан к другим модулям и может быть единственным загруженным модулем.

Примечание

В составе сервера Manjary имеется приложение fast-cgi fcgiadm реализующее WEB-интерфейс для CLI и взаимодействущее с CLI через сеть либо локальный сокет. Этот интерфейс может использоваться пользователями для получения информации о своей учётной записи и смены пароля или операторами и администраторами для управления доменами, пользователями и пр. Приложение fcgiadm может быть запущено на любом сервере в сети и к нему может обращаться любой сервер HTTP поддерживающий протокол fast-cgi. Это делает возможным управление множеством серверов Manjary из одного места. В простом случае fcgiadm используется модулем HTTP сервера Manjary.

<module-HTTP>
  <log-level>N</log-level>
  <host>...</host>
  ...
  <fastcgi name="fcginame">
     <server port="N">IP_address</server>
     <start>filename</start>
  </fastcgi>
  ...
  <directory path="directory/path/*pattern?">
    <index type="parent|deny|auto[,list]|redirect[,list]|list">file1 file2</index>
    <mime-types file="filename">
      <ext name="type/name">ext</ext>
      ...
    </mime-types>
    <file must-exist="0|1">
       <match>pattern1 pattern2</match>
       <match>pattern3</match>
       <handler>$fcginame|filename</handler>
       <acl>...</acl>
    </file>
    ...
    <acl not-listed="permit|deny|parent">
      <addr>...</addr>
      ...
    <acl>
  </directory>
  ...
  <vhost>
    <names>hostname1 *pattern-?</names>
    <names>one?more</names>
    ...
    <ports>N1,N2-N3,N4</ports>
    <TLS-certificate-file>filename</TLS-certificate-file>
    <TLS-key-file>filename</TLS-key-file>
    <document-root>directory/path</document-root>
    <alias script="1|0" uri-path="/path/">local/path</alias>
    ....
    <redirect type="301|302|303|307|308|permanent|temporary"
              uri-path="/path/" full-path="0|1">local/path</redirect>
    ...
    <directory>...</directory>
    ...
  </vhost>
  ...
</module-HTTP>
host

В узле host указываются порты для протокола HTTP (например, стандартный - 80) без SSL и для HTTPS (стандартный - 443) с SSL. Как и в других частях конфигурации, возможно указание нескольких узлов host с разными списками портов, ключами, сертификатами и ACL.

fastcgi

Связывает имя заданное пользователем в атрибуте name с информацией о сервере FastCGI. Обязательный узел server описывает порт (атрибут port) и адрес (значение узла) по которым нужно подключаться к серверу fast-cgi. Значением узла server может быть имя локального сокета, при этом атрибут port не должен указываться. Необязательный узел start задаёт имя исполняемого файла который будет запущен при запуске сервера Manjary.

directory

Описание локальной директории путь к которой соответствует шаблону в атрибуте path.

directory/index

Указывает что нужно возвращать при запросе URI который ссылается на данную директорию. Поведение определяется атрибутом type: parent|deny|auto[,list]|redirect[,list]|list. По-умолчанию: parent.

  • parent Использовать поведение заданное для родительской директории.

  • deny Вернуть ошибку 403 Forbidden.

  • auto Значение узла рассматривается как список имён индексных файлов разделённых пробелами. Если в директории находится один из этих файлов, его содержимое будет возвращено в качестве ответа на запрос.

  • redirect Как auto, но ответом будет не содержимое файла, а перенаправление на него.

  • list В качестве ответа возвращается страница HTML со списком файлов и директорий содержащихся в данной директории.

  • auto,list Как auto, но если директория не содержит индексных файлов - как list.

  • redirect,list Как redirect, но если директория не содержит индексных файлов - как list.

directory/mime-types

Задаёт соответствие расширений файлов и типов mime. Если указан атрибут file, список соответствий будет загружен из него (см. файл mime.types). Вложенные узлы ext дополняют список. При поиске соответствий директории будут просматриваться от заданной к корневой, пока расширение файла не будет найдено в настройках для одной из директорий.

directory/file

Указывает как нужно обрабатывать файлы, имена которых соответствуют одной из масок в узлах match.

directory/file/handle

Необязательное поле. Если задано - указывает обработчик которому будет передан файл. Значением узла может быть программа CGI. Если значение узла начинается с символа "$", оно рассматривается (без "$") как имя для сервера fast-cgi заданное деревом XML fastcgi.

directory/file/acl

Список адресов клиентов ограничивающий доступ к файлам.

directory/acl

Список адресов клиентов ограничивающий доступ к директории. Атрибут not-listed задаёт поведение если адрес не найден: permit|deny|parent. По-умолчанию: parent (просматривать списки из установок для родительских директорий).

vhost

Деревья XML vhost описывают виртуальные хосты. При клиентском запросе ресурса с сервера, просматривается список виртуальных хостов в том порядке как они заданы в конфигурации, пока не будет найдено соответствие по имени хоста и/или по номеру порта. Далее, запрос обрабатывается в рамках настроек найденного хоста.

vhost/names

Шаблоны имён хоста. По-умолчанию хосту соответствует любое имя.

vhost/ports

Список портов хоста разделённых запятыми. Элементами списка могут быть номера портов или диапазоны номеров, например 80-88. Списком определяются порты из множества заданного в host. По-умолчанию хосту соответствует любой порт.

vhost/TLS-certificate-file

Файл содержащий сертификат. Этот узел переопределяет соответствующий узел в host, другими словами, задаёт сертификат конкретно для данного хоста.

vhost/TLS-key-file

Файл содержащий приватный ключ. Этот узел переопределяет соответствующий узел в host, другими словами, задаёт приватный ключ конкретно для данного хоста.

vhost/document-root

Локальный путь к корневой директории хоста.

vhost/alias

Псевдоним для элемента пути URI. Значение узла - путь к локальной директории. Обязательный атрибут uri-path указывает имя элемента пути URI. Если для необязательного атрибута script указано значение 1, подразумевается что директория указанная в значении узла содержит программы CGI.

vhost/redirect

Перенаправление: если запрошенный путь URI начинается со строки заданной атрибутом uri-path, то будет возвращён ответ перенаправляющий клиента на путь начальная часть которого (совпадающая с uri-path) заменена значением узла. Если указан атрибут full-path со значением 1, то перенаправление используется только если запрошенный путь полностью совпадает со значением uri-path. Атрибут type определяет какой код ответа HTML будет использован для перенаправления: 301|302|303|307|308|permanent|temporary. Ключевое слово permanent соответствует 301, а temporary - 302.

vhost/directory

Настройки директорий в рамках конкретного хоста.

<module-SpamCheck>

Модуль находит спам в потоке входящих сообщений.

<module-SpamCheck>
  <log-level>N</log-level>
  <order>N</order>
  <whitelist-ttl>timeout</whitelist-ttl>
  <spf>
    <none>0</none>
    <neutral>0</neutral>
    <pass>-1</pass>
    <fail>1</fail>
    <softfail>0.7</softfail>
    <permerror>0.4</permerror>
  </spf>
  <greylist>
    <mask>N</mask>
    <recipient-ttl>timeout</recipient-ttl>
  </greylist>
  <ip-blacklist-providers>
    <provider>
      <addr>string</addr>
      <value code="N.N.N.N">N</value>
      ...
    </provider>
    ...
  </ip-blacklist-providers>
  <domain-blacklist-providers>
    <provider>
      <addr>string</addr>
      <value code="N.N.N.N">N</value>
      ...
    </provider>
    ...
  </domain-blacklist-providers>
  <ip-whitelist-providers>
    <provider>
      <addr>string</addr>
      <value code="N.N.N.N">N</value>
      ...
    </provider>
    ...
  </ip-whitelist-providers>
  <domain-whitelist-providers>
    <provider>
      <addr>string</addr>
      <value code="N.N.N.N">N</value>
      ...
    </provider>
    ...
  </domain-whitelist-providers>
  <ip-list name="string">...</ip-list>
  ...
  <ptrn-list name="string">
    pattern?1 pattern*2
    pattern?3
  </ptrn-list>
  ...
  <no-check-when>...</no-check-when>
  <reject-when>...</reject-when>
  <greylist-when>...</greylist-when>
  <spam-folder threshold="N">folder</spam-folder>
</module-SpamCheck>
order

Устанавливает порядок в котором модули получают события от модуля SMTP. По-умолчанию: 100.

whitelist-ttl

Время хранения записей в белом списке. По-умолчанию: 60d.

spf

Устанавливает оценки от -1 до 1 соответствующие результатам проверки SPF.

greylist/mask

Количество бит адреса IP клиента использующихся для сравнения в сером списке. По-умолчанию: 24.

greylist/recipient-ttl

Время хранения записи о получателе в сером списке. По-умолчанию: 16h.

ip-blacklist-providers, domain-blacklist-providers, ip-whitelist-providers, domain-whitelist-providers

Провайдеры чёрных списков адресов IP, чёрных списков доменных имён, белых списков адресов IP, белых списков доменных имён.

Каждое XML дерево provider описывает провайдера предоставляющего информацию через запросы к системе DNS. Результат запроса представляет собой адрес IP который рассматривается как код ответа. Узел provider/addr указывает имя сервиса в DNS для запросов, а узлы provider/value задают сопоставление результатов получаемых от провайдера и оценок: значение узла value - даваемая результату оценка, дробное число от -1 до 1, атрибут code - код ответа на запрос, четыре числа разделённых точками, любое число может быть представлено диапазоном в виде [N1-N2]. Пример:

<value code="127.0.0.[2-14]">0.5</value>

В наборе узлов value XML дерева provider Рекомендуется использовать весь диапазон значений от -1 до 1.

ip-list

Именованный список адресов IP к которому могут выполняться обращения в выражениях. Атрибут name задаёт имя использующееся в качестве аргумента функций в выражениях. В конфигурации может быть задано множество узлов ip-list.

ptrn-list

Именованный список шаблонов строк разделённых пробелами или переводами строк к которому могут выполняться обращения в выражениях. Атрибут name задаёт имя использующееся в качестве аргумента функций в выражениях. В конфигурации может быть задано множество узлов ptrn-list.

no-check-when

Выражение. Если результатом вычисления является ИСТИНА, сообщение не будет проверяться на спам.

reject-when

Выражение. Если результатом вычисления является ИСТИНА, дальнейший анализ производиться не будет и сообщение не будет принято.

greylist-when

Выражение. Если результатом вычисления является ИСТИНА, доставка сообщения будет проходить через серый список.

spam-folder

Значение узла задаёт имя папок пользователей куда будут помещаться сообщения с конечными результатами оценок выше значения заданного атрибутом threshold.

Значения узлов no-check-when, reject-when и greylist-when представляют собой выражения вычисляемые в ходе работы, результатами вычислений являются значения ИСТИНА или ЛОЖЬ. Выражения состоят из функций, операторов и скобок. Функции должны иметь заданное количество аргументов заключённых в круглые скобки после имени функции и разделённых запятыми. Строковые аргументы записываются в двойных кавычках. Функции без аргументов могут записываться без скобок. Имена функций регистронезависимые.

Часть строки начиная с последовательности символов "//" и до конца строки и части текста между последовательностями символов "/*" и "*/" являются комментариями. Использование комментариев допускается между функциями, операторами или скобками но не среди аргументов функции или между именем функции и её аргументами.

Операторы:

  • ! унарное отрицание логического значения,

  • >[1] ИСТИНА если числовое значение слева больше значения справа,

  • <[1] ИСТИНА если числовое значение слева меньше значения справа,

  • + сложение числовых значений,

  • - унарный знак отрицательного числового значения или вычитание значения справа от значения слева.,

  • * умножение числовых значений,

  • / деление числовых значений,

  • and логическая операция И над логическими значениями,

  • or логическая операция ИЛИ над логическими значениями.

Функции:

RPWL

Возвращает ИСТИНА если адрес Return-Path (MAIL FROM) находится в белом списке, т.е. на этот адрес отправлялись письма из наших доменов.

IPBL

Возвращает значение -1..1 - результат проверки адреса IP клиента у провайдеров чёрных списков.

IPWL

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

DomainBL

Возвращает значение -1..1 - результат проверки доменного имени клиента у провайдеров чёрных списков.

DomainWL

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

SPFNone

Возвращает ИСТИНА если результат проверки SPF "none".

SPFNeutral

Возвращает ИСТИНА если результат проверки SPF "neutral".

SPFPass

Возвращает ИСТИНА если результат проверки SPF "pass".

SPFFail

Возвращает ИСТИНА если результат проверки SPF "fail".

SPFSoftfail

Возвращает ИСТИНА если результат проверки SPF "softfail".

SPFTemperror

Возвращает ИСТИНА если результат проверки SPF "temperror".

SPFPermerror

Возвращает ИСТИНА если результат проверки SPF "permerror".

SPF

Возвращает значение -1..1 - оценка результата проверки SPF, см. узел spf конфигурации.

PTR

Возвращает ИСТИНА если обратная запись DNS для адреса IP клиента существует.

PTRHelo

Возвращает ИСТИНА если строка переданная в команде HELO/EHLO соответствует имени из обратной записи DNS для адреса IP клиента.

PTRSender

Возвращает ИСТИНА если Return-Path (MAIL FROM) соответствует имени из обратной записи DNS для адреса IP клиента.

Match(objects,patterns)

Аргумент objects - строка содержащая одно или несколько ключевых слов разделённых пробелами: HOSTNAME - доменное имя хоста клиента, HELO - строка переданная в команде HELO/EHLO, PR - Return-Path. Аргумент patterns - строка содержащая один или несколько шаблонов разделённых пробелами. Возвращает ИСТИНА если хотя бы один из объектов objects соответствует хотя бы одному шаблону patterns.

MatchList(objects,ptrnlists)

Аргумент objects - строка содержащая одно или несколько ключевых слов разделённых пробелами: HOSTNAME - доменное имя хоста клиента, HELO - строка переданная в команде HELO/EHLO, PR - Return-Path. Аргумент ptrnlists - строка содержащая одно или несколько имён списков шаблонов разделённых пробелами. Именованные списки шаблонов задаются узлами ptrn-list конфигурации. Функция возвращает ИСТИНА если хотя бы один из объектов objects соответствует хотя бы одному шаблону из списков ptrnlists.

IPListed(iplists)

Аргумент iplists - строка содержащая одно или несколько имён списков адресов IP разделённых пробелами. Именованные списки адресов задаются узлами ip-list конфигурации. Возвращает ИСТИНА если адрес IP клиента находится хотя бы в одном списке iplists.

<module-Helpers>

Модуль позволяет контролировать работу сервера SMTP с помощью внешних программ называемых хэлперами. Хэлперы получают события на стандартный ввод и отвечают на них на стандартный вывод, после чего переходят в ожидание следующего события.

<module-Helpers>
  <log-level>5</log-level>
  <smtpsrv>
    <order>N</order>
    <run max="N">filename</run>
    <instance-sess-max>N</instance-sess-max>
  </smtpsrv>
</module-Helpers>
smtpsrv/order

Устанавливает порядок в котором модули получают события от модуля SMTP. По-умолчанию: 10.

smtpsrv/run

Имя исполняемого файла реализующего функционал хелпера. Атрибут max устанавливает максимальное количество запущенных экземпляров для параллельной обработки сессий SMTP. При этом все события отдельной сессии SMTP будут направляться в один и тот же экземпляр.

smtpsrv/instance-sess-max

Указывает количество сессий SMTP одновременно обрабатываемых одним хелпером. Укажите 1 чтобы хелпер не получал событий новых сессий пока не завершится уже начатая.

В начале каждой новой сессии модуль SMTP просматривает информацию о всех работающих экземплярах и находит тот у которого количество обрабатываемых в данный момент сессий SMTP меньше установленного атрибутом max узла run. После этого сессия привязывается к экземпляру, после этого все события данной сессии будут направляться в этот экземпляр. Если все экземпляры заняты, будет запущен новый. Если количество экземпляров достигло значения узла instance-sess-max модуль будет ожидать освобождения одного из экземпляров что приведёт к задержке обработки событий сессии.

<module-AB>

Модуль реализует адресную книгу. Адресная книга содержит информацию о зарегистрированных пользователях которая может быть получена через интерфейс CLI/WEB и протокол LDAP.

  <module-AB>
    <log-level>N</log-level>
    <host>...</host>
  </module-AB>
host

В узле host рекомендуется указать порты 389 без SSL и 636 с SSL. Как и в других частях конфигурации, возможно указание нескольких узлов host с разными списками портов, ключами, сертификатами и ACL.

<module-Sieve>

Sieve - язык для описания правил фильтрации почтовых сообщений (RFC 5228). Для управления скриптами Sieve используется сетевой протокол ManageSieve (RFC 5804). В текущей реализации поддерживаются следующие расширения Sieve: encoded-character, fileinto, envelope, comparator-i;unicode-casemap, ereject (RFC 5429), variables (RFC 5229).

<?xml version="1.0" encoding="UTF-8"?>
<module-Sieve>
  <plain-auth>Yes|No</plain-auth>
  <TLS-only>No|All|Foreign</TLS-only>
  <host>...</host>
  <bad-cmd-max>1..16</bad-cmd-max>
  <bad-cmd-delay>N</bad-cmd-delay>
  <size-max>N</size-max>
  <quota>N</quota>
  <scripts-max>N</scripts-max>
  <reject-prohibited>Yes</reject-prohibited>
  <string-length-max>64B ... 1MB</string-length-max>
  <string-list-max>2..1024</string-list-max>
  <nested-blocks-max>1..128</nested-blocks-max>
  <test-list-max>N</test-list-max>
  <tests-max>N</tests-max>
  <redirects-max>0..256</redirects-max>
  <fileinto-max>0..256</fileinto-max>
</module-Sieve>
plain-auth

Переключатель, устанавливающий возможность авторизации в интерфейсе CLI с открытым паролем через незашифрованное сетевое соединение. По-умолчанию авторизация с открытым паролем запрещена.

TLS-only

Разрешает работу исключительно через зашифрованное соединение: no - любой клиент может работать через незашифрованное соединение, all - любой клиент должен устанавливать зашифрованное соединение, foreign - только клиенты не являющиеся доверенными, т.е. не перечисленные в ACL module-Mail/trusted должны устанавливать зашифрованное соединение. По-умолчанию: no.

bad-cmd-max

Количество неверных команд после которых соединение будет разорвано. По-умолчанию: 4.

bad-cmd-delay

Задержка в миллисекундах (целое положительное число) ответа сервера на ошибочную команду или неуспешную попытку авторизации. По-умолчанию: 2000.

size-max

Максимальный размер отдельного скрипта. По-умолчанию: 100 Kb.

quota

Ограничение суммарного размера всех хранящихся скриптов отдельного пользователя. По-умолчанию: 1 Mb.

scripts-max

Максимальное количество скриптов у одного пользователя. По-умолчанию: 200.

reject-prohibited

Переключатель, устанавливающий запрет на использование расширения "ereject". По-умолчанию: yes.

string-length-max

Максимальный размер строкового значения в скрипте. По-умолчанию: 4 Kb.

string-list-max

Максимально допустимое количество строк в списке: [строка1,строка2,...]. По-умолчанию: 128.

nested-blocks-max

Максимальное количество вложенных блоков. По-умолчанию: 15.

test-list-max

Ограничение количества тестов в одном операторе IF/ELSIF. По-умолчанию: 15.

tests-max

Ограничение количества операторов тестов (IF/ELSIF) в одном скрипте. По-умолчанию: 128.

redirects-max

Ограничение количества операторов redirect в одном скрипте. По-умолчанию: 2.

fileinto-max

Ограничение количества операторов fileinto в одном скрипте. По-умолчанию: 2.

<module-SMTPWeasel>

Модуль запускает внешние программы, называемые фильтрами, на разных этапах сессии SMTP.

<module-SMTPWeasel>
  <log-level>N</log-level>
  <order>N</order>
  <serialize>0..2</serialize>
  <stage0>filename</stage0>
  <stage1>filename</stage1>
  <stage2>filename</stage2>
  <stage3>filename</stage3>
  <stage4>filename</stage4>
</module-SMTPWeasel>
order

Устанавливает порядок в котором модули получают события от модуля SMTP. По-умолчанию: 200.

serialize

Контроль параллельной работы фильтров: 0 - любой фильтр может быть запущен в любой момент времени, 1 - на любом этапе 0..4 одновременно может быть запущен только один фильтр, но одновременно могут работать фильтры на разных этапах, 2 - одновременно может быть запущен только один фильтр, независимо от этапа.

stage0..stage4

Имя исполняемого файла который запускается на соответствующем этапе.



[1] В формате XML символы ">" (больше) и "<" (меньше) представляются сущностями &gt; и &lt; соответственно.