Introdução ao Proxy DNS e Segurança de Rede no VyOS
A segurança perimetral é um pilar fundamental para qualquer infraestrutura moderna, seja ela baseada em nuvem (VPS), on-premise ou híbrida. Embora firewalls tradicionais e sistemas de detecção de intrusão sejam essenciais, a camada de resolução de nomes (DNS) representa uma superfície de ataque frequentemente negligenciada. Um atacante que consegue forçar uma vítima a resolver um domínio malicioso pode contornar camadas de segurança mais profundas, estabelecendo canais de comando e controle (C2) ou extraindo dados sensíveis.
O VyOS, uma distribuição Linux open-source baseada em Debian que oferece funcionalidades enterprise-grade de roteamento e firewall, é uma ferramenta poderosa para implementar políticas de DNS granulares. Ao configurar um proxy DNS no VyOS, você não apenas acelera a resolução através de caching local, mas também ganha a capacidade de filtrar tráfego indesejado, bloquear domínios conhecidos por malware, phishing e botnets, e garantir que seus clientes resolvam apenas endereços seguros.
Neste tutorial técnico, demonstraremos como configurar o unbound (resolutor DNS integrado ao VyOS) ou o dnsmasq como um proxy forwarder com capacidades de filtro. Focaremos na implementação prática para sysadmins que desejam elevar o nível de segurança da sua rede sem a necessidade de hardware adicional caro.
Pré-requisitos e Preparação do Ambiente
Antes de aplicar as configurações, certifique-se de que você tem acesso SSH com privilégios de root ao seu dispositivo VyOS. Este processo é ideal para ambientes onde o VyOS atua como gateway principal (edge router) ou firewall de borda.
O plano de ação consiste em três etapas principais:
- Configuração do serviço DNS resolver.
- Criação de listas de bloqueio (blacklists).
- Aplicação das políticas de filtro e reload da configuração.
Lembre-se: alterações na rede ativa podem causar interrupções temporárias na conectividade. Realize estas operações em janelas de manutenção ou tenha acesso de console disponível.
Passo 1: Configurando o Resolver DNS (Unbound)
O VyOS utiliza o unbound como seu resolver DNS padrão, que é um servidor recursivo validado. Diferente de um simples forwarder, o unbound pode ser configurado para atuar como um proxy inteligente, validando assinaturas DNSSEC e aplicando restrições de domínio.
Acesse o modo de configuração do VyOS através do terminal:
configure
Vamos definir os servidores upstream (raiz) que o VyOS consultará quando não encontrar o registro em cache. Para fins de segurança e performance no Brasil, é recomendável usar resolvers confiáveis como Google DNS ou Cloudflare, mas também é possível configurar resolvers locais.
set service dns forwarding cache max-cache-ttl 86400
set service dns forwarding server 8.8.8.8
set service dns forwarding server 1.1.1.1
O parâmetro max-cache-ttl define por quanto tempo os resultados são armazenados, reduzindo a latência e a carga na internet externa.
Passo 2: Criando Listas de Bloqueio (Blacklists)
A eficácia do filtro DNS depende da qualidade das listas de domínios bloqueados. Você pode criar suas próprias listas ou baixar listas mantidas pela comunidade, como o Steven Black's Hosts ou feeds específicos de threat intelligence.
Crie um diretório para armazenar essas listas no sistema de arquivos do VyOS:
mkdir -p /config/scripts/dns-blocklists
Baixe uma lista de domínios maliciosos. Abaixo, um exemplo usando wget para baixar uma lista consolidada:
wget -O /config/scripts/dns-blocklists/malware.txt https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/malicious/hosts
Este arquivo conterá milhares de entradas no formato 0.0.0.0 dominio.com.br. Note que o VyOS, ao usar o unbound, não lê diretamente arquivos de hosts da mesma forma que o dnsmasq faria. Portanto, a integração requer um script ou uma configuração específica de "stub-zone" ou "local-zone".
Passo 3: Implementando o Filtro com Unbound (Abordagem Recomendada)
O unbound no VyOS suporta a definição de zonas locais que podem ser forçadas a retornar um valor específico. Para filtrar domínios maliciosos, a estratégia mais robusta é usar a diretiva local-zone com o tipo static ou refuse.
No entanto, carregar milhares de domínios individualmente na configuração do VyOS via CLI pode ser verboso e propenso a erros. A abordagem profissional envolve usar um script para gerar a configuração ou utilizar o recurso de include se suportado pela versão específica, mas a maneira mais comum no VyOS é criar entradas individuais para domínios críticos ou usar o dnsmasq como alternativa leve.
Vamos focar na configuração nativa do VyOS usando o recurso de forward-zone para encaminhar apenas tráfego seguro e bloquear o resto via firewall, ou usar o unbound com zonas locais.
set service dns forwarding zone-file "malicious" type static
set service dns forwarding zone-file "malicious" data "127.0.0.1 example.com"
Para uma lista grande, você deve gerar um script que itere sobre o arquivo malware.txt e crie os comandos de set correspondentes. Um exemplo simplificado de como isso seria feito em um shell externo antes de importar:
while read -r line; do
domain=$(echo $line | awk '{print $2}')
echo "set service dns forwarding zone-file \"malicious\" data \"$domain\""
done < /config/scripts/dns-blocklists/malware.txt > /tmp/vyos-dns-filter.conf
Após gerar o arquivo de configuração, você pode aplicar as mudanças ou integrá-las ao script de inicialização do VyOS.
Passo 4: Alternativa com Dnsmasq (Mais Simples para Listas Grandes)
Se a gestão de milhares de entradas no unbound se tornar complexa, muitos administradores preferem usar o dnsmasq, que é mais leve e nativamente projetado para ler arquivos de hosts como listas de bloqueio.
Desative o forwarder padrão e ative o dnsmasq:
delete service dns forwarding
set service dns forwarding disable-wan
set service dns forwarding enable-dnssec
Configure o dnsmasq para usar os upstreams seguros:
set service dns forwarding server 8.8.8.8
set service dns forwarding server 1.1.1.1
set service dns forwarding cache-size 10000
Agora, configure o dnsmasq para ler sua lista de bloqueio:
set service dns forwarding host-record "example.com 127.0.0.1"
set service dns forwarding listen-address "127.0.0.1"
No VyOS, a integração direta de arquivos hosts no dnsmasq requer o uso do custom-options. Adicione a seguinte linha para apontar para sua lista:
set service dns forwarding custom-1 "blacklist=/config/scripts/dns-blocklists/malware.txt"
Com esta configuração, qualquer domínio listado no arquivo malware.txt será resolvido para o endereço retornado pela regra de blacklist (geralmente um IP não rotável ou localhost, dependendo da sintaxe do dnsmasq), efetivamente bloqueando a conexão.
Passo 5: Aplicação e Verificação
Após configurar os parâmetros desejados, saia do modo de configuração e salve as alterações:
commit
save
exit
O serviço DNS será reiniciado para aplicar as novas regras. Para verificar se o filtro está funcionando, utilize a ferramenta dig ou nslookup de um cliente na rede interna.
Tente resolver um domínio que consta na sua lista de bloqueio:
dig @<IP_DO_VYOS> malware-test.com
Você deve receber uma resposta indicando que o domínio foi bloqueado ou não existe (NXDOMAIN), dependendo da configuração do tipo de zona. Se estiver usando dnsmasq com blacklist, a resposta conterá o IP definido na regra de bloqueio.
Verifique também os logs para garantir que não há erros de sintaxe:
tail -f /var/log/messages | grep -i dns
Passo 6: Automatização e Manutenção
Listas de ameaças mudam diariamente. Um filtro DNS estático torna-se obsoleto rapidamente. Para manter a eficácia do seu proxy DNS, automatize o processo de atualização das blacklists.
Crie um script em Bash que rode via cron no VyOS:
#!/bin/bash
# /config/scripts/update-dns-blocklist.sh
BLOCKLIST_URL="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/malicious/hosts"
DEST_FILE="/config/scripts/dns-blocklists/malware.txt"
echo "Baixando nova lista de bloqueio..."
wget -q -O "$DEST_FILE.tmp" "$BLOCKLIST_URL"
if [ $? -eq 0 ]; then
mv "$DEST_FILE.tmp" "$DEST_FILE"
echo "Lista atualizada com sucesso."
# Reinicie o serviço DNS se necessário
/opt/vyatta/sbin/vyatta-cfg commit
else
echo "Erro ao baixar a lista."
rm -f "$DEST_FILE.tmp"
fi
Configure o cron para rodar este script diariamente:
crontab -e
Adicione a linha:
0 4 * * * /bin/bash /config/scripts/update-dns-blocklist.sh >> /var/log/dns-update.log 2>&1
Considerações Finais sobre Segurança e Performance
A implementação de um proxy DNS com filtro no VyOS adiciona uma camada significativa de segurança à sua infraestrutura. Ele impede que dispositivos infectados na rede interna comuniquem-se silenciosamente com servidores de comando e controle, muitas vezes bloqueando exfiltração de dados antes que ela ocorra.
No entanto, é crucial monitorar o impacto no desempenho. O caching agressivo ajuda a mitigar a latência adicional introduzida pela verificação de listas. Além disso, mantenha um registro (log) das tentativas de resolução bloqueadas para identificar possíveis dispositivos comprometidos na sua rede que estão tentando acessar domínios maliciosos.
Lembre-se de testar rigorosamente em um ambiente de homologação antes de aplicar em produção. Domínios legítimos podem ser falsamente positivos em algumas listas públicas; portanto, mantenha uma whitelist para corrigir eventuais bloqueios indevidos de serviços críticos da sua empresa.
Com esta configuração, você transforma seu VyOS não apenas em um roteador, mas em um guardião ativo da integridade e segurança dos seus dados na nuvem ou na rede local.