Supponiamo che nella vostra rete venga utulizzato Squid come proxy, sul quale è stata abilitata l'autenticazione NTLM. In questo modo, mediante Active Direcetory ed ai Domain Controller di casa Microsoft, sarà possibile fare in modo che, in base ai gruppi di appartenenza, i vari utenti della LAN possano visualizzare soltanto alcune tipologie di siti.
Però, occorre precisare che Squid, di per sè, non è in grado di gestire alcun tipo di content filtering, ma per fare ciò è necessario utilizzare alcuni add-on, quali DansGuardian o squidGuard.
Saranno proprio questi ultimi, mediante delle query ldap dirette al Domain Controller, a suddividere l'utenza in base ai siti che può visitare.
Nel caso in cui il primo Domain Controller di riferimento non sia più raggiungibile, si potrebbe operare direttamente sul file hosts, posizionato nella directory /etc, in modo da modificare il contenuto della entry relativa all'hostname del DC (ad esempio ldap.vostrodominio.org), associandolo all'indirizzo IP dell'altro Domain Controller.
Il seguente script serve proprio a mettere in pratica quanto appena detto:
#!/bin/bash
DC1=192.168.1.1
DC2=192.168.1.2
destinatario=<vostroindirizzo>@<vistrodominio.org>
logfile=/var/log/ping.log
count_1=0
count_2=0
tmp=/var/log/tmp.log
var=`cat $tmp`
while [ $count_1 -lt 2 ]
do
echo "Pinging DC1..."
if ping -c 1 $DC1
then
if grep -q "$DC2" "/etc/hosts"
then
/bin/sed -i 's/192.168.1.2/192.168.1.1/g' /etc/hosts
echo "0" > $tmp
exit 0
else
exit 0
fi
else
let count_1=count_1+1
if [ $count_1 -eq 1 ]
then
echo "$(date) Primary Domain Controller Unreachable, trying again..." >> $logfile
else
echo "$(date) Primary Domain Controller Unreachable, trying to switch over DC2..." >> $logfile
if [ "$var" = "0" ]
then
echo "$(date) Primary Domain Controller Unreachable, trying to switch over DC2." | mail -iv -s "Alert: DC1 unreachable" $destinatario;
echo "1" > $tmp
fi
fi
fi
done
if [ $count_1 -eq 2 ]
then
while [ $count_2 -lt 2 ]
do
echo "Pinging DC2..."
if ping -c 1 $DC2
then
/bin/sed -i 's/192.168.1.1/192.168.1.2/g' /etc/hosts
exit 0
else
let count_2=count_2+1
if [ $count_2 -eq 1 ]
then
echo "$(date) Secondary Domain Controller Unreachable, trying again..." >> $logfile
else
echo "$(date) Unable To Contact Any Domain Controller" >> $logfile
if [ "$var" = "1" ]
then
echo "$(date) Unable To Contact Any Domain Controller." | mail -iv -s "Alert: DC1 and DC2 unreachable" $destinatario;
echo "2" > $tmp
fi
fi
fi
done
fi
exit 0
Rendiamo eseguibile lo script appena creato:
nightfly@nightbox:~$ sudo chmod +x ping.sh
Creiamo infine una entry per crontab, schedulando l'esecuzione di tale script ogni minuto:
* * * * * root ping.sh > /dev/null 2>&1
Ovviamente, nel caso in cui abbiate bisogno di alcuni chiarimenti sul codice, non esitate a contattarmi.
A presto.