UFW - Firewall Linux#

Referências:#


1. Desabilitando o IPV6#

Para desabilitar o suporte a IPV6 no UFW, edite o arquivo /etc/default/ufw:

sed -i '/IPV6/s/yes/no/' /etc/default/ufw

2. Habilitando o serviço UFW#

Defina a política padrão, permitindo ou negando tráfego conforme necessário:

# Política padrão: negar todo tráfego
ufw default deny

# Permite tráfego de redes específicas
ufw allow from 200.202.0.0/24
ufw allow from 200.200.1.0/24
ufw allow from 200.202.3.0/24

# Habilita o UFW
ufw enable

# Verifica o status
ufw status

3. Remover Regras#

Para excluir regras específicas:

# Exclui regras de IPs específicos
ufw delete allow from 200.202.0.0/24
ufw delete allow from 200.200.1.0/24

4. Liberando Portas#

Liberando uma única porta:#

# Liberando porta TCP 873
ufw allow 873/tcp

# para uma interface específica:
ufw allow in on eth0 to any port 445 proto tcp comment 'SMBD via SSH'

Liberando um intervalo de portas:#

# Liberando um intervalo de portas TCP de 200 a 2000
ufw allow 200.202:2000/tcp

5. Liberar uma Porta para um IP Específico#

Para liberar uma porta para um IP específico, utilize:

ufw allow from 200.202.0.44 to any port 873 proto tcp

6. Manipulação de Regras Numeradas#

Exibindo as regras numeradas:

ufw status numbered

Exemplo de saída:

     To                         Action      From
     --                         ------      ----
[ 1] 873/tcp                    ALLOW IN    200.202.0.44                 
[ 2] 22007/tcp                  ALLOW IN    200.202.3.6 

Excluindo uma regra numerada:#

ufw delete 1

Adicionando uma regra em um índice específico:#

ufw insert 1 allow from <ip address>

7. Liberando Portas para Contêineres#

Se você utiliza contêineres (ex: podman), pode liberar portas para acesso entre as interfaces:

# Permite tráfego de entrada na interface "wlp0s20f3" e saída para "podman0" na porta 8888
ufw route allow in on wlp0s20f3 out on podman0 to any port 8888

ufw route allow proto tcp from 192.168.0.1/24 to 192.168.1.4 port 5000 comment 'Docker  <> iDESTINATION'

8. DNAT para Redirecionamento de Gateway para Servidor#

Configuração de redirecionamento de tráfego (DNAT) em /etc/ufw/before.rules:

# Habilita o encaminhamento de pacotes
sudo ufw route allow proto tcp from any to 172.16.1.6 port 80

# Arquivo /etc/ufw/before.rules

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# Redireciona o tráfego de 172.43.1.2:80 para 172.16.1.6:80
-A PREROUTING -d 172.43.1.2 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.6:80

# Mascaramento para garantir o retorno do tráfego
-A POSTROUTING -d 172.16.1.6 -p tcp --dport 80 -j MASQUERADE

COMMIT

9. Criando Regras para Aplicações#

Você pode criar perfis de regras para aplicações específicas. Exemplo para o mkchromecast:

cat << EOF > /etc/ufw/applications.d/mkchromecast
[mkchromecast]
title=mkchromecast - casting services
description=Casting services
ports=5353/udp|5000/tcp
EOF

# Permite tráfego para a aplicação
ufw allow mkchromecast

# Ou permite de um IP específico para a aplicação
ufw allow from <some_address> to any app mkchromecast

Referência adicional: StackOverflow - UFW Application Profiles


10. Solução para Máquinas Virtuais (Libvirt) sem IP e Rotas#

Se você usa o libvirt e suas máquinas virtuais não possuem IPs ou rotas, adicione a seguinte linha no arquivo de configuração do libvirt:

# Altere para iptables como backend para firewall
firewall_backend=iptables

Link Arch Forum


11. Configuração para LXC#

Liberando tráfego para a rede LXC:#

# Permite tráfego de entrada na interface "lxdbr0"
ufw allow in on lxdbr0 comment 'Trafego entrada LXC_BRIDGE'

# Permite tráfego de saída da interface "lxdbr0"
ufw route allow out on lxdbr0 comment 'Rota saída LXC_BRIDGE'

# Permite comunicação entre lxdbr0 e outras interfaces
ufw route allow out on enp2s0f5 comment 'Permite enp2s0f5 <-> lxdbr0'
ufw route allow out on wlp1s0 comment 'Permite wlp1s0 <-> lxdbr0'

Regras de rede para LXC:#

# Permite tráfego para o container com IP 10.0.3.6 na porta 8111
ufw route allow proto tcp from any to 10.0.3.6 port 8111 comment 'Rota para o container SSL_TESTE IN <-> OUT'

# Arquivo /etc/ufw/before.rules
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# Redireciona tráfego para o container
-A PREROUTING -d 10.0.0.2 -p tcp --dport 8111 -j DNAT --to-destination 10.0.3.6:8111

# Mascaramento para garantir o retorno do tráfego
-A POSTROUTING -d 10.0.3.6 -p tcp --dport 8111 -j MASQUERADE

COMMIT

12. Configuração para Roteamento e Encaminhamento de Pacotes#

Para máquinas com múltiplas interfaces de rede, é necessário habilitar o roteamento no sysctl e configurar regras específicas de encaminhamento:

# Configuração de roteamento no sysctl para múltiplas interfaces
echo 1 > /proc/sys/net/ipv4/ip_forward

# Em /etc/ufw/sysctl.conf
net.ipv4.ip_forward=1

Exemplo de regras de roteamento:

ufw route allow from 10.235.0.85 to any
ufw route allow from 10.10.0.0/24 to any

Firewalld#

1. Configuração de Política Default#

Para definir a política de bloqueio padrão no Firewalld, use o comando:

firewall-cmd --permanent --zone=public --set-target=DROP

2. Manipulando Portas#

Para remover ou adicionar portas no Firewalld, use os seguintes comandos:

# Remove uma porta
firewall-cmd --remove-port=5001/tcp

# Adiciona uma porta
firewall-cmd --add-port=5001/tcp

# Torna as mudanças permanentes
firewall-cmd --runtime-to-permanent

3. Manipulando Serviços#

Adicione serviços ao Firewalld:

# Adiciona o serviço cockpit
firewall-cmd --add-service=cockpit

# Lista todos os serviços disponíveis
firewall-cmd --get-services

# Torna as mudanças permanentes
firewall-cmd --runtime-to-permanent

# Verifica a configuração atual
firewall-cmd --check-config

# Exibe zonas ativas
firewall-cmd --get-active-zones