Глава 3. Конфигурация.

Содержание

Общие замечания.
Уровень детализации лог-файла.
Сетевые серверы (узлы host).
Интервалы времени и тайм-ауты.
Списки доступа по адресам IP.
Значения узлов ИСТИНА/ЛОЖЬ.
Количество байт
Шаблоны строк
Глобальные настройки.
<module-Mail>
<module-SMTP>
<module-POP3>
<module-IMAP>
<module-HTTP>
<module-SpamCheck>
<module-Helpers>
<module-AB>
<module-Sieve>
<module-poppassd>
<module-BanIP>
<module-SMTPWeasel>

Общие замечания.

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

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

Уровень детализации лог-файла.

Уровень подробности отладочной информации задаётся целым числом от 1 (минимальный) до 5 (максимальный) - глобально значением узла logging/level. Для отдельных модулей уровень подробности может быть изменён на значения узлов log-level в соответствующих местах конфигурации. Это полезно при поиске проблем в конкретной подсистеме сервера, для этого достаточно указать уровень подробности отладочной информации для соответствующего модуля выше глобального.

Сетевые серверы (узлы host).

Все разделы конфигурации предполагающие описание приёма сетевых запросов на подключение от клиентов имеют узлы host. Допускается указание нескольких узлов host для каждой подсистемы Структура XML деревьев host одинакова для всех серверных подсистем. Скажем, клиент SMTP - не серверная подсистема, а клиентская, поэтому у неё XML дерево host имеет более простую структуру.

В полном виде XML дерево host выглядит так:

<host>
  <timeout>time</timeout>
  <clients-limit>N</clients-limit>
  <clients-per-ip-limit>N</clients-per-ip-limit>

  <SSL-certificate-file>filename</SSL-certificate-file>
  <SSL-key-file>filename</SSL-key-file>
  <SSL-key-password>secret</SSL-key-password>
  <SSL-min-version>none|SSLv3|TLSv1|TLSv1.1|TLSv1.2|TLSv1.3</SSL-min-version>
  <SSL-cipher>cipher list</SSL-cipher>
  <SSL-cipher-TLSv1.3>cipher list</SSL-cipher-TLSv1.3>

  <SSL-ca-file>filename</SSL-ca-file>
  <SSL-verify-peer>none|optional|require</SSL-verify-peer>
  <SSL-verify-depth>N</SSL-verify-depth>
  <cert-username>
    <dn>field list</dn>
    <san-email>Yes|No</san-email>
    <san-othername>field list</san-othername>
  </cert-username>

  <bind SSL="0|1" IPv6only="0|1">hostname:port|IPv4:port|*:port|[IPv6]:port|[::]:port|socket_name</bind>
  ...

  <acl>
    <addr type="permit|deny">ip_address</addr>
    <addr type="permit|deny">ip_address/number_of_bits_mask</addr>
    <addr type="permit|deny">ip_address/dotted_decimal_mask</addr>
    <addr type="permit|deny">ip_address_1-ip_address_2</addr>
    <addr type="permit|deny">all|any|0/0</addr>
    ...
  </acl>
</host>
timeout

Максимальное время отсутствия активности клиента. Если клиент не проявляет активности указанное время, он будет отключён. Максимальное значение - 3 h. Значение по-умолчанию: 25 min.

clients-limit

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

clients-per-ip-limit

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

SSL-...

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

SSL-certificate-file, SSL-key-file

Файлы в формате PEM серверного сертификата и приватного ключа соответственно. Эти два узла должны быть обязательно заданы для использования шифрованных соединений как на потртах SSL, так и для TLS.

SSL-key-password

Указывает, если требуется, пароль которым защищён приватный ключ заданный узлом SSL-key-file.

SSL-min-version

Минимальная допустимая версия протокола SSL.

SSL-cipher

Набор шифров использующихся для версий SSL до TLSv1.2 включительно. Точный набор поддерживаемых наборов шифров определяется версией OpenSSL.

SSL-cipher-TLSv1.3

Набор шифров использующихся для версии SSL TLSv1.3.

SSL-ca-file

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

SSL-verify-peer

Верификация сертификатов клиентов. Возможные значения: none - сертификат клиента не запрашивается, аутентификация по сертификату невозможна, optional - если клиент предоставляет сертификат, он будет проверен, соединение будет установлено если сертификат прошёл проверку, require - клиент обязан предоставить действительный сертификат. Этот узел (со значением optional или require) обязателен для аутентификации клиентов по сертификату.

SSL-verify-depth

Целое положительное число. Максимальная глубина проверки сертификата в процессе аутентификации клиента.

cert-username

Описание полей клиентского сертификата значение которых будет использоваться в качестве имени пользователя. Если этот узел не задан, аутентификация по сертификату не будет доступна. Например, использовать значение Common Name сертификата: <cert-username><dn>CN</dn></cert-username>. Если дерево cert-username было задано глобально, указанное здесь будет заменять его.

dn

Список имён полей Distinguished Name (DN) разделённых пробелами или переводами строк. Значения этих полей могут использоваться в качестве имени пользователя. Поля просматриваются в указанном порядке и используется значение первого которое было найдено в сертификате клиента. Пример: CN emailAddress.

san-email

Переключатель указывающий необходимость брать в качестве имени пользователя значение email из расширения сертификата Subject Alternative Name (SAN).

san-othername

Список имён otherName расширения сертификата Subject Alternative Name (SAN) разделённых пробелами или переводами строк. Порядок имён не важен, будет использовано первое найденное в сертификате. Пример: msUPN 1.3.6.1.5.5.7.8.1.

bind

Прослушиваемый порт TCP/IP на котором будут приниматься соединения. Значение состоит из адреса IP или имени локального интерфейса, двоеточия и номера порта. Если нет необходимости ограничиваться конкретным сетевым интерфейсом, вместо его адреса указывается символ "*" для любого адреса IPv6 и любого адреса IPv4, если не указан параметр IPv6only="1" или [::] для любого интерфейса IPv6 на котором также могут приниматься подключения на адрес IPv4, если не указан параметр IPv6only="1". Если порт не указан, значение узла bind рассматривается как имя локального сокета. Может быть задано множество узлов bind. Если указан атрибут SSL=1, то на данном порту будут приниматься только шифрованные соединения, это не относится к таким вещам как STARTTLS, когда соединение переходит в шифрованный режим позже по инициативе клиента.

Примечание

Для параметров IPv6only и SSL вместо 1 может быть указано одно из значений: enable, yes, on, true.

Примечание

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

acl

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

Значения узлов SSL-... и дерево cert-username могут быть указаны для всего набора узлов host находящихся на одном уровне. Для этого достаточно указать узлы SSL-... и дерево cert-username не в XML-дереве host, а на один уровень выше - в узле который содержит множество узлов host. При этом, если какие-то из этих узлов заданы в каком-либо XML-дереве host, они будут переопределять значения заданные вне данного узла host.

Также, узлы SSL-... и дерево cert-username могут быть указаны глобально для любых узлов host в любых разделах конфигурации. Для этого эти узлы указываются как непосредственные потомки корневого узла server. Их значение может быть переопределено в других местах конфигурации.

Интервалы времени и тайм-ауты.

В различных узлах конфигурации используется формат задания временных интервалов в виде последовательности значений вида N[sec|s|min|m|hour|hours|h|day|days|d|week|weeks|w], Где N - целое число; sec или s - секунды; min или m - минуты; hour, hours или h - часы; day, days или d - дни (одни день - 24 часа); week, weeks или w - недели. Одиночное целое значение без указания размерности задаёт количество секунд.

Примеры:

1h 30min

Один час и тридцать минут.

2 Hours 5 Min 10 Sec

Два часа, пять минут и десять секунд.

50 или 50 sec

Пятьдесят секунд.

Списки доступа по адресам IP.

Некоторые узлы, например, такие как host/acl, определяют принадлежность адреса IP клиента к заданному множеству. XML деревья данного типа имеют дочерние узлы addr значения которых являются адресом IP или диапазоном адресов. Диапазоны могут задаваться в следующих видах:

ip_address/number_of_bits_mask

Пример: 192.168.1.0/24

ip_address/dotted_decimal_mask

Пример: 192.168.1.0/255.255.255.0

ip_address_1-ip_address_2

Пример: 192.168.1.1-192.168.1.254

all или any

Соответствует любому адресу.

Атрибуты type узлов addr принимают одно из двух значений: permit - адрес разрешён и deny - адрес запрещён. При проверке адреса на принадлежность списку, узлы addr просматриваются в том порядке как они записаны в конфигурации, если адрес попадает в указанный диапазон, он считается принятым если type имеет значение permit, либо запрещённым если type имеет значение deny.

Значения узлов ИСТИНА/ЛОЖЬ.

Узлы и атрибуты являющиеся переключателями, т.е. те, которые могут принимать одно из двух значений - ИСТИНА или ЛОЖЬ, например, logging/screen, могут задаваться разными ключевыми словами являющимися синонимами:

Для "ИСТИНА": 1, enable, yes, on, true

Для "ЛОЖЬ": 0, disable, no, off, false

Количество байт

Значения узлов указывающих количество байт или объём данных могут представлять собой целое число с указанием размерности: N[byte|bytes|b|kb|k|mb|m|gb|g|tb|t].

Примеры:

1 Kb

1 килобайт (1024 байта)

1 mb

1 мегабайт (1024 килобайта)

128 bytes

128 байт

Шаблоны строк

В некоторых параметрах конфигурации для сопоставления имён хостов, доменов и других строковых данных используются шаблоны. В шаблонах могут встречаться метасимволы: * (звездочка) для любой последовательности символов (включая пустую), ? (вопросительный знак) для одного любого символа и квадратные скобки [...] для перечисления допустимых символов (например, [abc] или [0-9]), позволяя задавать наборы или диапазоны. Если после [ (открывающая квадратная скобка) указан символ ^, то набору или диапазону будет соответствовать любой символ не входящий в указанный набор или диапазон. Если в набор необходимо включить символ ']', он должен идти первым после [ или ^.

Символ \ используется для экранирования: если в шаблоне необходимо указать один из символов '*', '?', '\' как часть текста, перед ним указывается \.

Примечание

Исключение: экранирующий символ не используется в шаблонах указанных в атрибутах value узлов set-env в деревьях module-HTTP/vhost/directory/file.

Также, задать символы '*' и '?' как часть текста можно заключив их в квадратные скобки: шаблон "abc[*]xyz" соответствует только строке "abc*xyz".

Сравнение не-метасимволов регистронезависимое.