SSO Kerberos: налаштування KDC та keytab

Користувачі входять у десяток систем із різними паролями, а сервіси не можуть довіряти один одному — це сповільнює роботу та створює ризики безпеки. Ми налаштовуємо Kerberos у корпоративній мережі: розгортаємо KDC, впроваджуємо єдиний вхід SSO та інтегруємо keytab для Linux-сервісів. Наша команда реалізує проєкт під ключ — від аудиту інфраструктури до супроводу, забезпечуючи надійну автентифікацію без зриву термінів.
Часті запитання

Практичний посібник: єдиний вхід 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 блокує сервіс без очевидних повідомлень про помилку.

Процес роботи

  1. Аудит. Визначаємо, які сервіси потрібно прикрити, чи є вже AD або чистий LDAP, кількість клієнтських машин.
  2. Проектування. Розробляємо REALM-структуру, DNS SRV-записи та топологію KDC (master + N slaves). Для великих інсталяцій виділяємо replica в кожен datacenter.
  3. Реалізація. Розгортаємо KDC, створюємо service principals, видаємо keytab'и, налаштовуємо PAM (pam_krb5) та NSS на клієнтах. Паралельно налаштовуємо NTP з алертами на drift.
  4. Тестування. Перевіряємо 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, яке працює без збоїв.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1141