Supprimer les publicités avec pfBlockerNG

This article have not been yet translated into your language, if it is important for you, let us know and we will translate it.

Pour supprimer les publicité de manière globale, autant le faire à la source, via le pare-feu du réseau. Ça tombe bien, pfSense dispose d'un package qui le fait pour nous et on va vous montrer comment.

Chez les arsouyes, comme tout le monde, on n'apprécie pas les publicités. Elles gaspillent notre bande passante, polluent l'espace visuel, auditif et la planète et nous interrompent carrément sans avertissement. Au moins, les crypto-mineurs ne font que grappiller silencieusement le processeur.

Bru-nO @ pixabay
Bru-nO @ pixabay

Et comme ces parasites sont partout, on a décidé de les filtrer à la source: via notre pare-feu. Comme ça, quel que soit l'équipement et quel que soit l'application, on pourra zoner tranquillement.

Pour vous permettre de vous faire une idée de la configuration réseau, on va partir sur une configuration classique. En vrai, on utilise quelques VLANs, des connexions WIFI et autres joyeusetés possible avec des commutateurs administrables, mais comme ça ne change rien à la configuration qui suivra, autant rester simple.

Pour mettre en place le filtrage, il vous faut donc :

Réseau simplifié, Internet et réseau local uniquement
Réseau simplifié, Internet et réseau local uniquement

De base, on pourrait être tenté d'utiliser le proxy HTTP Squid en mode transparent. En interceptant le trafic à la volée, il pourrait alors filtrer le contenu autorisé ou non. Le problème c'est que ce n'est pas compatible avec les connexions TLS (à moins d'insérer notre propre PKI dans toutes les applications).

On a donc préféré descendre d'une couche et filtrer directement les requêtes DNS via pfBlockerNG. En résolvant les domaines des publicités vers une adresse IP inexistante, tout le trafic correspondant sera évité.

pfBlocker-ng nécessite un package spécifique à installer et configurer. En cas de haute disponibilité entre deux pare-feu, quelques réglages supplémentaires sont à faire.

Configuration

Pour la configuration, on part du principe que votre pfSense est installé, configuré et que votre réseau fonctionne. Chaque fois que vous modifiez des paramètres, n'oubliez pas de cliquer sur save (ça paraît évident, mais s'est révélé utile).

Le DNS Resolver

Il faut ensuite activer le DNS Resolver. On le trouve dans le menu services / DNS Resolver. La plupart des champs sont laissés tels quels. Voici les valeurs qu'on a choisi chez nous:

Configuration du DNS Resolver
Configuration du DNS Resolver

Il faut aussi s'assurer que vos DHCP utilisent l'IP du pare-feu comme serveur DNS. Sur pfSense, rien de plus simple, il suffit de s'assurer que le champ DNS servers soit laissé vide.

Sans être nécessaire pour le blocage des publicité, d'autres réglages peuvent vous intéresser :

Forcer la résolution
Forcer la résolution
Vérifier les réponses
Vérifier les réponses

Installation du package

Il faut d'abord installer le package pfBlockerNG. Pour ça, c'est via le menu System / Package Manager. On clique sur Available Packages et on entre le nom du package dans la barre de recherche. Il suffit alors de cliquer sur le bouton +Install, de confirmer et d'attendre.

Installation du package
Installation du package

Avec notre version de pfSense, c'est la version 2.1.4_13 du package que nous avons installé. Suivant les versions, les menus sont parfois différents et nécessiteront quelques adaptations.

DNSBL

On peut maintenant configurer les listes DNS. Cette fois, c'est via le menu Firewall / pfBlockerNG / DNSBL.

Dans la configuration de base, seuls les trois champs suivants nécessite notre attention:

Configuration de DNSBL
Configuration de DNSBL

Sans oublier la section suivante sur les règles du pare-feu pour lui dire de bloquer ces domaines:

Configuration des actions du pare-feu (bloquer)
Configuration des actions du pare-feu (bloquer)

DNSBL Easy List

On passe ensuite à la récupération des listes de domaines à bloquer en commençant par celles pré-configurées. On commence par le choix des listes :

Choix des listes
Choix des listes

Puis la configuration de leur contenu et leur mise à jour :

Contenu et mise à jour des listes
Contenu et mise à jour des listes

DNSBL Feeds

Si on veut, on peut toujours ajouter d'autres listes, pour être encore plus complet. Voici quelques liens que nous avons trouvés utiles.

http://someonewhocares.org/hosts/hosts
https://adaway.org/hosts.txt
http://sysctl.org/cameleon/hosts

Garder le champ state à on et l'action à unbound pour pouvoir bloquer. Pour la fréquence de mise à jour, on a choisi toutes les deux heures.

Le champ Header/Label à droite des adresses (champ source) permet d’ajouter une petite description à vos listes pour vous rappeler à quoi elles servent. N’y mettez que des lettres, si vous mettez des points, ça ne passera pas…

Listes additionnelles
Listes additionnelles

Et tant que nous y étions, on a aussi rajouté quelques listes de domaines malicieux :

https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt
https://isc.sans.edu/feeds/suspiciousdomains_Low.txt
https://mirror1.malwaredomains.com/files/immortal_domains.txt

On se retrouve alors avec deux listes configurées :

Nos deux listes de blocage personnalisées
Nos deux listes de blocage personnalisées

Pour ceux qui voudraient en avoir toujours plus, filterlists.com proposes tout un tas de listes de domaines et d’IP que vous pourriez bloquer. Comme ces listes ne sont pas toujours compatibles, vous pouvez filtrer le champ Software pour ne garder que les listes compatibles avec pfBlockerNG.

Filtrer les listes par logiciel et ne garder que pfBlockerNG
Filtrer les listes par logiciel et ne garder que pfBlockerNG

pfBlockerNG

Suivant vos versions, il se peut que pfBlockerNG ne soit pas activé par défaut. Dans ce cas, ça se voit relativement vite : les résolutions DNS des domaines de publicité marchent, et le processus de mise à jours ne se lance pas.

Pour activer PfBlocker-NG, rien de plus simple : via le menu Firewall / pfBlockerNG (onglet General ouvert par défaut), il faut cocher la case Enable pfBlockerNG.

Activer PfBlocker-NG
Activer PfBlocker-NG

Vérifier le tout

Plutôt qu'attendre la prochaine exécution automatique, on va s'assurer que la configuration est valide et bien en place. C'est via le menu Firewall / pfBlockerNG / Update. Pour l'option Force, on choisi Reload, et dans la nouvelle option de Reload, on choisi All. On clique sur le bouton Run.

Mise à jour manuelle
Mise à jour manuelle

Et pour vérifier côté client, rien de mieux que nslookup.

tbowan@io:~$ nslookup analytics.yahoo.com
Server:         192.168.1.1
Address:        192.168.1.1#53

Name:   analytics.yahoo.com
Address: 10.10.10.1

Haute Disponibilité

Jusqu’ici, tout va bien sur votre serveur mais si vous en avez plusieurs, configurés en haute disponibilité, il y a quelques petites choses à faire en plus…

En configurant la haute disponibilité, vous pourriez croire que tout tombera en marche tout seul, mais non. La synchronisation effectuée par la haute disponibilité ne concernent pas les packages comme pfBlockerNG qui doivent être réglés individuellement lorsqu’ils disposent des options qui vont bien.

Sur les Esclaves

Vous devez installer le paquet pfBlockerNG manuellement sur chaque serveur. Une fois installé, n’y touchez pas, la synchronisation se fera par le maître.

Sur le Maître

Ne cherchez pas l’option pfBlockerNG (ou équivalente) dans la configuration High Availability, ça n’est pas par là que ça se passe…

Pour activer la synchronisation, il faut aller dans le menu Firewall / pfBlockerNG / Sync (dernier onglet) et configurer un seul champ :

Activer la synchronisation
Activer la synchronisation

Bon à savoir

Même si la synchronisation met à jours la configuration, elle ne se charge pas de la mise à jours de la base qui, elle, se fait de manière autonome sur chaque machine via une tâche planifier.

Si vous avez besoin de tester votre configuration et de confronter les résultats entre les membres de votre cluster, je vous conseille d’effectuer une mise à jours manuelle de la base avant pour éviter les surprises.

Et ensuite ?

Avec ce système, les zones de publicités sont maintenant vides et les applications qui contiennent des annonces sont enfin utilisables. On peut laisser un enfant avec une tablette sans s'inquiéter des publicités qu'il rencontrera et sur lesquelles il pourrait cliquer.