Page 1 sur 2

Filtrage DNS enfants

Publié : 19 janv. 2018, 14:45
par lost
Hello,

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 dnsutils
Et le configurer pour n'offrir qu'un relais DNS (il est capable de plein de chose inutiles ici: DHCP, TFTP, PXE...), y'a plein de tutos en ligne mais niveau fichier /etc/dnsmasq.conf ca devrait donner d'ajouter ces lignes afin de configurer le log des résolutions DNS (pour voir ou nos chères têtes blondes se balladent) et un fichier de config qui va contenir les domaines DNS à filtrer:

Code : Tout sélectionner

log-queries
log-facility=/tmp/dnsmasq.log
conf-file=/etc/dnsmasq.more.conf
Pour le chargement/formatage au format dnsmasq du fichier de filtrage (dnsmasq.more.conf), ce script à mettre sous la racine du compte root, nommé pour ma part update_blacklist_shalla.sh

Car 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 $?
Ensuite, reste a rendre cela executable (chmod +x update_blacklist_shalla.sh) lancer cela à la main (de /root ; ./update_blacklist_shalla.sh) une première fois pour tester (jeter un oeuil au fichier de log /tmp/pdate_blacklist_shalla.sh.log), puis ensuite via un cron sous root: Editer sa table via crontab -e et ajouter les lignes suivantes:

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
Cela va rincer le fichier de log des résolutions DNS des enfants tous les lundi minuit histoire de pas saturer le tmp et lancer le script d'upgrade à 8h00 du matin les mercredi et vendredi matin (3 et 5ème jour de la semaine).

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
On récupère la ligne "google.fr. 228 IN A 216.58.209.227" montrant que google.fr est bien résolu (vers l'adresse externe 216.58.209.227)

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
Là, tukif.com (attention, pas ouvrir cette page avec du monde, c'est du lourd... mais un des domaines circulant dans les cours de récré de collège, pour info et motivation sur la nécessité de ce petit tuto) se retrouve résolu en 127.0.0.1 = localhost, l'adresse externe n'est pas résolue et sur un navigateur, ce sera une page vide...

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
50MB, c'est sans doute plus que la config Raspbian. Y'a sans doute pas besoin d'autant juste pour le besoin de ce filtrage DNS (ce /tmp me sert pas mal pour d'autres choses, genre créer les archives de captures de caméras IP avant envoi mail etc... afin de limiter l'usage de la SD et ne pas la rinçer trop vite!) mais en cas de besoin c'est là que cela se règle (effectife après un reboot: "sudo shutdown -r now").

Re: Filtrage DNS enfants

Publié : 30 janv. 2018, 12:36
par Guigui
Hello !

Merci pour le tutoriel !

Pour info NORTON met a disposition gratuitement des DNS filtrants à l'adresse suivante:

https://support.norton.com/sp/fr/fr/hom ... file_fr_fr


Enfin il existe aussi la solution pihole (https://pi-hole.net/) qui peux fonctionner sur le même PI que votre domoticz.

A+

Re: Filtrage DNS enfants

Publié : 30 janv. 2018, 13:33
par thegaz59
Bonjour,

J'utilise également Pi-Hole + domoticz sur le même rpi sans problème.
J'utilise les blacklist de l'universite de Toulouse : https://dsi.ut-capitole.fr/blacklists/

Il existe un plugin pour remonter les infos de Pi-Hole vers domo : https://github.com/Xorfor/Domoticz-Pi-hole-Plugin
Gaël

Re: Filtrage DNS enfants

Publié : 30 janv. 2018, 19:45
par Jeff
Merci pour ce tuto. Les enfants grandissent et il va falloir penser à ces choses, le grand rentre au collège en septembre :?

Re: Filtrage DNS enfants

Publié : 30 janv. 2018, 23:01
par vil1driver
Opendns (version familiale)

https://www.opendns.com/setupguide/#familyshield

Couplé à pi-hole c'est pas mal ;)

Re: Filtrage DNS enfants

Publié : 31 janv. 2018, 07:21
par lost
vil1driver a écrit :Opendns (version familiale)
Couplé à pi-hole c'est pas mal ;)
Bin a priori oui... mais en fait non: OpenDNS ne filtrait pas tous les domaines circulant dans les cours de collège dont j'ai eu écho. C'était par contre dans les listes université de Toulouse et Shallalist.

La première comportait néanmoins plus du double d'entrées au rayon cul que la seconde. En testant qq domaines au hasard qui étaient dans l'une et pas l'autre, je tombais sur des non réponses ou des domaines à (re-)vendre. Je pense donc que Toulouse ne fait pas beaucoup de ménage.

Et uns si grosse liste sur PI+Dnsmasq, c'était des temps de 1ère résolution (après mise en cache c'est immédiat) pouvant passer au dessus des 3 voir 4s. Avec shallalist on est à le seconde, voir un peu au dessus. C'est certes ralenti mais acceptable, surtout que ce n'est que le 1er coup et qu'on peut configurer la taille du cache.

Pi-Hole, je ne connaissais pas. Le forum anglophone m'a appris son existence. Maintenant, un truc touchant à un élément hyper sensible comme le DNS pas dans les dépots et installé via le réseau d'un script "pipé" dans un shell, déjà pour Domoticz je n'aime pas trop alors quand je peux éviter je le fais.

Ca ne concerne certes que les machines des enfants, qui ne vont pas faire de commerce en ligne ou aller voir un compte en banque, mais je préfère rester sur un truc bien maintenu et hyper rependu/testé et jusqu'à preuve du contraire sans failles: Il y a de fortes chances que sur toutes nos box/routeurs ce soit d'ailleurs dnsmasq qui fasse office de relais DNS. Ils ont une réelle culture de la sécurité, allez donc voir les commentaires/corrections pour les contributions.

Par ailleurs, pi-hole semble plus destiné à filtrer pub etc... Pour cela, je fais pour ma part directement sur chaque machine en utilisant cette liste (depuis 10 ans): Ca s'arrête direct au fichier hosts (ancêtre du DNS) sans même aller au serveur DNS.
http://winhelp2002.mvps.org/hosts.htm

Les instructions pour win sont données. Sous Linux, il faut ajouter la liste à son /etc/hosts existant après avoir mis en commentaire la partie definition localhost ipv4/v6 en début de fichier pour conserver la définition/nom localhost d'origine.

C'est important car sudo utilise cette info et on perds potentiellement les droits d'admin, surtout sur une machine headless administrée en ssh ou le compte root est souvent bloqué (pareil, y compris en local, sur une ubuntu dont on n'a pas activé le compte root). Au pire on arrête la machine/extrait la SD (ou redémarre avec une image live sur un PC pour pouvoir monter ensuite la parttition racine) et édite le /etc/hosts... mais autant s'éviter les ennuis!

Re: Filtrage DNS enfants

Publié : 31 janv. 2018, 08:56
par vil1driver
pi-hole, on en parlait ici également
viewtopic.php?f=9&t=4736

le côté 'pipé' est un choix que tu peux ne pas faire et simplement cloner github.. C'est d'ailleurs ce qu'eux même conseillent.
(Idem pour domoticz)

Pi-hole de ce que j'ai vu est juste une solution qui facilite l'usage de dnsmask et dhcpd tout en intégrant quelques listes, centrée pub effectivement.
Après je ne suis pas expert..

Je vai tester Shallalist en plus,

Je connais le fichier host, je m'en sert par exemple pour contourner l'absence de loopback de ma box..
Mais n'aurais pas pensé m'en servir de premier filtrage, je note ;)

Merci

Re: Filtrage DNS enfants

Publié : 31 janv. 2018, 09:21
par lost
vil1driver a écrit : Pi-hole de ce que j'ai vu est juste une solution qui facilite l'usage de dnsmask et dhcpd tout en intégrant quelques listes, centrée pub effectivement.
(...)
Je connais le fichier host, je m'en sert par exemple pour contourner l'absence de loopback de ma box..
Mais n'aurais pas pensé m'en servir de premier filtrage, je note ;)
Normalement, dnsmasq en fait plus que son nom ne l'indique: Il sait aussi faire du dhcp sans avoir besoin de dhcpd ce qui lui vaut d'ailleurs (combiné à sa légèreté) d'être bcp utilisé dans les box et le logiciel embarqué en général. Il sait même faire serveur tftp/pxe au besoin. Un vrai couteau suisse!

Le fichier hosts est en effet utilisable pour filtrer. L'avoir sur la machine permet aussi potentiellement de mettre facilement un script inversant des liens symboliques vers hosts filtrant ou non, pour désactiver le truc si on a besoin d’accéder à un site qui refuse l'accès s'il détecte un bloquer de pub.

L'autre intérêt est que cela vaut pour le système entier et non seulement un navigateur, comme quand on utilise une extension. Ces extensions n'étant par ailleurs pas neutre car elles font de plus en plus commerce du "laisser passer".

Re: Filtrage DNS enfants

Publié : 02 févr. 2018, 11:23
par vil1driver
Merci pour ces explications...

toujours en cours de teste des listes shalla, selon tes conseils cul et violence (800,000 entrées) pour le moment.

petit script bien pratique pour les ajouter à pi-hole trouvé ici
https://github.com/mglinux/IPF_Tools

si ça intéresse quelqu'un, je me suis fais une variante pour les listes de Toulouse
(à présent 2600000 domaines blacklistés ici, le surf n'en souffre pas)

Ps: pi-hole supprime les doublons s'il y a (en l’occurrence environ 300000)

Re: Filtrage DNS enfants

Publié : 04 févr. 2018, 09:14
par vil1driver
Je parviens à trouver des sites qui passent les mailles du filet et qu'opendns bloquent bien..

L'un rattrapant donc les manques de l'autre et vis versa

Sites que je me suis empressé de soumettre à shallalist.de
Ils devraient donc être ajouté prochainement.

Mon conseil, ne pas hésiter à combiner les solutions de filtrage ;)

Encore merci pour le tuto.