Pi-hole vs AdGuard Home: Filtro DNS Network-Wide para PME
Neste artigo
1. Introdução
O tráfego DNS é o primeiro ponto de contacto de qualquer dispositivo com a Internet. Cada consulta DNS pode revelar padrões de navegação, expor dispositivos a domínios maliciosos ou carregar publicidade indesejada. Para uma pequena ou média empresa (PME), filtrar essas consultas ao nível da rede — em vez de depender de extensões de navegador em cada máquina — oferece proteção uniforme, redução de largura de banda e visibilidade sobre o tráfego.
Duas soluções código aberto dominam este espaço: Pi-hole e AdGuard Home. Ambas funcionam como servidores DNS locais que interceptam consultas e decidem, com base em listas de bloqueio, se permitem ou bloqueiam cada domínio. Nenhuma das duas requer instalação em dispositivos individuais — basta apontar o DHCP da rede para o servidor de filtragem.
Este artigo compara as duas plataformas com foco em cenários de PME: instalação via Docker, gestão de listas, integração com unbound para DNS recursivo e recomendações operacionais. O Pi-hole é tratado em maior detalhe por ser a solução mais adoptada em ambientes Linux auto-hospedado.
2. Pi-hole — Visão Geral
O Pi-hole é um sinkhole DNS (DNS sinkhole) desenvolvido em PHP e Bash, originalmente concebido para Raspberry Pi mas compatível com qualquer sistema Linux. O projecto é mantido no GitHub (repositório oficial) e distribuido sob a licença EUPL.
O Pi-hole actua como intermediário DNS entre os dispositivos da rede e os resolvedores a montante (Cloudflare, Google, Quad9, ou um resolvedor local como unbound). Quando um dispositivo consulta um domínio presente numa lista de bloqueio, o Pi-hole responde com um endereço IP nulo ou uma página de bloqueio, impedindo a ligação.
2.1 Funcionalidades-chave
- Interface web em PHP com painel de estatísticas em tempo real (consultas, bloqueios, clientes).
- Gestão de listas com suporte para múltiplas fontes externas em formato hosts ou AdBlock.
- Grupos de clientes — aplicar listas diferentes por dispositivo ou sub-rede.
- API REST para integração com sistemas de monitorização (Zabbix, Prometheus).
- FTL DNS — motor de resolução em C optimizado para alto débito.
2.2 Requisitos
- Sistema Linux (Debian, Ubuntu, Alpine, Fedora).
- Porta 53 UDP/TCP livre (DNS) e porta 80 TCP (interface web).
- Endereço IP estático no servidor.
- ~512 MB de RAM para redes até 100 dispositivos.
3. Instalação do Pi-hole via Docker
A forma mais limpa de implantar o Pi-hole numa PME é via Docker Compose. Isto garante isolamento, fácil actualização e reprodutibilidade. O repositório oficial mantém uma imagem Docker publicada no Docker Hub.
Criar o ficheiro docker-compose.yml no directório do projecto:
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
hostname: pihole
environment:
TZ: "Europe/Lisbon"
WEBPASSWORD: "alterar-esta-password"
DNS1: "1.1.1.1"
DNS2: "9.9.9.9"
volumes:
- ./etc-pihole:/etc/pihole
- ./etc-dnsmasq.d:/etc/dnsmasq.d
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80/tcp"
cap_add:
- NET_ADMIN
restart: unless-stopped
Iniciar o contentor:
docker compose up -d
ℹ Configuração de rede
Se o servidor já corre um resolvedor DNS local (systemd-resolved), a porta 53 entra em conflito. Desactivar o resolvedor local ou usar 127.0.0.1#5335 como a montante e configurar o Pi-hole para ouvir apenas no IP da LAN.
Aceder à interface web em http://<IP-servidor>/admin com a palavra-passe definida em WEBPASSWORD.
4. Configurar Listas e Grupos
A força do Pi-hole está nas listas de bloqueio. Por defeito, vem com listas básicas de publicidade. Para uma PME, recomenda-se adicionar listas adicionais orientadas a segurança (malware, phishing, telemetry).
4.1 Listas recomendadas
Adicionar via interface web em Adlists ou via CLI:
# Listas de publicidade
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
# Listas de malware e phishing
https://urlhaus-filter.pages.dev/hosts
# Telemetry da Microsoft
https://raw.githubusercontent.com/jdlingu/adaway-list/master/hosts
4.2 Grupos de clientes
Os grupos permitem aplicar políticas diferentes por dispositivo. Exemplos para PME:
- Grupo “Workstations” — listas de publicidade + malware. Permite redes sociais.
- Grupo “Servidores” — apenas listas de malware. Sem bloqueio de publicidade (pode interferir com APIs).
- Grupo “IoT” — listas de telemetry + malware. Bloqueia domínios de fabricantes conhecidos.
- Grupo “Convidados” — listas máximas. Sem acesso a redes sociais ou transmissão.
Atribuir clientes a grupos via Group Management → Clients, especificando o endereço IP ou MAC de cada dispositivo.
5. Pi-hole + unbound (DNS recursivo)
Por defeito, o Pi-hole reenvia consultas para um resolvedor a montante (Cloudflare, Google). Isto significa que esse resolvedor conhece todo o tráfego DNS da empresa. Para privacidade máxima, pode-se integrar o unbound como resolvedor recursivo local — o Pi-hole consulta o unbound, que por sua vez resolve directamente os servidores raiz (root servers) sem intermediários.
Adicionar o unbound ao docker-compose.yml:
services:
pihole:
# ... configuração do Pi-hole (igual ao passo 3)
environment:
TZ: "Europe/Lisbon"
WEBPASSWORD: "alterar-esta-password"
DNS1: "127.0.0.1#5335"
DNS2: ""
depends_on:
- unbound
unbound:
image: mvance/unbound:latest
container_name: unbound
ports:
- "5335:53/tcp"
- "5335:53/udp"
volumes:
- ./unbound:/opt/unbound/etc/unbound
restart: unless-stopped
A configuração do unbound deve activar DNSSEC, privacidade (qname-minimisation) e caching. O Pi-hole passa a usar 127.0.0.1#5335 como único a montante, eliminando dependência de resolvedores externos.
ℹ Vantagem para PME
A recursão local reduz a latência após o warm-up do cache, elimina a exposição de padrões de navegação a terceiros e garante resolução mesmo se Cloudflare ou Google estiverem indisponíveis.
6. Comparação Pi-hole vs AdGuard Home
O AdGuard Home é a alternativa principal ao Pi-hole. Escrito em Go, oferece uma abordagem mais integrada com suporte nativo a DoH (DNS over HTTPS) e DoT (DNS over TLS). A tabela seguinte resume as diferenças relevantes para PME:
| Funcionalidade | Pi-hole | AdGuard Home |
|---|---|---|
| Linguagem | PHP + Bash + C (FTL) | Go (binário único) |
| DoH / DoT nativo | Não (requer proxy adicional) | Sim, nativo |
| Interface web | Sim (PHP, extensa) | Sim (Go, mais leve) |
| Grupos de clientes | Sim, por IP/MAC | Sim, por IP/MAC/hostname |
| Formato de listas | hosts, AdBlock | hosts, AdBlock, regras AdGuard |
| DNS recursivo (unbound) | Bem documentado, guias oficiais | Possível, menos documentado |
| Consumo de RAM | ~100–300 MB | ~50–150 MB |
| Cliente DHCP | Sim (dnsmasq) | Sim, nativo |
| Licença | EUPL (código aberto) | GPLv3 (código aberto) |
| Comunidade | Maior, mais tutoriais | Crescente, suporte comercial |
| Quando escolher | Rede Linux estabelecida, integração com unbound prioritária | DoH/DoT nativo necessário, recursos limitados |
⚠ Limitações comuns
Nenhuma das duas soluções bloqueia publicidade servida no mesmo domínio que conteúdo legítimo (ex: YouTube, Twitch). Para esses casos, é necessário complementar com extensões de navegador como uBlock Origin nos dispositivos dos utilizadores.
7. Boas Práticas para PME
Implementar filtragem DNS numa empresa requer planeamento. As seguintes recomendações aplicam-se a ambas as plataformas:
7.1 Configuração de rede
- Atribuir IP estático ao servidor de filtragem e configurar o DHCP para distribuir esse IP como DNS primário.
- Configurar um segundo DNS (fallback) apenas se houver redundância física — um fallback externo permite contornar o filtro.
- Registar registos DNS para retenção mínima de 90 dias (RGPD/levantamento forense).
7.2 Operação
- Actualizar listas automaticamente (cron diário ou graças ao scheduler nativo).
- Monitorizar falsos positivos — domínios legítimos bloqueados causam chamados ao suporte. Configurar whitelist activa.
- cópia de segurança regular de
/etc/piholee volumes Docker. - Actualizar o contentor Docker mensalmente:
docker compose pull && docker compose up -d.
7.3 Segurança
- Alterar a palavra-passe predefinida da interface web imediatamente após instalação.
- Restringir o acesso à interface web por IP ou VPN — não expor a porta 80 à Internet.
- Activar DNSSEC no unbound para validar respostas e prevenir envenenamento de cache.
- Combinar filtragem DNS com firewall de rede — o DNS bloqueia domínios, mas não portas ou protocolos.
✓ Resumo
O Pi-hole é a escolha sólida para PME que já opera infraestrutura Linux e quer integração madura com unbound. O AdGuard Home prefere-se quando DoH/DoT nativo é indispensável ou quando os recursos são limitados. Ambas reduzem exposição a publicidade e malware sem custo de licenciamento.