Red Hat (RHEL/CentOS) 7-д зориулсан chroot орчинд BIND DNS серверийг тохируулах алхам алхмаар зааварчилгаа.

Курсын оюутнуудад зориулан бэлтгэсэн нийтлэлийн орчуулга "Linux аюулгүй байдал". Энэ чиглэлээр хөгжих сонирхолтой байна уу? Иван Пискуновын мастер ангийн нэвтрүүлгийн бичлэгийг үзээрэй "Windows болон MacOS-тай харьцуулахад Линуксийн аюулгүй байдал"

Red Hat (RHEL/CentOS) 7-д зориулсан chroot орчинд BIND DNS серверийг тохируулах алхам алхмаар зааварчилгаа.

Энэ нийтлэлд би RHEL 7 эсвэл CentOS 7 дээр DNS серверийг тохируулах алхмуудыг танд өгөх болно. Би үзүүлэнгийн хувьд Red Hat Enterprise Linux 7.4 ашигласан. Бидний зорилго бол урагш болон урвуу хайлтын бүсэд нэг A бичлэг, нэг PTR бичлэг үүсгэх явдал юм.

Эхлээд DNS серверт шаардлагатай rpm багцуудыг суулгана уу.

ТАЙЛБАР: RHEL-ийн хувьд танд байх ёстой идэвхтэй RHN захиалга, эсвэл та чадна орон нутгийн офлайн хадгалах газрыг тохируулах, "yum" багц менежер нь шаардлагатай rpm багц болон хамаарлыг суулгаж болно.

# yum install bind bind-chroot caching-nameserver

Миний тохиргоо:

# 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

Бид chroot ашиглах тул үйлчилгээг идэвхгүй болгох хэрэгтэй.

# systemctl stop named
# systemctl disable named

Дараа нь шаардлагатай файлуудыг chroot лавлах руу хуулна.
ЖИЧ. Аргумент ашиглах -p багт cp эрх, өмчлөгчдийг хамгаалах.

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

Дараа нь бүстэй холбоотой файлуудыг шинэ байршилд хуулна.

[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
Теперь давайте посмотрим на основной файл конфигурации.
```bash
# cd /var/named/chroot/etc/

Name.conf-ийн агуулгыг арилгаж, дараахыг буулгана уу.

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

Бүсийн тусгай мэдээллийг нэмэх шаардлагатай /var/named/chroot/etc/named.rfc1912.zones. Доорх оруулгуудыг нэмнэ үү. example.zone файл нь урагш хайх бүсийн файл бөгөөд жишээ.rzone - урвуу бүсийн файл.

ЧУХАЛ ТАЙЛБАР: Миний IP хаяг 1.168.192 тул урвуу хайлтын бүсэд 192.168.1.7 байна.

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

Бүсүүдтэй холбоотой файлууд энд байрладаг:

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

Дараа нь бид урагшлах болон урвуу бүсэд файл үүсгэх болно. Файлын нэр нь дээрх файлынхтай ижил байх болно нэртэй.rfc1912.бүсүүд. Бидэнд ашиглах боломжтой хэд хэдэн анхдагч загварууд байгаа.

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

Таны харж байгаагаар бүх файл, лавлах дээрх одоогийн зөвшөөрлүүд хамаарна эх.

[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

Хэрэглэгчийг эзэмшигч гэж харуулахын тулд бүх файлын зөвшөөрлийг өөрчил эх ба бүлэг нэрлэсэн.

# chown root: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

Дараах контентыг урагшлах бүсийн файлдаа нэмнэ үү. Энд бид localhost (golinuxhub-клиент) болон серверт (golinuxhub-сервер) өөр нэг бичлэгийг үүсгэнэ.

# 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

Дараа нь урвуу бүсийн файлд агуулгыг нэмнэ үү. Энд бид golinuxhub-клиент болон golinuxhub-серверт зориулсан PTR бичлэгийг үүсгэнэ.

# 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.

Үйлчилгээг эхлүүлэхийн өмнө нэртэй-chroot, бүсийн файлын тохиргоог шалгацгаая.

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

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

Бүх зүйл сайхан харагдаж байна. Одоо дараах тушаалыг ашиглан тохиргооны файлыг шалгана уу.

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

Тиймээс бүх зүйл амжилттай болсон.

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

ЧУХАЛ ТАЙЛБАР: Надад SELinux зөвшөөрөгдсөн горимд байна

# getenforce
Permissive

Бүх зүйл сайхан харагдаж байгаа тул манай үйлчилгээг эхлүүлэх цаг болжээ нэртэй-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: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2018-02-12 21:53:23 IST; 19s ago
  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 "Checking of zone files is disabled"; 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

Feb 12 21:53:23 golinuxhub-client.example named[5330]: managed-keys-zone/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone 0.in-addr.arpa/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone 1.0.0.127.in-addr.arpa/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone 1.168.192.in-addr.arpa/IN/my_resolver: loaded serial 1997022700
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone example/IN/my_resolver: loaded serial 1
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone localhost/IN/my_resolver: loaded serial 0
Feb 12 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: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: zone localhost.localdomain/IN/my_resolver: loaded serial 0
Feb 12 21:53:23 golinuxhub-client.example named[5330]: all zones loaded
Feb 12 21:53:23 golinuxhub-client.example named[5330]: running
```bash
Убедитесь, что resolv.conf содержит ваш IP-адрес, чтобы он мог работать в качестве DNS-сервера.
```bash
# cat /etc/resolv.conf
search example
nameserver 192.168.1.7
```bash
Давайте проверим наш DNS-сервер для обратной зоны, используя 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
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40331
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
5.1.168.192.in-addr.arpa. 86400 IN      PTR     golinuxhub-server.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:13:17 IST 2018
;; MSG SIZE  rcvd: 122

Таны харж байгаагаар бид хүсэлтэд (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

Бид шууд бүсийг ижил аргаар шалгаж болно.

[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

RHEL 7-д байгаа тул энэ нийтлэл бага зэрэг хоцрогдсон тул та холбох тохиргооны файлуудыг chroot руу хуулах шаардлагагүй болсон. Алхам алхмаар зааварчилгаа: Bind chroot (CentOS/RHEL 7) ашиглан DNS серверийг тохируулах.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх