Schritt-für-Schritt-Anleitung zur Einrichtung eines BIND-DNS-Servers in einer chroot-Umgebung für Red Hat (RHEL / CentOS) 7

Übersetzung des Artikels für Studierende des Kurses „Linux-Sicherheit“. Interessiert daran, in diesem Bereich zu wachsen? Sehen Sie sich die Aufzeichnung des Workshops von Ivan Piskunov an. «Sicherheit in Linux im Vergleich zu Windows und MacOS»

Schritt-für-Schritt-Anleitung zur Einrichtung eines BIND-DNS-Servers in einer chroot-Umgebung für Red Hat (RHEL / CentOS) 7

In diesem Artikel erkläre ich die Schritte zur Einrichtung eines DNS-Servers auf RHEL 7 oder CentOS 7. Zur Demonstration habe ich Red Hat Enterprise Linux 7.4 verwendet. Unser Ziel ist es, einen A-Eintrag und einen PTR-Eintrag für die direkte und umgekehrte Zonenansicht zu erstellen.

Zuerst installieren Sie die erforderlichen RPM-Pakete für den DNS-Server.

HINWEIS: Für RHEL benötigen Sie eine aktive RHN-Mitgliedschaft, oder Sie können ein lokales Offline-Repository einrichten, mit dem der Paketmanager „yum“ die erforderlichen RPM-Pakete und Abhängigkeiten installieren kann.

# yum install bind bind-chroot caching-nameserver

Meine Einstellungen:

# hostname
golinuxhub-client.example
Мой IP-адрес 192.168.1.7
# ip address | egrep 'inet.*enp0s3'
    inet 192.168.1.7/24 brd 192.168.1.255 scope global dynamic enp0s3

Da wir chroot verwenden werden, muss der Dienst deaktiviert werden.

# systemctl stop named
# systemctl disable named

Kopieren Sie dann die erforderlichen Dateien in das chroot-Verzeichnis.
HINWEIS. Verwenden Sie das Argument -p im Befehl cp zum Beibehalten von Rechten und Eigentümern.

[root@golinuxhub-client ~]# cp -rpvf /usr/share/doc/bind-9.9.4/sample/etc/*  /var/named/chroot/etc/
‘/usr/share/doc/bind-9.9.4/sample/etc/named.conf’ -> ‘/var/named/chroot/etc/named.conf’
‘/usr/share/doc/bind-9.9.4/sample/etc/named.rfc1912.zones’ -> ‘/var/named/chroot/etc/named.rfc1912.zones’

Kopieren Sie dann die zonenbezogenen Dateien an einen neuen Speicherort.

[root@golinuxhub-client ~]# cp -rpvf /usr/share/doc/bind-9.9.4/sample/var/named/* /var/named/chroot/var/named/
‘/usr/share/doc/bind-9.9.4/sample/var/named/data’ -> ‘/var/named/chroot/var/named/data’
‘/usr/share/doc/bind-9.9.4/sample/var/named/my.external.zone.db’ -> ‘/var/named/chroot/var/named/my.external.zone.db’
‘/usr/share/doc/bind-9.9.4/sample/var/named/my.internal.zone.db’ -> ‘/var/named/chroot/var/named/my.internal.zone.db’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.ca’ -> ‘/var/named/chroot/var/named/named.ca’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.empty’ -> ‘/var/named/chroot/var/named/named.empty’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.localhost’ -> ‘/var/named/chroot/var/named/named.localhost’
‘/usr/share/doc/bind-9.9.4/sample/var/named/named.loopback’ -> ‘/var/named/chroot/var/named/named.loopback’
‘/usr/share/doc/bind-9.9.4/sample/var/named/slaves’ -> ‘/var/named/chroot/var/named/slaves’
‘/usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.ddns.internal.zone.db’ -> ‘/var/named/chroot/var/named/slaves/my.ddns.internal.zone.db’
‘/usr/share/doc/bind-9.9.4/sample/var/named/slaves/my.slave.internal.zone.db’ -> ‘/var/named/chroot/var/named/slaves/my.slave.internal.zone.db’
```bash
Jetzt werfen wir einen Blick auf die Hauptkonfigurationsdatei.
```bash
# cd /var/named/chroot/etc/

Löschen Sie den Inhalt der named.conf und fügen Sie das Folgende ein.

[root@golinuxhub-client etc]# vim named.conf
options {
        listen-on port 53 { 127.0.0.1; any; };
#       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; any; };
        allow-query-cache { localhost; any; };
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

view my_resolver {
        match-clients      { localhost; any; };
        recursion yes;
        include "/etc/named.rfc1912.zones";
};

Die Informationen zur Zone müssen hinzugefügt werden in /var/named/chroot/etc/named.rfc1912.zones. Fügen Sie die untenstehenden Einträge hinzu. Die Datei example.zone ist die Datei für die direkte Zone, und example.rzone ist die Datei für die umgekehrte Zone.

WICHTIGER HINWEIS: Die umgekehrte Zone enthält 1.168.192, da meine IP-Adresse 192.168.1.7 ist.

zone "example" IN {
        type master;
        file "example.zone";
        allow-update { none; };
};

zone "1.168.192.in-addr.arpa" IN {
        type master;
        file "example.rzone";
        allow-update { none; };
};

Die mit den Zonen verbundenen Dateien befinden sich hier:

# cd /var/named/chroot/var/named/

Lassen Sie uns nun die Dateien für die direkte und die umgekehrte Zone erstellen. Die Dateinamen entsprechen den oben in der Datei named.rfc1912.zones. Wir haben bereits einige Standardvorlagen, die wir verwenden können.

# cp -p named.localhost  example.zone
# cp -p named.loopback example.rzone

Wie Sie sehen können, sind die aktuellen Berechtigungen für alle Dateien und Verzeichnisse zugewiesen root.

[root@golinuxhub-client named]# ll
total 32
drwxr-xr-x. 2 root root    6 Mai 22  2017 data
-rw-r--r--. 1 root root  168 Mai 22  2017 example.rzone
-rw-r--r--. 1 root root  152 Mai 22  2017 example.zone
-rw-r--r--. 1 root root   56 Mai 22  2017 my.external.zone.db
-rw-r--r--. 1 root root   56 Mai 22  2017 my.internal.zone.db
-rw-r--r--. 1 root root 2281 Mai 22  2017 named.ca
-rw-r--r--. 1 root root  152 Mai 22  2017 named.empty
-rw-r--r--. 1 root root  152 Mai 22  2017 named.localhost
-rw-r--r--. 1 root root  168 Mai 22  2017 named.loopback
drwxr-xr-x. 2 root root   71 Feb 12 21:02 slaves

Ändern Sie die Berechtigungen aller Dateien und setzen Sie den Benutzer als Besitzer. root und Gruppe named.

# chown root:named *

Aber für data muss der Besitzer sein named:named.

# chown -R  named:named data
# ls -l
total 32
drwxr-xr-x. 2 named named    6 May 22  2017 data
-rw-r--r--. 1 root  named  168 May 22  2017 example.rzone
-rw-r--r--. 1 root  named  152 May 22  2017 example.zone
-rw-r--r--. 1 root  named   56 May 22  2017 my.external.zone.db
-rw-r--r--. 1 root  named   56 May 22  2017 my.internal.zone.db
-rw-r--r--. 1 root  named 2281 May 22  2017 named.ca
-rw-r--r--. 1 root  named  152 May 22  2017 named.empty
-rw-r--r--. 1 root  named  152 May 22  2017 named.localhost
-rw-r--r--. 1 root  named  168 May 22  2017 named.loopback
drwxr-xr-x. 2 root  named   71 Feb 12 21:02 slaves

Fügen Sie den folgenden Inhalt in die Zonendatei ein. Hier erstellen wir einen A-Eintrag für localhost (golinuxhub-client) und einen weiteren für den Server (golinuxhub-server).

# vim example.zone
$TTL 1D
@       IN SOA  example. root (
                                        1       ; serial
                                        3H      ; refresh
                                        15M     ; retry
                                        1W      ; expire
                                        1D )    ; minimum

                IN NS           example.

                        IN A 192.168.1.7
golinuxhub-server       IN A 192.168.1.5
golinuxhub-client       IN A 192.169.1.7

Fügen Sie anschließend den Inhalt in die Rückezonendatei ein. Hier erstellen wir einen PTR-Eintrag für golinuxhub-client und für den Server golinuxhub-server.

# vim example.rzone
$TTL 1D
@       IN SOA  example. root.example. (
                                        1997022700      ; serial
                                        28800           ; refresh
                                        14400           ; retry
                                        3600000         ; expire
                                        86400  )        ; minimum

        IN NS   example.
5       IN PTR  golinuxhub-server.example.
7       IN PTR  golinuxhub-client.example.

Bevor wir den Dienst named-chroot, starten, überprüfen wir die Konfiguration der Zonendatei.

[root@golinuxhub-client named]# named-checkzone golinuxhub-client.example example.zone
zone golinuxhub-client.example/IN: serial 1 geladen
OK

[root@golinuxhub-client named]# named-checkzone golinuxhub-client.example example.rzone
zone golinuxhub-client.example/IN: serial 1997022700 geladen
OK

Alles sieht gut aus. Überprüfen Sie nun die Konfigurationsdatei mit dem folgenden Befehl.

[root@golinuxhub-client named]# named-checkconf -t /var/named/chroot/ /etc/named.conf

Also, alles wurde erfolgreich abgeschlossen.

[root@golinuxhub-client named]# echo $?
0

WICHTIGER HINWEIS: SELinux läuft im permissiven Modus.

# getenforce
Permissive

Alles sieht gut aus, also ist es an der Zeit, unseren Service zu starten. named-chroot .

[root@golinuxhub-client named]# systemctl restart named-chroot

[root@golinuxhub-client named]# systemctl status named-chroot
● named-chroot.service - Berkeley Internet Name Domain (DNS)
   Loaded: geladen (/usr/lib/systemd/system/named-chroot.service; deaktiviert; Vorgaben des Anbieters: deaktiviert)
   Active: aktiv (laufend) seit Mo 12.02.2018 21:53:23 IST; vor 19s
  Process: 5236 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 5327 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 5325 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z "$NAMEDCONF"; else echo "Überprüfung der Zonen-Dateien ist deaktiviert"; fi (code=exited, status=0/SUCCESS)
 Main PID: 5330 (named)
   CGroup: /system.slice/named-chroot.service
           └─5330 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot

12. Feb 21:53:23 golinuxhub-client.example named[5330]: managed-keys-zone/my_resolver: geladen, Seriennummer 0
12. Feb 21:53:23 golinuxhub-client.example named[5330]: zone 0.in-addr.arpa/IN/my_resolver: geladen, Seriennummer 0
12. Feb 21:53:23 golinuxhub-client.example named[5330]: zone 1.0.0.127.in-addr.arpa/IN/my_resolver: geladen, Seriennummer 0
12. Feb 21:53:23 golinuxhub-client.example named[5330]: zone 1.168.192.in-addr.arpa/IN/my_resolver: geladen, Seriennummer 1997022700
12. Feb 21:53:23 golinuxhub-client.example named[5330]: zone example/IN/my_resolver: geladen, Seriennummer 1
12. Feb 21:53:23 golinuxhub-client.example named[5330]: zone localhost/IN/my_resolver: geladen, Seriennummer 0
12. Feb 21:53:23 golinuxhub-client.example named[5330]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/my_resolver: geladen, Seriennummer 0
12. Feb 21:53:23 golinuxhub-client.example named[5330]: zone localhost.localdomain/IN/my_resolver: geladen, Seriennummer 0
12. Feb 21:53:23 golinuxhub-client.example named[5330]: alle Zonen geladen
12. Feb 21:53:23 golinuxhub-client.example named[5330]: läuft
```bash
Stellen Sie sicher, dass resolv.conf Ihre IP-Adresse enthält, damit es als DNS-Server funktionieren kann.
```bash
# cat /etc/resolv.conf
search example
nameserver 192.168.1.7
```bash
Lassen Sie uns unseren DNS-Server auf die Rückwärtszone überprüfen, indem wir dig verwenden.
```bash
[root@golinuxhub-client named]# dig -x 192.168.1.5

; <> DiG 9.9.4-RedHat-9.9.4-50.el7 <> -x 192.168.1.5
;; globale Optionen: +cmd
;; Antwort erhalten:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40331
;; flags: qr aa rd ra; QUERY: 1, ANTWORT: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; FRAGESECTION:
;5.1.168.192.in-addr.arpa.      IN      PTR

;; ANTWORTSECTION:
5.1.168.192.in-addr.arpa. 86400 IN      PTR     golinuxhub-server.example.

;; AUTHORITYSECTION:
1.168.192.in-addr.arpa. 86400   IN      NS      example.

;; ADDITIONELLSECTION:
example.                86400   IN      A       192.168.1.7

;; Abfragezeit: 1 msec
;; SERVER: 192.168.1.7#53(192.168.1.7)
;; WANN: Mo 12. Feb 22:13:17 IST 2018
;; MSG GRÖSSE  empfangen: 122

Wie Sie sehen, haben wir eine positive Antwort (ANSWER) auf unsere Anfrage (QUERY) erhalten.

[root@golinuxhub-client named]# dig -x 192.168.1.7

; <> DiG 9.9.4-RedHat-9.9.4-50.el7 <> -x 192.168.1.7
;; globale Optionen: +cmd
;; Antwort erhalten:
;; ->>HEADER<<- Opcode: QUERY, Status: NOERROR, ID: 55804
;; Flags: qr aa rd ra; QUERY: 1, ANTWORT: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: Version: 0, Flags:; UDP: 4096
;; FRAGESEKTION:
;7.1.168.192.in-addr.arpa.      IN      PTR

;; ANTWORTSEKTION:
7.1.168.192.in-addr.arpa. 86400 IN      PTR     golinuxhub-client.example.

;; AUTHORITYSEKTION:
1.168.192.in-addr.arpa. 86400   IN      NS      example.

;; ZUSÄTZLICHE SEKTION:
example.                86400   IN      A       192.168.1.7

;; Abfragezeit: 1 msec
;; SERVER: 192.168.1.7#53(192.168.1.7)
;; WANN: Mo Feb 12 22:12:54 IST 2018
;; MSG GRÖSSE empfangen: 122

Ebenso können wir die direkte Zone überprüfen.

[root@golinuxhub-client named]# nslookup golinuxhub-client.example
Server:         192.168.1.7
Adresse:        192.168.1.7#53

Name:   golinuxhub-client.example
Adresse: 192.169.1.7

[root@golinuxhub-client named]# nslookup golinuxhub-server.example
Server:         192.168.1.7
Adresse:        192.168.1.7#53

Name:   golinuxhub-server.example
Adresse: 192.168.1.5

Dieser Artikel ist etwas veraltet, da es in RHEL 7 nicht mehr erforderlich ist, die Konfigurationsdateien von bind in chroot zu kopieren. Schritt-für-Schritt-Anleitung: Konfigurieren Sie den DNS-Server mit bind chroot (CentOS/RHEL 7).

Quelle: habr.com

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster