Pesquisa de site

Como usar o firewall UFW no Debian, Ubuntu, Linux Mint


Este tutorial mostrará como usar o UFW (Uncomplicated FireWall) no Debian/Ubuntu/Linux Mint com alguns exemplos do mundo real. Gerenciar firewall é uma habilidade básica que todo administrador de sistema precisa saber. Este artigo pretende iniciar o leitor com o UFW, mas não explora os detalhes do UFW.

UFW é um front-end para iptables, para facilitar o gerenciamento de um firewall Netfilter, daí o nome “Firewall Descomplicado”. Ele fornece uma interface de linha de comando com sintaxe semelhante ao Filtro de Pacotes do OpenBSD. É particularmente adequado como firewall baseado em host. UFW é o front-end iptables recomendado em distribuições Linux baseadas em Debian e geralmente é pré-instalado nessas distros. Por padrão, o UFW define regras de firewall para endereços IPv4 e IPv6. Outro front-end do iptables bem conhecido é o firewalld, que é o aplicativo de firewall padrão em distribuições Linux baseadas em RPM (RHEL, CentOS, Fedora, OpenSUSE, etc).

Desativando outros serviços de restauração do Iptables

Como você provavelmente sabe, as regras de firewall do iptables serão liberadas quando o sistema operacional for desligado e o próprio programa iptables não restaurar as regras de firewall. Por padrão, o UFW restaura as regras de firewall após a reinicialização do sistema. Antes de usar o UFW, é importante verificar se existe outro serviço de restauração de iptables em seu sistema. Se houver dois serviços de restauração, eles entrarão em conflito entre si, o que geralmente resulta em aplicativos da Web indisponíveis após a reinicialização do sistema.

Se você estava usando o firewall iptables diretamente e agora deseja mudar para UFW, basta desabilitar o serviço de restauração do iptables. Iptables-persistent é um serviço de restauração de iptables bem conhecido no Debian/Ubuntu. Você pode verificar se está funcionando com o seguinte comando.

systemctl status iptables-persistent

Se estiver em execução, você pode pará-lo e desativá-lo.

sudo systemctl stop iptables-persistent

sudo systemctl disable iptables-persistent

Ou você pode removê-lo do seu sistema.

sudo apt remove iptables-persistent

Se você configurou seu servidor de e-mail usando iRedMail, certifique-se de executar o seguinte comando para verificar se o serviço iptables está em execução.

systemctl status iptables

Este serviço iptables é fornecido com o iRedMail para restaurar as regras de firewall do iptables. Se estiver em execução, você pode pará-lo e desativá-lo.

sudo systemctl stop iptables

sudo systemctl disable iptables

Agora vamos aprender como usar o UFW.

Introdução ao UFW no servidor Debian/Ubuntu/Linux Mint

O UFW geralmente vem pré-instalado no Debian/Ubuntu/Linux Mint, embora você sempre possa executar o seguinte comando para instalá-lo.

sudo apt install ufw

Nota: Você pode instalar o UFW no Arch Linux com sudo pacman -S ufw, mas também precisa habilitar o serviço UFW systemd com sudo systemctl enable ufw.

Na instalação, o ufw está desabilitado. Você pode verificar o status do UFW com:

sudo ufw status

O UFW vem com uma política de entrada padrão de deny, uma política de encaminhamento padrão de deny e uma política de saída padrão de allow, com rastreamento com estado para novas conexões para conexões de entrada e encaminhadas. Antes de habilitar o UFW, você precisa saber quais portas estão abertas no endereço IP público do seu servidor, que pode ser obtido com a ajuda do nmap (Network Mapper).

Instale nmap em seu servidor Debian/Ubuntu/Linux Mint e verifique as portas abertas no endereço IP público.

sudo apt install nmap

sudo nmap 12.34.56.78

Substitua 12.34.56.78 pelo endereço IP público real do seu servidor. Como você pode ver na imagem abaixo, existem várias portas abertas no meu servidor.

Também existem portas abertas que escutam apenas no localhost, que podem ser obtidas executando sudo nmap localhost, mas não precisamos nos preocupar com elas.

Por padrão, o Nmap verifica apenas as portas TCP. Podemos usar o seguinte comando para verificar as portas UDP.

sudo nmap -sU 12.34.56.78

No entanto, a varredura UDP é terrivelmente lenta. Se você não pode esperar tanto tempo, você pode usar netstat para listar as portas UDP.

sudo netstat -lnpu

Depois de obter as portas TCP e UDP abertas no seu servidor, você precisa decidir quais portas devem ter permissão para aceitar conexões de entrada. Se houver um servidor openSSH em execução, você deve sempre permitir a porta TCP 22 antes de ativar o UFW. Isso é conseguido através do seguinte comando.

sudo ufw allow 22/tcp

ou

sudo ufw allow ssh

Você provavelmente deseja permitir o tráfego HTTP e HTTPS, então execute o seguinte comando para permitir a conexão de entrada nas portas TCP 80 e 443.

sudo ufw allow 80/tcp

sudo ufw allow 443/tcp

Se você executa um servidor de e-mail, precisa permitir as portas TCP 25 (SMTP), 587 (envio), 143 (imap) e 993 (imaps).

sudo ufw allow 25/tcp

sudo ufw allow 587/tcp

sudo ufw allow 143/tcp

sudo ufw allow 993/tcp

Se quiser que seu usuário possa usar o protocolo POP3, você precisa permitir as portas TCP 110 (POP3) e 995 (POP3S).

sudo ufw allow 110/tcp

sudo ufw allow 995/tcp

Se você executar um servidor DNS BIND, precisará abrir a porta TCP e UDP 53.

sudo ufw allow 53

O comando acima permitirá a porta TCP e UDP. Se você quiser permitir apenas a porta UDP, então

sudo ufw allow 53/udp

Abrindo várias portas ao mesmo tempo

Você pode permitir várias portas como abaixo.

sudo ufw allow 80,443,25,587,465,143,993/tcp

Habilitando UFW

Depois de definir as portas permitidas no UFW, você precisa habilitar o UFW. Mas antes de fazer isso, é recomendável habilitar o log com o seguinte comando para que você possa entender melhor se o seu firewall está funcionando corretamente.

sudo ufw logging on

O nível de log padrão é ‘baixo’. O arquivo de log é /var/log/ufw.log. Normalmente uso o nível de log “médio”.

sudo ufw logging medium

Agora habilite o UFW.

sudo ufw enable

Nota: Se você já usou o firewall iptables diretamente, essas regras de firewall iptables serão desfeitas quando o UFW for habilitado.

Verifique o status

sudo ufw status

Para mostrar mais informações, execute

sudo ufw status verbose

Agora você pode verificar novamente o seu servidor para descobrir quais portas ainda estão abertas.

sudo nmap 12.34.56.78

Além disso, habilite o serviço systemd UFW, para que ele seja iniciado automaticamente no momento da inicialização do sistema.

sudo systemctl enable ufw

Como excluir uma regra de firewall

Primeiro, você precisa obter o número de referência da regra de firewall que deseja excluir com o seguinte comando.

sudo ufw status numbered

Então você pode excluir uma regra, por exemplo, a 8ª regra.

sudo ufw delete 8

Observe que o número de referência mudará após você excluir uma regra, então você precisa executar sudo ufw status numbered novamente para excluir outra regra.

Redefinir UFW

Se você cometeu um erro, pode desativar e redefinir o firewall para os padrões de instalação.

sudo ufw reset

Isto é particularmente útil para iniciantes.

Perfil de inscrição UFW

Muitos programas de servidor são fornecidos com perfis UFW. Você pode listar todos os perfis de aplicativos com:

sudo ufw app list

Podemos mostrar informações sobre um perfil de aplicação específico, por exemplo, o perfil “Apache Full”.

sudo ufw app info "Apache Full"

Podemos ver que as portas usadas por este perfil são as portas TCP 80 e 443. Se habilitarmos este perfil de aplicativo com o seguinte comando, as portas TCP 80 e 443 serão permitidas.

sudo ufw allow "Apache Full"

Criando lista negra de endereços IP com UFW

Digamos que haja um spammer que tenta constantemente enviar spam para o seu servidor de e-mail. Você pode usar o UFW para bloquear o endereço IP do spammer de acessar a porta TCP 25 do seu servidor de e-mail, com o seguinte comando. Substitua 12.34.56.78 pelo endereço IP do spammer.

sudo ufw insert 1 deny in from 12.34.56.78 to any port 25 proto tcp

Observe que as regras de firewall recém-adicionadas são colocadas na parte inferior por padrão. Se você permitiu anteriormente o acesso à porta 25 de qualquer lugar, será necessário inserir a regra de negação como a primeira regra, assim como acima, para que a regra de negação seja aplicada primeiro. Você sempre pode inserir uma nova regra de negação como a primeira regra.

sudo ufw insert 1 deny in from 78.56.34.12 to any port 25 proto tcp

Você também pode bloquear um intervalo de endereços IP como abaixo.

sudo ufw insert 1 deny in from 192.168.0.0/24 to any port 25 proto tcp

Para bloquear o acesso de um endereço IP a todas as portas do seu servidor, execute

sudo ufw insert 1 deny in from 12.34.56.78

Criando lista de permissões de endereços IP com UFW

Agora, digamos que você execute um servidor OpenSSH e queira permitir apenas que determinado endereço IP faça login em seu servidor por meio de SSH. Você pode usar o UFW para criar uma lista de permissões de endereços IP. Por exemplo, não tenho endereço IP estático em minha casa, mas configurei vários servidores VPN na nuvem, então agora posso configurar o UFW para permitir conexão de entrada para a porta 22 apenas a partir do endereço IP do meu servidor VPN.

Primeiro, adicione o endereço IP à lista de permissões.

sudo ufw insert 1 allow in from 12.34.56.78 to any port 22 proto tcp

Então você precisa obter o número de referência da regra permitir SSH de qualquer lugar e excluir essa regra.

sudo ufw status numbered

sudo ufw delete reference-number

Observe que você precisa excluir as regras IPv4 e IPv6. Observe também que se você excluir primeiro a regra superior, o número de referência da regra inferior será alterado.

De agora em diante, apenas o seu endereço IP poderá acessar a porta TCP 22.

Como usar o endereço IPv6 no UFW

Primeiro, certifique-se de que IPV6=yes esteja definido no arquivo /etc/default/ufw. Se não estiver definido, adicione-o nesse arquivo e reinicie o UFW (sudo systemctl restart ufw).

Então você pode simplesmente substituir o endereço IPv4 pelo endereço IPv6 nos comandos ufw como abaixo.

sudo ufw allow in from 2607:f8b0:4005:804::200e to any port 587

Observe que você não pode inserir uma regra IPv6 entre regras IPv4. As regras IPv6 devem sempre ser colocadas após as regras IPv4.

Como configurar o mascaramento de IP com UFW

Às vezes você deseja configurar seu próprio servidor VPN, então você precisará configurar o mascaramento de IP em seu servidor VPN para que ele se torne um roteador virtual para clientes VPN. Infelizmente, o UFW não oferece uma maneira conveniente de fazer isso. Temos que adicionar o comando iptables em um arquivo de configuração UFW.

sudo nano /etc/ufw/before.rules

Por padrão, existem algumas regras para a tabela filter. Adicione as seguintes linhas no final deste arquivo.

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic through eth0 - Change eth0 to match your network interface
-A POSTROUTING -o eth0 -j MASQUERADE

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

Por padrão, o UFW proíbe o encaminhamento de pacotes, o que é ótimo porque evita que pessoas aleatórias na Internet usem sua caixa para fazer coisas maliciosas. Mas precisamos permitir o encaminhamento para nossa rede privada. Encontre a cadeia ufw-before-forward neste arquivo e adicione as 3 linhas a seguir, que aceitarão o encaminhamento de pacotes se o IP de origem ou IP de destino estiver em 10.10.10.0/24 intervalo.

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

Salve e feche o arquivo. Em seguida, reinicie o UFW.

sudo ufw disable

sudo ufw enable

ou simplesmente

sudo systemctl restart ufw

Embora isso não esteja relacionado à configuração do UFW, mas para rotear pacotes, você também precisa configurar o encaminhamento de IP. Isso pode ser feito definindo o seguinte no final do arquivo /etc/sysctl.conf.

net.ipv4.ip_forward = 1

Em seguida, aplique as alterações com o seguinte comando.

sudo sysctl -p

Como configurar o encaminhamento de porta no UFW

E se você usar UFW em seu roteador e quiser rotear pacotes como solicitações HTTP para hosts LAN internos? Nesse caso, você precisa configurar o encaminhamento de porta. Edite o arquivo /etc/ufw/before.rules.

sudo nano /etc/ufw/before.rules

Em seguida, adicione as seguintes linhas na tabela NAT, acima da linha COMMIT. Substitua 12.34.56.78 pelo endereço IP público do seu roteador.

:PREROUTING ACCEPT [0:0]
# forward 12.34.56.78  port 80 to 192.168.1.100:80
# forward 12.34.56.78  port 443 to 192.168.1.100:443
-A PREROUTING -i eth0 -d 12.34.56.78  -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
-A PREROUTING -i eth0 -d 12.34.56.78  -p tcp --dport 443 -j DNAT --to-destination 192.168.1.100:443

Isso instrui o UFW a usar o destino DNAT para encaminhar solicitações HTTP e HTTPS para o host 192.168.100 na rede local.

Dica: DNAT (Destination NAT) altera o endereço IP de destino. Um exemplo típico é o encaminhamento de porta. SNAT (Source NAT) altera o endereço IP de origem. Um exemplo típico é quando um host atrás de um roteador Wifi deseja navegar na Internet.

Libere as regras da tabela NAT.

sudo iptables -F -t nat

Reinicie o UFW para processar todas as regras NAT.

sudo systemctl restart ufw

Você também precisa habilitar o encaminhamento de IP no arquivo /etc/sysctl.conf conforme mencionado acima.

Se o host 192.168.1.100 também estiver executando o UFW, será necessário permitir as portas 80 e 443 no UFW.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Observe que o host LAN 192.168.1.100 deve usar o roteador UFW como gateway. Se estiver usando outro endereço IP como gateway, o encaminhamento de porta não funcionará.

Como bloquear o tráfego BitTorrent em servidores em nuvem

Se você executa um servidor na nuvem, provavelmente deseja bloquear o tráfego de BitTorrent no servidor, porque se você ou outra pessoa baixar acidentalmente conteúdo ilegal (filmes, programas de TV) via BitTorrent e for pego, seu provedor de hospedagem provavelmente suspenderá seu conta.

Os clientes BitTorrent modernos criptografam o tráfego entre pares, por isso não é fácil diferenciar o tráfego BitTorrent de outros tipos de tráfego. Embora não exista uma maneira perfeita de bloquear o tráfego do BitTorrent, aqui está uma solução simples.

Bloqueie o tráfego de saída por padrão.

sudo ufw default deny outgoing

Em seguida, permita portas de saída específicas. Por exemplo, você precisa permitir a porta DNS.

sudo ufw allow out 53

E você precisa permitir que as portas 80 e 443 atualizem seus pacotes de software do repositório.

sudo ufw allow out 80/tcp

sudo ufw allow out 443/tcp

Se este for o seu servidor de e-mail, você precisará permitir a porta 25.

sudo ufw allow out 25/tcp

Reinicie o UFW para que as alterações tenham efeito.

sudo systemctl restart ufw

Embora esta não seja uma solução perfeita, porque alguns usuários podem configurar seus clientes BitTorrent para usar a porta 80 ou 443, na realidade, esta situação é bastante rara. A maioria dos usuários apenas usa as configurações padrão e meu cliente BitTorrent no servidor interrompeu imediatamente todos os downloads e uploads quando eu apliquei as regras acima no firewall. Se não parar, reinicie o cliente BitTorrent ou o servidor.

Bloqueando conexões de saída para um endereço IP específico

Primeiro, você precisa permitir o tráfego de saída.

sudo ufw default allow outgoing

Em seguida, bloqueie um endereço IP específico com:

sudo ufw insert 1 deny out to 12.34.56.78

Reinicie o UFW.

sudo systemctl restart ufw

UFW e fail2ban

Fail2ban é um programa que usa firewall iptables para evitar ataques de força bruta aos servidores. UFW e Fail2ban não interferirão um no outro.

Erro UFW

Se você verificar ufw status e receber o seguinte erro, provavelmente é porque você instalou um novo kenel Linux.

modprobe: ERROR: ../libkmod/libkmod-module.c:191 kmod_module_parse_depline() ctx=0x564bf80c82a0 path=/lib/modules/5.4.0-89-generic/kernel/net/netfilter/x_tables.ko error=No such file or directory
modprobe: ERROR: could not insert 'ip_tables': Unknown symbol in module, or unknown parameter (see dmesg)
iptables v1.8.4 (legacy): can't initialize iptables table `filter': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

Verifique qual kernel você está usando.

uname -r

saída de amostra:

5.4.0-89-generic

Verifique os kernels Linux instalados.

sudo update-grub

Exemplo de saída:

Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.0-121-generic
Found initrd image: /boot/initrd.img-5.4.0-121-generic
Found linux image: /boot/vmlinuz-5.4.0-120-generic
Found initrd image: /boot/initrd.img-5.4.0-120-generic
done

Como você pode ver, o kernel 5.4.0-89-generic foi excluído por uma atualização. Você pode reinicializar o servidor para usar o novo kernel Linux. Se não quiser reiniciar agora, você pode instalar o kernel antigo novamente assim:

sudo apt install linux-modules-5.4.0-89-generic linux-modules-extra-5.4.0-89-generic

Agora você poderá usar o UFW novamente.

Dica: Se você ainda quiser usar o antigo kernel Linux, certifique-se de usar o Canonical Livepatch Service para corrigir o kernel Linux no Ubuntu sem reinicializar.

Gufw

Gufw é uma interface gráfica de usuário para ufw.

  • Como instalar e usar o Firewall Gufw no Ubuntu Desktop

Empacotando

É isso! Espero que este artigo tenha ajudado você a usar o UFW no Debian, Ubuntu e Linux Mint. Como sempre, se você achou esta postagem útil, inscreva-se em nosso boletim informativo gratuito para receber mais dicas e truques. Se cuide 🙂

Artigos relacionados