User Tools

Site Tools


wikiv3:tsigdebian

Ativar TSIG para Transferência entre Servidores

Transation Signatures (TSIG) é um mecanismo utilizado para a segurança de mensagens DNS e para a comunicação entre servidores, que inclui transferência de zonas, notificações e requisições recursivas. O TSIG é um método para assegurar o controle de acesso e autenticação de mensagens DNS entre duas máquinas usando criptografia de chave simétrica.

Como funciona?

  • 1: Cada servidor de nomes adiciona um registro TSIG na seção de dados de um servidor de consultas DNS para servidor e uma mensagem;
  • 2: O TSIG grava a mensagem de DNS, provando que o remetente da mensagem tinha uma chave de criptografia compartilhada com o receptor, e que a mensagem não foi modificada após a saída do remetente;
  • 3: O TSIG utiliza uma função hash one-way para fornecer autenticação e integridade dos dados.

Configurar TSIG no Servidor Master

No servidor DMZ acesse o diretório em /etc/bind/, e execute o comando abaixo para criar as chaves compartilhadas:

# cd /etc/bind/
# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST ns1-ns2

Usando o programa dnssec-keygen, que cria dois arquivos ambos contendo a chave gerada.

  • -a → Define o algoritmo de criptografia;
  • -b → Define o tamanho da chave;
  • -n → Define o nome da chave contendo o nome do host e o nome do servidor Slave. O nametype pode ser uma zona, HOST, entidade ou USER. você precisa usar HOST ou ZONE

Liste o conteúdo do diretório para visualizar os arquivos criados:

# ls -l K*
-rw------- 1 root bind  51 Jun  4 22:08 Kns1-ns2.+157+65345.key
-rw------- 1 root bind 165 Jun  4 22:08 Kns1-ns2.+157+65345.private

O programa dnssec-keygen criou dois arquivos, e ambas as chaves e arquivos privados são gerados por algoritmos de criptografia simétrica, como HMAC-MD5, mesmo que a chave pública e privada são equivalentes:

  • Kns1-ns2.+157+65345.key → Contém a chave pública. O arquivo contém um registro DNS KEY que pode ser inserido em um arquivo de zona.
  • Kns1-ns2.+157+65345.private → Contém a chave privada. O arquivo contém campos de algoritmo específico.

Agora é preciso criar um arquivo contendo o nome da chave, o algoritmo e sua string:

# cat /etc/bind/rndc.key > /etc/bind/transfer.key
  • Estamos pegando esse arquivo (rndc.key) mas iremos usar apenas o cabeçalho dele, poderiamos cria-lo também.
# cat /etc/bind/Kns1-ns2.+157+65345.key >> /etc/bind/transfer.key

Listando o arquivo criado

# cat /etc/bind/transfer.key 
key "rndc-key" {
	algorithm hmac-md5;
	secret "cZDlTBXEn7aZABa4Cycxeg==";
};
ns1-ns2. IN KEY 512 3 157 PT9L5UH/v+SDpLqmsPl/Vw==

Com a o arquivo transfer.key criado, faça alterações no nome e string seguindo o exemplo: De…

# cat /etc/bind/transfer.key 
key "rndc-key" {
	algorithm hmac-md5;
	secret "cZDlTBXEn7aZABa4Cycxeg==";
};
ns1-ns2. IN KEY 512 3 157 PT9L5UH/v+SDpLqmsPl/Vw==

Para…

# cat /etc/bind/transfer.key 
key "ns1-ns2" {
	algorithm hmac-md5;
	secret "PT9L5UH/v+SDpLqmsPl/Vw==";
};
 
# IP do slave
server 192.168.200.101 {
	keys { ns1-ns2; };
};

Altere o dono do arquivo para bind e sua permissão para 640:

# chown bind /etc/bind/transfer.key 
# chmod 640 /etc/bind/transfer.key

Com o arquivo criado, abra o arquivo named.conf e inclua no final do arquivo a inclusão do arquivo transfer.key:

# cat /etc/bind/named.conf
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the 
// structure of BIND configuration files in Debian, *BEFORE* you customize 
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
 
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/transfer.key";

O próximo passo é ajustar o arquivos named.conf.local, para alterar a diretiva allow-transfer seguindo o exemplo abaixo: De…

# cat /etc/bind/named.conf.local 
//
// Do any local configuration here
//
 
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
 
zone "martins.net" {
        type master;
        file "db.martins.net";
	allow-transfer { 192.168.200.101; };
	notify yes;
	also-notify { 192.168.200.101; };
};
 
zone "200.168.192.in-addr.arpa" {
        type master;
        file "rev.martins.net";
        allow-transfer { 192.168.200.101; };
        notify yes;
        also-notify { 192.168.200.101; };
};

Para…

# cat named.conf.local
//
// Do any local configuration here
//
 
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
 
zone "martins.net" {
        type master;
        file "db.martins.net";
	allow-transfer { key ns1-ns2; };
	notify yes;
	allow-update { key ns1-ns2; };
};
 
zone "200.168.192.in-addr.arpa" {
        type master;
        file "rev.martins.net";
        allow-transfer { key ns1-ns2; };
	notify yes;
        allow-update { key ns1-ns2; };
};

Restarte o servidor DNS para aplicar as novas configurações e verifique se o serviço esta rodando:

# systemctl restart bind9.service
# systemctl status bind9.service
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled)
  Drop-In: /run/systemd/generator/bind9.service.d
           └─50-insserv.conf-$named.conf
   Active: active (running) since Qui 2015-06-04 22:35:59 BRT; 2s ago
     Docs: man:named(8)
  Process: 1075 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
 Main PID: 1079 (named)
   CGroup: /system.slice/bind9.service
           └─1079 /usr/sbin/named -f -u bind
 
Jun 04 22:35:59 ns1.martins.net named[1079]: zone martins.net/IN: loaded serial 2015060401
Jun 04 22:35:59 ns1.martins.net named[1079]: zone 200.168.192.in-addr.arpa/IN: loaded serial 2015060401
Jun 04 22:35:59 ns1.martins.net named[1079]: zone localhost/IN: loaded serial 2
Jun 04 22:35:59 ns1.martins.net named[1079]: zone 255.in-addr.arpa/IN: loaded serial 1
Jun 04 22:35:59 ns1.martins.net named[1079]: all zones loaded
Jun 04 22:35:59 ns1.martins.net named[1079]: running
Jun 04 22:35:59 ns1.martins.net named[1079]: zone martins.net/IN: sending notifies (serial 2015060401)
Jun 04 22:35:59 ns1.martins.net named[1079]: zone 200.168.192.in-addr.arpa/IN: sending notifies (serial 2015060401)
Jun 04 22:35:59 ns1.martins.net named[1079]: error (network unreachable) resolving 'ns2.marrtins.net/A/IN': 2001:500:2d::d#53
Jun 04 22:35:59 ns1.martins.net named[1079]: error (network unreachable) resolving 'ns2.marrtins.net/AAAA/IN': 2001:500:2d::d#53

Configurar TSIG no Servidor Slave

Para começar, na maquina ns1 pare o serviço do bind:

# systemctl stop bind9.service

Em seguida acesse o diretório em /etc/bind/ e transfira o arquivo transfer.key da maquina ns1 para o diretório /tmp/ do ns2:

# cd /etc/bind
# scp transfer.key gean@192.168.200.101:/tmp/
  • Observe que usei a conta gean para fazer a transferência do arquivo, o debian 8 por padão não permite login do root via ssh, por isso estou copiando para o diretório /tmp já que o usuário gean não tem permissão para gravar no arquivo /etc/bind

Agora no servidor slave copia o arquivo que foi copiado para o diretório /tmp para o diretório /etc/bind

# cp /tmp/transfer.key /etc/bind/

Altere o dono do arquivo para bind e sua permissão para 640:

# chown bind /etc/bind/transfer.key 
# chmod 640 /etc/bind/transfer.key

Agora abra o arquivo named.conf e inclua no final do arquivo a inclusão do arquivo transfer.key:

# cat /etc/bind/named.conf
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the 
// structure of BIND configuration files in Debian, *BEFORE* you customize 
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
 
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/transfer.key";

O próximo passo é ajustar o arquivo transfer.key, para adicionar no final a diretiva server e IP do Master:

# cat /etc/bind/transfer.key 
key "ns1-ns2" {
	algorithm hmac-md5;
	secret "PT9L5UH/v+SDpLqmsPl/Vw==";
};
 
# IP do Master
server 192.168.200.100 {
	keys { ns1-ns2; };
};

Restarte o servidor DNS para aplicar as novas configurações (master e slave):

# systemctl restart bind9.service

Na maquina Slave use o comando dig com a opção axfr para transferência full da zona master. A flag -y indica o nome da chave e sua string:

# dig -y ns1-ns2:PT9L5UH/v+SDpLqmsPl/Vw== martins.net axfr
 
; <<>> DiG 9.9.5-9-Debian <<>> -y ns1-ns2 martins.net axfr
;; global options: +cmd
martins.net.		86400	IN	SOA	ns1.martins.net. root.martins.net. 2015060401 3600 1800 604800 86400
martins.net.		86400	IN	A	192.168.200.220
martins.net.		86400	IN	NS	ns1.martins.net.
martins.net.		86400	IN	NS	ns2.marrtins.net.
martins.net.		86400	IN	MX	10 mail.martins.net.
ftp.martins.net.	86400	IN	CNAME	martins.net.
imap.martins.net.	86400	IN	CNAME	mail.martins.net.
mail.martins.net.	86400	IN	A	192.168.200.240
ns1.martins.net.	86400	IN	A	192.168.200.100
ns2.martins.net.	86400	IN	A	192.168.200.101
pop.martins.net.	86400	IN	CNAME	mail.martins.net.
smtp.martins.net.	86400	IN	CNAME	mail.martins.net.
www.martins.net.	86400	IN	CNAME	martins.net.
martins.net.		86400	IN	SOA	ns1.martins.net. root.martins.net. 2015060401 3600 1800 604800 86400
ns1-ns2.		0	ANY	TSIG	hmac-md5.sig-alg.reg.int. 1433471348 300 16 MWpGrZ/PojHVoY+m0GZEhw== 31369 NOERROR 0 
;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Jun 04 23:29:08 BRT 2015
;; XFR size: 14 records (messages 1, bytes 409)

Para verificar no servidor Slave se a transferência foi realizada, use o comando grep no arquivo syslog e daemon.log:

# egrep -i tsig /var/log/syslog 
Jun  4 23:11:35 ns2 named[2138]: client 127.0.0.1#41359/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2
Jun  4 23:15:37 ns2 named[2138]: client 192.168.200.100#35282/key ns1-ns2: received notify for zone '200.168.192.in-addr.arpa': TSIG 'ns1-ns2'
Jun  4 23:17:44 ns2 named[2164]: client 192.168.200.100#28721/key ns1-ns2: received notify for zone '200.168.192.in-addr.arpa': TSIG 'ns1-ns2'
Jun  4 23:18:16 ns2 named[2164]: client 192.168.200.100#60048/key ns1-ns2: received notify for zone '200.168.192.in-addr.arpa': TSIG 'ns1-ns2'
Jun  4 23:18:16 ns2 named[2164]: zone 200.168.192.in-addr.arpa/IN: transferred serial 2015060403: TSIG 'ns1-ns2'
Jun  4 23:22:45 ns2 named[2192]: client 127.0.0.1#57716/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2
Jun  4 23:23:32 ns2 named[2192]: client 192.168.200.100#55604/key ns1-ns2: received notify for zone '200.168.192.in-addr.arpa': TSIG 'ns1-ns2'
Jun  4 23:23:41 ns2 named[2206]: client 127.0.0.1#46482/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2
Jun  4 23:24:25 ns2 named[2206]: client 127.0.0.1#50695/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2
Jun  4 23:25:45 ns2 named[2206]: client 127.0.0.1#57804/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2
Jun  4 23:27:23 ns2 named[2206]: client 192.168.200.100#40591/key ns1-ns2: received notify for zone '200.168.192.in-addr.arpa': TSIG 'ns1-ns2'
Jun  4 23:29:08 ns2 named[416]: client 127.0.0.1#45855/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2
# egrep -i tsig /var/log/daemon.log 
Jun  4 23:11:35 ns2 named[2138]: client 127.0.0.1#41359/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2
Jun  4 23:15:37 ns2 named[2138]: client 192.168.200.100#35282/key ns1-ns2: received notify for zone '200.168.192.in-addr.arpa': TSIG 'ns1-ns2'
Jun  4 23:17:44 ns2 named[2164]: client 192.168.200.100#28721/key ns1-ns2: received notify for zone '200.168.192.in-addr.arpa': TSIG 'ns1-ns2'
Jun  4 23:18:16 ns2 named[2164]: client 192.168.200.100#60048/key ns1-ns2: received notify for zone '200.168.192.in-addr.arpa': TSIG 'ns1-ns2'
Jun  4 23:18:16 ns2 named[2164]: zone 200.168.192.in-addr.arpa/IN: transferred serial 2015060403: TSIG 'ns1-ns2'
Jun  4 23:22:45 ns2 named[2192]: client 127.0.0.1#57716/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2
Jun  4 23:23:32 ns2 named[2192]: client 192.168.200.100#55604/key ns1-ns2: received notify for zone '200.168.192.in-addr.arpa': TSIG 'ns1-ns2'
Jun  4 23:23:41 ns2 named[2206]: client 127.0.0.1#46482/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2
Jun  4 23:24:25 ns2 named[2206]: client 127.0.0.1#50695/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2
Jun  4 23:25:45 ns2 named[2206]: client 127.0.0.1#57804/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2
Jun  4 23:27:23 ns2 named[2206]: client 192.168.200.100#40591/key ns1-ns2: received notify for zone '200.168.192.in-addr.arpa': TSIG 'ns1-ns2'
Jun  4 23:29:08 ns2 named[416]: client 127.0.0.1#45855/key ns1-ns2 (martins.net): transfer of 'martins.net/IN': AXFR started: TSIG ns1-ns2

Mas um teste. Vamos remover os arquivos que foram tranferidos anteriormente para ter certeza qua haverá à transferência… Primeiro vamos para o serviço do bind, depois remover os arquivos, starta o bind e verificar os estatos:

# systemctl stop bind9.service
# rm -rf /var/cache/bind/db.martins.net 
# rm -rf /var/cache/bind/rev.martins.net
# systemctl start bind9.service
# systemctl status bind9.service
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled)
  Drop-In: /run/systemd/generator/bind9.service.d
           └─50-insserv.conf-$named.conf
   Active: active (running) since Qui 2015-06-04 23:33:49 BRT; 6s ago
     Docs: man:named(8)
  Process: 461 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
 Main PID: 470 (named)
   CGroup: /system.slice/bind9.service
           └─470 /usr/sbin/named -f -u bind
 
Jun 04 23:33:49 ns2.martins.net named[470]: zone 200.168.192.in-addr.arpa/IN: transferred serial 2015060403: TSIG 'ns1-ns2'
Jun 04 23:33:49 ns2.martins.net named[470]: transfer of '200.168.192.in-addr.arpa/IN' from 192.168.200.100#53: Transfer completed: 1 messa...tes/sec)
Jun 04 23:33:49 ns2.martins.net named[470]: zone 200.168.192.in-addr.arpa/IN: sending notifies (serial 2015060403)
Jun 04 23:33:49 ns2.martins.net named[470]: zone martins.net/IN: Transfer started.
Jun 04 23:33:49 ns2.martins.net named[470]: transfer of 'martins.net/IN' from 192.168.200.100#53: connected using 192.168.200.101#49427
Jun 04 23:33:49 ns2.martins.net named[470]: zone martins.net/IN: transferred serial 2015060403: TSIG 'ns1-ns2'
Jun 04 23:33:49 ns2.martins.net named[470]: transfer of 'martins.net/IN' from 192.168.200.100#53: Transfer completed: 1 messages, 15 recor...tes/sec)
Jun 04 23:33:49 ns2.martins.net named[470]: zone martins.net/IN: sending notifies (serial 2015060403)
Jun 04 23:33:49 ns2.martins.net named[470]: error (network unreachable) resolving 'ns2.marrtins.net/A/IN': 2001:503:c27::2:30#53
Jun 04 23:33:49 ns2.martins.net named[470]: error (network unreachable) resolving 'ns2.marrtins.net/AAAA/IN': 2001:503:c27::2:30#53
Hint: Some lines were ellipsized, use -l to show in full.
# ls -lh /var/cache/bind/
total 12K
-rw-r--r-- 1 bind bind 734 Jun  4 23:33 db.martins.net
-rw-r--r-- 1 bind bind 720 Jun  4 21:35 managed-keys.bind
-rw-r--r-- 1 bind bind 281 Jun  4 23:33 rev.martins.net

Observer que que as zonas foram transferida…

wikiv3/tsigdebian.txt · Last modified: by 127.0.0.1