Tutorial de iptables: protegendo um VPS com o firewall do Linux

O iptables é uma ferramenta de firewall do Linux que permite controlar o tráfego que chega ao seu VPS por meio de regras para permitir, bloquear, encaminhar e filtrar pacotes.

O iptables funciona por meio do netfilter, integrado ao kernel do Linux, e continua sendo uma das soluções de firewall mais usadas em servidores Linux.

O iptables organiza as regras em tabelas, cadeias, critérios de correspondência e alvos. Para configurar o firewall com segurança, primeiro permita o SSH e as conexões já estabelecidas e só depois aplique as regras DROP. As regras precisam ser salvas explicitamente para continuar válidas após uma reinicialização.

Tanto o UFW quanto o nftables são alternativas viáveis, dependendo das suas necessidades.

Os principais passos para configurar o iptables são:

  1. Verifique e instale o iptables.
  2. Liste as regras existentes.
  3. Permita o SSH antes de aplicar regras restritivas.
  4. Adicione regras básicas de firewall.
  5. Abra as portas de serviços comuns.
  6. Exclua ou limpe regras.
  7. Salve as regras permanentemente.

O que é o iptables?

O iptables é uma ferramenta de firewall de linha de comando que gerencia as regras de firewall do Linux por meio do netfilter, um sistema de filtragem de pacotes integrado diretamente ao kernel do Linux. Todo pacote que entra ou sai do seu servidor passa pelo netfilter, e o iptables define as regras que determinam o que acontece com ele.

O iptables gerencia o tráfego IPv4. Para o tráfego IPv6, é necessário usar o ip6tables, que segue a mesma sintaxe, mas trabalha com um conjunto de regras separado.

Para entender o iptables, comece por cinco conceitos básicos:

ConceitoO que é
TabelaUma coleção de cadeias agrupadas por finalidade. As principais tabelas são filter, nat e mangle.
CadeiaUma lista de regras dentro de uma tabela. As cadeias integradas incluem INPUT, OUTPUT e FORWARD.
RegraUma condição usada para verificar um pacote. Se houver correspondência, o iptables aplica o alvo.
CorrespondênciaOs critérios usados para avaliar um pacote, como IP de origem, porta de destino, protocolo e assim por diante.
AlvoA ação executada quando um pacote corresponde a uma regra: ACCEPT, DROP, RETURN ou REJECT.

A maioria das configurações básicas de segurança para VPS usa a tabela filter, que contém três cadeias padrão. A INPUT processa os pacotes que chegam ao servidor, a OUTPUT processa os pacotes que saem dele e a FORWARD processa os pacotes roteados para um destino diferente do próprio servidor.

Como funciona o iptables?

O iptables verifica cada pacote em relação às regras de uma cadeia, de cima para baixo. A primeira regra que corresponder ao pacote é aplicada, e o iptables para de verificar o restante daquela cadeia. A ordem das regras é importante porque uma regra anterior pode permitir ou bloquear o tráfego antes que qualquer regra posterior seja avaliada.

Existem duas maneiras de adicionar regras: a opção -A adiciona uma regra ao final de uma cadeia, enquanto a opção -I insere uma regra em uma posição específica. Isso é útil quando uma regra precisa ser avaliada antes das que já existem. Se você adicionar uma regra DROP abrangente antes da regra que permite o SSH, perderá o acesso ao servidor. Por isso, é importante adicionar as regras na ordem correta.

Sempre adicione as regras essenciais de permissão, especialmente para SSH, antes de qualquer regra que bloqueie ou descarte o tráfego.

Qual é a diferença entre iptables, ip6tables e nftables?

O iptables gerencia regras de firewall para IPv4. Já o ip6tables gerencia regras para IPv6 usando a mesma sintaxe de comandos. No entanto, os dois conjuntos de regras são totalmente separados: uma regra do iptables não afeta o tráfego IPv6 e vice-versa.

O nftables é o framework de firewall mais recente do Linux e substitui tanto o iptables quanto o ip6tables. Ele gerencia IPv4 e IPv6 em um único conjunto de regras e usa uma sintaxe mais simples. Nas versões mais recentes do Ubuntu, os comandos do iptables podem usar o nftables como backend sem que isso seja perceptível. Nesse caso, as regras do iptables são armazenadas e processadas pelo nftables.

Para quem quer um gerenciamento mais simples do firewall no Ubuntu, sem precisar escrever regras do iptables diretamente, o UFW é abordado mais adiante neste guia.

Como configurar o iptables em um VPS com Ubuntu

A maneira mais segura de configurar o firewall de um VPS com iptables é seguir uma ordem específica: primeiro, verifique as regras existentes. Depois, permita o SSH, as conexões já estabelecidas e as portas de serviço necessárias antes de bloquear qualquer tráfego.

Aplique as regras DROP por último. Se essa ordem não for seguida, os administradores podem perder o acesso ao servidor.

1. Verifique e instale o iptables

O iptables já vem pré-instalado na maioria das distribuições Linux. Este tutorial usa um VPS com Ubuntu como exemplo principal. Para verificar se o iptables já está disponível no seu sistema, execute:

iptables --version

Se o comando retornar um número de versão, o iptables já está instalado. Nas versões mais recentes do Ubuntu, a saída pode fazer referência ao backend nftables. Isso significa que os comandos do iptables são processados pelo nftables, mas a sintaxe permanece a mesma.

Se o iptables não estiver instalado, execute:

sudo apt update

sudo apt install iptables

2. Liste as regras existentes do iptables

Verifique as regras existentes antes de adicionar novas. Uma regra pode já permitir ou bloquear o tráfego que você pretende configurar, e adicionar regras duplicadas ou conflitantes pode causar um comportamento imprevisível.

Liste todas as regras atuais com informações detalhadas e números de linha:

sudo iptables -L -v -n --line-numbers

A opção -n exibe os endereços IP e números de porta em formato numérico, em vez de resolvê-los para nomes de host. Isso torna a saída mais rápida e fácil de ler. Os números de linha identificam a posição de cada regra na cadeia, e você precisará deles para excluir ou inserir regras em posições específicas.

Os contadores de pacotes e bytes na saída mostram se o tráfego realmente corresponde a cada regra, o que ajuda na solução de problemas.

3. Permita o SSH antes de alterar as regras do firewall

Warning

Aviso! Aplicar regras restritivas de firewall antes de permitir o SSH fará com que você perca o acesso ao VPS. Nenhuma mensagem de erro será exibida, a conexão simplesmente será interrompida e você perderá o acesso.

Permita o SSH antes de adicionar qualquer regra DROP ou REJECT. A porta padrão do SSH é a 22:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Se você já alterou a porta SSH do seu VPS, substitua 22 pelo número da porta configurada. Se não tiver certeza, verifique a configuração do servidor abrindo este arquivo:

sudo nano /etc/ssh/sshd_config

As senhas são o método mais comum de autenticação via SSH, mas configurar chaves SSH é mais seguro e é recomendável fazer isso antes de restringir o firewall.

Depois de adicionar a regra de SSH, mantenha a sessão atual aberta e teste o acesso em uma segunda janela do terminal antes de salvar qualquer regra restritiva. Se a segunda conexão funcionar, é seguro continuar.

4. Adicione regras básicas de firewall do iptables

As regras restantes configuram seu firewall por ordem de prioridade. Adicione-as na sequência abaixo para evitar bloquear o tráfego de que você precisa.

Permita o tráfego do localhost

O tráfego na interface de loopback fica restrito ao próprio servidor. Bloqueá-lo interrompe a comunicação interna entre serviços em execução na mesma máquina, como uma aplicação web que se conecta a um banco de dados local:

sudo iptables -A INPUT -i lo -j ACCEPT

Permita conexões estabelecidas e relacionadas

Essa regra permite o tráfego associado a conexões que o servidor já iniciou ou aceitou. Sem ela, as respostas às solicitações de saída são bloqueadas:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Permita HTTP e HTTPS

Abra as portas 80 e 443 para permitir o tráfego da web:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Bloqueie um endereço IP específico

Para bloquear todo o tráfego proveniente de um único endereço IP:

sudo iptables -A INPUT -s 192.0.2.1 -j DROP

Bloqueie um intervalo de endereços IP

Use o módulo iprange para descartar o tráfego proveniente de um intervalo de endereços:

sudo iptables -A INPUT -m iprange --src-range 192.0.2.1-192.0.2.254 -j DROP

Descarte pacotes inválidos

Pacotes inválidos não pertencem a nenhuma conexão conhecida e costumam ser usados em ataques de rede. Descarte-os antes que cheguem aos seus serviços:

sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Descarte todo o tráfego de entrada restante

Adicione essa regra por último. Ela descarta todo o tráfego de entrada que não tenha correspondido a uma regra ACCEPT anterior. Se você adicioná-la antes das regras de permissão, todo o tráfego será bloqueado, inclusive o SSH:

sudo iptables -A INPUT -j DROP

5. Abra as portas de serviços comuns com o iptables

Cada serviço em execução no seu VPS usa uma porta específica, e o iptables precisa de uma regra explícita para permitir o tráfego nessa porta:

ServiçoProtocoloPortaObservações
SSHTCP22Altere a porta padrão, se possível
HTTPTCP80Necessária para tráfego web não criptografado
HTTPSTCP443Necessária para tráfego web criptografado
MySQLTCP3306Restrinja o acesso apenas a IPs confiáveis
PostgreSQLTCP5432Restrinja o acesso apenas a IPs confiáveis
SMTPTCP25Apenas se você tiver um servidor de e-mail em execução
IMAPTCP993Apenas se você tiver um servidor de e-mail em execução

Portas de banco de dados como 3306 e 5432 nunca devem ser abertas para a internet pública. Em vez disso, restrinja-as a um endereço IP confiável ou a uma interface de rede privada:

sudo iptables -A INPUT -p tcp --dport 3306 -s 192.0.2.1 -j ACCEPT

Substitua 192.0.2.1 pelo endereço IP da máquina que precisa acessar o banco de dados.

6. Exclua ou limpe as regras do iptables

Excluir uma regra específica não afeta o restante da configuração. Já a limpeza remove todas as regras de uma só vez.

Exclua uma regra específica

Para remover uma regra sem afetar as demais, use o número da linha dela. Primeiro, liste as regras com os números das linhas:

sudo iptables -L INPUT --line-numbers

Em seguida, exclua a regra na posição que você quer remover. Para excluir a regra número 3 da cadeia INPUT:

sudo iptables -D INPUT 3

Limpe todas as regras

Para remover todas as regras de uma só vez, use a opção -F:

sudo iptables -F

Warning

Aviso! Limpar as regras de um VPS remoto remove todas as regras de permissão e bloqueio. Se a política padrão da cadeia for DROP, você perderá o acesso ao servidor. Se a política padrão for ACCEPT, todas as portas ficarão expostas. Verifique a política padrão antes de limpar as regras.

DROP x REJECT

Ao bloquear o tráfego, você tem duas opções. O alvo DROP descarta o pacote silenciosamente: o remetente não recebe nenhuma resposta e a conexão acaba expirando. Já o alvo REJECT descarta o pacote e envia uma resposta de erro ao remetente. Isso facilita a solução de problemas, mas também confirma que a porta existe.

Use DROP para regras voltadas ao público, nas quais você não quer revelar informações sobre o servidor. Use REJECT em ambientes internos ou de desenvolvimento, onde um feedback mais rápido é útil.

7. Salve as regras do iptables permanentemente

As regras do iptables ficam na memória e, por padrão, não sobrevivem a uma reinicialização. Para manter suas regras depois de reiniciar o VPS, salve-as em um arquivo.

Instale o iptables-persistent

O pacote iptables-persistent salva e carrega as regras automaticamente. No Ubuntu, a instalação também inclui o netfilter-persistent, serviço responsável por carregar as regras salvas durante a inicialização:

sudo apt install iptables-persistent

Durante a instalação, você verá uma mensagem solicitando que salve as regras atuais de IPv4 e IPv6. Escolha Sim para ambas.

Salve as regras manualmente

Se você instalou o iptables-persistent, o diretório /etc/iptables/ já existe. Depois de adicionar ou alterar regras, salve-as para que permaneçam após as reinicializações:

sudo netfilter-persistent save

Esse comando grava as regras de IPv4 e IPv6 em /etc/iptables/rules.v4 e /etc/iptables/rules.v6, respectivamente.

Restaure as regras manualmente

Se você precisar recarregar as regras salvas sem reiniciar o sistema:

sudo iptables-restore < /etc/iptables/rules.v4

sudo ip6tables-restore < /etc/iptables/rules.v6

Verifique após reiniciar

Depois de reiniciar seu VPS, verifique se as regras foram carregadas corretamente:

sudo iptables -L -v -n

A saída deve corresponder às regras que você salvou antes de reiniciar o VPS.

Como configurar NAT e encaminhamento de portas com o iptables

O NAT e o encaminhamento de portas são usados quando o VPS funciona como gateway, roteador, endpoint de VPN ou encaminhador de tráfego para rotear pacotes entre redes ou redirecionar o tráfego de uma porta para outra. Essas regras usam a tabela nat, em vez da tabela filter usada nas etapas anteriores.

O encaminhamento de portas também exige que o encaminhamento de IP esteja habilitado no kernel. Para habilitá-lo temporariamente:

sudo sysctl -w net.ipv4.ip_forward=1

Para tornar a configuração permanente, adicione a seguinte linha ao arquivo /etc/sysctl.conf:

net.ipv4.ip_forward=1

Depois, aplique a alteração:

sudo sysctl -p

Para encaminhar o tráfego que chega pela porta 80 para outro host na sua rede:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.0.2.1:80

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

Se a política da cadeia FORWARD estiver definida como DROP, você também precisará permitir explicitamente o tráfego encaminhado:

sudo iptables -A FORWARD -p tcp -d 192.0.2.1 --dport 80 -j ACCEPT

iptables x UFW: qual ferramenta de firewall você deve usar?

O iptables oferece controle direto sobre todos os aspectos do firewall, como ordem das regras, NAT, encaminhamento de portas, cadeias personalizadas e compatibilidade com scripts existentes. Em contrapartida, a sintaxe é extensa, a ordem das regras não permite erros e uma configuração incorreta em um VPS remoto pode fazer você perder o acesso imediatamente.

O UFW (Uncomplicated Firewall) é uma interface para o iptables que simplifica tarefas comuns de firewall no Ubuntu. Se você só precisa permitir SSH, HTTP e HTTPS, pode configurar um firewall no Ubuntu usando o UFW com apenas alguns comandos, sem o risco de cometer erros na ordem das regras.

O nftables é a alternativa mais moderna para substituir o iptables a longo prazo. Ele gerencia IPv4 e IPv6 em um único conjunto de regras e usa uma sintaxe mais simples, mas exige aprender um novo framework do zero.

A ferramenta certa depende do que você precisa:

  • Use o UFW se precisar apenas de regras básicas, como SSH, HTTP e HTTPS em um VPS com Ubuntu.
  • Use o iptables se precisar de regras personalizadas, NAT, encaminhamento de portas, uma ordem rígida das regras ou compatibilidade com scripts existentes.
  • Use o nftables se estiver configurando um novo servidor e quiser um framework de firewall moderno, sem as limitações das soluções legadas.

Como resolver problemas com regras do iptables

Quando as regras do iptables não estiverem funcionando como esperado, comece verificando as regras ativas com informações detalhadas e números de linha:

sudo iptables -L -v -n --line-numbers

Verifique quatro itens: a ordem das regras, os números das linhas, os contadores de pacotes e bytes e o backend ativo.

A ordem das regras determina qual delas é aplicada primeiro. Regras ACCEPT ou DROP posicionadas incorretamente são a causa mais comum de comportamentos inesperados. Os contadores mostram se o tráfego está realmente correspondendo a uma regra, o que ajuda a confirmar se ela está funcionando ou sendo totalmente ignorada.

Em sistemas Ubuntu modernos, verifique também se o iptables está usando o backend nftables, já que isso pode afetar a forma como as regras são armazenadas e aplicadas.

Recuperação após bloqueio do SSH

Perder o acesso ao VPS via SSH é o problema mais grave que pode ocorrer por causa de uma configuração incorreta do iptables. Um erro de conexão SSH recusada após aplicar regras de firewall geralmente significa que uma regra muito restritiva está bloqueando a porta 22 antes que o iptables chegue à regra ACCEPT.

Quem usa um VPS da Hostinger pode recuperar o acesso pelo terminal do navegador do hPanel, sem precisar de uma conexão SSH. A partir dele, você pode excluir a regra de bloqueio ou limpar todas as regras para restaurar o acesso.

Quando redefinir as regras

Redefinir todas as regras com iptables -F é útil quando o conjunto de regras fica complexo demais para depurar ou quando você quer começar do zero.

Pontos principais sobre como usar o iptables

O iptables continua sendo uma boa opção para ter controle preciso do firewall, criar regras personalizadas, configurar NAT e encaminhamento de portas e manter a compatibilidade com scripts existentes.

Para configurações simples de VPS com Ubuntu, em que você só precisa permitir SSH, HTTP e HTTPS, o UFW cumpre essa função com menos complexidade. Se estiver configurando um novo servidor do zero, vale a pena aprender a usar o nftables, a alternativa mais moderna para substituir o iptables a longo prazo.

As regras do firewall controlam o tráfego que chega ao seu VPS, mas não impedem tentativas repetidas de login a partir de endereços cujo tráfego é permitido pelo firewall. Para bloquear automaticamente ataques de força bruta, configure o Fail2Ban junto com as regras do iptables para reforçar a segurança do servidor.

Todo o conteúdo dos tutoriais deste site segue os rigorosos padrões editoriais e valores da Hostinger.

Author
O autor

Faradilla Ayunindya

Faradilla, or Ninda, is a Content Marketing Specialist with a passion for technology, a curiosity for digital marketing trends, and a love for languages. When she's not writing Hostinger tutorials, you can find her learning about life sciences. Follow her on LinkedIn.

O que dizem nossos clientes

Comentários

3 responses

Write a respond

Por favor, preencha os campos obrigatórios.Por favor, aceite os termos de privacidade.Por favor, preencha os campos obrigatórios e aceite a seleção dos termos de privacidade.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.
Author
Domingos

Maio 22 2019

Ótimo artigo, mas só com o comando (sudo /sbin/iptables-save) não é o bastante para salvar as alterações do IPTABLES, é preciso instalar o módulo de persistência com o comando (sudo apt-get install iptables-persistent).

Author
Geovana Muniz

Outubro 31 2024

Para salvar alterações do IPTABLES, use `sudo apt-get install iptables-persistent` além de `sudo /sbin/iptables-save`.