Bloquear o tráfego de saída para redes privadas com UFW

3 min
Alojamento VPS/VDS

Quando um script comprometido ou uma aplicação mal configurada começa a sondar endereços 10.x ou 192.168.x, o tráfego sai do seu servidor e muitas vezes gera queixas de abuso por parte da rede. Bloquear as ligações de saída para gamas privadas é uma salvaguarda simples em qualquer VPS Linux Infrawire. Este guia mostra como o fazer com o UFW sem quebrar o DNS nem a sua própria conectividade.

📋 Pré-requisitos

  • Um VPS com acesso SSH root, em Ubuntu 24.04 ou Debian 12 (o UFW está disponível em ambos).
  • Noções básicas de UFW. Se ainda não estiver instalado:
Bash
sudo apt update && sudo apt install -y ufw
  • Uma segunda sessão SSH aberta enquanto altera a firewall.

🧭 Que gamas bloquear

GamaUtilização
10.0.0.0/8Privada RFC1918
172.16.0.0/12Privada RFC1918
192.168.0.0/16Privada RFC1918
100.64.0.0/10NAT de operador (RFC6598)
169.254.0.0/16Link-local IPv4
192.0.0.0/24Atribuições de protocolo do IETF
198.18.0.0/15Testes de desempenho
fc00::/7Endereços locais únicos IPv6

Não bloqueie fe80::/10: o IPv6 usa endereços link-local para a descoberta de vizinhos e, muitas vezes, para o gateway predefinido, pelo que bloqueá-los corta por completo o IPv6.

🔍 Veja primeiro o que o seu VPS realmente precisa

Se o gateway ou o resolvedor DNS estiver numa gama privada, um bloqueio geral corta a sua rede. Observe a configuração antes de acrescentar qualquer regra:

Bash
ip route ip -6 route cat /etc/resolv.conf resolvectl status | grep -E 'DNS Servers|Link'

Se um resolvedor ou um serviço de que depende tiver endereço privado (PRIVATE_DNS_IP), permita-o explicitamente e coloque essa regra em primeiro lugar, como abaixo. Se tudo o que usa for público, pode saltar este passo.

🧱 Método 1: ufw deny out

Garanta que o SSH continua acessível e defina as políticas predefinidas. As respostas de entrada às suas sessões SSH não são afetadas por regras de saída para gamas privadas.

Bash
sudo ufw allow 22/tcp sudo ufw default deny incoming sudo ufw default allow outgoing

Se precisar de uma exceção, insira-a na posição 1 para ser avaliada antes das recusas:

Bash
sudo ufw insert 1 allow out to PRIVATE_DNS_IP port 53

Agora adicione as recusas, uma por gama (o UFW avalia as regras por ordem e a primeira que corresponder prevalece):

Bash
sudo ufw deny out to 10.0.0.0/8 sudo ufw deny out to 172.16.0.0/12 sudo ufw deny out to 192.168.0.0/16 sudo ufw deny out to 100.64.0.0/10 sudo ufw deny out to 169.254.0.0/16 sudo ufw deny out to 192.0.0.0/24 sudo ufw deny out to 198.18.0.0/15 sudo ufw deny out to fc00::/7 sudo ufw enable

O ufw enable pode avisar que pode interromper ligações SSH; como a porta 22 está permitida, responda y. Reveja a ordem com:

Bash
sudo ufw status numbered

📄 Método 2: before.rules

Se preferir um único bloco de regras aplicado antes das regras do utilizador, edite /etc/ufw/before.rules. Faça primeiro uma cópia de segurança:

Bash
sudo cp /etc/ufw/before.rules /etc/ufw/before.rules.bak sudo nano /etc/ufw/before.rules

Na secção *filter, depois das linhas que aceitam o loopback e as ligações estabelecidas, adicione:

TEXT
1# Bloquear tráfego de saída para redes privadas 2-A ufw-before-output -d 10.0.0.0/8 -j REJECT 3-A ufw-before-output -d 172.16.0.0/12 -j REJECT 4-A ufw-before-output -d 192.168.0.0/16 -j REJECT 5-A ufw-before-output -d 100.64.0.0/10 -j REJECT 6-A ufw-before-output -d 169.254.0.0/16 -j REJECT

O IPv6 tem o seu próprio ficheiro, /etc/ufw/before6.rules, com a cadeia ufw-before-output:

TEXT
-A ufw-before-output -d fc00::/7 -j REJECT

Coloque uma exceção para PRIVATE_DNS_IP logo acima destas linhas com -A ufw-before-output -d PRIVATE_DNS_IP -j ACCEPT. Recarregue:

Bash
sudo ufw reload

O REJECT responde de imediato com um erro, por isso as aplicações falham depressa em vez de esperarem por um timeout. Use -j DROP se preferir silêncio.

✅ Verificar

As regras têm de estar carregadas e os destinos bloqueados devem falhar, enquanto os públicos continuam a funcionar:

Bash
sudo ufw status verbose ping -c 1 10.0.0.1 # tem de falhar ping -c 1 192.168.1.1 # tem de falhar curl -m 5 http://10.0.0.1 # tem de falhar ping -c 2 1.1.1.1 # tem de funcionar dig +short example.com # tem de resolver curl -I https://www.debian.org

Com ufw deny out, o ping falhado costuma indicar Operation not permitted. Os contadores de pacotes confirmam as ocorrências:

Bash
sudo iptables -L ufw-user-output -n -v sudo iptables -L ufw-before-output -n -v

🛠️ Resolução de problemas

O DNS deixou de funcionar. O seu resolvedor está numa gama privada. Corrija a ordem com sudo ufw status numbered e depois adicione sudo ufw insert 1 allow out to PRIVATE_DNS_IP port 53. Também pode passar a um resolvedor público na configuração de rede.

O IPv6 deixou de funcionar após a alteração. Provavelmente bloqueou fe80::/10 ou um gateway dentro de fc00::/7. Remova a regra com sudo ufw delete deny out to fc00::/7 e volte a adicionar apenas o necessário.

Ficou sem acesso a um serviço numa rede privada (VPN, API interna). Adicione uma regra de permissão para esse endereço exato com ufw insert 1 allow out to PRIVATE_IP. Se perdeu o próprio SSH, use qualquer acesso de consola ao servidor e execute sudo ufw disable.


🔒 O seu VPS já não pode sondar redes privadas por acidente: as queixas de abuso deste tipo devem parar.

Fique a par das últimas ofertas, descontos e promoções especiais.

Ver promoções

Utilizamos cookies

Utilizamos cookies analíticos para melhorar a sua experiência no nosso site. Nenhum dado é vendido a terceiros. Saiba mais na nossa política de privacidade.