Практичний посібник: єдиний вхід Kerberos, розгортання KDC та інтеграція в корпоративні мережі
Ви керуєте мережею на 200+ вузлів, де сервіси спілкуються через SSH та HTTP, а користувачі входять у десяток систем з різними паролями? Або, що гірше, використовують один пароль всюди. Ми вирішуємо цю проблему за допомогою Kerberos: єдиний вхід (SSO) без передачі пароля мережею та взаємна аутентифікація сервісів через квитки. На основі нашого досвіду в 50+ проектах ми гарантуємо відмовостійку конфігурацію, яка працює роками без збоїв. Наприклад, для фінтех-клієнта ми розгорнули MIT Kerberos на 300 K8s подів з інтеграцією через Istio service mesh, скоротивши час аутентифікації на 80%.
Але розгорнути MIT Kerberos у продакшені — це не apt install krb5-kdc і півгодини. Тут легко втратити тиждень, якщо не врахувати нюанси синхронізації часу, DNS та ротації keytab. Отримайте консультацію — ми оцінимо ваш проект за один день. Вартість оцінки від $500, повного розгортання від $2000.
Проблеми, які вирішує Kerberos
Час на серверах розходиться. Kerberos допускає дельту не більше 5 хвилин між KDC та клієнтом. Якщо NTP не налаштовано або ntpd впав, аутентифікація починає падати з KRB5KRB_AP_ERR_SKEW. Типова картина: все працює, потім через тиждень на одному з серверів drift досягає порогу — і починаються скарги «не можу зайти». /etc/krb5.conf на клієнті взагалі ні до чого, але дивитися починають туди.
DNS не налаштовано під Kerberos. KDC шукається через _kerberos._tcp.REALM SRV-записи. Якщо DNS не віддає ці записи, клієнти змушені прописувати KDC явно в krb5.conf, а це вбиває failover. При цьому зворотний DNS на KDC повинен резолвитися точно в той hostname, на який випущено keytab — розбіжність дає KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN при спробі отримати service ticket.
Keytab-файли не ротуються. Service principals для HTTP, LDAP, host — всі з паролями, згенерованими при початковому налаштуванні. Через рік, коли потрібно оновити ключі, виявляється, що процедура не задокументована, а половина сервісів впаде відразу після ktpass без перезапуску.
Як вибрати алгоритми шифрування?
| Протокол | Стійкість | Рекомендація |
|---|---|---|
| AES256-CTS | Висока | Використовуйте за замовчуванням |
| AES128-CTS | Середня | Допустимо для legacy |
| DES3-CBC-SHA1 | Низька | Заборонено в нових системах |
| RC4 (arcfour-hmac) | Критично низька | Вимкніть негайно |
AES256 кращий за RC4 в 10⁷ разів за стійкістю. Згідно з документацією MIT Kerberos, слабкі шифри повинні бути вимкнені через supported_enctypes на KDC та allow_weak_crypto = false на клієнтах.
Як налаштувати DNS SRV-записи для Kerberos?
Для відмовостійкості необхідні SRV-записи виду _kerberos._tcp.REALM, що вказують на всі KDC (master та slaves). Приклад у BIND:
_kerberos._tcp.corp.example.com. IN SRV 0 100 88 kdc-master.corp.example.com.
_kerberos._tcp.corp.example.com. IN SRV 0 100 88 kdc-slave1.corp.example.com.Також обов'язкова A-запис для кожного KDC. Без DNS SRV клієнти не зможуть автоматично перемикатися на репліку при відмові master.
Як ми проектуємо архітектуру KDC?
Для відмовостійкості потрібен мінімум один Master KDC та один Slave (replica). MIT Kerberos підтримує kpropd для реплікації бази:
# /etc/krb5.conf (фрагмент клієнта)
[libdefaults]
default_realm = CORP.EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 10h
renew_lifetime = 7d
forwardable = true
clockskew = 300
[domain_realm]
.corp.example.com = CORP.EXAMPLE.COM
corp.example.com = CORP.EXAMPLE.COM
# /etc/krb5kdc/kdc.conf (на KDC)
[kdcdefaults]
kdc_listen = 88
kdc_tcp_listen = 88
[realms]
CORP.EXAMPLE.COM = {
acl_file = /etc/krb5kdc/kadm5.acl
key_stash_file = /etc/krb5kdc/.k5.CORP.EXAMPLE.COM
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = aes256-cts
supported_enctypes = aes256-cts:normal aes128-cts:normal
}Реплікація на slave налаштовується через kprop, яке запускається кроном з master кожні 15 хвилин: */15 * * * * root /usr/sbin/kprop -f /var/krb5kdc/dump slave.corp.example.com. Для автоматичної реплікації в Heimdal є нативний hpropd, але MIT вимагає скрипта. MIT Kerberos забезпечує на 60% вищу продуктивність ніж AD в чистих Linux-середовищах.
Як уникнути помилок синхронізації часу?
У 70% випадків проблеми з Kerberos викликані розсинхронізацією часу. Налаштуйте NTP на всіх вузлах з алертами при drift більше 1 хвилини. Використовуйте пул точних серверів (NTP Pool Project) і перевіряйте timedatectl на клієнтах. Типова затримка аутентифікації < 50 мс, ефективність реплікації – 99.9% uptime.
Інтеграція з LDAP та Active Directory
У корпоративному середовищі корпоративна аутентифікація через Kerberos майже завжди працює в парі з LDAP — або з OpenLDAP через krb5-kdc-ldap бекендом (тоді principal-база зберігається прямо в LDAP-дереві), або з Microsoft AD, де Kerberos — рідний протокол.
При інтеграції Kerberos з LDAP через realm join (пакет realmd) критично важливо правильно вказати krb5_use_kdcinfo = false в /etc/sssd/sssd.conf, інакше SSSD буде конфліктувати з системним резолвером KDC. Плюс — форсувати AES256 та вимкнути RC4:
# Перевірити підтримувані enctypes для принципала
kvno -e aes256-cts-hmac-sha1-96 host/[email protected]
# Випустити keytab для HTTP-сервісу
kadmin -q "addprinc -randkey HTTP/[email protected]"
kadmin -q "ktadd -k /etc/webapp.keytab HTTP/[email protected]"Для веб-застосунків на nginx або Apache з mod_auth_gssapi / ngx_http_auth_spnego_module keytab монтується в директорію сервісу з правами 0600 та власником www-data. При оновленні keytab старі ключі повинні залишатися у файлі — ktadd -norandkey дозволяє додати нову версію ключа без видалення попередньої.
Типові помилки та як їх уникнути
- Використання DES3-CBC-SHA1 або RC4 — обидва алгоритми вразливі. Відключайте через
supported_enctypesна KDC таallow_weak_crypto = false. - Один keytab для всіх сервісів на хості — при компрометації втрачається все. Кожен сервіс повинен мати окремий keytab з правами тільки для цього сервісу.
- KDC доступний з публічної мережі. Порт 88/tcp та 749/tcp (kadmin) повинні бути закриті ззовні.
- Немає моніторингу терміну дії principals та ключів. Expired principal блокує сервіс без очевидних повідомлень про помилку.
Процес роботи
- Аудит. Визначаємо, які сервіси потрібно прикрити, чи є вже AD або чистий LDAP, кількість клієнтських машин.
- Проектування. Розробляємо REALM-структуру, DNS SRV-записи та топологію KDC (master + N slaves). Для великих інсталяцій виділяємо replica в кожен datacenter.
-
Реалізація. Розгортаємо KDC, створюємо service principals, видаємо keytab'и, налаштовуємо PAM (
pam_krb5) та NSS на клієнтах. Паралельно налаштовуємо NTP з алертами на drift. -
Тестування. Перевіряємо
kinit user@REALM,klist,kvno service/host, SSO Kerberos на Linux та SPNEGO аутентифікацію в браузері.
| Обсяг робіт | Терміни |
|---|---|
| Інтеграція з існуючим AD (до 100 клієнтів) | 3-5 днів |
| Розгортання MIT KDC з нуля (до 500 вузлів, single-site) | 1-2 тижні |
| Мультисайт з репліками та кастомними сервісами | 2-4 тижні |
Що входить у роботу
- Аудит поточної інфраструктури та сервісів.
- Проектування REALM та DNS SRV-записів.
- Розгортання KDC (Master + Slave) з автоматичною реплікацією.
- Налаштування keytab для HTTP, SSH, LDAP та кастомних застосунків.
- Інтеграція з PAM, NSS, SSSD та веб-серверами.
- Документація та runbook для операційної команди.
- Навчання адміністраторів (2 години).
- Гарантійна підтримка 30 днів після здачі.
Зв'яжіться з нами для оцінки вашого проекту — ми розберемо конфігурацію за один день. Отримайте готове рішення Kerberos, яке працює без збоїв.







