Pour ma part, j’aime bien associer un service à un serveur pour des raisons de sécurité et de clareté dans un parc informatique. Il m’est arrivé de me connecter à un serveur DNS pour faire des modifications de zone et de m’aperçoit que ce serveur héberge aussi des pages visible du monde entier. Un hack du serveur HTTP et aurevoir le serveur DNS dans la foulée.
C’est vrai qu’il faut prendre en considération que les adresses IP se font rares de nos jours et que la virtualisation est d’actualité, et c’est là tout l’intérêt de cet article.
A partir d’une installation de base de FreeBSD, nous allons voir comment déployer un serveur virtuel (jail) qui servira de serveur DNS. On travaillera plutôt sur le côté virtualisation que gestion des adresses IP publiques qui pourrait être faite avec Packet Filter et du NAT.
La première chose à faire sur le serveur physique, sera de supprimer les services inutiles et de forcer l’écoute des démons réseaux sur l’adresse IP du serveur.
Partant d’une installation toute neuve, supprimer les services inutiles n’est pas nécessaire, on peut passer à la configuration des démons réseaux.
Commençons par voir ce qui tourne sur le serveur.
$ sockstat -4 -l USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS root sendmail 819 3 tcp4 127.0.0.1:25 *:* root sshd 809 4 tcp4 *:22 *:* root syslogd 578 7 udp4 *:514 *:*
On constate que les services SMTP, SSH et Syslog sont actifs. Il n’y a aucune utilité à voir tourner un serveur SMTP sur le serveur hôte.
On va donc le désactiver et forcer l’écoute des démons sshd et syslogd sur l’adresse IP.
Pour le serveur SSH, la modification doit être faite dans le fichier de configuration du serveur.
$ cat /etc/ssh/sshd_config [...] ListenAddress 192.168.1.1 [...]
Pour les deux autres démons, ça se passe dans le fichier de configuration du système.
$ cat /etc/rc.conf [...] # Désactiver sendmail sendmail_enable='NO' sendmail_submit_enable='NO' sendmail_outbound_enable='NO' sendmail_msp_queue_enable='NO' # Syslogd en mode sécurisé syslogd_flags='-ss' [...]
Redémarrons le serveur et vérifions le résultat.
$ sockstat -4 -l USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS root sshd 869 3 tcp4 192.168.1.1:22 *:*
Maintenant que notre serveur physique est prêt à héberger des jails, nous allons construire le système de base qui sera utilisé pour le déploiement.
Si vous avez déjà construit un système FreeBSD depuis les sources, les étapes restent identiques. Je pars du principe que nous avons les sources présentes dans le répertoire /usr/src du serveur.
$ cd /usrc/src $ make cleandir $ make cleanworld $ rm -Rf /usr/obj $ make buildworld
Notre système de base construit sans erreurs, passons à la création de notre première jail.
$ setenv JAIL /jails/dns $ mkdir -p $JAIL # Installation du système de base $ make installworld DESTDIR=$JAIL # Copie des fichiers de configuration $ cd etc/ $ make distribution DESTDIR=$JAIL
Et maintenant, la configuration de notre jail.
$ cat /etc/rc.conf [...] jail_enable="YES" jail_list="dns" jail_interface="re0" jail_set_hostname_allow="NO" jail_devfs_enable="YES" jail_devfs_ruleset="devfsrules_jail" jail_dns_rootdir="/jails/dns" jail_dns_hostname="dns.mondomaine.lan" jail_dns_ip="192.168.1.10" [...]
Démarrons notre futur serveur DNS et entrons à l’intérieur.
$ /etc/rc.d/jail start dns
Configuring jails:.
Starting jails: dns.mondomaine.lan.
$ jls
JID IP Address Hostname Path
1 192.168.1.10 dns.mondomaine.lan /jails/dns
$ jexec 1 /bin/csh
dns# uname -n
dns.mondomaine.lan
La configuration du jail reste identique à la configuration d’un serveur physique. Création des utilisateurs et des mots de passe, configuration des services réseaux, etc…
Reste un fichier qui peut s’avérer util pour certaines applications, le fichier /etc/fstab absent par défaut.
Un fichier vide suffit à moins d’avoir autorisé le mount depuis le serveur virtuel avec la directive jail_dns_mount_enable positionnée à YES dans le fichier rc.conf du serveur physique.
Le déploiement du serveur DNS n’étant pas prévu, il fera l’objet d’un prochain article.
Si vous avez des remarques ou juste pour dire un petit « merci », laissez un commentaire.