Ir diretamente para o conteúdo

Definições de cookies

Escolha que tipos de cookies permite. Pode alterar a sua escolha a qualquer momento em Definições de cookies, no fundo de cada página. Política de privacidade

Necessários

Sempre ativos

Necessários para iniciar sessão, manter o seu carrinho e memorizar as suas escolhas. Estão sempre ativos.

Que cookies?
  • weboke_sessie, weboke_klant, weboke_remember: a sua sessão e manter a sessão iniciada
  • weboke_basket: o seu carrinho
  • wkBtwIncl: mostrar preços com ou sem IVA
  • wok_cookies: a sua escolha de cookies, 12 meses

Mede que anúncio leva a uma visita ou encomenda, para não pagarmos por anúncios que não dão resultado.

Que cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), até 90 dias
  • OpenAI Ads, anúncios no ChatGPT
  • wok_aff: através de que parceiro chegou até nós (programa de afiliados), 60 dias

4,6

País e idioma

Cada país tem o seu próprio site, com os preços e o IVA desse país.

Ver

Uma firewall com ufw e nftables

Módulo 5: Proteger a rede · Tempo de leitura: 12 minutos

Objetivo de aprendizagem: No final desta lição, saberá configurar uma firewall que só permite o que é necessário, em IPv4 e em IPv6, sem ficar sem acesso ao servidor, e saberá contra o que uma firewall no seu servidor não protege.

Conceitos-chave: filtro de pacotes, netfilter, nftables, iptables-nft, ufw, política predefinida, allow, deny, reject, limit, IPv6 no ufw, firewall do fornecedor, firewalld, Docker e a firewall

O que faz uma firewall

Uma firewall no seu servidor é um filtro de pacotes: para cada pacote de rede que chega, consulta uma lista de regras e decide se pode passar. No Linux, esse filtro está no kernel e chama-se netfilter. A configuração faz-se com um programa:

  • nftables (comando nft) é a ferramenta atual. O Debian utiliza-o por predefinição desde o Debian 10.
  • iptables é a ferramenta antiga. Nos sistemas modernos, iptables é normalmente uma tradução para nftables (iptables-nft), para que os manuais antigos continuem a funcionar.
  • ufw (Uncomplicated Firewall) é uma camada simples por cima, presente por predefinição no Ubuntu e instalável no Debian com um único comando. Para um único servidor, o ufw é a opção mais fácil. Esta lição utiliza o ufw e mostra depois como ficam as mesmas regras em nftables.

Uma firewall é a sua segunda camada de defesa. A primeira é garantir que os serviços só escutam no endereço correto (lição 5.1). Em conjunto, asseguram que um erro numa das camadas não se transforma de imediato numa porta aberta.

Primeiro: como recuperar o acesso se algo correr mal?

O erro clássico: ativa a firewall, esquece-se de permitir o SSH e a ligação cai. Deixa então de conseguir aceder por SSH. Antes de começar:

  1. Saiba como abrir a consola do seu fornecedor (lição 1.2). Esta funciona fora da rede, portanto também quando a firewall bloqueia tudo. Aí inicia sessão e escreve ufw disable.
  2. Faça um snapshot se tiver dúvidas.
  3. Mantenha a sua sessão SSH atual aberta e teste com uma segunda sessão.

O ufw em cinco passos

Passo 1: instalar e escolher a predefinição.

anna@web1:~$ sudo apt install ufw
anna@web1:~$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
anna@web1:~$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'

A política predefinida aplica-se a tudo o que não tem uma regra. "Deny incoming" significa: tudo o que entra é proibido, exceto o que permitir a seguir. É a única base segura. O tráfego de saída (o seu servidor a obter atualizações) é permitido.

Passo 2: permitir o SSH antes de ativar a firewall.

anna@web1:~$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)

OpenSSH é um perfil de aplicação que o ufw conhece (corresponde à porta 22/tcp). Se o SSH estiver numa porta diferente, utilize o número: sudo ufw allow 2222/tcp. Repare em "Rules updated (v6)": o ufw cria a regra também para IPv6. Fá-lo porque em /etc/default/ufw consta a linha IPV6=yes, que é a predefinição. Convém verificar; se estiver em no, a sua firewall só se aplica a IPv4.

Passo 3: o que mais precisar.

anna@web1:~$ sudo ufw allow 80/tcp
anna@web1:~$ sudo ufw allow 443/tcp
anna@web1:~$ sudo ufw allow 443/udp       # apenas se utilizar HTTP/3

Pode limitar uma regra a um único endereço de origem, por exemplo uma porta de administração que só pode ser usada a partir do seu escritório:

anna@web1:~$ sudo ufw allow from 198.51.100.20 to any port 9090 proto tcp

Passo 4: ativar.

anna@web1:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Passo 5: verificar. Abra uma segunda janela e inicie sessão novamente. Se conseguir, o SSH está bem configurado. Veja depois as regras:

anna@web1:~$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

Para remover uma regra, utilize os números: sudo ufw status numbered e depois sudo ufw delete 3.

deny, reject e limit

  • deny descarta o pacote em silêncio: do exterior vê-se "filtrado" (lição 5.1).
  • reject devolve uma recusa: do exterior vê-se "fechado". É mais correto para os seus próprios serviços, mas revela que existe um servidor.
  • limit permite uma ligação, mas bloqueia um endereço que tente ligar-se seis ou mais vezes em 30 segundos. Útil para o SSH: sudo ufw limit OpenSSH em vez de allow. É grosseiro (conta ligações, não inícios de sessão falhados); o fail2ban (lição 5.3) é mais preciso.

As mesmas regras em nftables

Nos bastidores, o ufw escreve regras netfilter. Se preferir trabalhar sem ufw, escreve o seu próprio ficheiro nftables. No Debian, este encontra-se em /etc/nftables.conf e é carregado com o serviço nftables:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        ct state invalid drop
        iif "lo" accept
        meta l4proto { icmp, ipv6-icmp } accept
        tcp dport { 22, 80, 443 } accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Leia-o assim. A tabela chama-se filter e pertence à família inet: uma única tabela para IPv4 e IPv6 em simultâneo, para que não se possa esquecer do IPv6. Na cadeia input, a política é drop. Depois: as respostas a ligações já existentes podem regressar (established,related), tudo no loopback é permitido, o ICMP é permitido (necessário, entre outros, para o IPv6 e para as mensagens de erro sobre o tamanho dos pacotes) e as portas 22, 80 e 443 são permitidas.

anna@web1:~$ sudo nft -c -f /etc/nftables.conf    # verificar sem carregar
anna@web1:~$ sudo systemctl enable --now nftables
anna@web1:~$ sudo nft list ruleset

Utilize ou o ufw ou um ficheiro nftables próprio, não ambos: escrevem no mesmo netfilter e podem interferir com as regras um do outro.

Contra o que a sua firewall não protege

  • Serviços que o próprio utilizador permite. A porta 443 está aberta para o seu site; uma vulnerabilidade no site continua, portanto, acessível. A firewall só protege as portas que estão fechadas.
  • Docker. Quando publica uma porta com o Docker (-p 5432:5432), o Docker define as suas próprias regras netfilter, que redirecionam o tráfego antes de as regras do ufw serem aplicadas. A documentação do Docker diz textualmente que o Docker e o ufw não funcionam bem em conjunto. Uma porta de um contentor pode, assim, estar aberta ao exterior sem que ufw status a mostre. A solução (publicar em 127.0.0.1) é abordada na lição 9.3.
  • Tráfego de saída. Com "allow outgoing", um programa comprometido pode ligar-se a qualquer lado. Para a maioria dos servidores pequenos, é uma opção aceitável; ambientes mais rigorosos limitam também o tráfego de saída.

A firewall do seu fornecedor

Muitos fornecedores dispõem também de uma firewall na rede, à frente do seu servidor, que configura no painel de cliente (por vezes chamada "cloud firewall" ou "security group"). É uma excelente camada adicional e funciona mesmo que algo seja mal configurado no próprio servidor. Mas não substitui a firewall no servidor: se mudar o servidor de sítio ou mudar de fornecedor, ela não vai consigo, e nem todos os fornecedores a oferecem. Mantenha, por isso, sempre uma firewall no próprio servidor.

No AlmaLinux e no Rocky Linux

Nestes sistemas, o firewalld está ativo por predefinição, com zonas. Os comandos mais importantes:

[root@web1 ~]# firewall-cmd --list-all
[root@web1 ~]# firewall-cmd --permanent --add-service=http --add-service=https
[root@web1 ~]# firewall-cmd --reload

Sem --permanent, uma alteração só vale até ao próximo reinício; com --permanent, só entra em vigor após --reload. O SSH já está aberto na zona predefinida.

Na prática

Se, ainda assim, ficar sem acesso a um VPS da WebOké, abra a consola no ecrã do VPS, inicie sessão e desative a firewall (ufw disable) ou reverta a última regra. Noutros fornecedores, este acesso de emergência também se chama consola, VNC ou rescue. Saiba onde está esse botão antes de precisar dele.

Resumo

  • Uma firewall é a sua segunda camada depois de "escutar só onde é necessário"; o nftables é a ferramenta do kernel, o ufw é uma camada simples por cima.
  • Comece com default deny incoming, permita o SSH antes de ufw enable, teste com uma segunda sessão e conheça a consola do seu fornecedor.
  • Verifique se o ufw também cobre o IPv6 (IPV6=yes); no nftables, a família inet trata disso de uma só vez.
  • deny mostra "filtrado" do exterior, reject mostra "fechado"; limit trava ligações repetidas.
  • As portas do Docker contornam o ufw (lição 9.3); a firewall do seu fornecedor é uma camada adicional, não um substituto.

Questionário

1. Por que ordem ativa o ufw pela primeira vez num servidor onde tem sessão iniciada por SSH?



2. Depois de ufw enable, o seu site deixa de funcionar por IPv4, mas o SSH continua a funcionar. Qual é a causa mais provável?



3. Publica com o Docker a porta 5432 de um contentor de base de dados. ufw status não mostra nenhuma regra para 5432. A base de dados está acessível a partir do exterior?



4. Porque é que o exemplo de nftables utiliza uma tabela da família inet?



5. O seu fornecedor tem uma firewall de rede no painel de cliente. Continua a precisar de uma firewall no servidor?



Exercício

Exercício O5.2: Configurar a sua firewall. Ative no seu servidor uma firewall com ufw (ou nftables, ou firewalld no AlmaLinux/Rocky): por predefinição, tudo fechado à entrada, o SSH e o que mais precisar realmente. Teste com uma segunda sessão, verifique se o IPv6 está coberto e confirme a partir do exterior com nc que uma porta não permitida está fechada ou filtrada. Preencha a lista de verificação e cole o seu ufw status verbose (ou nft list ruleset); indique para cada porta aberta a sua finalidade.

Exercício O5.2: Configurar a sua firewall

Este exercício faz você mesmo; ninguém o verifica. Assinale o que já fez e marque o exercício como concluído.



As suas marcações e notas ficam apenas neste navegador; não as enviamos para lado nenhum. Se tiver sessão iniciada, guardamos em Os meus cursos apenas que concluiu o exercício.

Para saber mais

Um momento…

Configurar os seus domínios

Para cada domínio, defina os servidores de nomes, a ligação ao seu alojamento e quem fica como titular.

A carregar os seus domínios…