BIND: Chroot DNS, Compilazione e installazione | SolutionCAFE IT

BIND: Chroot DNS, Compilazione e installazione

BIND: Chroot DNS, Compilazione e installazione

1920 1280 Nicola Montemurro

Introduzione

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, presento una panoramica dettagliata delle fasi necessarie per la compilazione di BIND, rivolta a professionisti del settore, ma anche a coloro che desiderano sperimentare.

Non entro, volutamente, nel merito del sistema operativo; 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).

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

Scaricare il Codice Sorgente di BIND

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

make test

Installazione

make install

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 di avvio del servizio (named)

Script per l’avvio del servizio “named”, e’ sufficiente creare un file in /etc/init.d/named, copiare, incollare e salvare.

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

In un prossimo articolo, descriverò come realizzare una configurazione a “view” (vista), in modo da mostrare come su possa ottenere una risposta DNS diversa in funzione dell’ IP sorgente che effettua la richiesta.

Documentazione

Per informazione in merito alla documentazione, potete consultare BIND 9.19 Administrator Reference Manual

    Preferenze Privacy

    Quando visiti il nostro sito web, possono essere memorizzate alcune informazioni, di servizi specifici, tramite il tuo browser, di solito sotto forma di cookie. Qui puoi modificare le tue preferenze sulla privacy. Il blocco di alcuni cookie può influire sulla tua esperienza sul nostro sito Web e sui servizi che offriamo.

    Click to enable/disable Google Analytics tracking code.
    Click to enable/disable Google Fonts.
    Click to enable/disable Google Maps.
    Click to enable/disable video embeds.
    Il nostro sito web utilizza cookie, principalmente di terze parti. Personalizza le preferenze sulla privacy e/o acconsenti all'utilizzo dei cookie.