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

Далее, в тексте понятие дерево 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>

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

  <bind SSL="0|1">ip_address:port|*:port</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>
threads

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

threads-max

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

timeout

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

clients-limit

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

clients-per-ip-limit

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

TLS-certificate-file

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

TLS-key-file

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

TLS-key-password

Задаёт пароль если приватный ключ указанный в узле TLS-key-file защищён паролем.

TLS-min-version

Устанавливает минимально поддерживаемую версию протокола SSL: SSLv3, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3. Этот узел может быть задан если предполагаются шифрованные соединения. Рекомендуемое на сегодняшний день значение - TLSv1.2. По-умолчанию принимаются запросы на установку протокола любой версии.

bind

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

acl

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

Значения TLS-certificate-file, TLS-key-file, TLS-key-password, TLS-min-version могут быть указаны для всего набора узлов host находящихся на одном уровне. Для этого достаточно указать узлы TLS-* не в XML-дереве host, а на один уровень выше - в узле который содержит множество узлов host. При этом, если заданы узлы TLS-* в каком-либо XML-дереве host, они будут переопределять значения соответствующих узлов заданных вне данного узла host.

Также, значения TLS-certificate-file, TLS-key-file, TLS-key-password, TLS-min-version могут быть указаны глобально для любых узлов host в любых разделах конфигурации. Для этого узлы TLS-* указываются как непосредственные потомки корневого узла 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

Для атрибутов узлов обычно указываются значение 1 для ИСТИНА и 0 для ЛОЖЬ.

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

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

Примеры:

1 Kb

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

1 mb

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

128 bytes

128 байт