Технология 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/
cd /var/named/

На Ubuntu / Debian:

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

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

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

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

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

sudo dnssec-keygen -a RSASHA256 -b 2048 -n ZONE obu4alka.ru

Ключи ГОСТ

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

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

sudo dnssec-keygen -f KSK -a ECCGOST -b 2048 -n ZONE obu4alka.ru

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

sudo dnssec-keygen -a ECCGOST -b 2048 -n ZONE obu4alka.ru

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

На CentOS / Red Hat:

sudo chown -R named:named /var/named

На Ubuntu / Debian:

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

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

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

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

CentOS / Red Hat:

cd /var/named/master

Ubuntu / Debian:

cd /var/lib/bind/

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

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

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

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

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/";
 sig-validity-interval 20 10;
 }
  • key-directory — каталог для хранения сгенерированных ключей, необходимо прописать тот, в котором мы формировали последние командой dnssec-keygen;
  • sig-validity-interval — период действия ключей: дней / период обновления.

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

 zone "obu4alka.ru" {
 type master;
 file "/var/lib/bind/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/*.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/
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==

[endtxt]

RSS

Добавление RSS-ленты на главную страницу этого сайта не поддерживается, так как это может привести к зацикливанию, замедляющему работу вашего сайта. Попробуйте использовать другой блок, например блок Последние записи, для отображения записей сайта.

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

5 1 голос
Рейтинг статьи

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

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

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов cookie) с использованием трекеров "Google Analytics" и "Yandex.Metrics". Порядок обработки Ваших персональных данных, а также реализуемые требования к их защите, содержатся в Политике конфиденциальности.
Принять