Полная конфигурация.
Пред. | Глава 3. Конфигурация. | След.

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

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

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

    <server>
      <pid-file overwrite="0|1">filename</pid-file>
      <logging>...</logging>
      <name-resolution>...</name-resolution>
      <threads>N</threads>
      <threads-max>N</threads-max>
      <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-dir>path</module-dir>
      <load-module>filename</load-module>
      ...
      <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>
      <tail>N</tail>
    </logging>

file

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

screen

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

level

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

history

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

  Ротация может быть произведена принудительно в любой момент времени, для этого необходимо выполнить `manjary -k rotate`, на платформе `OS/2` также можно послать сигнал `ALRM` процессу `manjary`.

size-max

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

tail

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

### <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.

### <threads>, <threads-max>

threads

  Число параллельных нитей обслуживающих активные соединения. Если через соединение принимается очередной блок данных, отправляются данные или выполняется запрос, это занимает отдельную нить. Когда запрос выполнен и нет данных для немедленной отправки, нить переходит к обслуживанию следующего соединения или ожидает активности на других соединениях. По-умолчанию: `5`.

threads-max

  Максимальное число нитей. Если все нити заняты, для выполнения очередной операции создаётся новая. Общее количество нитей ограничивается значением данного узла. Неиспользуемые нити завершаются после некоторого тайм-аута, пока их количество не снизится до значения указанного в `threads`. По-умолчанию: `16`.

### Узлы <TLS-...>

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

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

`module-dir`

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

`load-module`

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

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

  Имя модуля | Загружаемый файл | Дерево XML конфигурации
  --- | --- | ---
  Mail | `mail.dll` | module-Mail
  SMTP | `smtp.dll` | module-SMTP
  POP3 | `pop3.dll` | module-POP3
  IMAP | `imap4.dll` | module-IMAP
  HTTP | `http.dll` | module-HTTP
  SpamCheck | `spamchk.dll` | module-SpamCheck
  Helpers | `helpers.dll` | module-Helpers
  AB | `ab.dll` | module-AB
  Sieve | `sieve.dll` | module-Sieve
  poppassd | `poppassd.dll` | module-poppassd
  BanIP | `banip.dll` | module-BanIP
  SMTPWeasel | `smtpwsl.dll` | module-SMTPWeasel

### <module-Mail>

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

    <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>bytes</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

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

mail-root

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

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

  Узел описывает сетевой сервер для `MMP` (протокола управления). Если для администрирования используется только WEB-интерфейс на том же сервере, узлы `port` можно не указывать. Значение узла `timeout` будет иметь влияние на продолжительность поддержания бездействующего сеанса для WEB-интерфейса.

pswd-complexity

  Необязательный параметр. Устанавливает требования к сложности паролей задаваемых через протокол MMP, а следовательно, и через WEB-интерфейс, и через модуль poppassd. По-умолчанию используются предустановленные настройки. Представляет собой список узлов `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>
        <banip-pool>string</banip-pool>
        <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>
        <relays>
          <relay>
            <to>domain1 domain2 ...</to>
            <to>domain3</to>
            ...
            <via SSL="0|1">server1[:port]</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

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

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 (SSL).

server/greeting

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

server/hops-max

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

server/plain-auth

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

server/banip-pool

  Имя пула модуля BanIP. Используется для блокировки адресов IP с которых выполняются частые неудачные попытки аутентификации.

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/relays

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

  relay/to

    Домены для доставки сообщений в которые будут указаны серверы. Множество доменов может быть указано как список имён разделённых пробелом в одном узле `to`, либо в нескольких узлах `to`.

  relay/via

    Имя сервера куда следует отправлять сообщения для доменов перечисленных в узлах `to`. После имени сервера может быть указан символ двоеточия и порт. Если порт не указан, используется стандартный для `SMTP` порт 25. Атрибут-переключатель `SSL` может указывать на то что необходимо установить безопасное соединение. Допускается использование множества узлов `via`, в этом случае при безуспешной попытке соединиться с сервером в первом узле, будет произведена попытка соединения со вторым и т.д.

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>
      <banip-pool>string</banip-pool>
      <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

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

banip-pool

  Имя пула модуля BanIP. Используется для блокировки адресов IP с которых выполняются частые неудачные попытки аутентификации.

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>N</log-level>
      <host>...</host>
      ...
      <greeting>string</greeting>
      <append-limit>bytes</append-limit>
      <plain-auth>Yes|No</plain-auth>
      <banip-pool>string</banip-pool>
      <TLS-only>No|All|Foreign</TLS-only>
      <auth-fail-max>N</auth-fail-max>
      <bad-cmd-max>N</bad-cmd-max>
      <bad-cmd-delay>N</bad-cmd-delay>
    </module-IMAP>

host

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

greeting

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

append-limit

  Максимальный размер сообщения которое может быть записано на сервер по протоколу `IMAP`. По-умолчанию - 64 Мб.

plain-auth

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

banip-pool

  Имя пула модуля BanIP. Используется для блокировки адресов IP с которых выполняются частые неудачные попытки аутентификации.

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 `fcgimm` реализующее WEB-интерфейс и взаимодействущее с интерфейсом `MMP` через сеть либо локальный сокет. Этот интерфейс может использоваться пользователями для получения информации о своей учётной записи и смены пароля или операторами и администраторами для управления доменами, пользователями и пр. Приложение `fcgimm` может быть запущено на любом сервере в сети и к нему может обращаться любой WEB-сервер поддерживающий протокол fast-cgi. Это делает возможным управление множеством серверов Manjary из одного места. В простом случае `fcgimm` используется модулем HTTP сервера Manjary.

    <module-HTTP>
      <log-level>N</log-level>
      <host>...</host>
      ...
      <fastcgi name="fcginame">
         <server>hostname:port|IPv4:port|[IPv6]:port|socket_name</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|@local-filename|URI-filename</handler>
           <acl>...</acl>
        </file>
        ...
        <acl not-listed="permit|deny|parent">
          <addr>...</addr>
          ...
        <acl>
      </directory>
      ...
      <vhost>
        <names>hostname[123] *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` описывает адрес и порт по которым нужно подключаться к серверу FastCGI. Если порт не указан, значение узла `server` рассматривается как имя локального сокета. Необязательный узел `start` задаёт имя исполняемого файла с параметрами который будет запущен при запуске сервера Manjary.

  ### Примечание

  В `Windows` до версии 10 не поддерживаются локальные именованные сокеты.

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

  Необязательное поле. Если задано - указывает программу-обработчик которой в качестве аргумента будет передано полное локальное имя запрошенного файла. Результат работы программы будет возвращён в качестве ответа сервера. Значением узла может быть путь URI к программе CGI, путь должен быть описан через `alias` с параметром `script`=`1`. Если значение узла начинается с символа "$", оно рассматривается (без "$") как имя для сервера FastCGI заданное атрибутом `name` узла XML `fastcgi`. Значение начинающееся с символа "@" рассматривается (без "@") как локальное имя выполняемого файла, например `@C:\PHP\php-cgi.exe`.

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>N</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>

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

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

host

  Описывает сервер LDAP. В узле `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>
      <log-level>N</log-level>
      <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

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

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-poppassd>

Модуль реализует протокол `poppassd` предназначенный для смены паролей пользователей.

    <module-poppassd>
      <log-level>N</log-level>
      <host>...</host>
      <bad-cmd-max>1..16</bad-cmd-max>
      <bad-cmd-delay>N</bad-cmd-delay>
      <banip-pool>string</banip-pool>
    </module-poppassd>

host

  В узле `host` рекомендуется указать общепринятый порт 106. Следует максимально ограничить доступ к данному сервису через ACL.

banip-pool

  Имя пула модуля BanIP. Используется для блокировки адресов IP с которых выполняются частые неудачные попытки аутентификации.

### <module-BanIP>

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

    <module-BanIP>
      <log-level>N</log-level>
      <pool include-trusted="Yes|No">
        <name>string</name>
        <filter>
          <addr>...</addr>
          ...
        </filter>
        <trigger-limit>N</trigger-limit>
        <time-window>time</time-window>
        <events-max>N</events-max>
        <ban-limit>N</ban-limit>
        <ban-time1>timeout</ban-time1>
        <ban-repeat-time>timeout</ban-repeat-time>
        <ban-time2>timeout</ban-time2>
      </pool>
      ...
      <on-ban>command</on-ban>
    </module-BanIP>

pool

  Пул привязывается к различным модулям и выполняет две функции: отслеживает события, такие как неудачные попытки аутентификации, и блокирует подключения с IP-адресов для которых частота событий превысила установленный максимум. Необязательный атрибут `include-trusted` указывает, должны ли контролироваться данным пулом доверенные адреса (по-умолчанию: `no`). Все дочерние узлы кроме `name` необязательны и имеют значения по-умолчанию. Максимальное количество пулов - 8.

pool/name

  Имя пула. Этот узел является обязательным и используется для привязки к модулям сервера. В конфигурациях соответствующих модулей имя пула указывается в узлах `banip-pool`.

pool/filter

  Необязательный узел ACL позволяющий указывать какие адреса IP клиентов будут контролироваться данным пулом. Адреса соответствующие узлу `addr` с атрибутом `type` имеющим значение `deny` будут игнорироваться. Если список не указан, либо адрес не соответствует ни одному узлу `addr`, он будет контролироваться.

pool/trigger-limit

  Максимальное количество адресов частота событий для которых отслеживается одновременно. По-умолчанию: `5000`.

pool/time-window

  Период времени за который должно произойти более `events-max` событий для помещения адреса в список заблокированных. По-умолчанию: `3 min`.

pool/events-max

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

pool/ban-limit

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

pool/ban-time1

  Интервал времени на который адрес блокируется в первый раз. Значение `0` означает постоянную блокировку. По-умолчанию: `10 min`.

pool/ban-repeat-time

  Интервал времени во время которого пул будет продолжать хранить адрес после окончания временной блокировки но не будет его блокировать. Если за данный период адрес снова будет заблокирован (т.е. частота событий превысит порог установленный `events-max` за время `time-window`), для продолжительности блокировки будет использовано значение `ban-time2`. По-умолчанию: `1 hour`.

pool/ban-time2

  Интервал времени на который блокируется адрес во второй и последующие разы. Значение `0` означает постоянную блокировку. По-умолчанию: `1 day`.

on-ban

  Если задано - команда (внешняя программа) которая будет выполняться при каждом создании и удалении блокировки. Указанная строка будет дополнена следующими аргументами:

  1. Имя пула в кавычках, как в узлах `pool`/`name`.

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

  3. Код операции: 0 - разблокирован администратором, 1 - заблокирован администратором, 4 - время действия временной блокировки закончилось, 5 - заблокирован автоматически, 7 - заблокирован автоматически повторно.

  4. Этот аргумент указывается только если 3й аргумент равен 5 или 7 и только если блокировка временная. Аргумент указывает время окончания действия блокировки в формате: "ГГГГ-ММ-ДД ЧЧ:ММ:СС".

  В директории `examples` находится скрипт REXX `banip.cmd` предназначенный для вызова из модуля BanIP на платформе `OS/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; соответственно.

Пред. | Наверх | След.
Общие замечания. | Начало | Глава 4. Модули.