Команды nsupdate отправляются в виде открытого текста или зашифрованы?
Я установил свой собственный динамический DNS-сервер с Bind на Debian Jessy. Все работает нормально и гладко. Фактическое обновление ddns выполняется с помощью nsupdate (выполняется php на том же сервере). Сама ссылка php зашифрована с помощью https, но мне было интересно, зашифрована ли команда nsupdate, которая также содержит строку секретного ключа ddns? Теоретически и вообще говоря, если бы он не был зашифрован, кто-то мог бы прочитать секретный ключ во время передачи, что позволило бы ему отправлять обновления ddns на сервер?
Если это так, есть ли способ убедиться, что nsupdate запускается только локально (поскольку он все равно выполняется на том же / моем сервере), или какая-то другая мера безопасности? В настоящее время в строках используется официальное DNS-имя сервера в команде nsupdate вместо localhost или чего-то еще (не уверен, поддерживается ли это вообще):
server ns1.external-domain-name.de
zone external-domain-name.de.
key ddns.external-domain-name.de.key MySecretKey12345
update delete ddns.external-domain-name.de.
update add ddns.external-domain-name.de 60 A
send
1 ответ
Секрет зашифрован. Мы не можем сказать вам силу шифрования, так как вы не предоставили нам специфику (HMAC-MD5 через TSIG и т. Д.), Но можно предположить, что секреты DDNS включают в себя какую-то криптографическую оболочку. В противном случае они будут подвержены повторным атакам, как вы заметили.
Команды можно отправлять в открытом виде, но секретный ключ, используемый для разрешения обновлений, - нет.
Но в любом случае, если вам нужно делать обновления на том же хосте, проще использовать
-l
вариант с
nsupdate
. Он будет использовать самогенерируемый ключ и связываться только с localhost:
-l
Режим только локального хоста. Это устанавливает адрес сервера на localhost (отключение сервера, чтобы адрес сервера нельзя было переопределить). Соединения с локальным сервером будут использовать ключ TSIG, находящийся в /var/run/named/session.key, который автоматически генерируется named, если какая-либо локальная главная зона установила политику обновления как локальную.
Для этого вам нужно добавить
update-policy local;
в определении вашей динамической зоны:
zone "dyn.example.com" {
type master;
file "/var/cache/bind/dyn.example.com";
update-policy local;
};
И вам нужно перезапустить сервер с
systemctl restart bind9
или эквивалент в вашей системе.
rndc reload
недостаточно для создания специального ключа local-ddns.
Если вам нужно больше правил в вашем
update-policy
, вам нужно заменить это
update-policy local;
с разделом, который включает
grant local-ddns zonesub ANY;
вместо. У вас не может быть одновременно простой "локальной" линии и реального раздела политики. Значит вам нужно что-то вроде этого:
zone "dyn.example.com" {
type master;
file "/var/cache/bind/dyn.example.com";
update-policy {
grant local-ddns zonesub ANY; // Generates a "local-ddns" key in /var/run/named/session.key
// other update policies
// grant *.dyn.example.com. self *.dyn.example.com. ANY;
};
};
Затем вы можете делать такие обновления:
host=myhost: ip=10.1.2.3.4
printf "update add $host.dyn.example.com. 3600 A $ip\n\n" | nsupdate -l
Если вы используете файлы конфигурации для подачи
nsupdate -l
, у вас не может быть
server ...
в них, иначе вы получите такую ошибку:
cannot reset server in localhost-only mode
syntax error