Настройка DNSSEC на Ubuntu Server

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (52 оценок, среднее: 4,90 из 5)
Загрузка...

Последнее изменение: 13.08.2019

Технология DNS в нынешнем виде была разработана более 20 лет назад, когда о защите информации мало кто задумывался. Поэтому в сегодняшним состоянии система DNS имеет несколько ключевых уязвимостей.
Достоверность ответа DNS-сервера никак не проверяется. Это позволяет отправить пользователя, обратившегося к доменному имени, на произвольный IP-адрес, подменив ответ сервера.
Также уязвимы кэширующие DNS-серверы провайдеров, выступающие как резолверы для клиентов: Атака Каминского.
Сегодня существуют технологии, предусматривающие хранение открытых ключей в DNS-записях, например, DKIM-подписи в электронной почте, SSH-ключей в записях SSHFP и т.д. Все эти технологии требуют защиты от подделки DNS.Поэтому была разработана технология DNSSEC позволяющая убедиться, что DNS сервер является подлинным.

DNSSEC — технология, позволяющая однозначно удостовериться в подлинности DNS информации при помощи криптографической подписи.

В этой статье разберём как можно внедрить данную технологию на наш сервер с операционной системой Ubuntu.

Содержание

Начальная конфигурация

  • ОС — Ubuntu Server 18.04 LTS
  • DNS сервер — Bind v.9.x
  • Domen — Ваш зарегистрированный домен (в примере будет использоваться домен от регистратора Reg.ru).

Формирование ключей

Создаём каталог, в котором будем хранить ключи и сразу переходим в него.

На CentOS / Red Hat:

sudo mkdir /var/named/keys 
cd /var/named/keys

На Ubuntu / Debian:

 sudo mkdir /var/lib/bind/keys 
 cd /var/lib/bind/keys

Генерируем мастер ключ для зоны (KSK):

sudo dnssec-keygen -f KSK -a RSASHA1 -b 2048 -n ZONE -r /dev/urandom obu4alka.ru
  • -f KSK — флаг, который говорит, что формируется мастер ключ.
  • -a RSASHA1 — используемый алгоритм шифрования.
  • -b 2048 — размер ключа в битах.
  • -n ZONE — для DNS-зоны.
  • -r /dev/urandom — путь к файлу со случайными данными. В различных версиях системы путь может отличаться. Если упустить этот ключ в CentOS / Ubuntu, процесс генерации сертификата может зависнуть.
  • obu4alka.ru — домен, для которого предназначен ключ.

подробное описание ключей можно посмотреть командой dnssec-keygen -help или man dnssec-keygen.

Генерируем ключ для зоны (ZSK):

sudo dnssec-keygen -a RSASHA1 -b 2048 -n ZONE -r /dev/urandom obu4alka.ru

Ключи ГОСТ

Формируются при помощи ключа -a ECCGOST.

Генерируем мастер ключ для зоны (KSK):

sudo dnssec-keygen -f KSK -a ECCGOST -b 2048 -n ZONE -r /dev/urandom obu4alka.ru

Генерируем ключ для зоны (ZSK):

sudo dnssec-keygen -a ECCGOST -b 2048 -n ZONE -r /dev/urandom obu4alka.ru

Смена прав и владельца для сгенерированных файлов.

На CentOS / Red Hat:

sudo chown -R named:named /var/named/keys

На Ubuntu / Debian:

sudo chown -R bind:bind /var/lib/bind/keys

Подпись зоны

Ручное подписывание зоны

Переходим в каталог, где хранится наша зона.

CentOS / Red Hat:

cd /var/named/master

Ubuntu / Debian:

cd /var/lib/bind/

*Пути могут отличаться (зависит от ваших настроек)

Подписываем зону:

sudo dnssec-signzone -N INCREMENT -K /var/lib/bind/keys obu4alka.ru
  • -N INCREMENT — использовать формат серийного номера SOA из файла.
  • -K /var/lib/bind/keys — путь хранения сгенерированных ключей.
  • obu4alka.ru — домен, который подписываем.

Система должна вернуть, примерно, следующее:

Verifying the zone using the following algorithms: RSASHA1.
Zone fully signed:
Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked
ZSKs: 1 active, 0 stand-by, 0 revoked

В каталоге хранения зон мы должны увидеть obu4alka.ru.signed — это файл подписанной зоны.

Далее открываем конфигурационный файл bind.

На CentOS / Red Hat:

sudo nano /etc/named.conf

На Ubuntu / Debian:

sudo nano /etc/bind/named.conf.local

Проверяем, чтобы dnssec был включен:

options {
 …
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
}
  • dnssec-enable yes — включение или отключение dnssec на уровне сервера;
  • dnssec-validation yes — проверка корректности ответов;
  • dnssec-lookaside — разрешение использовать сторонние корни DNSSEC.

В настройке зоны меняем путь к файлу:

zone "obu4alka.ru" {
type master; file "/var/lib/bind/obu4alka.signed";};
};

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

На CentOS / Red Hat:

sudo systemctl reload named

На Ubuntu / Debian:

sudo systemctl reload bind

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

Каждый раз после редактирования зоны не очень удобно ее переподписывать командой dnssec-signzone.
Для автоматизации процесса в конфигурационном файле bind добавим следующие опции:

sudo nano /etc/bind/named.conf.options
options {
 …
 key-directory "/var/lib/bind/keys";
 sig-validity-interval 20 10;
 }
  • key-directory — каталог для хранения сгенерированных ключей, необходимо прописать тот, в котором мы формировали последние командой dnssec-keygen;
  • sig-validity-interval — период действия ключей: дней / период обновления.

Для зоны редактируем:

 zone "obu4alka.ru" {
 type master;
 file "/var/lib/bind/keys/obu4alka.ru";
 inline-signing yes;
 auto-dnssec maintain;
 };
  • inline-signing — включение или отключение прозрачного формирования подписей (без необходимости менять файл зоны); auto-dnssec — уровень автоматической настройки DNSSEC для зоны. Также обращаем внимание, что мы убрали в пути .signed.

Проверяем, что у пользователя named/bind есть права на запись в каталог хранения зоны. При необходимости, меняем владельца:

sudo chown -R bind:bind /var/lib/bind/

Также права на файлы *.private должны быть выставлены в 400

sudo chmod -R 400 /var/lib/bind/keys/*.private

Удаляем старый файл подписанной зоны:

sudo rm -f /var/lib/bind/obu4alka.ru.signed

Открываем на редактирование файл зоны и меняем серийный номер.

Перезапускаем bind.

На CentOS / Red Hat:

sudo systemctl restart named

На Ubuntu / Debian:

sudo systemctl restart bind9

В каталоге зоны должны появиться дополнительные 3 файла:

obu4alka.ru.jbk, obu4alka.ru.signed, obu4alka.ru.signed.jnl

Так как DNSSEC основан на обеспечении цепочки доверия, чтобы процесс верификации заработал, требуется чтобы регистратор заверил созданный KSK-ключ,подтвердив своё доверие. Для этого создадим на основе KSK-ключа DSKEY-ключ (Delegation Signature Key)

dnssec-dsfromkey Kobu4alka.ru.+005+40201

Команда выдаст примерно следующее

obu4alka.ru. IN DS 40201 5 1 4A6BD188AA7D40BA2F0D1B8CE3D46794274B19DC
obu4alka.ru. IN DS 40201 5 2 584EDC23334582812FD36AED39713BE79080F319AC55AE48BB1F4CFE56DC337B

Копируем две сгенерированные строки в интерфейсе ввода DSKEY на сайте регистратора домена. Верификация заработает после того как регистратор обновит параметры первичной зоны.
Однако для полноты счастья, если регистратору вместо KSK потребуется именно запись формата DS, мы сгенерируем записи DS от созданного ранее KSK (Kobu4alka.ru+005+40201.key) с использованием трёх различных алгоритмов хэширования (SHA-1 (type 1), SHA-256 (type 2) и SHA-384 (type 4) соответственно):

cd /var/lib/bind/keys/
sudo dnssec-dsfromkey -a SHA-1 Kobu4alka.ru.+005+40201.key
obu4alka.ru IN DS 40201 5 1 4A6BD188AA7D40BA2F0D1B8CE3D46794274B19DC
sudo dnssec-dsfromkey -a SHA-256 Kobu4alka.ru.+005+40201.key
obu4alka.ru. IN DS 40201 5 2 584EDC23334582812FD36AED39713BE79080F319AC55AE48BB1F4CFE56DC337B
sudo dnssec-dsfromkey -a SHA-384 Kobu4alka.ru.+005+40201.key
obu4alka.ru. IN DS 40201 8 4 A7D507EF058F0C8A03EE03FC4BEWG4EE271F4C3F2AF9EA7984C0F710002E79EE3F47E7F5297779BFED280D1A94FE171

В итоге, для завершения активации DNSSEC на нашем домене obu4alka.ru, мы должны отправить нашему регистратору доменных имён такую вот инфу:

Digest type 1 (SHA-1) 
obu4alka.ru. IN DS 40201 5 1 4A6BD188AA7D40BA2F0D1B8CE3D46794274B19DC 

Digest type 2 (SHA-256) 
obu4alka.ru. IN DS 40201 5 2 584EDC23334582812FD36AED39713BE79080F319AC55AE48BB1F4CFE56DC337B 

Digest type 4 (SHA-384) 
obu4alka.ru. IN DS 40201 5 4 368E486E7180A6018C45D6277C3BE41F0B76590A873BF38B69049F4364EBBABDA4C836672F898425A0F05F3F5261D19B 

DNSKEY (flags 257, KSK) 
AwEAAZsoe6EOeUXWfn3hnelwRVobfZzRLD3BShe5jahasPcdc66oyhAtt8mjMQJrnsUEgDgpu3wUNA1FMQtqQ2g+s+1EXjm/2bao6wW06LclvypdPUYA9DTBbnnY9nv5LFSMjPB2cU1zmfJGalPrtbH1qy7UBZtv8uhNlr6+z8WmBnHBFR4u6VQs4v8kwQFsVI/VJrmn72Zw81xtFsKU988NJAV3fmcpIFHcs9ZnUSJJz/iTAgOaMfZ9ex9g/Q6/eIkmZxS2IYG+L/5ugHCuNZ+mm5pBMVQzHFdAfnJfDB9hu69d5lJ6uQDGqSbyLz31c39QFUfePg8Omec/nYbc6ktIvl8Pc=

Проверка DNS сервера на DNSSEC записи

Чтобы проверить, отдает ли наш сервер bind ответы с цифровыми подписями, вводим команду:

dig @obu4alka.ru www.obu4alka.ru +dnssec

в данном примере мы запросили IP-адрес для записи www.obu4alka.ru, а +dnssec означает, что также клиент запрашивает RRSIG для этой записи.
Мы должны увидеть записи вместе с их RRSIG, например:

www.obu4alka.ru.    14399   IN  A   111.111.111.1111
www.obu4alka.ru.    14399   IN  RRSIG   A 5 3 14400 20180923003604 20180824003109 27942 obu4alka.ru. iC2nPBz016QLRK/vZuLsk1eUpfWMd99x8jiJMV1AwLyK3MT1YBJ70GjQ ICOqlXAsa/igqzd6DjWyEbF3F2svr//ZU0ZHaszr2tkRguPvVl1jg/aW F+/F3Nj8umQvE60M1hTXBB80aF3ulPUC3B0TbgP6b04so63ZM82uqd7s DPgagVuSwbJ1m4K1/VJdHhrh0XfSEF4ybcRPrnUv6fUFdHK4V1F8GEIw snkkPmarfavpUytdDPsHPFhLEfX6jcPf6wMWmUWdGh9qOBqnSXyyvsdu +jxFJ/W04oAq6XABIyA2NPFWTtO1nUifYg+WSti4n+wwGsujyEdYrvLT Bf82mA==
Если есть вопросы, то пишем в комментариях и не забываем проголосовать за статью.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (52 оценок, среднее: 4,90 из 5)
Загрузка...

1
Отправить ответ

avatar
1 Цепочка комментария
0 Ответы по цепочке
0 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
0 Авторы комментариев
Авторы недавних комментариев

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о
Меню
WhatsApp Задайте вопрос

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: