تجول لإعداد خادم BIND DNS في بيئة chroot لـ Red Hat (RHEL / CentOS) 7

تم إعداد ترجمة لهذه المادة لطلاب دورة Linux Security . هل هو مثير للاهتمام لتطوير في هذا الاتجاه؟ شاهد تسجيل بث الفصل الرئيسي من إعداد Ivan Piskunov "الأمان في نظام Linux مقارنةً بنظام Windows و MacOS"



في هذه المقالة ، سوف أصف خطوات إعداد خادم DNS على RHEL 7 أو CentOS 7. من أجل العرض التوضيحي ، استخدمت Red Hat Enterprise Linux 7.4. هدفنا هو إنشاء سجل A واحد وسجل PTR واحد لمناطق البحث الأمامية والخلفية ، على التوالي.


قم أولاً بتثبيت حزم rpm اللازمة لخادم DNS.


ملاحظة: بالنسبة إلى 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/ 

مسح محتويات named.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 هو ملف البحث الأمامي ، و example.rzone هو ملف المنطقة العكسية.


ملاحظة مهمة: تحتوي منطقة البحث العكسي على 1.168.192 ، لأن عنوان IP الخاص بي هو 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/ 

بعد ذلك ، قم بإنشاء ملفات للمناطق الأمامية والخلفية. ستكون أسماء الملفات هي نفسها كما هو مذكور أعلاه في ملف named.rfc1912.zones . لدينا بالفعل بعض القوالب الافتراضية التي يمكننا استخدامها.


 # 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 

أضف المحتوى التالي إلى ملف المنطقة الأمامية. هنا نقوم بإنشاء سجل A لـ localhost (golinuxhub-client) وسجل آخر للخادم (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 

بعد ذلك ، أضف المحتويات إلى ملف المنطقة العكسي. هنا نقوم بإنشاء سجل PTR لـ golinuxhub-client و 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. 

قبل أن نبدأ خدمة 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. خطوة بخطوة تعليمي: تكوين خادم DNS باستخدام ربط الجذر (CentOS / RHEL 7) .

Source: https://habr.com/ru/post/ar461281/


All Articles