L’uso di BIND in un ambiente chrooted è una pratica comune per migliorare la sicurezza del server DNS; la chroot (jail) isola il processo di BIND da altre parti del sistema operativo, limitando il suo accesso ai file di sistema e riducendo la superficie di attacco. Questo approccio è particolarmente utile in contesti in cui è necessario garantire che il server DNS operi in modo sicuro, minimizzando i rischi associati a vulnerabilità di sicurezza o configurazioni errate.
In un ambiente chrooted, il processo di BIND viene eseguito in una directory specifica, chiamata “root jail”, che contiene solo i file e le librerie necessari per il funzionamento del server DNS. Questo implica che dovranno essere configurati percorsi specifici per i file di configurazione, i dati e le librerie, assicurando al contempo che il sistema non venga compromesso in caso di exploit.
Perchè eseguire BIND in una jail chroot
L’idea alla base dell’esecuzione di BIND DNS in una jail chroot è quella di limitare la “quantità” di accesso che un individuo malintenzionato potrebbe ottenere sfruttando le eventuali vulnerabilità di BIND; è per lo stesso motivo che eseguiamo BIND come utente non privilegiato (named). Questo, in ogni caso, deve essere considerato come un supplemento alle normali precauzioni di sicurezza (esecuzione dell’ultima versione, controllo degli accessi, ecc.), non certo come un sostituto di esse.
I vari passaggi
Di seguito, saranno elencate in dettaglio le fasi necessarie alla compilazione di BIND.
Tutti i passaggi indicati di seguito, sono stati eseguiti con utente privilegiato (root), da terminale ssh, in ambiente Linux Almalinux 9.2 (base Red Hat Enterprise).
Installazione dei Prerequisiti
dnf update
dnf install gcc make libtool libxml2-devel openssl-devel
dnf install -y libmaxminddb-devel libuv-devel libnghttp2-devel libxml2-devel jemalloc-devel
Recupero il Codice Sorgente
wget https://downloads.isc.org/isc/bind9/9.18.30/bind-9.18.30.tar.xz
Estrazione
tar -xJvf bind-9.18.30.tar.xz
Configurazione
cd bind-9.18.30
configure --prefix=/usr/local/named --sysconfdir=/usr/local/named/etc --mandir=/usr/share/man --enable-largefile \ --with-openssl --with-maxminddb --enable-full-report --with-libxml2 --with-jemalloc
Compilazione
make -j8
Test del codice compilato
make test
Installazione
make install
Script per la preparazione della root jail e creazione dell’account utente (named)
# ---------------------------------------------------------------------------------- # - File Name : init-bind-jail.sh # - Author : NM # - Administrator : NM - Mobile: XXX # - Create : 18/01/2008 # - Last Update : 20/11/2008 # - Description : File per la configurazione jail DNS BIND # - Position : /usr/local/scripts # - Note : NON modificare senza AUTORIZZAZIONE dell'AMMINISTRATORE # ----------------------------------------------------------------------------------- #/bin/bash # Source function library. . /etc/rc.d/init.d/functions JAILDIR=/jail SERHOME=$JAILDIR/named SERUSER=named SERGROUP=named uexists() { return=`id $SERUSER &> /dev/null` } if ! uexists then uid=$(cat /etc/passwd | cut -f3 -d: | sort -un | awk 'BEGIN { min=5000; max=5100 } { if ($0<min) { uuid=min } else if ($0>=min && $0<=max) {uuid=$0 + 1} } END { print uuid }') gid=$(cat /etc/group | cut -f3 -d: | sort -un | awk 'BEGIN { min=5000; max=5100 } { if ($0<min) { uuid=min } else if ($0>=min && $0<=max) {uuid=$0 + 1} } END { print uuid }') groupadd -g $gid $SERGROUP useradd -d $SERHOME -m -c "Bind User" -g $SERGROUP -u $uid $SERUSER -s /sbin/nologin fi mkdir -p $SERHOME mkdir -p $SERHOME/etc $SERHOME/dev $SERHOME/var/log $SERHOME/var/run $SERHOME/usr/sbin mkdir -p $SERHOME/master $SERHOME/slave $SERHOME/reverse $SERHOME/var/stats $SERHOME/var/dump $SERHOME/var/log $SERHOME/usr/local mknod -m 0666 $SERHOME/dev/null c 1 3 mknod -m 0666 $SERHOME/dev/zero c 1 5 mknod -m 0666 $SERHOME/dev/random c 1 8 mknod -m 0666 $SERHOME/dev/urandom c 1 9 cp /etc/localtime $SERHOME/etc chown -R $SERUSER:$SERGROUP $SERHOME chown -R $SERUSER:$SERGROUP $SERHOME/master chown -R $SERUSER:$SERGROUP $SERHOME/slave chown -R $SERUSER:$SERGROUP $SERHOME/reverse chown -R $SERUSER:$SERGROUP $SERHOME/var/stats chown -R $SERUSER:$SERGROUP $SERHOME/var/dump
Script per l’avvio del servizio “named”.
# ---------------------------------------------------------------------------------- # - File Name : named # - Author : NM # - Administrator : NM - Mobile: XXX # - Create : 14/04/2006 # - Last Update : 20/01/2007 # - Description : File per lo start/stop named (bind) # - Position : /etc/init.d/ # - Note : NON modificare senza AUTORIZZAZIONE dell'AMMINISTRATORE # ----------------------------------------------------------------------------------- #!/bin/bash # # named This shell script takes care of starting and stopping # named (BIND DNS server). # # chkconfig: 345 55 45 # description: named (BIND) is a Domain Name Server (DNS) \ # that is used to resolve host names to IP addresses. # probe: true # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network JAILDIR=/jail [ -f /usr/local/named/sbin/named ] || exit 0 [ -f $JAILDIR/named/etc/named.conf ] || exit 0 setretvalue() { RET=$1 if [ -n "$RET" ] && [ "$RET" -eq 0 ] then echo_success else echo_failure fi } start() { # Start daemons. echo -n "Starting named: " if [ ! -f /var/lock/subsys/named ] then daemon /usr/local/named/sbin/named -u named -t $JAILDIR/named -c /etc/named.conf -n 2 RETVAL=$? [ $RETVAL -eq 0 ] && touch /var/lock/subsys/named else setretvalue 1 fi echo return $RETVAL } stop() { PID=`pidof named` # Stop daemons. echo -n "Shutting down named: " if [ -n "$PID" ] then kill -9 $PID RETVAL=$? [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/named fi setretvalue $RETVAL echo } case "$1" in start) start ;; stop) stop ;; status) status named RETVAL=$? ;; restart) stop start RETVAL=$? ;; reload) /usr/local/named/sbin/rndc reload RETVAL=$? ;; probe) /usr/local/named/sbin/rndc reload >/dev/null 2>&1 || echo start RETVAL=0 ;; *) echo "Usage: named {start|stop|status|restart|reload}" RETVAL=1 esac exit $RETVAL
chmod +x /etc/init.d/named
systemctl enable named
Considerazioni finali
Provando ad avviare il servizio, non verrà visualizzato nessun errore, ma il servizio, mancando la configurazione, non potrà avviarsi.
Documentazione
Per informazione in merito alla documentazione, potete consultare BIND 9.19 Administrator Reference Manual