DNS. Bind. DNSSEC

Настройка DNSSEC в Bind.

Содержание

1 Общая информация

  • Версия bind выше, чем 9.9:
    1named -v
    

2 Ключи

2.1 Каталоги ключей

  • Создаём каталог, в котором будем хранить ключи и переходим в него:
    • Red Hat:
      1mkdir /var/named/keys
      2cd /var/named/keys
      
    • Debian, Ubuntu:
      1mkdir /etc/bind/keys
      2cd /etc/bind/keys
      

2.2 Создание ключей

  • Создаём мастер-ключей (KSK):

    1dnssec-keygen -f KSK -a ECDSAP256SHA256 -b 4096 -n ZONE example.com
    
    • -f KSK: создаётся мастер-ключ;
    • -a ECDSAP256SHA256: используемый алгоритм шифрования;
    • -b 2048: размер ключа в битах (для алгоритма ECDSAP256SHA256 игнорируется);
    • -n ZONE: для DNS-зоны;
    • -r /dev/urandom: источник случайных данных;
    • example.com: домен, для которого предназначен ключ.
  • Создаём ключ для зоны (ZSK):

    1dnssec-keygen -a ECDSAP256SHA256 -b 2048 -n ZONE example.com
    
  • Задаём владельца для сгенерированных файлов:

    • Red Hat:
      1chown -R named:named /var/named/keys
      
    • Debian, Ubuntu:
      1chown -R bind:bind /etc/bind/keys
      

2.3 Права доступа

  • Поправим права доступа:
    1chown -R named:named /var/named/keys
    2chmod 640 /var/named/keys/*
    

3 Подпись зоны

  • Зоны можно подписывать вручную или настроить автоматическую подпись зон.
  • При ручной подписи необходимо переподписывать файл зоны после изменения.

3.1 Ручная подпись зоны

  • Копируем содержимое ключей в файл зоны:

    1cat Kexample.com.*key >> /var/named/master/example.com
    
  • Переходим в каталог, где хранится наша зона:

    • Red Hat:
      1cd /var/named/master
      
  • Debian, Ubuntu:

    1cd /etc/bind/master
    
  • Подписываем зону:

    1dnssec-signzone -e +3mo -N INCREMENT -K /var/named/keys example.com
    
    • -e +3mo : время действия RRSIG (3 месяца);
    • -N INCREMENT : использовать формат серийного номера SOA из файла;
    • -K /var/named/keys : путь хранения сгенерированных ключей;
    • example.com : подписываемый домен.
  • В каталоге хранения зон мы должны увидеть файл подписанной зоны example.com.signed.

3.1.1 Настройка BIND

  • Редактируем конфигурационный файл:

    • Red Hat:
      1/etc/named.conf
      
    • Debian, Ubuntu:
      1/etc/bind/named.conf.local
      
  • Проверяем, чтобы dnssec был включён:

    1options {
    2...
    3dnssec-enable yes;
    4dnssec-validation yes;
    5dnssec-lookaside auto;
    6}
    
    • dnssec-enable : включение или отключение dnssec на уровне сервера;
    • dnssec-validation : проверка корректность ответов;
    • dnssec-lookaside : разрешение использовать сторонние корни DNSSEC.
  • В настройке зоны меняем путь к файлу:

    1zone "example.com" {
    2file "master/example.com.signed";
    3};
    
  • Перезапускаем bind:

    • Red Hat:
      1systemctl reload named
      
    • Debian, Ubuntu:
      1systemctl reload bind
      
  • Или перегружаем конфигурацию bind:

    1rndc reload
    

3.2 Автоматическое подписывание зоны

  • Для автоматизации процесса в конфигурационном файле bind задаём:

    1options {
    2...
    3key-directory "/var/named/keys";
    4sig-validity-interval 20 10;
    5};
    
    • key-directory : каталог хранения ключей;
    • sig-validity-interval : период действия ключей: дней (период обновления).
  • Для зоны редактируем:

    1zone "example.com" {
    2...
    3file "master/example.com";
    4inline-signing yes;
    5auto-dnssec maintain;
    6};
    
    • inline-signing : включение или отключение прозрачного формирования подписей (без необходимости менять файл зоны);
    • auto-dnssec : уровень автоматической настройки DNSSEC для зоны.
  • Меняем серийный номер файла зоны.

  • Перезапускаем bind:

    • Red Hat:
      1systemctl reload named
      
    • Debian, Ubuntu:
      1systemctl reload bind
      
  • Или перегружаем конфигурацию bind:

    1rndc reload
    
  • В каталоге зоны должны появиться дополнительные 3 файла: example.com.jbk, example.com.signed, example.com.signed.jnl.

4 Проверка работы

  • Чтобы проверить, отдаёт ли наш сервер ответы с цифровыми подписями, вводим команду:
    1dig example.com +dnssec
    
  • Посмотрим подпись зоны:
    1dig DNSKEY example.com. @localhost +multiline
    
  • Или:
    1dig A example.com. @localhost +noadditional +dnssec +multiline
    
  • Получить DS записи для реестра доменов и прописать их у регистратора:
    1dig @localhost dnskey example.com | dnssec-dsfromkey -f - example.com
    
  • После того, как мы добавили DS записи в реестр, спустя какое-то время можно проверять все ли в порядке.

Links to this note

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие