Inhaltsverzeichnis
DNS ISC bind CentOS 6 - Master-Slave und TSIG
DNS ISC bind ist ein DNS-Server, welcher die Namensauflösung in einem Netzwerk realisieren kann. Der DNS-Server des ISC (Internet System Consortium) ist einer der meist eingesetzten Namensserver weltweit und ebenfalls der bei den aktuell 13 weltweiten Root-Nameservern verwendete DNS-Server.
HINWEIS - Die gezeigten Ausführungen basieren auf dem nachfolgenden internen DokuWiki-Eintrag: DNS ISC bind CentOS 6
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Konstellationsbeschreibung
Nachfolgend soll ein Überblick gegeben werden, wie sich die Beziehung zwischen Master-Server und Slave-Server in der nachfolgend gezeigten Konstellation darstellt:
+-------------------+ +---------------------+ | | | | | MASTER-Server | | SLAVE-Server | | ============= | | ============ | | | | | | Präsenz: | | Präsenz: | | DMZ | | DMZ, Intranet | | | | | +-------------------+ +---------------------+ | | | | | DMZ-IP-Adresse: | | DMZ-IP-Adresse: | | 192.168.0.20 | -------> Transfer der Zone DMZ ------> | 192.168.0.10 | | | | | | DMZ-IP-Adresse: | | intra-IP-Adresse: | | 192.168.0.20 | -------> Transfer der Zone intra ------> | 192.168.1.1 | | | | | +-------------------+ +---------------------+
WICHTIG - Die Zone DMZ - muss - über die IP-Adressen - 192.168.0.20 ←→ 192.168.0.10 transferiert werden!
WICHTIG - Die Zone intra - muss - über die IP-Adressen - 192.168.0.20 ←→ 192.168.1.1 transferiert werden!
HINWEIS - Falls die Zone intra auch über die IP-Adresse 192.168.0.10 des Slave-Servers transferiert wird, ist der Inhalt FALSCH und entspricht dem Inhalt der Zone DMZ !!!
Es wird ein Zonen-Transfer durchgeführt, wobei die
- gleichen Zonen-Definitionen, z.B. dmz.tachtler.net, intra.tachtler.net uvm. in
- unterschiedlichen View-Definitionen, localhost, DMZ, intra
verwendet werden.
WICHTIG - Dabei können die Inhalte der Zonen-Definitionen durchaus unterschiedlich sein !!!
Beispiel::
Abfrage der IP-Adresse von –> mx1.tachtler.net in der View - DMZ
# dig mx1.tachtler.net ... ;; ANSWER SECTION: mx1.tachtler.net. 10800 IN A 192.168.0.60 ...
Abfrage der IP-Adresse von –> mx1.tachtler.net in der View - intra
# dig mx1.tachtler.net ... ;; ANSWER SECTION: mx1.tachtler.net. 10800 IN A 88.217.171.167 ...
Master-Konfiguration
Nachfolgende Konfiguration ist eine Beispielkonfiguration, welche auf bestimmte Ansichten und Bedürfnisse zugeschnitten ist. Dies Konfiguration erhebt keinen Anspruch auf Vollständigkeit.
Nachfolgend soll die Konfigurationsdatei
/etc/named.conf
zu einer Master-Konfigurationsdatei angepasst werden.
WICHTIG - Nachfolgend wird beschrieben, welche ZIELE die HIER nachstehende Konfigurationsdatei hat bzw. erfüllen soll!!!
Folgende Zielsetzung hat die nachstehende Konfigurationsdatei /etc/named.conf
:
- Master Nameserver
- für die Zonen
- dmz.tachtler.net
- intra.tachtler.net
- nicht für die Zone
- tachtler.net
- Namensauflösung forward und reverse
- nur für ein internes Netzwerk, keine externen Anfragen zur Beantwortung
- Es sollen immer die root-Server für nicht autoritativen Anfragen benutzt werden
- Der Einsatz von views, welche aktuell jedoch auf identische Dateien verweisen!
- Vorerst noch kein DNSSEC
/etc/named.conf
Die jeweiligen Kommentare erklären die nachfolgend durchgeführten Einstellung (komplette Konfigurationsdatei):
// // Tachtler - named.conf // // acl ----------------------------------------------------------------- acl masterlist { 127.0.0.1/32; 192.168.0.20/32; }; acl slavelist { 192.168.0.10/32; 192.168.1.1/32; } acl dmz { 192.168.0.0/24; }; acl intra { 192.168.1.0/24; }; // options ------------------------------------------------------------- options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; /* * With problems while censorship with ISP no forwards will * be defined. Asking the root-server! * * // DNS-Server which will asked when local answers not found. * forwarders { 212.18.3.5; 212.18.0.5; }; * // Route the questions to the Forwarders first, not only. * forward first; */ // Allow notification form this DNS-Server to slave DNS-Server. notify yes; also-notify { 192.168.0.10; 192.168.1.1; }; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ query-source address * port *; // No answer, when asking for bind-version. version ""; // Accept no old questions and configurations. auth-nxdomain no; // Allow these HOSTs to ask ordinary DNS questions. allow-query { localhost; dmz; intra; edmz; }; // Allow these HOSTs to ask recursiv DNS questions. allow-recursion { localhost; dmz; intra; edmz; }; // Local interfaces to listen on listen-on port 53 { masterlist; }; // Enable zonetransfer to these HOSTs. allow-transfer { masterlist; slavelist; }; // Local address for zone transfers. transfer-source 192.168.0.20; // The maximum number of outbound zone transfers running concurrently. transfers-out 999; // Warn only, if names not correct, like DKIM for e-mail. check-names master warn; // Recursion to other nameserver and reslovers. recursion yes; // Enable zones with no zone files. empty-zones-enable yes; // DNSSEC-Options first set to no! // TODO // default: dnssec-enable yes; dnssec-enable no; // TODO //default: dnssec-validation yes; dnssec-validation no; // TODO //default: dnssec-lookaside auto; dnssec-lookaside auto; /* Path to ISC DLV key */ // TODO bindkeys-file "/etc/named.iscdlv.key"; /* Path to dynamic content */ managed-keys-directory "/var/named/dynamic"; }; // logging ------------------------------------------------------------- logging { channel default_debug { file "data/named.run"; severity info; print-severity yes; print-time yes; print-category yes; }; category default { default_debug; }; }; // TSIG ---------------------------------------------------------------- key "intra." { algorithm hmac-sha256; secret "kfgHKkh27TApI3pD+z2GIB=="; }; // zones --------------------------------------------------------------- view "localhost" { // Only following clients can resolv the zone informations. match-clients { !key intra. ; "localhost"; }; // Only following destination can resolv the zon informations. match-destinations { "localhost"; }; // Recursion to other nameserver and reslovers. recursion yes; /* * All view MUST contain the root zone with the worldwide root * server definitions. * * Updating the root zone could be done with follwing command: * # dig NS . @a.root-servers.net > /var/named/named.ca */ zone "." IN { type hint; file "named.ca"; }; /* * All view MUST contain the definitions for all the localhost * names and addresses, as recommended in RFC1912. */ include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; zone "dmz.tachtler.net" IN { type master; file "dynamic/master/dmz.tachtler.net.zone.db"; allow-update { none; }; }; zone "intra.tachtler.net" IN { type master; file "dynamic/master/intra.tachtler.net.zone.db"; allow-update { none; }; }; zone "0.168.192.in-addr.arpa" IN { type master; file "dynamic/master/0.168.192.zone.db"; allow-update { none; }; }; zone "1.168.192.in-addr.arpa" IN { type master; file "dynamic/master/1.168.192.zone.db"; allow-update { none; }; }; }; view "dmz" { // Only following clients can resolv the zone informations. match-clients { !key intra. ; "dmz"; }; // Only following destination can resolv the zon informations. match-destinations { "dmz"; }; // Recursion to other nameserver and reslovers. recursion yes; /* * All view MUST contain the root zone with the worldwide root * server definitions. * * Updating the root zone could be done with follwing command: * # dig NS . @a.root-servers.net > /var/named/named.ca */ zone "." IN { type hint; file "named.ca"; }; /* * All view MUST contain the definitions for all the localhost * names and addresses, as recommended in RFC1912. */ include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; zone "dmz.tachtler.net" IN { type master; file "dynamic/master/dmz.tachtler.net.zone.db"; allow-update { none; }; }; zone "intra.tachtler.net" IN { type master; file "dynamic/master/intra.tachtler.net.zone.db"; allow-update { none; }; }; zone "0.168.192.in-addr.arpa" IN { type master; file "dynamic/master/0.168.192.zone.db"; allow-update { none; }; }; zone "1.168.192.in-addr.arpa" IN { type master; file "dynamic/master/1.168.192.zone.db"; allow-update { none; }; }; }; view "intra" { // Only following clients can resolv the zone informations. match-clients { key intra. ; "intra"; }; // Only following destination can resolv the zon informations. match-destinations { key intra. ; "intra"; }; // Allow transfer for server with key. server 192.168.0.1 { keys intra. ; }; // Recursion to other nameserver and reslovers. recursion yes; /* * All view MUST contain the root zone with the worldwide root * server definitions. * * Updating the root zone could be done with follwing command: * # dig NS . @a.root-servers.net > /var/named/named.ca */ zone "." IN { type hint; file "named.ca"; }; /* * All view MUST contain the definitions for all the localhost * names and addresses, as recommended in RFC1912. */ include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; zone "dmz.tachtler.net" IN { type master; file "dynamic/master/dmz.tachtler.net.zone.db"; allow-update { none; }; }; zone "intra.tachtler.net" IN { type master; file "dynamic/master/intra.tachtler.net.zone.db"; allow-update { none; }; }; zone "0.168.192.in-addr.arpa" IN { type master; file "dynamic/master/0.168.192.zone.db"; allow-update { none; }; }; zone "1.168.192.in-addr.arpa" IN { type master; file "dynamic/master/1.168.192.zone.db"; allow-update { none; }; }; }; // keys ---------------------------------------------------------------- include "/etc/rndc.key"; // controls ------------------------------------------------------------ controls { inet 127.0.0.1 port 953 allow { masterlist; } keys { rndc-key; }; };
Nachfolgend sollen die wichtigen Bestandteile der voranstehenden Konfigurationsdatei /etc/named.conf
veranschaulicht werden.
Definitionen der beteiligten Server: Master- und Slave-Server
... acl masterlist { 127.0.0.1/32; 192.168.0.20/32; }; acl slavelist { 192.168.0.10/32; 192.168.1.1/32; } ...
Es werden die IP-Adressen des Master-Servers und des Slave-Servers in ACL-Gruppen definiert, die später zum Einsatz kommen.
Definitionen zum Benachrichtigungssystem
... // Allow notification form this DNS-Server to slave DNS-Server. notify yes; also-notify { 192.168.0.10; 192.168.1.1; }; ...
Es sollen Benachrichtigungen vom Master-Server zum Slave-Server bei Zonenänderungen Versand werden, so dass ein Zonen-Transfer ausgelöst wird.
WICHTIG - Da unterschiedliche Netz-Segmente verwendet werden, müssen alle entsprechenden IP-Adressen des Slave-Servers aufgeführt werden, für die ein Zonen-Transfer durchgeführt werden soll !!!
Definitionen Server-Benachrichtigungen
... // Enable zonetransfer to these HOSTs. allow-transfer { masterlist; slavelist; }; ...
Hier werden die ACL-Gruppen verwendet, hinter denen sich die IP-Adresse befinden, auf die Server auf die ein Zonen-Transfer erlaubt ist.
Definition der Master-Server transfer IP-Adresse
... // Local address for zone transfers. transfer-source 192.168.0.20; ...
Hier wird die IP-Adresse festgelegt, mit der der Master-Server den Zonen-Transfer durchführt (Absender IP-Adresse).
Definition der gleichzeitig erlaubten Zonen-Transfers
...
// The maximum number of outbound zone transfers running concurrently.
transfers-out 999;
...
Der Standard-Wert liegt beim Transfer von 10 Zonen, was als Lastbeschränkung gedacht ist. Die Anzahl kann jedoch erhöht werden, was aber zu Lasten der Performance des Master-Servers und des Slave-Servers führen kann.
Definition eines TSIG-Schlüsses
... // TSIG ---------------------------------------------------------------- key "intra." { algorithm hmac-sha256; secret "kfgHKkh27TApI3pD+z2GIB=="; }; ...
Dies ist die Definition eines TSIG-Schlüssels, welcher für bestimmte Konstellationen von Zonen-Transfers maßgeblich entscheidend ist!
WICHTIG - Der Einsatz eines TSIG-Schlüssels ist bei der hier vorgestellten Konstellation des Zonen-Transfers entscheidend und wird nachfolgend behandelt:
Definitionen der "Views"
... view "localhost" { // Only following clients can resolv the zone informations. match-clients { !key intra. ; "localhost"; }; ... view "dmz" { // Only following clients can resolv the zone informations. match-clients { !key intra. ; "dmz"; }; ... view "intra" { // Only following clients can resolv the zone informations. match-clients { key intra. ; "intra"; }; // Only following destination can resolv the zon informations. match-destinations { key intra. ; "intra"; }; // Allow transfer for server with key. server 192.168.0.1 { keys intra. ; }; ...
WICHTIG - Es kommen unterschiedliche View-Definitionen zum Einsatz !!!
Bei den View-Definitionen
localhost
unddmz
kommt eine Definition zum Einsatz die einem Slave-Server mit dem TSIG-Schlüssel
- intra.
den Zonen-Transfer - NICHT ERLAUBT !!!
... !key intra. ; ...
Bei der View-Definition
intra
kommt eine Definition zum Einsatz die einem Slave-Server mit dem TSIG-Schlüssel
- intra.
den Zonen-Transfer - ERLAUBT !!!
... key intra. ; ...
WICHTIG - Die Definition des Slave-Servers mit dem dazugehörigen Key - intra.
!!!
... server 192.168.1.1 { keys intra. ; };
Definitionen der "Zonen"
... zone "dmz.tachtler.net" IN { type master; file "dynamic/master/dmz.tachtler.net.zone.db"; allow-update { none; }; }; ...
HINWEIS - Diese Definitionen gelten für alle Zonen, lediglich der
- Name der Zone - hier z.B.
dmz.tachtler.net
und die - Datei der Zone - hier z.B.
dynamic/master/dmz.tachtler.net.zone.db
sind entsprechend der einzelnen verwendeten Zonen unterschiedlich.
Slave-Konfiguration
Nachfolgende Konfiguration ist eine Beispielkonfiguration, welche auf bestimmte Ansichten und Bedürfnisse zugeschnitten ist. Dies Konfiguration erhebt keinen Anspruch auf Vollständigkeit.
Nachfolgend soll die Konfigurationsdatei
/etc/named.conf
zu einer Slave-Konfigurationsdatei angepasst werden.
WICHTIG - Nachfolgend wird beschrieben, welche ZIELE die HIER nachstehende Konfigurationsdatei hat bzw. erfüllen soll!!!
Folgende Zielsetzung hat die nachstehende Konfigurationsdatei /etc/named.conf
:
- Slave Nameserver
- für die Zonen
- dmz.tachtler.net
- intra.tachtler.net
- nicht für die Zone
- tachtler.net
- Namensauflösung forward und reverse
- nur für ein internes Netzwerk, keine externen Anfragen zur Beantwortung
- Es soll immer der Master-Server für nicht autoritativen Anfragen benutzt werden
- Der Einsatz von views, welche aktuell jedoch auf identische Dateien verweisen!
- Vorerst noch kein DNSSEC
/etc/named.conf
Die jeweiligen Kommentare erklären die nachfolgend durchgeführten Einstellung (komplette Konfigurationsdatei):
// // Tachtler - named.conf // // acl ----------------------------------------------------------------- acl masterlist { 192.168.0.20/32; }; acl slavelist { 127.0.0.1/32; 192.168.0.10/32; 192.168.1.1/32; } acl dmz { 192.168.0.0/24; }; acl intra { 192.168.1.0/24; }; // options ------------------------------------------------------------- options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; /* * With problems while censorship with ISP no forwards will * be defined. Asking the root-server! * * // DNS-Server which will asked when local answers not found. * forwarders { 212.18.3.5; 212.18.0.5; }; * // Route the questions to the Forwarders first, not only. * forward first; */ // No notification form this DNS-Server to anyone. notify no; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ query-source address * port *; // No answer, when asking for bind-version. version ""; // Accept no old questions and configurations. auth-nxdomain no; // Allow these HOSTs to ask ordinary DNS questions. allow-query { localhost; dmz; intra; edmz; }; // Allow these HOSTs to ask recursiv DNS questions. allow-recursion { localhost; dmz; intra; edmz; }; // Local interfaces to listen on listen-on port 53 { masterlist; }; // Enable zonetransfer to these HOSTs. allow-transfer { slavelist; }; // Local address for zone transfers. transfer-source 192.168.0.10; // The maximum number of inbound zone transfers running concurrently. transfers-in 999; // Warn only, if names not correct, like DKIM for e-mail. check-names master warn; // Recursion to other nameserver and reslovers. recursion yes; // Enable zones with no zone files. empty-zones-enable yes; // DNSSEC-Options first set to no! // TODO // default: dnssec-enable yes; dnssec-enable no; // TODO //default: dnssec-validation yes; dnssec-validation no; // TODO //default: dnssec-lookaside auto; dnssec-lookaside auto; /* Path to ISC DLV key */ // TODO bindkeys-file "/etc/named.iscdlv.key"; /* Path to dynamic content */ managed-keys-directory "/var/named/dynamic"; }; // logging ------------------------------------------------------------- logging { channel default_debug { file "data/named.run"; severity info; print-severity yes; print-time yes; print-category yes; }; category default { default_debug; }; }; // TSIG ---------------------------------------------------------------- key "intra." { algorithm hmac-sha256; secret "kfgHKkh27TApI3pD+z2GIB=="; }; // zones --------------------------------------------------------------- view "localhost" { // Only following clients can resolv the zone informations. match-clients { !key intra. ; "localhost"; }; // Only following destination can resolv the zon informations. match-destinations { "localhost"; }; // Recursion to other nameserver and reslovers. recursion yes; /* * All view MUST contain the root zone with the worldwide root * server definitions. * * Updating the root zone could be done with follwing command: * # dig NS . @a.root-servers.net > /var/named/named.ca */ zone "." IN { type hint; file "named.ca"; }; /* * All view MUST contain the definitions for all the localhost * names and addresses, as recommended in RFC1912. */ include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; zone "dmz.tachtler.net" IN { type slave; file "dynamic/slave/dmz.tachtler.net.zone.db"; masters { 192.168.0.20; }; }; zone "intra.tachtler.net" IN { type slave; file "dynamic/slave/intra.tachtler.net.zone.db"; masters { 192.168.0.20; }; }; zone "0.168.192.in-addr.arpa" IN { type slave; file "dynamic/slave/0.168.192.zone.db"; masters { 192.168.0.20; }; }; zone "1.168.192.in-addr.arpa" IN { type slave; file "dynamic/slave/1.168.192.zone.db"; masters { 192.168.0.20; }; }; }; view "dmz" { // Only following clients can resolv the zone informations. match-clients { !key intra. ; "dmz"; }; // Only following destination can resolv the zon informations. match-destinations { "dmz"; }; // Recursion to other nameserver and reslovers. recursion yes; /* * All view MUST contain the root zone with the worldwide root * server definitions. * * Updating the root zone could be done with follwing command: * # dig NS . @a.root-servers.net > /var/named/named.ca */ zone "." IN { type hint; file "named.ca"; }; /* * All view MUST contain the definitions for all the localhost * names and addresses, as recommended in RFC1912. */ include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; zone "dmz.tachtler.net" IN { type slave; file "dynamic/slave/dmz.tachtler.net.zone.db"; masters { 192.168.0.20; }; }; zone "intra.tachtler.net" IN { type slave; file "dynamic/slave/intra.tachtler.net.zone.db"; masters { 192.168.0.20; }; }; zone "0.168.192.in-addr.arpa" IN { type slave; file "dynamic/slave/0.168.192.zone.db"; masters { 192.168.0.20; }; }; zone "1.168.192.in-addr.arpa" IN { type slave; file "dynamic/slave/1.168.192.zone.db"; masters { 192.168.0.20; }; }; }; view "intra" { // Only following clients can resolv the zone informations. match-clients { key intra. ; "intra"; }; // Only following destination can resolv the zon informations. match-destinations { key intra. ; "intra"; }; // Allow transfer for server with key. server 192.168.0.20 { keys intra. ; }; // Recursion to other nameserver and reslovers. recursion yes; /* * All view MUST contain the root zone with the worldwide root * server definitions. * * Updating the root zone could be done with follwing command: * # dig NS . @a.root-servers.net > /var/named/named.ca */ zone "." IN { type hint; file "named.ca"; }; /* * All view MUST contain the definitions for all the localhost * names and addresses, as recommended in RFC1912. */ include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; zone "dmz.tachtler.net" IN { type slave; file "dynamic/slave/dmz.tachtler.net.zone.db"; masters { 192.168.0.20; }; }; zone "intra.tachtler.net" IN { type slave; file "dynamic/slave/intra.tachtler.net.zone.db"; transfer-source 192.168.1.1; masters { 192.168.0.20; }; }; zone "0.168.192.in-addr.arpa" IN { type slave; file "dynamic/slave/0.168.192.zone.db"; masters { 192.168.0.20; }; }; zone "1.168.192.in-addr.arpa" IN { type slave; file "dynamic/slave/1.168.192.zone.db"; transfer-source 192.168.1.1; masters { 192.168.0.20; }; }; }; // keys ---------------------------------------------------------------- include "/etc/rndc.key"; // controls ------------------------------------------------------------ controls { inet 127.0.0.1 port 953 allow { slavelist; } keys { rndc-key; }; };
Nachfolgend sollen die wichtigen Bestandteile der voranstehenden Konfigurationsdatei /etc/named.conf
veranschaulicht werden.
Definitionen der beteiligten Server: Master- und Slave-Server
... acl masterlist { 192.168.0.20/32; }; acl slavelist { 127.0.0.1/32; 192.168.0.10/32; 192.168.1.1/32; } ...
Es werden die IP-Adressen des Master-Servers und des Slave-Servers in ACL-Gruppen definiert, die später zum Einsatz kommen.
Definitionen zum Benachrichtigungssystem
... // No notification form this DNS-Server to anyone. notify no; ...
Es sollen keine Benachrichtigungen vom Slave-Server bei Zonenänderungen Versand werden.
Definitionen Server-Benachrichtigungen
... // Enable zonetransfer to these HOSTs. allow-transfer { slavelist; }; ...
Hier werden die ACL-Gruppen verwendet, hinter denen sich die IP-Adresse befinden, auf die Server auf die ein Zonen-Transfer erlaubt ist. Hier beim Slave-Server, sollte der Slave-Server selbst eingetragen werden.
Definition der Slave-Server transfer IP-Adresse
... // Local address for zone transfers. transfer-source 192.168.0.10; ...
Hier wird die IP-Adresse festgelegt, mit der der Slave-Server den Zonen-Transfer durchführt (Empfänger IP-Adresse).
WICHTIG - Für einen Zonen-Transfer über eine weitere IP-Adresse, kann die Definition auch noch in der View, oder in der Zone angegeben werden !!!
Definition der gleichzeitig erlaubten Zonen-Transfers
...
// The maximum number of inbound zone transfers running concurrently.
transfers-in 999;
...
Der Standard-Wert liegt beim Transfer von 10 Zonen, was als Lastbeschränkung gedacht ist. Die Anzahl kann jedoch erhöht werden, was aber zu Lasten der Performance des Master-Servers und des Slave-Servers führen kann.
Definition eines TSIG-Schlüsses
... // TSIG ---------------------------------------------------------------- key "intra." { algorithm hmac-sha256; secret "kfgHKkh27TApI3pD+z2GIB=="; }; ...
Dies ist die Definition eines TSIG-Schlüssels, welcher für bestimmte Konstellationen von Zonen-Transfers maßgeblich entscheidend ist!
WICHTIG - Der Einsatz eines TSIG-Schlüssels ist bei der hier vorgestellten Konstellation des Zonen-Transfers entscheidend und wird nachfolgend behandelt:
Definitionen der "Views"
... view "localhost" { // Only following clients can resolv the zone informations. match-clients { !key intra. ; "localhost"; }; ... view "dmz" { // Only following clients can resolv the zone informations. match-clients { !key intra. ; "dmz"; }; ... view "intra" { // Only following clients can resolv the zone informations. match-clients { key intra. ; "intra"; }; // Only following destination can resolv the zon informations. match-destinations { key intra. ; "intra"; }; // Allow transfer for server with key. server 192.168.0.20 { keys intra. ; }; ...
WICHTIG - Es kommen unterschiedliche View-Definitionen zum Einsatz !!!
Bei den View-Definitionen
localhost
unddmz
kommt eine Definition zum Einsatz die einem Master-Server mit dem TSIG-Schlüssel
- intra.
den Zonen-Transfer - NICHT ERLAUBT !!!
... !key intra. ; ...
Bei der View-Definition
intra
kommt eine Definition zum Einsatz die einem Master-Server mit dem TSIG-Schlüssel
- intra.
den Zonen-Transfer - ERLAUBT !!!
... key intra. ; ...
WICHTIG - Die Definition des Master-Servers mit dem dazugehörigen Key - intra.
!!!
... server 192.168.0.20 { keys intra. ; };
Definitionen der "Zonen"
... zone "dmz.tachtler.net" IN { type slave; file "dynamic/slave/dmz.tachtler.net.zone.db"; masters { 192.168.0.20; }; }; ...
HINWEIS - Diese Definitionen gelten für alle Zonen, lediglich der
- Name der Zone - hier z.B.
dmz.tachtler.net
und die - Datei der Zone - hier z.B.
dynamic/master/dmz.tachtler.net.zone.db
sind entsprechend der einzelnen verwendeten Zonen unterschiedlich.
WICHTIG - Eine Besonderheit genießt jedoch die
- Zone -
intra.tachtler.net
bzw. dessen „reverse“ Auflösung
- Zone -
1.168.192.in-addr.arpa
Wie nachfolgend gezeigt, wird hier die Definition transfer-source
entsprechend angepasst:
... zone "intra.tachtler.net" IN { type slave; file "dynamic/slave/intra.tachtler.net.zone.db"; transfer-source 192.168.1.1; masters { 192.168.0.20; }; }; ... zone "1.168.192.in-addr.arpa" IN { type slave; file "dynamic/slave/1.168.192.zone.db"; transfer-source 192.168.1.1; masters { 192.168.0.20; }; ...
TSIG-Schlüssel
TSIG steht für (Transaction SIGnatures) und stellt eine Möglichkeit dar, die Kommunikation mithilfe eines Schlüssels weiter abzusichern.
Die Original-Dokumentation kann unter nachfolgendem externen Link eingesehen werden
Erstellen
Um einen TSGI-Schlüssel(paar) zu erstellen, kann nachfolgender Befehl genutzt werden:
# dnssec-keygen -a hmac-sha256 -b 128 -n HOST intra. Kintra.+163+32328
* Die Generierung kann einige Zeit in Anspruch nehmen, je nach Leistungsfähigkeit des Servers.
Anschließend sollten zwei Dateien entstanden sein, was mit nachfolgendem Befehl überprüft werden kann:
# ls -la *intra.* -rw-r--r-- 1 root root 49 Aug 6 14:15 Kintra.+163+32328.key -rw------- 1 root root 168 Aug 6 14:15 Kintra.+163+32328.private
Hier ist nur die Datei
Kintra.+113+32328.private
interessant, dessen Inhalt mit nachfolgendem Befehl ausgegeben werden kann:
# cat Kintra.+163+32328.private Private-key-format: v1.3 Algorithm: 163 (HMAC_SHA256) Key: kfgHKkh27TApI3pD+z2GIB== Bits: AAA= Created: 20120806121239 Publish: 20120806121239 Activate: 20120806121239
HINWEIS - Hier kann nun die „Zeichenkette“, welche nach der Bezeichnung Key:
steht verwendet werden.
Die Dateien selbst, können gelöscht werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# rm Kintra.+163+32328.*
Verwenden
Nun muss die jeweilige Konfigurationsdatei
/etc/named.conf
des
- Master-Servers und des
- Slave-Servers
um nachfolgende Zeilen erweitert werden, damit dem jeweiligen Server der gleiche TSIG-Schlüssel bekannt ist und verwendet werden kann (nur relevanter Ausschnitt):
... key "intra." { algorithm hmac-sha256; secret "kfgHKkh27TApI3pD+z2GIB=="; }; ...
Log-Datei des Zonen-Transfers
Zur Überprüfung, ob ein Zonen-Transfer erfolgreich durchgeführt wurde, kann nachfolgender Befehl genutzt werden, der die Log-Datei
/var/named/data/named.run
auf dem Slave-Server, zur Ausgabe auf den Bildschirm bring (nur relevanter Ausschnitt):
... 06-Aug-2012 14:21:35.719 general: info: zone tachtler.net/IN/intra: Transfer started. 06-Aug-2012 14:21:35.720 xfer-in: info: transfer of 'tachtler.net/IN/intra' from 192.168.0.20#53: connected using 192.168.1.1#57420 06-Aug-2012 14:21:35.723 general: warning: zone tachtler.net/IN/intra: main._domainkey.tachtler.net/A: bad owner name (check-names) 06-Aug-2012 14:21:35.723 general: info: zone tachtler.net/IN/intra: transferred serial 2012080502: TSIG 'intra' 06-Aug-2012 14:21:35.724 xfer-in: info: transfer of 'tachtler.net/IN/intra' from 192.168.0.20#53: Transfer completed: 1 messages, 98 records, 2459 bytes, 0.003 secs (819666 bytes/sec) 06-Aug-2012 14:21:35.218 general: info: zone 171.217.88.in-addr.arpa/IN/intra: Transfer started. 06-Aug-2012 14:21:35.219 xfer-in: info: transfer of '171.217.88.in-addr.arpa/IN/intra' from 192.168.0.20#53: connected using 192.168.1.1#58583 06-Aug-2012 14:21:35.220 general: info: zone 171.217.88.in-addr.arpa/IN/intra: transferred serial 2012080502: TSIG 'intra' 06-Aug-2012 14:21:35.220 xfer-in: info: transfer of '171.217.88.in-addr.arpa/IN/intra' from 192.168.0.20#53: Transfer completed: 1 messages, 6 records, 306 bytes, 0.001 secs (306000 bytes/sec) ...
Fehlersuche
Falls ein Fehler, wie nachfolgend dargestellt (nur relevanter Ausschnitt),
... 06-Aug-2012 13:00:36.510 general: info: zone 171.217.88.in-addr.arpa/IN/intra: refresh: failure trying master 192.168.0.20#53 (source 192.168.1.1#0): tsig indicates error ...
in der Log-Datei auftreten sollte und der Zonen-Transfer, nicht stattgefunden hat, sollten nachfolgende Konfigurationen überprüft werden:
- Ist der generierte Schlüssel korrekt erstellt worden?
- Ist der Name des generierten Schlüssels (hier z.B. intra.), auch so in der Konfigurationsdatei konfiguriert? (Punkt am Ende das Namens?)
- Sind die Views korrekt konfiguriert?
- z.B. Zone - ohne - TSIG, wie z.B.
localhost
match-clients { !key intra. ; "localhost"; };
match-destinations { "localhost"; };
- z.B. Zone - mit - TSIG, wie z.B.
intra
match-clients { key intra. ; "intra"; };
match-destinations { key intra. ; "intra"; };
- Master-Server →
server 192.168.1.1 { keys intra; };
- Slave-Server →
server 192.168.0.20 { keys intra; };
Zonen-Transfer über NAT-Firewall
Um einen Zonen-Transfer über eine Firewall, welche z.B. bei alle ausgehenden Verbindungen, via NAT die Absender-IP-Adresse umschreibt (MASQUERADING), sind nachfolgende iptables-Regeln
- VOR
der MASQUERADING-Regel einzufügen:
Um die aktuellen iptables
-Regeln (CHAIN NAT) erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -t nat -nvL --line-numbers Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 980 packets, 82233 bytes) num pkts bytes target prot opt in out source destination 1 5224 379K SNAT all -- * eth0 0.0.0.0/0 0.0.0.0/0 to:10.0.0.10 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk (CHAIN NAT) jeweils ab der Position 1 hinzu, ohne das der Paketfilter angehalten werden muss:
-A POSTROUTING -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p tcp -m tcp --dport 53 -j ACCEPT
-A POSTROUTING -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p udp -m udp --dport 53 -j ACCEPT
und hier die Befehle:
# iptables -I POSTROUTING 1 -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p tcp -m tcp --dport 53 -j ACCEPT # iptables -I POSTROUTING 1 -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p udp -m udp --dport 53 -j ACCEPT # iptables -I OUTPUT 1 -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p tcp -m tcp --dport 53 -j ACCEPT # iptables -I OUTPUT 1 -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p udp -m udp --dport 53 -j ACCEPT
Ein erneute Abfrage des iptables
-Regelwerts (CHAIN NAT) , sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -t nat -nvL --line-numbers Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 980 packets, 82233 bytes) num pkts bytes target prot opt in out source destination 1 36 2160 ACCEPT tcp -- * eth0 192.168.1.1 192.168.0.20 tcp dpt:53 2 82 10989 ACCEPT udp -- * eth0 192.168.1.1 192.168.0.20 udp dpt:53 3 5224 379K SNAT all -- * eth0 0.0.0.0/0 0.0.0.0/0 to:192.168.0.10 Chain OUTPUT (policy ACCEPT 3598 packets, 294K bytes) num pkts bytes target prot opt in out source destination 1 36 2160 ACCEPT tcp -- * eth0 192.168.1.1 192.168.0.20 tcp dpt:53 2 82 10989 ACCEPT udp -- * eth0 192.168.1.1 192.168.0.20 udp dpt:53
Die neuen Zeilen sind an Position 1 und Postition 2 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 1 36 2160 ACCEPT tcp -- * eth0 192.168.1.1 192.168.0.20 tcp dpt:53 2 82 10989 ACCEPT udp -- * eth0 192.168.1.1 192.168.0.20 udp dpt:53 ... 1 36 2160 ACCEPT tcp -- * eth0 192.168.1.1 192.168.0.20 tcp dpt:53 2 82 10989 ACCEPT udp -- * eth0 192.168.1.1 192.168.0.20 udp dpt:53 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]