Общие замечания.
Пред. | Глава 3. Конфигурация. | След.

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

Далее, в тексте понятие дерево 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" 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 не будут обслуживаться. По-умолчанию - не ограничено.

TLS-certificate-file

  Файл в формате PEM содержащий сертификат. Этот узел переопределяет значение такого же узла заданного на одном уровне с узлами `host` или глобально. Используется для шифрованных соединений (т.е. имеются узлы `bind` с атрибутом `SSL`=`1` или используется STARTTLS).

TLS-key-file

  Файл в формате PEM содержащий приватный ключ. Этот узел переопределяет значение такого же узла заданного на одном уровне с узлами `host` или глобально. Используется для шифрованных соединений (т.е. имеются узлы `bind` с атрибутом `SSL`=`1` или используется STARTTLS).

TLS-key-password

  Задаёт пароль если приватный ключ указанный в узле `TLS-key-file` защищён паролем. Этот узел переопределяет значение такого же узла заданного на одном уровне с узлами `host` или глобально. Используется для шифрованных соединений (т.е. имеются узлы `bind` с атрибутом `SSL`=`1` или используется STARTTLS).

TLS-min-version

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

bind

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

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

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

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

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

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`

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

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

Примеры:

`1 Kb`

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

`1 mb`

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

`128 bytes`

128 байт

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