Configuracao Basica de Firewall: Primeiros Passos com ufw e firewalld

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

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

Proxima Leitura