Firewall iptables no Linux – Parte 01: Noções Básicas

Firewall iptables no Linux

Configurar de forma conveniente um firewall é de extrema importância para a segurança de qualquer sistema operacional moderno. No caso das distribuições Linux, a grande maioria possui um subsistema de filtragem de pacotes e ferramentas para gerenciamento de firewall. Falaremos neste artigo sobre o firewall iptables.

O subsistema de processamento de pacotes de rede do Linux chama-se Netfilter, e o iptables é a ferramental usada para configurá-lo. Site oficial: www.netfilter.org

O iptables opera na camada 3 do modelo OSI; é possível operar na camada 2 também utilizando-se pacotes como o ebtables (Ethernet Bridge Tables – http://ebtables.sourceforge.net/).

O iptables é o firewall padrão incluído na maioria das distribuições Linux – há uma variante chamada nftables que pode vir a substituí-lo no futuro – e ele é na verdade um front-end para o netfilter, que pode manipular a pilha de rede do Linux.

O iptables funciona, basicamente, verificando cada pacotes que atravessa as interfaces de rede e comparando-os com um conjunto de regras pré-definidas para descobrir o que fazer com esses pacotes.

O pacote iptables também inclui o ip6tables, o qual é usado para configurar o filtro de pacotes para redes IPv6.

Algumas aplicações do iptables:

  • Construir firewalls de Internet baseados em filtragem de pacotes “stateless” e “stateful”
  • Usar NAT e masquerading para compartilhamento de Internet com uma rede local
  • Usar NAT para implementar proxies transparentes
  • Realizar manipulação de pacotes adicional (mangling), como alterar bits no cabeçalho IP
  • Monitorar o volume de tráfego de rede
  • Realizar Encaminhamento de Portas (que é um tipo de DNAT)
  • Balanceamento de carga de rede.

Entre outras aplicações.

Como funciona o iptables

O firewall iptables opera comparando o tráfego de rede que a máquina recebe com um conjunto de regras pré-especificadas, as quais definem as características que os pacotes devem possuir para corresponderem às regras, e as ações que serão tomadas para esses pacotes.

Podemos criar regras que verifiquem a correspondência de uma pacote com uma regra específica de várias formas, como por exemplo por tipo de protocolo, portas de origem ou destino, endereços IP de origem ou destino, interfaces em uso, tipos de mensagens, entre muitas outras.

Quando ocorre uma correspondência entre um pacote e uma regra, uma ação será tomada, e a essa ação dá-se o nome de target. O target (“objetivo”) pode determinar se um pacote será aceito ou descartado, movido para outra cadeia para processamento, logado, ou ainda outras opções.

A arquitetura do iptables agrupa o processamento dos pacotes de rede em tabelas por função (filtro de pacotes, tradução de endereços de rede e outras formas de configuração de pacotes), cada qual possui cadeias (chains) de regras de processamento. As regras consistem em correspondências (matches) usadas para determinar a quais pacotes cada regra será aplicada, e objetivos (targets), que determinam o que será feito com os pacotes que correspondam às regras.

Tabelas

O iptables organiza suas regras em uma estrutura que contém tabelas e cadeias. As tabelas são um agrupamento de cadeias em um nível mais alto, e determinam grosso modo o escopo das regras que serão criadas. O iptables possui diversas tabelas ou listas de regras:

  • filter – Tabela padrão para manipular pacotes de rede, usada para configurar políticas para o tráfego uqe entra, atravessa ou sai do computador.
  • nat – Usada para alterar pacotes que criam uma nova conexão, e para redirecionar conexões para NAT..
  • mangle – Usada para tipos específicos de alteração de pacotes, como a modificação de opções do cabeçalho IP de um pacote..
  • raw – Marca pacotes que não devem ser manipulados pelo sistema de rastreamento de conexões.

Uma tabela contém cadeias, e as cadeias contém regras, como podemos ver na figura a seguir:

Tabelas no Firewall iptables do Linux

As tabelas possuem as cadeias a seguir:

  • Tabela FIlter: Cadeias INPUT, OUTPUT e FORWARD
  • Tabela NAT: Cadeias PREROUTING, OUTPUT, POSTROUTING
  • Tabela Mangle: Cadeias PREROUTING, OUTPUT, POSTROUTING, INPUT e FORWARD
  • Tabela raw: Cadeias PREROUTING e OUTPUT
  • Tabela security – Usada para regras de rede MAC (Mandatory Access Control)

Cadeias

As regras são organizadas em grupos denominados cadeias (chains), que por sua vez ficam contidas nas tabelas. Uma cadeia é então um conjunto de regras usadas para verificar a correspondência com um pacote – de forma sequencial. Um pacote é verificado junto às regras na chain, e se não há correspondência, a próxima regra na ordem é verificada. Quando um pacote corresponde a uma regra na cadeia, a ação associada a essa regra é executada e as regras restantes não são verificadas contra esse pacote. Caso nenhuma regra corresponda ao pacote, a regra padrão (policy) será aplicada.

Podemos criar nossas próprias cadeias se for necessário, mas no geral utilizamos as cadeias já existentes e definidas por padrão. São elas:

  • INPUT – aplica regras aos pacotes de rede que chegam ao servidor.
  • OUTPUT – aplica regras aos pacotes de rede originados e que partem do servidor.
  • FORWARD – aplica regras aos pacotes de rede roteados através do servidor (para outro servidor ou outra interface de rede no mesmo servidor)
  • PREROUTING – Altera pacotes de rede quando eles chegam e antes do roteamento. Usado para DNAT (Destination NAT)
  • POSTROUTING – Altera pacotes de rede após o roteamento. Usado para SNAT (Source NAT)

As cadeias podem ter zero ou mais regras, e possuem uma política padrão. A política (policy) determina o que acontece com um pacote caso nenhuma das regras da cadeia corresponda a ele, e somente pode ser ACCEPT ou DROP (RETURN para cadeias definidas pelo usuário).

Por meio de módulos que podem ser carregados via regras, o iptables também pode rastrear conexões. Assim, podemos criar regras que definem o que acontece com um pacote baseado em sua relação com pacotes anteriores. Chamamos essa técnica de “rastreamento de estado” ou “rastreamento de conexão”.

Veja nas figuras a seguir a relação entre as cadeias apresentadas e as tabelas filter, nat e mangle:

Cadeias do firewall iptables no Linux

1 – Fluxo de pacotes de rede e pontos de hook da tabela filter

tabela de NAT no iptables

2 – Fluxo de pacotes de rede e pontos de hook da tabela NAT

Fluxo de pacotes de rede e pontos de hook da tabela mangle no iptables

3 – Fluxo de pacotes de rede e pontos de hook da tabela mangle

Regras de Firewall (Rules)

Uma regra do iptables consiste em um ou mais critérios de correspondência que determinam quais pacotes de rede serão afetados, e uma especificação de objetivo (“target”) que determina como o pacote de rede será afetado. Para que a regra seja aplicada a um pacote todas as opções de correspondência listadas na regra devem ser satisfeitas. Se não houver um critério de correspondência especificado na regra, então todos os pacotes serão considerados como correspondentes.

Há muitas correspondências (“matches”) disponíveis para uso com o iptables. Além das correspondências genéricas, como tipo de protocolo, IP de origem e destino, portas de comunicação, entre outras, também é possível utilizar correspondências (parâmetros) disponibilizados por meio de extensões carregadas dinamicamente, e informadas na regra com o uso da opção -m ou –match.

Já as ações (targets / objetivos) são usadas para especificar a ação que será tomada quando uma regra corresponder a um pacote e também para especificar a regra padrão da cadeia. Há quatro targets disponíveis no iptables, e podemos acrescentar outros por meio de módulos de extensão. Os targets padrão são ACCEPT, DROP, QUEUE e RETURN, descritos à frente no texto.

A estrutura geral de uma regra é a seguinte:

iptables subcomando chain parâmetro_1 valor_1 parâmetro_n valor_n ação

Os subcomandos principais que podem ser usados podem ser vistos no quadro a seguir:

-A anexa a regra no final da cadeia especificada

-F apaga todas as regras na cadeia especificada

-L lista todas as regras da cadeia

-N cria uma nova cadeia com o nome desejado

-P configura a regra padrão da cadeia

-D apaga uma regra em uma posição na cadeia

-X exclui uma cadeia vazia

-I insere uma regra em uma posição na cadeia

Já as ações (targets) possíveis estão listadas na tabela a seguir:

Ações embutidas no iptables:

ACCEPT – O pacote é permitido

DROP – Descartar o pacote

QUEUE – Enviar o pacote ao userspace (código fora do kernel)

RETURN – Descontinuar o processamento do pacote e aplicar a regra padrão a ele.

Ações adicionais:

REJECT – Descarta o pacote e envia feedback ao remetente.

DNAT – reescreve endereço de destino (NAT)

SNAT – reescreve endereço de origem (NAT)

LOG – coloca no log informações sobre o pacote

Com relação aos parâmetros, existem dezenas deles para que possamos criar regras dos mais variados tipos. Na tabela a seguir listamos alguns dos parâmetros mais comuns:

Parâmetro Significado
-t tabela Especificar a tabela (filter é a padrão)
-j ação Realiza a ação especificada
-p protocolo Especifica o protocolo (icmp, tcp, udp, all)
-s IP IP de origem do pacote
-d IP IP de destino do pacote
-i interface Nome da interface de rede de entrada do pacote
-o interface Nome da interface de rede de saída do pacote
–sport portas Portas de origem
–dport portas Portas de destino
–syn Identifica nova requisição de conexão
–icmp-type tipo de mensagem ICMP

Na próxima lição aprenderemos a visualizar as regras atuais do firewall configuradas no sistema, a anatomia de uma regra comum e como criar regras simples.

 

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

2 Comentários em Firewall iptables no Linux – Parte 01: Noções Básicas

  1. Robson Pires Matias // 26/11/2020 em 8:35 // Responder

    Uma palavra define esse artigo: excelência. Obrigado por disponibilizar um conteúdo tão bom.

Escreva um comentário

Seu e-mail não será divulgado


*