Автоматическая подпись DNSSEC не выполняется автоматически

У меня проблемы с тем, чтобы автоматическое подписание DNSSEC было фактически автоматическим. Он не может подписать автоматически (ну, он подписывает автоматически, но, очевидно, подписывает не то, см. Ниже). Кроме того, загадочные ошибки иногда возникают в непредсказуемое время, а затем, кажется, снова исчезают.

Настройка:

zone "example.com" in {
   # file "/etc/bind/zones/db.example.com";  # raw data comment out
   file "/etc/bind/zones/db.example.com.signed";
   key-directory "/etc/bind/keys";
   auto-dnssec maintain;
   inline-signing yes;
};

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

dnssec-signzone -o example.com -t -k ../keys/Kexample.com.+008+04309.key db.example.com ./keys/Kexample.com.+008+21996.key

и обновляю все:

rndc reload
rndc reconfig
rndc loadkeys example.com
rndc signing -list example.com

Вроде все заработало. Никаких ошибок, даже в syslog , и dig @ ns.example.com example.com отвечает должным образом. Как и dig @ ns.example.com + dnssec + cd + multiline example.com . Выглядит здоровым, как лошадь. Ну, почти.Когда я смотрю на каталог: ls -la / etc / bind / zone , я вижу вещи, которые показались мне странными:

-rw-r--r-- 1 root root  4578 Apr 14 11:06 db.example.com
-rw-r--r-- 1 root bind 21189 Apr 14 13:01 db.example.com.signed
-rw-r--r-- 1 bind bind   512 Apr 14 13:01 db.example.com.signed.jbk
-rw-r--r-- 1 bind bind  4720 Apr 14 13:15 db.example.com.signed.signed
-rw-r--r-- 1 bind bind 67248 Apr 14 13:24 db.example.com.signed.signed.jnl

Подписанные подписанные файлы? Хм? ОК, но все работает. Ну почти все. Вскоре после этого я начинаю видеть ошибки в системном журнале:

named[25494]: malformed transaction: /etc/bind/zones/db.example.com.signed.signed.jnl last serial 2021041421 != transaction first serial 2021041404
named[25494]: zone example.com/IN (signed): zone_sign:dns_journal_write_transaction -> unexpected error

Они будут появляться пачками, повторяясь раз в минуту, а затем исчезнут на некоторое время (нет предсказуемой закономерности). Кажется, они исчезают, когда я говорю rndc sync -clean . Новая копия db.example.com.signed.signed появляется время от времени в непредсказуемых временных масштабах: может быть, через 5 минут, может через полчаса, может быть, через несколько часов.

Неважно. Теперь у нас все хорошо. Игнорируйте вещи в течение месяца, вернитесь и обнаружите, что подписи DNSSEC истекли! Как это может быть? ls -la показывает, что метки времени на db.example.com.signed.signed и db.example.com.signed.signed.jnl являются недавними: очевидно, bind9 считает, что их нужно регулярно обновлять. Отметка времени на db.example.com.signed устарела - ей месяц, и, глядя на ее содержимое, я вижу, что действительно RRSIG SOA имеет отметку времени с истекшим сроком действия Это.

Очевидно, что-то не так. Поскольку наличие файла с двойной подписью db.example.com.signed.signed кажется неправильным, а с db.example.com.подписанный никогда не обновлялся автоматически, я так понимаю, ага! Я не должен был подписывать вещи вручную! Итак, я возвращаюсь и редактирую файл зоны, чтобы он читался:

zone "example.com" in {
   file "/etc/bind/zones/db.example.com";  # oh, maybe use this, the unsigned zone
   # file "/etc/bind/zones/db.example.com.signed"; # manual signing must be wrong.
   ...
};

Но если я использую вышеупомянутое, не будет комбинации запуска и остановки bind9 или выполнения команд rndc, которые заставили бы все работать: ничего не подписано, и зона не будет обслуживаются, и ошибок нет. Это включает попытку rndc sign example.com , которая, похоже, ничего не делает: нет ошибок, нет сообщений, нет изменений в том, что обслуживается.

Я, конечно, могу решить вышесказанное, вставив руководство dnssec-signzone в файл crontab, но это, похоже, позволяет обойти весь смысл «автоматической подписи». Что здесь не так? Что я сделал не так?

Это с именем -v версия BIND 9.11.3-1ubuntu1.14-Ubuntu .

0
задан 14 April 2021 в 22:51
1 ответ

Я нашел "ядерный вариант", который, похоже, восстанавливает систему в состояние, соответствующее документации. Он состоит из следующих шагов:

service bind9 stop

Остановите демон, пока мы работаем. Другие серверы имен подхватят его работу.

Далее, удалите автогенерируемые/кэшированные файлы:

rm -r /var/cache/bind/*

Этот каталог содержит различные автогенерируемые файлы. Похоже, что они содержат устаревшие данные, которые мешают интерпретации файлов зон и состояния ZSK/KSK (т.е. содержат кэшированные значения, которые не подходят). Они будут воссозданы при запуске.

Далее отредактируйте все файлы зон (не только некоторые из них!) и увеличьте серийные номера на 50-100. Это число должно быть достаточно большим, чтобы избежать потенциальных жалоб на неправильно сформированную транзакцию, последняя серия != первая серия. Это большое увеличение может потребоваться выполнить несколько раз.

Редактируя все файлы зон, преобразуйте любые $INCLUDE утверждения для использования абсолютных путей вместо относительных. Хотя относительные пути отлично работают для неподписанных зон, похоже, что когда зона подписана, относительный путь интерпретируется неправильно (это похоже на ошибку bind9... трудно понять, почему это имеет значение).

Есть также больше автогенерируемых/кэшируемых файлов, которые находятся в /etc/bind/zones; их следует удалить.

rm *.signed *.jnl *.jbk

Все эти файлы будут созданы заново при запуске сервера. Они содержат кэшированную информацию (например, старые серийные номера), которая приводит к ложным ошибкам.

Не используйте dnssec-signzone. Он не нужен, и его использование приведет к созданию файлов, конфликтующих с автоматическим подписанием зон.

Наконец, перезапустите сервер.

service bind9 start

Вышеуказанных действий, похоже, достаточно, чтобы очистить непоследовательные кэшированные данные, и на данный момент, похоже, генерируются действительные, подписанные зоны для меня. Потребуется некоторое количество TTL и переносов, чтобы увидеть, будет ли все работать дальше. На данный момент, по крайней мере, поведение соответствует документации и "здравому смыслу", для меня.

0
ответ дан 24 April 2021 в 02:06

Теги

Похожие вопросы