Содержание
Manjary имеет довольно объёмную конфигурацию позволяющую тонко настроить различные аспекты работы. Большое количество параметров не требует изменений и может использовать значения по-умолчанию. Самые значимые изменения в конфигурации описаны в Быстрая конфигурация. Минимально необходимые настройки.
Далее, в тексте понятие дерево XML означает узел содержащий дочерние узлы. Понятие узел может означать как дерево XML, так и узел содержащий значение. Строки "..." в листингах демонстрирующих формат участков конфигурации указывают на то, что узел на предыдущей строке может быть задан множество раз.
Уровень подробности отладочной информации
задаётся целым числом от 1 (минимальный) до 5 (максимальный) -
глобально значением узла logging/level. Для
отдельных модулей уровень подробности может быть изменён на значения
узлов log-level в соответствующих местах конфигурации. Это
полезно при поиске проблем в конкретной подсистеме сервера, для этого
достаточно указать уровень подробности отладочной информации для
соответствующего модуля выше глобального.
Все разделы конфигурации предполагающие описание
приёма сетевых запросов на подключение от клиентов имеют узлы
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>
Максимальное время отсутствия активности клиента. Если клиент не проявляет активности указанное время, он будет отключён. Максимальное значение - 3 h. Значение по-умолчанию: 25 min.
Максимальное количество клиентов. Если количество клиентов достигло этого значения, новые соединения не будут обслуживаться. По-умолчанию - не ограничено.
Максимальное количество клиентов с одним адресом IP. Если количество клиентов с одинаковым адресом достигло этого значения, новые соединения с данного IP не будут обслуживаться. По-умолчанию - не ограничено.
Эти узлы описывают опции протокола SSL. Если были заданы
соответствующие глобальные
узлы или соответствующие узлы на одном уровне с host, установленные здесь значения будут
заменять их.
Файлы в формате PEM серверного сертификата и приватного ключа соответственно. Эти два узла должны быть обязательно заданы для использования шифрованных соединений как на потртах SSL, так и для TLS.
Указывает, если требуется, пароль которым защищён
приватный ключ заданный узлом SSL-key-file.
Минимальная допустимая версия протокола SSL.
Набор шифров использующихся для версий SSL до TLSv1.2 включительно. Точный набор поддерживаемых наборов шифров определяется версией OpenSSL.
Набор шифров использующихся для версии SSL TLSv1.3.
Цепочка сертификатов или сертификат удостоверяющего центра выпускающий сертификаты использующиеся для для аутентификации клиентов. Также, файл должен содержать список отозванных сертификатов (CRL). Этот узел обязателен для аутентификации клиентов по сертификату.
Верификация сертификатов клиентов. Возможные
значения: none - сертификат клиента
не запрашивается, аутентификация по сертификату
невозможна, optional - если клиент
предоставляет сертификат, он будет проверен, соединение
будет установлено если сертификат прошёл проверку,
require - клиент обязан предоставить
действительный сертификат. Этот узел (со значением
optional или
require) обязателен для
аутентификации клиентов по сертификату.
Целое положительное число. Максимальная глубина проверки сертификата в процессе аутентификации клиента.
Описание полей клиентского сертификата значение которых
будет использоваться в качестве имени пользователя. Если этот
узел не задан, аутентификация по сертификату не будет доступна.
Например, использовать значение Common Name сертификата: <cert-username><dn>CN</dn></cert-username>. Если дерево cert-username было
задано глобально, указанное здесь будет заменять
его.
Список имён полей Distinguished Name
(DN) разделённых пробелами или
переводами строк. Значения этих полей могут
использоваться в качестве имени пользователя. Поля
просматриваются в указанном порядке и используется
значение первого которое было найдено в сертификате
клиента. Пример: CN
emailAddress.
Переключатель указывающий необходимость брать в качестве имени пользователя значение email из расширения сертификата Subject Alternative Name (SAN).
Список имён otherName расширения сертификата
Subject Alternative Name (SAN) разделённых пробелами или
переводами строк. Порядок имён не важен, будет
использовано первое найденное в сертификате. Пример:
msUPN 1.3.6.1.5.5.7.8.1.
Прослушиваемый порт 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 не поддерживаются локальные именованные
сокеты.
Список контролирующий
возможность подключения клиентов по их адресу 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
Пятьдесят секунд.
Некоторые узлы, например, такие как host/acl, определяют
принадлежность адреса IP клиента к заданному множеству. XML деревья
данного типа имеют дочерние узлы addr значения которых
являются адресом IP или диапазоном адресов. Диапазоны могут задаваться
в следующих видах:
Пример: 192.168.1.0/24
Пример: 192.168.1.0/255.255.255.0
Пример: 192.168.1.1-192.168.1.254
Соответствует любому адресу.
Атрибуты 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".
Сравнение не-метасимволов регистронезависимое.