Einführung
In diesem Anleitungsartikel führen wir Sie durch die Installation eines sicheren autoritativen BIND9-DNS-Servers auf CentOS 7
Was ist BIND?
BIND ist Open-Source-Software, die die DNS-Protokolle (Domain Name System) für das Internet implementiert. Es ist eine Referenzimplementierung dieser Protokolle, aber es ist auch eine produktionstaugliche Software, die für den Einsatz in hochvolumigen und hochzuverlässigen Anwendungen geeignet ist.
– ISC (Internet Systems Consortium)
Übersicht der Konfigurationsschritte
- Grundlegende Servervorbereitung.
- Installation der BIND-Softwarepakete.
- Konfiguration der BIND-Softwarepakete.
- Hinzufügen einer Testzone (Domain)
- Den DNS-Server testen
Voraussetzungen
Bevor Sie mit diesem Anleitungsartikel beginnen, müssen Sie zunächst sicherstellen, dass Sie diese Voraussetzungen erfüllt haben.
– CentOS 7 Server – Wenn Sie keinen Server zur Verfügung haben, können Sie einen über unsere VPS-Hosting-Services-Seite einrichten.
– Ihr bevorzugter Texteditor ist installiert – Wir werden nano in diesem Tutorial verwenden.
.
1 – Grundlegende Servervorbereitung
Stellen Sie zunächst sicher, dass Sie als Root-Benutzerkonto angemeldet sind.
sudo su -
Als nächstes werden wir sicherstellen, dass das Kernbetriebssystem vollständig aktualisiert wird.
yum update -y
Nachdem Ihr System nun vollständig aktualisiert ist, werden wir die Firewall aktualisieren (standardmäßig aktiviert ), um DNS (TCP Port 53 / UDP Port 53) den Zugriff auf Ihren Server zu ermöglichen.
firewall-cmd --permanent --zone public --add-port 53/tcp firewall-cmd --permanent --zone public --add-port 53/udp firewall-cmd --reload
2 – Installation der BIND-DNS-Softwarepakete
Wir sind jetzt bereit, die BIND-Softwarepakete auf Ihrem Server zu installieren.
yum install -y bind bind-utils bind-chroot
- binden : DNS-Server (Domain Name System) von Berkeley Internet Name Domain (BIND)
- bind-utils : Dienstprogramme zum Abfragen von DNS-Nameservern
- bind-chroot : Eine Chroot-Laufzeitumgebung für den ISC BIND DNS-Server
Nachdem Sie nun die erforderlichen BIND-Softwarepakete installiert haben, können wir die BIND-Dienste starten und sie so einstellen, dass sie beim Neustart des Servers automatisch gestartet werden.
systemctl start named systemctl enable named
.
3 – Konfiguration des BIND-DNS-Servers
Beim Starten des BIND-DNS-Servers hängt das Chroot-Paket automatisch alle Konfigurationsdateien in /var/named/chroot
ein Verzeichnis Ihres Servers. Wenn Sie BIND (oder irgendeinen anderen Prozess) in einem Chroot-Gefängnis ausführen, kann der Prozess einfach keinen Teil des Dateisystems außerhalb des Gefängnisses sehen.
Als Referenz, das Basisverzeichnis, in dem Sie für alle BIND-Konfigurationen arbeiten werden, ist /var/named/chroot
Wechseln wir zunächst für den Rest dieser Schritte in dieses Verzeichnis.
cd /var/named/chroot
Lassen Sie uns nun einige Verzeichnisse und eine Konfigurationseinstellungsdatei für Ihren neuen Server erstellen und den Besitz festlegen. Diese Verzeichnisse werden zum Speichern von Forward- und Reverse-Zonendateien für Ihren DNS-Server verwendet.
mkdir var/named/fwd-zones mkdir var/named/rev-zones chown -R named:named var/named/fwd-zones chown -R named:named var/named/rev-zones touch etc/zones.conf chown root:named etc/zones.conf
Als Nächstes bearbeiten wir die etc/named.conf
Konfigurationsdatei. Wir werden Sie durch die gesamte Einrichtung führen, damit Sie verstehen, was jede Option für Ihren Server tut.
nano etc/named.conf
Bei der Erstinstallation ist die Standardkonfigurationsdatei unten (wenn Sie zur letzten etc/named.conf
springen möchten , finden Sie unten):
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; 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"; allow-query { localhost; }; recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
Die verfügbaren Konfigurationseinstellungen und Optionen in BIND sind sehr umfangreich. In diesem Artikel behandeln wir nur die Optionen, um Ihren Server als autoritativen DNS-Server einzurichten und Ihren Server vor rekursiven DNS-Verstärkungsangriffen zu schützen.
Für eine ausführlichere Erklärung all dieser Optionen empfehlen wir die Leute von Zytrax.com.
Höroptionen
Die erste Konfigurationsoption, die wir ändern werden, sind die Listening-Optionen für Ihren Server. Standardmäßig ist der Server so eingerichtet, dass er nur die lokale Loopback-Adresse (127.0.0.1) abhört. Wir werden dies ändern, um alle Schnittstellen auf Ihrem Server zu überwachen. Ersetzen Sie die folgenden Zeilen in den options { }
-Klausel der Konfigurationsdatei.
listen-on port 53 { any; }; listen-on-v6 port 53 { any; };
ACLs (Zugriffskontrolllisten)
Wir werden der Konfiguration nun einige ACL-Regeln (Access Control List) hinzufügen. Diese ACLs werden verwendet, um die Sicherheitseinstellungen für die Abfragesuchoptionen sowie die rekursiven Abfrageoptionen zu erweitern. Die erste Regel – die wir „erlaubte Abfragen“ nennen – wird verwendet, um jeder Quelladresse zu erlauben, Ihren DNS-Server abzufragen. Die zweite Regel – wir nennen diese eine „allowed-recursion“ – wird verwendet, um die rekursive Suche nur auf die localhost-Adresse zu beschränken.
Fügen Sie die folgenden ACL-Richtlinienregeln direkt über den options { }
hinzu Klausel.
// ACL - Allow queries from ANY source address acl "allowed-queries" { any; }; // ACL - Allow recursion from LOCALHOST only. acl "allowed-recursion" { 127.0.0.1; ::1; }; options { ... };
Als Nächstes ändern wir den Konfigurationswert von allow-query
-Anweisungsvariable, um die neue ACL zu verwenden, die wir gerade erstellt haben. Die allow-query
-Anweisung definiert, wer (d. h. Quellnetzwerke) Ihren DNS-Server abfragen darf. Ersetzen Sie die folgende Zeile innerhalb der options { }
-Klausel der Konfigurationsdatei.
allow-query { "allowed-queries"; };
Rekursion einschränken
Jetzt müssen wir die Berechtigung zur Rekursionssuche auf Ihrem Server sichern. Rekursion ist eine Technik, bei der ein DNS-Server andere DNS-Server im Namen des anfragenden Clients abfragt, um den Namen vollständig aufzulösen, und dann eine Antwort an den Client zurücksendet. Angreifer können diese Technik verwenden, um DNS-Server mit aktivierter offener Rekursion dazu zu bringen, unwissentlich an einem DDoS-Angriff (Distributed Denial of Service) teilzunehmen. Wenn ein DNS-Server in Ihrem Netzwerk keine rekursiven Abfragen empfangen soll, sollte die Rekursion daher auf diesem Server deaktiviert oder gesichert werden, damit nicht autorisierte Quellen diese Technik nicht verwenden können.
recursion yes; allow-recursion { "allowed-recursion"; };
Wir werden der Konfigurationsdatei jetzt eine Include-Anweisung hinzufügen. Diese Anweisung wird verwendet, um die autoritativen Zonendaten (Domänen) einzuschließen, für deren Reaktion Ihr Server konfiguriert wird. Fügen Sie die folgende Zeile unter dem Ende der option { }
hinzu -Klausel direkt nach der letzten Include-Anweisung.
include "/etc/zones.conf";
Wir haben nun die Konfigurationsänderungen in der etc/named.conf
abgeschlossen Konfigurationsdatei. Sie können Ihre Änderungen jetzt speichern und beenden.
.
Neue named.conf-Datei
Zur Überprüfung Ihre etc/named.conf
Konfigurationsdatei sollte nun wie folgt aussehen:
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // ACL - Allow queries from ANY source address acl "allowed-queries" { any; }; // ACL - Allow recursion from LOCALHOST only. acl "allowed-recursion" { 127.0.0.1; ::1; }; options { listen-on port 53 { any; }; listen-on-v6 port 53 { any; }; 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"; allow-query { "allowed-queries"; }; recursion yes; allow-recursion { "allowed-recursion"; }; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; include "/etc/zones.conf";
.
4 – Hinzufügen Ihrer ersten Zone (Domain)
Wir werden jetzt Ihre erste Zone hinzufügen, für die Ihr DNS-Server autorisierend sein wird. Wir werden eine Testdomäne verwenden (example.tld ) für diesen Schritt als Beispiel.
Zuerst erstellen wir eine neue Datei im Verzeichnis var/named/fwd-zones
die wir zuvor erstellt haben.
touch var/named/fwd-zones/example.tld.zone; chown named:named var/named/fwd-zones/example.tld.zone;
Als Nächstes fügen wir die Beispiel-Zoneneintragsdaten für diese Domain hinzu. Bearbeiten Sie die neue Datei, die wir gerade erstellt haben, und fügen Sie die Zonendaten zur Konfigurationsdatei hinzu.
nano var/named/fwd-zones/example.tld.zone
Zonendaten
; zone file for example.tld $TTL 14400 ; 4 hours - default TTL for zone $ORIGIN example.tld. ;; SOA Resource Record @ IN SOA ns1.example.tld. hostmaster.example.tld. ( 2015010100 ; se = serial number 12h ; ref = refresh 15m ; ret = update retry 3w ; ex = expiry 3h ; min = minimum ) ;; Name Servers IN NS ns1.example.com. ns1 IN A 192.0.2.3 ;; Mail Exchange Resource Records @ IN MX 10 mail.example.tld. ;; Web Server Resource Records @ IN A 192.0.2.3 www IN CNAME @ ;; FTP Server Resource Records ftp IN A 192.0.2.3
Wenn Sie alle erforderlichen Änderungen vorgenommen haben, speichern und beenden Sie.
Jetzt bearbeiten wir die etc/zones.conf
Konfigurationsdatei, um die gerade erstellte neue Domäne aufzunehmen.
nano etc/zones.conf
Fügen Sie nun die folgenden Parameter zur Konfigurationsdatei hinzu.
zone "example.tld" in { type master; file "fwd-zones/example.tld.zone"; allow-transfer { none; }; };
Wenn Sie fertig sind, speichern und beenden Sie diese Datei.
Wir sind jetzt bereit, Ihre DNS-Dienste neu zu starten, damit alle neuen Konfigurationen geladen werden.
systemctl restart named
Wenn alles erfolgreich und ohne Fehler neu gestartet wurde, sollten Sie die folgende Antwort erhalten:
Stopping named: . [ OK ] Starting named: [ OK ]
.
5 – Testen Ihres DNS-Servers
Wir sind nun bereit, die Funktionalität Ihres neuen DNS-Servers zu testen. Zuerst werden wir bestätigen, dass Ihr DNS-Server für die Zone (Domäne) antwortet, die wir gerade erstellt haben. Führen Sie den folgenden Befehl aus:
dig example.tld -t ANY @localhost
Sie sollten die folgende ähnliche Antwortausgabe von Ihrem Server sehen. Die wichtigsten Antwortwerte, nach denen gesucht werden muss, sind ;; ANSWER SECTION:
Werte. Diese Ausgabe teilt Ihnen mit, dass der Server auf Ihre Anfrage mit den Datensatzdaten geantwortet hat, die Sie in den vorherigen Schritten eingegeben haben.
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.2 <<>> example.tld -t ANY @localhost ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61421 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;example.tld. IN ANY ;; ANSWER SECTION: example.tld. 14400 IN SOA ns1.example.tld. hostmaster.example.tld. 2015010100 43200 900 1814400 10800 example.tld. 14400 IN NS ns1.example.tld. example.tld. 14400 IN MX 10 mail.example.tld. example.tld. 14400 IN A 192.0.2.3 ;; ADDITIONAL SECTION: ns1.example.tld. 14400 IN A 192.0.2.3 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: ;; MSG SIZE rcvd: 147
Der zweite Test, den wir durchführen werden, besteht darin, zu überprüfen, ob Ihr Server auf rekursive Suchen von localhost antwortet. Führen Sie den folgenden Befehl aus, um den Test zu starten:
dig google.com -t ANY @localhost
Wenn der Server wie erwartet eingerichtet ist, sollten Sie einen ähnlichen rekursiven ;; ANSWER SECTION:
Antwort.
;; ANSWER SECTION: google.com. 86400 IN SOA ns1.google.com. dns-admin.google.com. 4294967295 7200 1800 1209600 300 google.com. 600 IN MX 50 alt4.aspmx.l.google.com. google.com. 600 IN MX 40 alt3.aspmx.l.google.com. google.com. 600 IN MX 10 aspmx.l.google.com. google.com. 600 IN MX 20 alt1.aspmx.l.google.com. google.com. 600 IN MX 30 alt2.aspmx.l.google.com. google.com. 3600 IN TXT "v=spf1 include:_spf.google.com ~all" google.com. 86400 IN TYPE257 \# 19 0005697373756573796D616E7465632E636F6D google.com. 300 IN AAAA 2607:f8b0:4008:804::200e google.com. 300 IN A 216.58.219.78 google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns4.google.com. google.com. 172800 IN NS ns2.google.com. ;; AUTHORITY SECTION: google.com. 172800 IN NS ns4.google.com. google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns2.google.com. ;; ADDITIONAL SECTION: ns2.google.com. 172800 IN A 216.239.34.10 ns1.google.com. 172800 IN A 216.239.32.10 ns4.google.com. 172800 IN A 216.239.38.10 ns3.google.com. 172800 IN A 216.239.36.10
Der letzte Test, den wir durchführen werden, besteht darin, zu bestätigen, dass Ihr Server NICHT ist offen für einen DNS-Amplification-Angriff. Die Leute von openresolver.com haben einen einfachen Test eingerichtet, den Sie mit dig
verwenden können :
dig +short test.openresolver.com TXT @1.2.3.4 (replace 1.2.3.4 with the IP address or domain name of the DNS server you are testing)
Eine Antwort von "open-resolver-detected"
zeigt an, dass Sie die Rekursion aktiviert haben. Keine Antwort ist in diesem Fall eine gute Sache .
Auf der Website openresolver.com steht auch ein browserbasiertes Tool zum Testen dieser Schwachstelle zur Verfügung.
Beim Testen mit Ihrer öffentlichen IP-Adresse sollten Sie die folgende ähnliche Antwort erhalten:
Erfolgreicher Open Recursive DNS Resolver Test
Herzlichen Glückwunsch!
Sie haben jetzt einen autoritativen DNS-Server konfiguriert und ausgeführt. Vielen Dank fürs Lesen! Sehen Sie sich unten einige der verwandten Artikel an und vielen Dank, dass Sie unsere zuverlässigen VPS-Hosting-Lösungen bei Atlantic.Net ausprobieren.