1. Princípio: deny by default
Firewall bom não é lista enorme de regras. É: tudo bloqueado por padrão, liberar só portas e origens necessárias.
2. UFW no Ubuntu/Debian
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80,443/tcp comment 'web'
sudo ufw enable
sudo ufw status verbose
ATENÇÃO Se estiver conectado por SSH, libere a porta 22 antes de ativar o UFW.
3. Windows Firewall
Set-NetFirewallProfile -Profile Domain,Public,Private -DefaultInboundAction Block -DefaultOutboundAction Allow
New-NetFirewallRule -DisplayName "Allow HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
New-NetFirewallRule -DisplayName "Allow HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
Get-NetFirewallRule | Where-Object Enabled -eq True | Select DisplayName, Direction, Action
4. Equivalências
- Status:
ufw status/Get-NetFirewallProfile - Liberar porta:
ufw allow 443/tcp/New-NetFirewallRule ... -LocalPort 443
5. Checklist
- Deny inbound por padrão
- SSH/RDP com origem restrita quando possível
- Só 80/443 públicos para web
- Documentar cada regra extra
6. Comandos explicados
UFW (Ubuntu e Debian)
| Comando | O que faz |
|---|---|
ufw default deny incoming | Bloqueia toda conexão de entrada que não tenha uma regra liberando. |
ufw default allow outgoing | Permite as conexões que o servidor inicia (atualizações, DNS, APIs). |
ufw allow 22/tcp comment 'SSH' | Libera a porta 22 em TCP. O comment só documenta a regra. |
ufw allow 80,443/tcp | Libera várias portas de uma vez. Nesse formato, é obrigatório informar o protocolo. |
ufw enable | Ativa o firewall e o mantém ligado no boot. |
ufw status verbose | Mostra o estado, as políticas padrão e todas as regras. |
Windows Firewall (PowerShell)
| Comando ou parâmetro | O que faz |
|---|---|
Set-NetFirewallProfile -Profile Domain,Public,Private | Aplica a mudança aos três perfis de rede do Windows. |
-DefaultInboundAction Block | Bloqueia a entrada por padrão. |
-DefaultOutboundAction Allow | Permite a saída por padrão. |
New-NetFirewallRule -DisplayName "Allow HTTPS" | Cria uma regra com esse nome, que aparece na interface gráfica. |
-Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow | Regra de entrada, em TCP, na porta 443, liberando o tráfego. |
Get-NetFirewallRule | Where-Object Enabled -eq True | Select DisplayName, Direction, Action | Lista só as regras ativas, com nome, direção e ação. |
7. Exemplo: saída do ufw status verbose
Depois de aplicar as regras do artigo, o resultado do ufw status verbose é parecido com este:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere # SSH
80,443/tcp ALLOW IN Anywhere # web
22/tcp (v6) ALLOW IN Anywhere (v6) # SSH
80,443/tcp (v6) ALLOW IN Anywhere (v6) # webA linha Default confirma o princípio do artigo: entrada negada, saída permitida. As linhas (v6) são as mesmas regras para IPv6, criadas automaticamente.
8. Erros comuns
| Sintoma | Causa provável | Solução |
|---|---|---|
| Perdeu o acesso SSH ao ativar o UFW | A porta do SSH não foi liberada antes do ufw enable. | Entre pelo console do provedor e rode sudo ufw allow 22/tcp (ou a porta que você usa). |
| Uma porta de container Docker continua aberta apesar do UFW | O Docker publica portas direto no iptables e contorna o UFW. | Publique só o necessário e, se possível, limite a 127.0.0.1:porta:porta. |
| A regra do Windows não tem efeito | O perfil ativo da rede (Domain, Private ou Public) é outro, ou existe uma regra de bloqueio que prevalece. | Confira o perfil com Get-NetConnectionProfile e revise as regras conflitantes. |
| O serviço só responde localmente | Ele escuta apenas em 127.0.0.1, e o firewall não tem culpa. | Veja com sudo ss -lntp em qual endereço a porta está aberta. |