Настройка elles-dns-api с использованием конфигурационного файла
При необходимости изменения конфигурации elles-dns-api отредактируйте файл config.yaml на хосте, где развернут сервер (путь к файлу после установки — /etc/elles-dns-api/config.yaml), и выполните перезапуск сервиса:
sudo systemctl restart elles-dns-api.service
|
При создании или редактировании файла config.yaml учитывайте следующее:
|
Формат config.yaml
log_level: "info"
server:
host: "0.0.0.0"
port: 9443
read_timeout: 30s
write_timeout: 30s
idle_timeout: 120s
tls:
cert_file: "/etc/elles-dns-api/keytabs/api-server.crt"
key_file: "/etc/elles-dns-api/keytabs/api-server.key"
spnego:
spn: "HTTP/dc1.example.com"
keytab_path: "/etc/elles-dns-api/keytabs/spnego-svc.keytab"
realm: "EXAMPLE.COM"
kdcs:
- "dc1.example.com:88"
ldap:
url: "ldap://dc1.example.com:389"
realm: "EXAMPLE.COM"
base_dn: "DC=example,DC=com"
username: "svc-dnsel-ldap"
spn: "ldap/dc1.example.com"
keytab: "/etc/elles-dns-api/keytabs/ldap-svc.keytab"
krb5_config: "/etc/krb5.conf"
cache_ttl: 10m
delegation:
enabled: true
timeout: 5s
casbin:
model_path: "/etc/elles-dns-api/rbac_model.conf"
policy_path: "/etc/elles-dns-api/policy.csv"
dns:
zones_container: ""
default_record_ttl: 3600s
defaults:
ns_hostname: "dc1.example.com"
responsible_party: "hostmaster.example.com"
default_ttl: 3600
delegation:
external_ns_timeout: 5s
dns_rpc:
server: "dc1.example.com"
realm: "EXAMPLE.COM"
username: "svc-dnsel-rpc"
keytab: "/etc/elles-dns-api/keytabs/dnsrpc-svc.keytab"
timeout: 15s
rate_limit:
requests_per_second: 100
cors:
allowed_origins: ["*"]
allow_credentials: false
allowed_methods: ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"]
allowed_headers: ["Authorization", "Content-Type"]
rbac:
group_roles:
S-1-5-21-3633072393-148695822-1854736953-1101:
- role_dns_admins
user_roles:
S-1-5-21-3633072393-148695822-1854736953-1107:
- role_super_admin
Параметры config.yaml
Конфигурация состоит из секций:
| Секция | Назначение |
|---|---|
|
Глобальный уровень логирования |
|
HTTP-сервер (адрес, порт, таймауты) |
|
TLS-сертификаты для HTTPS |
|
Kerberos SPNEGO аутентификация клиентов |
|
Подключение к Active Directory (с Kerberos) |
|
RBAC-модели и политики |
|
Параметры по умолчанию для DNS-операций |
|
RPC-клиент для DNS Server Management Protocol |
|
Ограничение запросов в секунду |
|
Cross-Origin Resource Sharing |
|
Сопоставление SID групп/пользователей с ролями |
Секция log_level
Глобальный уровень логирования.
Уровень детализации логов.
Доступные значения:
-
debug— максимальная детализация (включая LDAP-запросы и Kerberos-обмен); -
info— основные события (по умолчанию для штатной эксплуатации); -
warn— только предупреждения; -
error— только ошибки.
Секция server
Параметры HTTP-сервера.
IP-адрес сервера.
Значение по умолчанию: 0.0.0.0.
Порт для HTTPS-подключения к API.
Значение по умолчанию: 9443.
Время ожидания чтения HTTP-запроса (в формате duration: 30s, 1m).
Значение по умолчанию: 30s.
Время ожидания записи HTTP-ответа (в формате duration).
Значение по умолчанию: 30s.
Время ожидания неактивного соединения (keep-alive) (в формате duration).
Значение по умолчанию: 120s.
Секция tls
Параметры TLS-сертификата для HTTPS.
Обязательно. Путь к файлу TLS-сертификата в формате PEM.
Обязательно. Путь к приватному ключу TLS-сертификата в формате PEM.
| Сертификат должен быть выдан доверенным центром сертификации для штатной эксплуатации. Самоподписанные сертификаты допустимы только в тестовых средах. |
Секция spnego
Параметры аутентификации клиентов через SPNEGO/Kerberos.
Обязательно. Service Principal Name (SPN) для HTTP-сервиса.
Формат: HTTP/<api-fqdn> (например, HTTP/api-host.example.com).
Значение должно совпадать с SPN, созданным скриптом elles-dns-api-setup.
Обязательно. Путь к keytab-файлу, содержащему ключи для указанного SPN.
Обязательно. Kerberos-область (Realm), к которой принадлежит SPN.
Должна совпадать с Realm контроллера домена (например, EXAMPLE.COM).
Список KDC-серверов в формате hostname:port.
Если не указано, используется DNS SRV-запись или /etc/krb5.conf.
Пример:
kdcs:
- "dc1.example.com:88"
- "dc2.example.com:88"
Секция ldap
Параметры подключения к Active Directory через LDAP с GSSAPI-аутентификацией.
Обязательно. URL LDAP-сервера. Должен начинаться с ldap:// (автоматически используется STARTTLS) или ldaps:// (TLS сразу).
Пример: ldap://dc.example.com:389
Обязательно. Kerberos-область для GSSAPI-аутентификации. Должна совпадать со значением spnego.realm.
Базовый DN для поиска DNS-зон и записей в Active Directory.
Пример: DC=example,DC=com
Имя служебной учетной записи для GSSAPI-аутентификации.
По умолчанию: svc-dnsel-ldap
SPN LDAP-сервиса контроллера домена.
Формат: ldap/<dc-fqdn> (например, ldap/dc.example.com).
Обязательно. Путь к keytab-файлу для GSSAPI-аутентификации LDAP.
Путь к файлу krb5.conf для настройки клиента Kerberos.
Если не указан, используется системный файл /etc/krb5.conf.
Время жизни кэша LDAP-соединений (в формате duration).
Значение по умолчанию: 10m
Обязательно. Включает поддержку делегирования зон через API.
Значение по умолчанию: true.
Время ожидания операций делегирования (в формате duration).
Значение по умолчанию: 5s.
Секция casbin
Параметры RBAC-модели Casbin.
Обязательно. Путь к файлу модели Casbin (rbac_model.conf).
Обязательно. Путь к файлу политики Casbin (policy.csv).
Секция dns
Параметры по умолчанию для DNS-операций.
DN контейнера DNS-зон в Active Directory.
Если не указан, автоматически определяется из RootDSE.
Срок действия по умолчанию для новых DNS-записей (в секундах).
Значение по умолчанию: 3600s
Подсекция defaults
Параметры по умолчанию для создания DNS-зон через API.
FQDN авторитетного DNS-сервера для SOA.PrimaryServer и NS-записей.
Если не задан, используется dnsHostName из RootDSE.
Email администратора зоны в DNS-формате (точка вместо @).
Если не задан, используется hostmaster.<zone_name>.
TTL по умолчанию для SOA.MinimumTTL и SOA/NS-записей (в секундах).
Значение по умолчанию: 3600.
Секция dns_rpc
Параметры подключения к DNS Server Management Protocol (DCE/RPC).
Обязательно. FQDN DNS-сервера, к которому подключается RPC.
Пример: dc.example.com
Обязательно. Kerberos-область для RPC-аутентификации.
Должна совпадать со значением spnego.realm.
Имя служебной учетной записи для аутентификации в RPC.
По умолчанию: svc-dnsel-rpc
Обязательно. Путь к keytab-файлу для аутентификации DCE/RPC.
Время ожидания выполнения RPC-запроса (в формате duration).
Значение по умолчанию: 15s
Секция rate_limit
Ограничение количества запросов в секунду.
Максимальное количество запросов в секунду на один IP-адрес (алгоритм token bucket).
Значение по умолчанию: 100
Секция cors
Параметры Cross-Origin Resource Sharing.
Список разрешенных источников (origins) для CORS.
Пример: ["https://ui.example.com", "https://admin.example.com"]
Значение "*" разрешает все источники — не рекомендуется в условиях штатной эксплуатации.
Разрешает отправку учетных данных (cookies, заголовки авторизации).
Значение true несовместимо с allowed_origins: ["*"].
Список разрешенных HTTP-методов.
Значение по умолчанию: ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"]
Список разрешенных HTTP-заголовков.
Значение по умолчанию: ["Authorization", "Content-Type"]
Секция rbac
Сопоставление SID групп и пользователей Active Directory с ролями Casbin.
Формат SID:
S-1-5-21-<domain>-<sub-auth>-<sub-auth>-<RID>
Как узнать SID группы:
-
с помощью PowerShell на Windows Server:
Get-ADGroup "DNS Admins" | Select-Object -ExpandProperty SID -
с помощью
ldapsearchна Linux:ldapsearch -H ldap://dc.example.com -b "DC=example,DC=com" \ "(sAMAccountName=DNS Admins)" objectSid
Сопоставление SID групп с ролями.
Формат: SID: [role1, role2]
Сопоставление SID пользователей с ролями (опционально).
Формат: SID: [role1, role2]
Встроенные роли:
-
role_super_admin— полный доступ; -
role_dns_admins— управление DNS; -
role_reader— только чтение.
Переменные окружения
Все параметры в конфигурации можно переопределить переменными окружения в формате
DNSEL_<SECTION>_<PARAM> (верхний регистр, точки заменены _):
| Переменная | Соответствие |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Переменные окружения имеют приоритет над значениями в YAML.
Проверка конфигурации
После настройки файла config.yaml необходимо проверить его корректность.
Валидация синтаксиса
Проверьте синтаксис с помощью встроенной команды, указав путь к файлу в ключе --config:
elles-dns-api config validate --config /etc/elles-dns-api/config.yaml
Если вывод отсутствует, синтаксис корректный. Если возникает ошибка, проверьте отступы, кавычки и структуру YAML в соответствии с RFC 9512.
Проверка при старте сервера
При запуске сервиса elles-dns-api в логах отображаются ключевые события, подтверждающие успешную инициализацию компонентов.
Проверьте логи:
sudo journalctl -u elles-dns-api -f
Ожидаемый вывод:
{"msg":"ldap config","url":"ldap://dc.example.com:389"}
{"msg":"StartTLS established"}
{"msg":"GSSAPI bind SUCCESS"}
{"msg":"RootDSE discovered","default_nc":"DC=example,DC=com"}
{"msg":"DNS context discovered","domain_container":"CN=MicrosoftDNS,DC=DomainDnsZones,DC=example,DC=com"}
{"msg":"Custom partitions summary","count":0}
Интерпретация сообщений:
-
StartTLS established— успешно установлено защищенное LDAP-соединение; -
GSSAPI bind SUCCESS— аутентификация через Kerberos прошла без ошибок; -
RootDSE discovered— сервер получил информацию о домене; -
DNS context discovered— найден контейнер DNS-зон в Active Directory; -
Custom partitions summary— количество пользовательских DNS-зон (если 0, то это штатная ситуация).
Безопасность
Для обеспечения безопасности при работе с elles-dns-api выполните обязательные требования и следуйте рекомендациям.
Обязательные требования
Обязательные требования включают:
-
Все keytab-файлы должны иметь права
600и принадлежать пользователюdnsel:ls -l /etc/elles-dns-api/keytabs/*.keytab # -rw------- dnsel dnsel spnego-svc.keytab # -rw------- dnsel dnsel ldap-svc.keytab # -rw------- dnsel dnsel dnsrpc-svc.keytab
-
В условиях штатной эксплуатации не используйте самоподписанные сертификаты. Используйте сертификаты, выданные корпоративным или публичным центром сертификации (CA).
-
В условиях штатной эксплуатации запрещайте доступ из произвольных источников:
cors: allowed_origins: ["https://ui.example.com", "https://admin.example.com"] allow_credentials: true -
Ограничьте количество запросов для защиты от DDoS-атак:
rate_limit: requests_per_second: 100
Рекомендации
При эксплуатации elles-dns-api следуйте рекомендациям:
-
Не сохраняйте config.yaml с реальными путями к keytab-файлам в системы контроля версий. Используйте шаблон config.example.yaml для репозитория.
-
Используйте переменные окружения для секретов:
export DNSEL_SPNEGO_KEYTAB_PATH="/run/secrets/spnego.keytab" export DNSEL_LDAP_KEYTAB="/run/secrets/ldap.keytab" export DNSEL_DNS_RPC_KEYTAB="/run/secrets/dnsrpc.keytab" sudo systemctl restart elles-dns-api.service
-
Используйте отдельную учетную запись для каждого компонента:
-
svc-dnsel-ldap— только чтение данных из Active Directory (минимальные права); -
svc-dnsel-rpc— только операции DCE/RPC (не имеет доступа к LDAP); -
svc-dnsel-http— только аутентификация HTTP (не имеет прав на изменение данных).
-
Все keytab-файлы и TLS-ключи должны храниться только на хосте с развернутым сервером elles-dns-api и никогда не передаваться клиентам.
|
Обновлено: