Подробный гайд: как проверить KDC сервер (Key Distribution Center)

Гайд по проверке KDC (Kerberos): проверка служб (krb5kdc/KDC), портов 88/464, конфигов, DNS SRV, получение TGT, логов, времени. Для MIT и Active Directory.

2026.08.27                  


Подробный гайд: как проверить KDC сервер (Key Distribution Center)Подробный гайд: как проверить KDC сервер (Key Distribution Center) KDC (Key Distribution Center) — центральный компонент протокола Kerberos, отвечающий за выдачу билетов (tickets) и аутентификацию пользователей и служб. Проверка KDC необходима для диагностики проблем аутентификации, настройки новых серверов или подтверждения работоспособности существующей инфраструктуры.


1. Предварительные требования

  • Доступ к серверу KDC (по SSH или локально) с правами root/администратора (или соответствующими привилегиями).
  • Установленные клиентские утилиты Kerberos (обычно пакет krb5-user на Debian/Ubuntu, krb5-workstation на RHEL/CentOS, или встроенные средства в Windows).
  • Базовое понимание структуры Kerberos (realm, principal, keytab).



2. Проверка запущен ли KDC

Для MIT Kerberos (Linux/Unix)

KDC обычно работает как демон krb5kdc.

Проверьте его статус:

# systemd
systemctl status krb5kdc

# SysV init
service krb5kdc status

# Проверка процесса
ps aux | grep krb5kdc

Если служба не запущена, запустите её:

systemctl start krb5kdc

Дополнительно проверьте, работает ли административный демон kadmind (отвечает за изменение паролей, создание принципалов):

systemctl status kadmind

Для Active Directory

В Active Directory KDC встроен в службу Kerberos Key Distribution Center, которая является частью LSASS.

Проверить можно через оснастку «Службы» (services.msc) или PowerShell:

Get-Service -Name KDC

Обычно служба называется KDC или kdcsvc. Если она не запущена, запустите её.


3. Проверка сетевых портов

Kerberos использует следующие порты (по умолчанию):

  • 88 (TCP/UDP) — основной порт KDC для запросов аутентификации.
  • 464 (TCP/UDP) — смена пароля (kpasswd).
  • 749 (TCP) — администрирование KDC (kadmin) для MIT Kerberos (иногда используется 749/tcp и 464/tcp).

Проверьте, слушает ли сервер эти порты:

# netstat (устаревший, но часто доступен)
netstat -tulpn | grep -E '(:88|:464|:749)'

# ss (современная замена)
ss -tulpn | grep -E '(:88|:464|:749)'

В выводе должны быть строки вида:

tcp   LISTEN 0      5          0.0.0.0:88        0.0.0.0:*    users:(("krb5kdc",pid=1234,fd=7))
udp   UNCONN 0      0          0.0.0.0:88        0.0.0.0:*    users:(("krb5kdc",pid=1234,fd=8))

Для Active Directory порты 88 и 464 должны слушаться процессом lsass.exe. Можно проверить через netstat -ano | findstr :88 и сопоставить PID.


4. Проверка конфигурации Kerberos

Файл /etc/krb5.conf (клиентская конфигурация)

На сервере KDC этот файл также определяет realm и расположение KDC. Проверьте секции [libdefaults], [realms], [domain_realm].

[libdefaults]
    default_realm = EXAMPLE.COM
    dns_lookup_realm = false
    dns_lookup_kdc = false

[realms]
    EXAMPLE.COM = {
        kdc = kdc.example.com
        admin_server = kdc.example.com
    }

[domain_realm]
    .example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM

Убедитесь, что:

  • default_realm совпадает с реальным именем realm.
  • В секции [realms] указан правильный адрес KDC (имя хоста или IP).
  • Если используется DNS-обнаружение, проверьте записи SRV (см. раздел 6).

Файл /etc/krb5kdc/kdc.conf (конфигурация MIT KDC)

Содержит параметры самого KDC. Основные секции:

[kdcdefaults]
    kdc_ports = 88
    kdc_tcp_ports = 88

[realms]
    EXAMPLE.COM = {
        database_name = /var/lib/krb5kdc/principal
        admin_keytab = /etc/krb5kdc/kadm5.keytab
        acl_file = /etc/krb5kdc/kadm5.acl
        key_stash_file = /etc/krb5kdc/stash
        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
    }

Проверьте:

  • Пути к базе данных principals и stash-файлу существуют.
  • Порты соответствуют ожидаемым.
  • Типы шифрования поддерживаются (обычно AES).

Для Active Directory

Конфигурация хранится в Active Directory, но можно проверить через klist на контроллере домена или утилитой ksetup.


5. Проверка базы данных KDC (для MIT Kerberos)

Убедитесь, что база данных principals цела и доступна.



# Просмотр списка принципалов (требует прав root)
kadmin.local -q "listprincs" | head

Если база повреждена или не найдена, KDC не сможет выдавать билеты.

Проверить целостность можно с помощью kdb5_util:

kdb5_util dump /tmp/kdc_dump

Если команда успешна, база читается.

Также проверьте наличие stash-файла (содержит мастер-ключ):

ls -l /etc/krb5kdc/stash

6. Проверка DNS и обнаружения KDC

Kerberos клиенты могут находить KDC через DNS (SRV-записи) или через файл krb5.conf.

Проверка SRV-записей (обычно для Active Directory)

# Для Linux
dig _kerberos._udp.example.com SRV +short
dig _kerberos._tcp.example.com SRV +short
dig _kpasswd._udp.example.com SRV +short

# Для Windows
nslookup -type=SRV _kerberos._tcp.example.com

Вы должны увидеть записи, указывающие на сервер(ы) KDC, например:

0 100 88 kdc.example.com.

Если записей нет, клиенты могут не найти KDC автоматически. В этом случае в krb5.conf нужно явно указать kdc =.

Проверка прямого и обратного разрешения имён

nslookup kdc.example.com
nslookup <IP-адрес>

Имя KDC должно корректно разрешаться, а обратная зона должна возвращать то же имя (важно для Kerberos).


7. Тестирование аутентификации

Получение TGT (Ticket-Granting Ticket)

На клиентской машине (или на сервере) выполните:

kinit username@EXAMPLE.COM

Введите пароль пользователя. При успехе не будет вывода.

Проверьте полученные тикеты:

klist

Вывод должен содержать строку с krbtgt/EXAMPLE.COM@EXAMPLE.COM — это TGT.

Если ошибка, прочитайте сообщение:

  • Cannot find KDC for realm "EXAMPLE.COM" — проблема с DNS или krb5.conf.
  • Preauthentication failed — неверный пароль или проблемы с шифрованием.
  • Clock skew too great — рассинхронизация времени.

Проверка сервисного тикета

Для проверки доступа к сервису, защищённому Kerberos (например, HTTP, SSH), можно использовать kvno:

kvno host/server.example.com@EXAMPLE.COM

Если команда успешна, будет выведен номер версии ключа.

Также проверьте, что сервисный principal существует в KDC:

kadmin.local -q "getprinc host/server.example.com"

Смена пароля (проверка kadmind)

kpasswd username@EXAMPLE.COM

Потребуется ввести старый и новый пароль. Если kadmind не работает, будет ошибка.


8. Проверка логов KDC

Логи помогают диагностировать проблемы.

MIT Kerberos

Обычно логи находятся в /var/log/krb5kdc.log (зависит от конфигурации syslog). Проверьте настройки в /etc/krb5kdc/kdc.conf или /etc/syslog.conf.

tail -f /var/log/krb5kdc.log

Ищите ошибки: AS_REQ (запрос на аутентификацию), TGS_REQ, KRB5KDC_ERR_*.


Active Directory

События Kerberos логируются в системном журнале Windows (Event Viewer) в разделе «Security» или «System».

Полезные фильтры:

  • Источник: Kerberos-Key-Distribution-Center
  • Коды событий: 4768 (TGT выдан), 4771 (ошибка предварительной аутентификации).
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4768,4771} -MaxEvents 10

9. Проверка синхронизации времени

Kerberos критически зависит от точного времени: максимальная допустимая разница обычно 5 минут.

На Linux:

# Проверить текущее время и синхронизацию с NTP
date
chronyc tracking   # если используется chrony
ntpq -p            # если используется ntpd

На Windows:

w32tm /query /status

Если время расходится, настройте NTP и синхронизируйте.


10. Дополнительные проверки для Active Directory

Если KDC — это контроллер домена Windows, проверьте его общее состояние:

# Проверка всех контроллеров домена
dcdiag /test:kccevent /test:advertising /test:services

# Проверка Kerberos через klist
klist tgt


Также убедитесь, что служба KDC запущена и не имеет ошибок в журнале.


11. Типичные ошибки и способы устранения

Ошибка Возможная причина Решение
Cannot find KDC for realm Неправильный realm, отсутствует запись в krb5.conf или DNS Проверьте krb5.conf, добавьте kdc = или настройте SRV-записи
Preauthentication failed Неверный пароль, неподдерживаемый тип шифрования, проблемы с ключами Проверьте пароль, убедитесь, что поддерживаемые enctypes совпадают
Clock skew too great Расхождение времени между клиентом и KDC Синхронизируйте время с NTP
KDC has no support for encryption type Клиент использует шифрование, не поддерживаемое KDC Измените настройки шифрования (например, включите AES) или обновите систему
Cannot contact any KDC Порт 88 закрыт, KDC не запущен, сеть Проверьте фаервол, статус службы, сетевую доступность
kadmin: GSS-API error Проблемы с аутентификацией администратора, keytab Проверьте права, используйте kadmin.local на сервере KDC

12. Заключение

Проверка KDC включает несколько уровней: от простой проверки запущенного процесса до тестовой аутентификации и анализа логов. Систематический подход (сначала порты и процессы, затем конфигурация, DNS, время, и наконец функциональные тесты) позволяет быстро локализовать проблему.


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта