Безопасное динамическое обновление DNS записей в Windows домене из Linux (GSS-TSIG)

от автора

Необходимость в таком обновлении возникла у меня в такой ситуации: на линуксе поднят openvpn сервер, к нему коннектятся удаленные клиенты. Openvpn сервер сам динамически выдает адреса клиентам и, хотелось бы, чтобы он и создавал dns записи с common name сертификата на DNS сервере, который интегрирован в Active Directory. Тут можно пойти простым путем, и поставить в свойстве зоны «Динамическое обновление» опцию «Небезопасные и безопасные», но тогда любой, кто имеет доступ к DNS серверу, сможет менять записи зоны – не комильфо. Если поставить «Только безопасные», то DNS сервер обязательно будет требовать аутентификацию по протоколу GSS-TSIG. Дальше пойдет речь о том, как это все настроить.

Для начала, создаём пользователя домена с минимальными правами, например ddns и задаём ему сложный пароль и опцию «Срок действия пароля не ограничен». У этого пользователя должно быть достаточно прав на изменение записей dns-зоны. В свойставх dns-зоны должна быть выбрана опция «Только безопасные обновления».

Устанавливаем Kerberos клиент:

sudo apt-get install krb5-user 

Отредактируем /etc/krb5.conf:

[libdefaults]         default_realm = DOMAIN.LOCAL [realms] DOMAIN.LOCAL = {                 kdc = 192.168.2.200                 kdc = 192.168.2.202                 default_domain = domain.local                 admin_server = 192.168.2.200         }  [domain_realm] .domain.local = DOMAIN.LOCAL domain.local = DOMAIN.LOCAL 

Хотя клиент будет работать даже в такой конфигурации:

[libdefaults]         default_realm = DOMAIN.LOCAL 

Для Kerberos важным моментом является синхронность часов севера и клиента. Можно установить службу ntpd – она будет поддерживать корректное время:

sudo apt-get install ntp 

С помощью ktutil создадим keytab файл, в котором будут храниться данные для аутентификации пользователя ddns:

sudo ktutil ktutil:  addent -password -p ddns@DOMAIN.LOCAL -k 1 -e rc4-hmac ktutil:  write_kt krb5.keytab ktutil:  quit 

Теперь можно проверить, насколько всё сделано правильно:

kinit -k -t krb5.keytab ddns 

Никакого вывода быть не должно. Можно посмотреть полученные билеты:

klist Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: ddns@DOMAIN.LOCAL  Valid starting       Expires              Service principal 29.04.2014 14:50:39  30.04.2014 00:50:39  krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL         renew until 30.04.2014 14:50:39  

Если keytab поместить по умолчанию (etc/krb5.keytab), то можно сократить команду:

kinit -k ddns 

Теперь остается только настроить openvpn. Для этого в конфигурационном файле сервера openvpn должна быть опция:

learn-address /etc/openvpn/learn-address.sh 

Сам скрипт learn-address.sh:

#!/bin/bash  dnsserver=192.168.2.200 fwdzone=domain.local revzone=7.168.192.in-addr.arpa ttl=300 op=$1 addr=$2 revaddr=`echo $addr | sed -re 's:([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+):\4.\3.\2.\1.in-addr.arpa:'` cn=$3 fqdn=$cn.$fwdzone dir=/etc/openvpn/dns addfile=$dir/add_$addr delfile=$dir/del_$addr keytab_file=/etc/openvpn/krb5.keytab user=ddns  addRecord() {         kinit -k -t $keytab_file $user         cat > $addfile << EOF gsstsig server $dnsserver zone $fwdzone update delete $fqdn a update add $fqdn $ttl a $addr send zone $revzone update delete $revaddr ptr update add $revaddr $ttl ptr $fqdn send EOF          cat > $delfile << EOF gsstsig server $dnsserver zone $fwdzone update delete $fqdn a send zone $revzone update delete $revaddr ptr send EOF          nsupdate -v $addfile         rm -f $addfile }  delRecord() {         kinit -k -t $keytab_file $user         nsupdate -v $delfile         rm -f $delfile }  case $op in         add|update)                 addRecord                 ;;         delete)                 delRecord                 ;;         *)                 echo "Unable to handle operation $op.  Exiting" exit 1 esac 

Подытожу: Ключевым моментом является опция gsstsig в файле, который передается утилите nsupdate. При этом должен быть получен билет (ticket) от контроллера домена с помощью kinit &ltuser&gt.

ссылка на оригинал статьи http://habrahabr.ru/post/221843/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *