Krok po kroku: jak skonfigurować serwer DNS BIND w środowisku chroot dla Red Hat (RHEL / CentOS) 7

Tłumaczenie artykułu przygotowane dla studentów kursu „Bezpieczeństwo Linux”Ciekawi Cię rozwój w tym kierunku? Zobacz nagranie transmisji masterclass Ivana Piskunova „Bezpieczeństwo w systemie Linux w porównaniu z Windows i MacOS”

Krok po kroku: jak skonfigurować serwer DNS BIND w środowisku chroot dla Red Hat (RHEL / CentOS) 7

W tym artykule opiszę kroki potrzebne do skonfigurowania serwera DNS na RHEL 7 lub CentOS 7. Do demonstracji użyłem Red Hat Enterprise Linux 7.4. Naszym celem jest utworzenie jednego rekordu A oraz jednego rekordu PTR dla strefy widocznej i odwrotnej.

Najpierw zainstaluj wymagane pakiety RPM dla serwera DNS.

UWAGA: Dla RHEL musisz mieć aktywną subskrypcję na RHN, lub możesz skonfigurować lokalne repozytorium offline, za pomocą którego menedżer pakietów „yum” będzie mógł zainstalować wymagane pakiety RPM oraz ich zależności.

# yum install bind bind-chroot caching-nameserver

Moje ustawienia:

# 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

Ponieważ będziemy używać chroot, musisz wyłączyć usługę.

# systemctl stop named
# systemctl disable named

Następnie skopiuj potrzebne pliki do katalogu chroot.
UWAGA. Użyj argumentu -p w komendzie cp aby zachować uprawnienia i właścicieli.

[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’

Następnie skopiuj pliki związane ze strefą do nowego miejsca.

[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’
Teraz spójrzmy na główny plik konfiguracyjny.

Wyczyść zawartość named.conf i wklej następujące.

[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";
};

Informacje dotyczące strefy powinny zostać dodane do /var/named/chroot/etc/named.rfc1912.zones. Dodaj poniższe rekordy. Plik example.zone to plik strefy z bezpośrednim odwzorowaniem, a example.rzone to plik strefy odwrotnej.

WAŻNA UWAGA: Strefa odwrotnego odwzorowania zawiera 1.168.192, ponieważ mój adres IP to 192.168.1.7

strefa "example" IN {
        typ master;
        plik "example.zone";
        allow-update { none; };
};

strefa "1.168.192.in-addr.arpa" IN {
        typ master;
        plik "example.rzone";
        allow-update { none; };
};

Pliki związane ze strefami znajdują się tutaj:

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

Następnie utworzymy pliki dla strefy bezpośredniej i odwrotnej. Nazwy plików będą takie same jak powyżej w pliku named.rfc1912.zones. Mamy już kilka domyślnych szablonów, które możemy wykorzystać.

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

Jak widzisz, obecne uprawnienia do wszystkich plików i katalogów należą do root.

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

Zmień uprawnienia wszystkich plików, ustawiając jako właściciela użytkownika root i grupę named.

# chown root:named *

Ale dla data właścicielem powinien być 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

Dodaj poniższe treści do pliku strefy bezpośredniej. Tutaj tworzymy rekord A dla localhost (golinuxhub-client) oraz kolejny dla serwera (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

Następnie dodaj zawartość do pliku strefy odwrotnej. Tutaj tworzymy rekord PTR dla golinuxhub-client i serwera 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.

Zanim uruchomimy usługę named-chroot, sprawdzimy konfigurację pliku strefy.

[root@golinuxhub-client named]# named-checkzone golinuxhub-client.example example.zone
strefa golinuxhub-client.example/IN: załadowano numer seryjny 1
OK

[root@golinuxhub-client named]# named-checkzone golinuxhub-client.example example.rzone
strefa golinuxhub-client.example/IN: załadowano numer seryjny 1997022700
OK

Wszystko wygląda dobrze. Teraz sprawdź plik konfiguracyjny, używając następującej komendy.

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

Tak więc, wszystko zostało pomyślnie zakończone.

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

WAŻNA UWAGA: mam SELinux w trybie permissive

# getenforce
Permissive

Wszystko wygląda dobrze, więc czas uruchomić naszą usługę 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)
   Załadowano: załadowano (\/usr\/lib\/systemd\/system\/named-chroot.service; wyłączone; ustawienia domyślne dostawcy: wyłączone)
   Aktywny: aktywny (działa) od pon 2018-02-12 21:53:23 IST; 19s temu
  Proces: 5236 ExecStop=\/bin\/sh -c \/usr\/sbin\/rndc stop > \/dev\/null 2>&1 || \/bin\/kill -TERM $MAINPID (kod=ukończony, status=0/SUKCES)
  Proces: 5327 ExecStart=\/usr\/sbin\/named -u named -c ${NAMEDCONF} -t \/var\/named\/chroot $OPTIONS (kod=ukończony, status=0/SUKCES)
  Proces: 5325 ExecStartPre=\/bin\/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then \/usr\/sbin\/named-checkconf -t \/var\/named\/chroot -z "$NAMEDCONF"; else echo "Sprawdzanie plików strefowych jest wyłączone"; fi (kod=ukończony, status=0/SUKCES)
 Główny PID: 5330 (named)
   CGroup: \/system.slice\/named-chroot.service
           └─5330 \/usr\/sbin\/named -u named -c \/etc\/named.conf -t \/var\/named\/chroot

12 lut 21:53:23 golinuxhub-client.example named[5330]: managed-keys-zone\/my_resolver: załadowano numer seryjny 0
12 lut 21:53:23 golinuxhub-client.example named[5330]: strefa 0.in-addr.arpa\/IN\/my_resolver: załadowano numer seryjny 0
12 lut 21:53:23 golinuxhub-client.example named[5330]: strefa 1.0.0.127.in-addr.arpa\/IN\/my_resolver: załadowano numer seryjny 0
12 lut 21:53:23 golinuxhub-client.example named[5330]: strefa 1.168.192.in-addr.arpa\/IN\/my_resolver: załadowano numer seryjny 1997022700
12 lut 21:53:23 golinuxhub-client.example named[5330]: strefa example\/IN\/my_resolver: załadowano numer seryjny 1
12 lut 21:53:23 golinuxhub-client.example named[5330]: strefa localhost\/IN\/my_resolver: załadowano numer seryjny 0
12 lut 21:53:23 golinuxhub-client.example named[5330]: strefa 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: załadowano numer seryjny 0
12 lut 21:53:23 golinuxhub-client.example named[5330]: strefa localhost.localdomain\/IN\/my_resolver: załadowano numer seryjny 0
12 lut 21:53:23 golinuxhub-client.example named[5330]: wszystkie strefy załadowane
12 lut 21:53:23 golinuxhub-client.example named[5330]: działa
```bash
Upewnij się, że resolv.conf zawiera twój adres IP, aby mógł działać jako serwer DNS.
```bash
# cat \/etc\/resolv.conf
search example
nameserver 192.168.1.7
```bash
Sprawdźmy nasz serwer DNS dla strefy odwrotnej, używając dig.
```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
;; global options: +cmd
;; Otrzymano odpowiedź:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40331
;; flagi: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; SEKCJA PSEUDOOPT:
; EDNS: wersja: 0, flagi:; udp: 4096
;; SEKCJA PYTANIA:
;5.1.168.192.in-addr.arpa.      IN      PTR

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

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

;; SEKCJA DODATKOWA:
example.                86400   IN      A       192.168.1.7

;; Czas zapytania: 1 msec
;; SERWER: 192.168.1.7#53(192.168.1.7)
;; KIEDY: pon lut 12 22:13:17 IST 2018
;; ROZMIAR MSG  rcvd: 122

Jak widać, otrzymaliśmy pozytywną odpowiedź (ANSWER) na nasze zapytanie (QUERY).

[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
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55804
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;7.1.168.192.in-addr.arpa.      IN      PTR

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

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

;; ADDITIONAL SECTION:
example.                86400   IN      A       192.168.1.7

;; Query time: 1 msec
;; SERVER: 192.168.1.7#53(192.168.1.7)
;; WHEN: Mon Feb 12 22:12:54 IST 2018
;; MSG SIZE  rcvd: 122

W ten sam sposób możemy sprawdzić strefę odwrotną.

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

Name:   golinuxhub-client.example
Address: 192.169.1.7

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

Name:   golinuxhub-server.example
Address: 192.168.1.5

Ten artykuł jest nieco przestarzały, ponieważ w RHEL 7 nie trzeba już kopiować plików konfiguracyjnych bind do chroot. Krok po kroku: Konfiguracja serwera DNS przy użyciu bind chroot (CentOS/RHEL 7).

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster