Skip to main content

PiHole DNS et Ad block

Passionné de CyberSécurité la protection des données fais parti des choses qui ont une certaine importance pour moi et qui sont malheureusement trop souvent oublié par le commun des mortels.

Afin de reprendre un petit contrôle sur les informations qui peuvent sortir de chez moi, j'ai décidé de déployer un PiHole dans mon HomeLab. Ce serveur permet de remplacer le serveur DNS. Pour 99% des gens c'est votre box internet qui joue ce rôle.

PiHole permet de réaliser du filtrage sur les noms de domaines (FQDN) qui sont accessibles depuis vos équipements en bloquants les domaines indésirables.

Installation

Terraform

Mon fichier de variable est classique, pas besoin d'augmenter les ressources de la VM :

terraform.tfvars
vm_name        = "PiHole"
vm_target_node = "proxmox"
vm_vmid = 102
vm_desc = "PiHole"
vm_onboot = true
vm_startup = "1"
vm_vm_state = "running"
vm_agent = 1
vm_clone = "Template-Ubuntu-24.04"
vm_memory = 2048
vm_cores = 2
vm_size = "10G"
vm_storage = "SSD"

Ansible

Le rôle ansible permet d'installer PiHole. Le template permet de déposer sur le serveur un fichier de reconfiguration qui permet ensuite de lancer l'installation de manière silencieuse. Mon template est présent ci-dessous. Vous pouvez reprendre le même ou créer le votre. Pour cela je vous conseil de lancer le script d'installation de PiHole manuellement puis de récupérer le fichier qui aura été généré.

roles/PiHole/tasks/main.yml
---
# tasks file for PiHole
- name: Download PiHole script
get_url:
url: https://install.pi-hole.net
dest: /opt/basic-install.sh
mode: 744

- name: Create PiHole Directory
file:
path: /etc/pihole
state: directory

- name: Copy PiHole initial variables
template:
src: PiHole.setupVars.j2
dest: /etc/pihole/setupVars.conf

- name: Run PiHole script
shell: /opt/basic-install.sh --unattended

- name: Change PiHole password
command: "pihole -a -p {{ admin_password }}"

- name: Change PiHole FQDN
lineinfile:
path: /etc/lighttpd/conf-enabled/15-pihole-admin.conf
search_string: "$HTTP[\"host\"] == \"pi.hole\" {"
line: "$HTTP[\"host\"] == \"{{ fqdn }}\" {"

- name: Restart lighttpd
service:
name: lighttpd
state: restarted
roles/PiHole/templates/pihole.setupVars.j2
PIHOLE_INTERFACE=ens18
PIHOLE_DNS_1=1.1.1.1
PIHOLE_DNS_2=1.0.0.1
QUERY_LOGGING=true
INSTALL_WEB_SERVER=true
INSTALL_WEB_INTERFACE=true
LIGHTTPD_ENABLED=true
CACHE_SIZE=10000
DNS_FQDN_REQUIRED=true
DNS_BOGUS_PRIV=true
DNSMASQ_LISTENING=local
BLOCKING_ENABLED=true

Une fois déployé, le service est disponible sur le port 80

Configuration

Une fois connecté, l'interface ressemble à ça :

PiHole Dashboard

Configuration DNS

Comme précisé plus haut, PiHole fait aussi de serveur DNS. On peut donc ajouter des entrés DNS local via l'onglet Local DNS.

PiHole Local DNS