Supprimer les publicités avec pfBlockerNG

Divulgâchage : 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. Il faudra installer un package spécifique et le configurer. En cas de haute disponibilité, quelques réglages supplémentaires sont à faire.

Chez les arsouyes, comme chez tout le monde en fait, on n’apprécie pas les publicités. Elles veulent nous manipuler, gaspillent notre bande passante, polluent l’espace visuel, auditif et même la planète sans compter toutes les fois où elles nous interrompent carrément sans avertissement.

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

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 partout mais ça heurte notre respect à la confidentialité de nos paquets réseaux légitimes).

On a donc préféré descendre d’une couche et filtrer directement les requêtes DNS via pfBlockerNG. Chaque fois qu’une requête tentera de joindre un serveur de publicité, le pare-feu fournira une adresse IP bidon ; tout le trafic à destination sera donc perdu dans les limbes et aucune publicité ne pourra s’afficher 🎉.

Précision : ça marche avec toutes les applications qui utilisent des régies publicitaires externes sur des serveurs spécifiques (la plupart des sites webs ainsi que la plupart des applications pour téléphones). Mais ça ne marchera pas lorsque la publicité utilisent le même serveur que le contenu légitime (i.e. youtube) ; pour ces cas-là il vous faudra ajouter un module au navigateur (i.e. uBlock Origin) ou des utiliser des clones sans pub (i.e. NewPipe).

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 cette précision s’est révélé utile).

Le résolveur DNS

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

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 DNS peuvent vous intéresser :

Forcer la résolution
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

Avec notre version de pfSense, c’est la version 2.1.4_13 du package que nous avons installé (et une 2.1.4.26 sur nos pfSense en version 2.6.0). Suivant les versions, les menus sont parfois différents et nécessiteront quelques adaptations mais l’idée générale reste la même.

DNSBL

On peut maintenant configurer les listes DNS. Cette fois, c’est via le menu Firewall / pfBlockerNG puis l’onglet DNSBL. Dans la configuration de base, seuls les trois champs suivants nécessite notre attention:

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)

DNSBL Easy List

On passe ensuite à la récupération des listes de domaines à bloquer en commençant par celles pré-configurées. Même endroit mais on change d’onglet pour DNSBL EasyList. On commence par le choix des listes :

Choix des listes

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

Contenu et mise à jour des listes

DNSBL Feeds

Si on veut, on peut toujours ajouter d’autres listes, pour être encore plus complet. Cette fois, c’est l’onglet DNSBL Feeds. 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 dans la capture, en vrai une fois par jour.

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

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

https://isc.sans.edu/feeds/suspiciousdomains_Low.txt

On se retrouve alors avec deux listes configuré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

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

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 puis onglet 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

Et pour vérifier côté client, rien de mieux que nslookup avec un domaine de publicité connu.

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 puis onglet Sync (dernier onglet) et configurer un seul champ :

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 planifiée.

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.