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:
Bashsudo apt update && sudo apt install -y ufw
- Uma segunda sessão SSH aberta enquanto altera a firewall.
🧭 Que gamas bloquear
| Gama | Utilização |
|---|---|
10.0.0.0/8 | Privada RFC1918 |
172.16.0.0/12 | Privada RFC1918 |
192.168.0.0/16 | Privada RFC1918 |
100.64.0.0/10 | NAT de operador (RFC6598) |
169.254.0.0/16 | Link-local IPv4 |
192.0.0.0/24 | Atribuições de protocolo do IETF |
198.18.0.0/15 | Testes de desempenho |
fc00::/7 | Endereç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:
Baship 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.
Bashsudo 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:
Bashsudo 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):
Bashsudo 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:
Bashsudo 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:
Bashsudo 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:
TEXT1# 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:
Bashsudo 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:
Bashsudo 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:
Bashsudo 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.