Configuracao Basica de Firewall: Primeiros Passos com ufw e firewalld
O Que e um Firewall?
Um firewall filtra o trafego de rede -- permitindo ou bloqueando conexoes com base em regras. No Linux, o iptables/nftables do kernel lida com a filtragem real, enquanto ufw e firewalld sao ferramentas de gerenciamento de nivel superior que facilitam a configuracao.
Ferramenta padrao por distribuicao
- Ubuntu / Debian:
ufw(Uncomplicated Firewall) - RHEL / CentOS / Fedora:
firewalld
Qual a Diferenca Entre ufw e firewalld?
O ufw prioriza a simplicidade com uma CLI direta e conjuntos de regras estaticas. O firewalld usa um modelo baseado em zonas e suporta alteracoes dinamicas de regras em tempo de execucao via D-Bus -- sem necessidade de reiniciar o servico.
| Recurso | ufw | firewalld |
|---|---|---|
| Distros principais | Ubuntu / Debian | RHEL / CentOS |
| Modelo de regras | Estatico | Dinamico (baseado em zonas) |
| Complexidade | Simples | Flexivel mas complexo |
| Backend | iptables / nftables | nftables / iptables |
Basico do ufw
Instalar e Ativar
O Ubuntu inclui o ufw por padrao. Sempre permita SSH antes de ativar -- caso contrario, voce sera bloqueado de conexoes remotas.
$ sudo ufw status Status: inactive $ sudo ufw allow 22/tcp Rules updated Rules updated (v6) $ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Permita SSH (porta 22) antes de executar ufw enable. Se voce ativar o firewall primeiro sem permitir SSH, sera bloqueado de conexoes remotas.
Permitir e Bloquear Portas
# Permitir por numero de porta $ sudo ufw allow 80/tcp $ sudo ufw allow 443/tcp # Permitir por nome de servico (de /etc/services) $ sudo ufw allow ssh $ sudo ufw allow http $ sudo ufw allow https # Bloquear uma porta $ sudo ufw deny 23/tcp # Permitir de um intervalo de IP especifico $ sudo ufw allow from 192.168.1.0/24 # Permitir um IP especifico para uma porta especifica $ sudo ufw allow from 192.168.1.100 to any port 3306
Politicas Padrao
# Bloquear todo trafego de entrada por padrao (recomendado) $ sudo ufw default deny incoming # Permitir todo trafego de saida por padrao $ sudo ufw default allow outgoing
Visualizar e Excluir Regras
# Mostrar regras com numeros $ sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
# Excluir por numero de regra $ sudo ufw delete 3 # Excluir por especificacao de regra $ sudo ufw delete allow 443/tcp
Desativar e Resetar o ufw
# Desativar temporariamente (regras preservadas) $ sudo ufw disable # Resetar todas as regras $ sudo ufw reset
ufw reset exclui todas as regras. Anote sua configuracao atual antes de executa-lo.
Basico do firewalld
Instalar e Iniciar
Em sistemas baseados em RHEL, o firewalld normalmente vem pre-instalado.
# RHEL / CentOS $ sudo yum install firewalld # Fedora $ sudo dnf install firewalld $ sudo systemctl start firewalld $ sudo systemctl enable firewalld
Entendendo Zonas
O firewalld atribui regras a zonas. Cada interface de rede pertence a uma zona, e as regras dessa zona se aplicam a todo o trafego nessa interface.
# Listar zonas disponiveis $ firewall-cmd --get-zones block dmz drop external home internal public trusted work # Mostrar a zona padrao $ firewall-cmd --get-default-zone public # Mostrar quais zonas estao ativas e suas interfaces $ firewall-cmd --get-active-zones
Permitir e Remover Portas
# Mostrar regras atuais $ firewall-cmd --list-all # Permitir uma porta temporariamente (perdida ao reiniciar) $ sudo firewall-cmd --add-port=80/tcp # Permitir uma porta permanentemente $ sudo firewall-cmd --add-port=80/tcp --permanent $ sudo firewall-cmd --reload # Permitir por nome de servico $ sudo firewall-cmd --add-service=http --permanent $ sudo firewall-cmd --add-service=https --permanent $ sudo firewall-cmd --reload # Remover uma porta $ sudo firewall-cmd --remove-port=80/tcp --permanent $ sudo firewall-cmd --reload
--permanent grava nos arquivos de configuracao para que as definicoes sobrevivam a reinicializacoes. Sem ele, as alteracoes se aplicam apenas a sessao atual. Execute --reload para aplicar as alteracoes permanentes imediatamente sem uma reinicializacao completa.
Listar Nomes de Servicos Disponiveis
$ firewall-cmd --get-services
Adicionar IPs de Origem a uma Zona
# Confiar em uma sub-rede especifica $ sudo firewall-cmd --zone=trusted --add-source=192.168.1.0/24 --permanent $ sudo firewall-cmd --reload
Quais Sao os Padroes Comuns de Configuracao?
Servidor Web (HTTP / HTTPS + SSH)
Usando ufw:
$ sudo ufw default deny incoming $ sudo ufw default allow outgoing $ sudo ufw allow ssh $ sudo ufw allow http $ sudo ufw allow https $ sudo ufw enable
Usando firewalld:
$ sudo firewall-cmd --set-default-zone=public $ sudo firewall-cmd --add-service=ssh --permanent $ sudo firewall-cmd --add-service=http --permanent $ sudo firewall-cmd --add-service=https --permanent $ sudo firewall-cmd --reload
Servidor de Banco de Dados (Permitir MySQL Apenas de um IP Especifico)
Usando ufw:
$ sudo ufw allow from 192.168.1.10 to any port 3306 proto tcp
Usando firewalld:
$ sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.10" port port="3306" protocol="tcp" accept' --permanent $ sudo firewall-cmd --reload
O Que Fazer Quando as Configuracoes Nao Entram em Vigor?
Se as conexoes falharem apos fazer alteracoes, verifique nesta ordem:
# ufw: verificar se o firewall esta ativo $ sudo ufw status Status: active # firewalld: verificar se o servico esta em execucao $ sudo systemctl status firewalld # Confirmar que a porta esta realmente escutando $ ss -tlnp | grep :80
Ambientes de nuvem (AWS / GCP / Azure)
Grupos de seguranca e ACLs de rede na nuvem operam acima do firewall do SO. Mesmo que voce abra uma porta no ufw/firewalld, as regras no nivel da nuvem ainda podem bloquea-la. Sempre verifique ambas as camadas ao solucionar problemas de conectividade.
# Ativar e acompanhar logs do ufw $ sudo ufw logging on $ sudo tail -f /var/log/ufw.log # Visualizar logs do firewalld via journalctl $ sudo journalctl -u firewalld -f