Procédure pas à pas pour configurer un serveur DNS BIND dans un environnement chroot pour Red Hat (RHEL / CentOS) 7

Une traduction de l'article a été préparée pour les étudiants du cours Linux Security . Est-il intéressant de se développer dans cette direction? Regardez l'enregistrement de la diffusion de la master class par Ivan Piskunov «La sécurité sous Linux par rapport à Windows et MacOS»



Dans cet article, je vais décrire les étapes de configuration d'un serveur DNS sur RHEL 7 ou CentOS 7. Pour la démonstration, j'ai utilisé Red Hat Enterprise Linux 7.4. Notre objectif est de créer un enregistrement A et un enregistrement PTR pour les zones de recherche directe et inverse, respectivement.


Installez d'abord les packages rpm nécessaires pour le serveur DNS.


REMARQUE: Pour RHEL, vous devez avoir un abonnement RHN actif ou vous pouvez configurer un référentiel local hors ligne avec lequel le gestionnaire de packages yum peut installer les packages rpm et les dépendances nécessaires.


# yum install bind bind-chroot caching-nameserver 

Mes paramètres:


 # 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 

Puisque nous utiliserons chroot, nous devons désactiver le service.


 # systemctl stop named # systemctl disable named 

Copiez ensuite les fichiers nécessaires dans le répertoire chroot.
REMARQUE Utilisez l'argument -p de la commande cp pour conserver la propriété et la propriété.


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

Copiez ensuite les fichiers associés à la zone vers un nouvel emplacement.


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

Effacez le contenu de named.conf et collez ce qui suit.


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

Les informations relatives à la zone doivent être ajoutées à /var/named/chroot/etc/named.rfc1912.zones . Ajoutez les entrées ci-dessous. Le fichier example.zone est le fichier de recherche directe et example.rzone est le fichier de zone inverse.


REMARQUE IMPORTANTE: la zone de recherche inversée contient 1.168.192, car mon adresse IP est 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; }; }; 

Les fichiers associés aux zones se trouvent ici:


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

Ensuite, créez des fichiers pour les zones avant et arrière. Les noms de fichiers seront les mêmes que ci-dessus dans le fichier named.rfc1912.zones . Nous avons déjà quelques modèles par défaut que nous pouvons utiliser.


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

Comme vous pouvez le voir, les autorisations actuelles sur tous les fichiers et répertoires appartiennent à 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 

Modifiez les droits de tous les fichiers, en spécifiant root et le groupe nommé en tant que propriétaire de l'utilisateur.


 # chown root:named * 

Mais pour les données, le propriétaire doit être nommé: 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 

Ajoutez le contenu suivant au fichier de zone de transfert. Ici, nous créons un enregistrement A pour localhost (golinuxhub-client) et un autre pour le serveur (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 

Ensuite, ajoutez le contenu au fichier de zone inverse. Ici, nous créons un enregistrement PTR pour golinuxhub-client et pour 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. 

Avant de démarrer le service named-chroot , vérifiez la configuration du fichier de zone.


 [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 

Tout a l'air bien. Vérifiez maintenant le fichier de configuration à l'aide de la commande suivante.


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

Donc, tout est réussi.


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

NOTE IMPORTANTE: mon SELinux est en mode permissif


 # getenforce Permissive 

Tout semble bien, il est donc temps de commencer notre service de chroot nommé .


 [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 

Comme vous pouvez le voir, nous avons reçu une réponse positive (REPONSE) à notre demande (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 

De même, nous pouvons vérifier la zone directe.


 [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 

Cet article est un peu daté car RHEL 7 n'a plus besoin de copier les fichiers de configuration de liaison vers chroot. Didacticiel pas à pas: configurer le serveur DNS à l'aide du chroot de liaison (CentOS / RHEL 7) .

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


All Articles