Pas vraiment de la domotique, mais quand on a un PI ou autre tournant 24/7 pour des fonctionnalités domotique, autant faire en sorte qu'il ne s'ennuie pas.
Les enfants ayant désormais un ordi dans la chambre, histoire que les URL de sites cul/violents qui s'échangent dans les cours de récré (comme autrefois les magazines Lui/Playboy de papa) n'aient pas cours chez soi, il est possible de mettre en place un filtrage DNS pour leurs machines.
C'est pas une garantie à 100% (il resterait possible de résoudre les noms à la main et taper des IP dans le navigateur par exemple) mais pour les plus jeunes ça fait l'affaire.
Pour ce faire, il faut installer dnsmasq (et dnsutils, pour avoir la commande "dig" qui aide au debug pour lancer des résolutions de nom à la main):
Code : Tout sélectionner
sudo apt-get install dnsmasq dnsutilsCode : Tout sélectionner
log-queries
log-facility=/tmp/dnsmasq.log
conf-file=/etc/dnsmasq.more.confCar le fournisseur des blacklists est shallalist.de qui m'a paru fournir une liste de qualité correcte et surtout pas encombrée de vieux domaines n'ayant plus cours (comme une autre liste dispo en ligne issue de l'université de Toulouse), qui vont rendre les premières résolutions (avant mise en cache par dnsmasq) longues. Je ne récupère pour ma part que les listes cul/violence mais il y en a d'autres (voir au besoin l'archive chargée par le script et el modifier en conséquence pour les extraires/intégrer, c'est trivial).
Code : Tout sélectionner
#!/bin/bash
#PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
LOGFILE=$(basename $0)
LOGFILE="/tmp/${LOGFILE=}.log"
LOGSIZE=0
LOGMAXB=4096
function err
{
echo "ERREUR : $1" >> ${LOGFILE}
exit 1
}
function prt
{
echo "$1" >> ${LOGFILE}
}
echo "Will log to ${LOGFILE}"
mkdir -p blacklist
cd blacklist
[ -f ${LOGFILE} ] && LOGSIZE=`wc -c ${LOGFILE}`
LOGSIZE=${LOGSIZE%% *}
prt "${LOGFILE} size = ${LOGSIZE}."
[ ${LOGSIZE} > ${LOGMAXB} ] && truncate -s 0 ${LOGFILE} && prt "${LOGFILE} truncated !"
DATE=$(date)
prt "** DEBUT : ${DATE} **"
prt "Chargement des blacklists..."
wget -N -q http://www.shallalist.de/Downloads/shallalist.tar.gz
[ $? -ne 0 ] && err "FTP shallalist.tar.gz"
wget -N -q http://www.shallalist.de/Downloads/shallalist.tar.gz.md5
[ $? -ne 0 ] && err "FTP shallalist.tar.gz.md5"
DATE=$(date)
prt "Blacklists+md5sum chargées / ${DATE}"
md5sum -c shallalist.tar.gz.md5 >> ${LOGFILE}
[ $? -ne 0 ] && err "md5sum check" || prt "md5sum OK !"
tar -xvf shallalist.tar.gz BL/violence/domains BL/porn/domains >> ${LOGFILE}
[ $? -ne 0 ] && err "Extraction required subpathes from shallalist.tar.gz"
mv BL/porn/domains adult_domains >> ${LOGFILE}
[ $? -ne 0 ] && err "No domains in porn"
mv BL/violence/domains violence_domains >> ${LOGFILE}
[ $? -ne 0 ] && err "No domains in violence"
\rm -rf BL >> ${LOGFILE}
prt "Formate adult_domains et crée dnsmasq.filter.conf..."
sed -e 's/.*/address=\/&\/127.0.0.1/' adult_domains > dnsmasq.filter.conf
[ $? -ne 0 ] && err "sed returned $?" || prt "OK !"
prt "Formate violence_domains et l'ajoute à dnsmasq.filter.conf..."
sed -e 's/.*/address=\/&\/127.0.0.1/' violence_domains >> dnsmasq.filter.conf
[ $? -ne 0 ] && err "sed returned $?" || prt "OK !"
prt "Efface les fichiers temporaires..."
\rm -rf adult_domains violence_domains >> ${LOGFILE}
prt "Remplace /etc/dnsmasq.more.conf et relance dnsmasq"
cp dnsmasq.filter.conf /etc/dnsmasq.more.conf >> ${LOGFILE}
service dnsmasq restart >> ${LOGFILE}
DATE=$(date)
prt "** FINI : ${DATE} **"
exit $?
Code : Tout sélectionner
# m h dom mon dow command
0 0 * * 1 truncate -s 0 /tmp/dnsmasq.log
0 8 * * 3,5 /root/update_blacklist_shalla.sh
Pour tester sur le PI:
Code : Tout sélectionner
# dig google.fr
; <<>> DiG 9.10.3-P4-Raspbian <<>> google.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61122
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1460
;; QUESTION SECTION:
;google.fr. IN A
;; ANSWER SECTION:
google.fr. 228 IN A 216.58.209.227
;; Query time: 449 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jan 19 14:35:29 CET 2018
;; MSG SIZE rcvd: 54
Si on essaye un domaine interdit:
Code : Tout sélectionner
# dig tukif.com
; <<>> DiG 9.10.3-P4-Raspbian <<>> tukif.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43505
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;tukif.com. IN A
;; ANSWER SECTION:
tukif.com. 0 IN A 127.0.0.1
;; Query time: 164 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jan 19 14:37:42 CET 2018
;; MSG SIZE rcvd: 43
A noter que la 1ère résolution (ensuite c'est en cache) peut être un peu longue, genre 1 ou 2s... Il doit y avoir quand même 800k noms de domaines filtrés (la liste université Toulouse c'était le double). Mais ce n'est que le 1er coup et si on se limite aux comptes/machines des enfants c'est acceptable pour leur usage. En cas de souci, dnsmasq permet de configurer le nb d'entrée pouvant être mises en cache et pour quelle durée...
Quand tout fonctionne sur le PI, il faut aller sur les comptes/ordis des enfants (paramètres réseau ; attention, c'est en général dépendant de l'interface et il peut y avoir à faire la config en wifi ET filaire) afin de mettre en DNS l'adresse IP du raspberry (a la place de celle mise à la main ou fournie par DHCP par la box, qui sera souvent 192.168.1.1), qui devra au passage être mise en IP fixe (ou se voir allouer toujours la même adresse via une config DHCP statique par la box).
A noter que pour ma part, le tmpfs utilisé par /tmp est configuré ainsi dans /etc/fstab:
Code : Tout sélectionner
tmpfs /tmp tmpfs defaults,noatime,nosuid,size=50m 0 0