2.6. IPTables
Incluídos com o Red Hat Enterprise Linux estão ferramentas avançadas para filtragem de pacotes de rede — o processo de controlar pacotes de rede conforme entram, se movem e saem da pilha de rede dentro do kernel. As versões do kernel anteriores à 2.4 que confiavam no
ipchains
para filtragem de pacotes e usavam listas de regras aplicadas ao pacote em cada passo do processo de filtragem. O kernel 2.4 introduziu o iptables
(também chamado de netfilter), o qual é semelhante ao ipchains
mas expande o alcance e controle disponíveis para filtrar pacotes de rede.
Este capítulo foca no conhecimento básico de filtragem de pacote, explica diversas opções disponíveis com os comandos
iptables
, e explica como regras de filtragem podem ser preservadas entre as reinicializações de sistema.
Consulte a Seção 2.6.6, “Recursos Adicionais” para instruções sobre como construir regras de
iptables
e instalar um firewall baseado nestas regras.
Importante
O mecanismo de firewall padrão no kernel 2.4 e versões posteriores é o
iptables
, mas o iptables
não pode ser usado se o ipchains
já estiver sendo executado. Se o ipchains
estiver presente durante a inicialização, o kernel emite um erro e não inicia o iptables
.
A funcionalidade do
ipchains
não foi afetada por estes erros.
2.6.1. Filtro de Pacote
O kernel Linux usa o serviço do Netfilter para filtrar pacotes, permitindo que alguns deles sejam recebidos ou passados pelo sistema enquanto outros são interrompidos. Este serviço é embutido no kernel do Linux e possui três tabelas ou listas de regras embutidos, como se segue:
filter
— A tabela padrão para manipular pacotes de rede.nat
— Usado para alterar pacotes que criam uma nova conexão e usado para o Network Address Translation (NAT).mangle
— Usado para tipos específicos de alteração de pacote.
Cada tabela possui um grupo de correntes (chains), que correspondem às ações realizadas no pacote pelo
netfilter
.
As correntes (chains) embutidas para a tabela do
filtragem
são estas:
- INPUT — Se aplica aos pacotes de rede que são direcionados para o host.
- OUTPUT — Se aplica ao pacotes de rede gerados localmente.
- FORWARD — Se aplica aos pacotes de rede roteados no host.
As correntes embutidas para a tabela
nat
são estas:
- PREROUTING — Altera os pacotes de rede quando chegam.
- OUTPUT — Altera os pacotes de rede gerados localmente antes de serem enviados..
- POSTROUTING — Altera pacotes de rede antes de serem enviados.
As chains (correntes) embutidas para a tabela
mangle
são estas:
- INPUT — Altera pacotes de rede alvo para a máquina.
- OUTPUT — Altera os pacotes de rede gerados localmente antes de serem enviados..
- FORWARD — Altera pacotes de rede roteados pela máquina.
- PREROUTING — Altera pacotes de entrada antes de serem roteados.
- POSTROUTING — Altera pacotes de rede antes de serem enviados.
Cada pacote de rede recebido por ou enviado de um sistema Linux está sujeito à ao menos uma tabela. No entanto, um pacote pode estar sujeito à diversas regras dentro de cada tabela antes de emergir no final da corrente. A estrutura e propósito destas regras podem variar, mas elas geralmente procuram identificar um pacote que vem ou vai à um endereço IP específico, ou conjunto de endereços, ao usar um determinado protocolo e serviço de rede. A imagem a seguir apresenta como os pacotes são examinados pelo subsistema do iptables:
Nota
Por padrão, as regras de firewall são salvas nos arquivos
/etc/sysconfig/iptables
ou /etc/sysconfig/ip6tables
.
O serviço
iptables
inicia antes dos serviços relacionados ao DNS quando um sistema Linux é inicializado. Isto significa que as regras do firewall podem somente fazer referência à endereços de IP numéricos (por exemplo, 192.168.0.1). Nomes do domínio (por exemplo, host.example.com) em tais regras, produzem erros.
Seja qual for o destino, quando os pacotes coincidem com uma regra específica em uma das tabelas, um alvo ou ação é aplicado à eles. Se a regra especifica um alvo
ACCEPT
para um pacote coincidente, o pacote pula o restante das verificações de regras e é permitido que continue com seu destino. Se uma regra especifica um alvo DROP
, aquele pacote é recusado ter acesso ao sistema e nada é retornado ao host que enviou ou pacote. Se uma regra especifica um alvo QUEUE
, o pacote é passado ao espaço de usuário. Se uma regra especifica o alvo opcional REJECT
, o pacote é despejado, mas um pacote de erro é enviado ao originador do pacote.
Toda corrente possui uma política padrão para
ACCEPT
, DROP
, REJECT
, ou QUEUE
. Se nenhuma destas regras na corrente se aplicar ao pacote, então o pacote será lidado de acordo com a política padrão.
O comando
iptables
configura estas tabelas, assim como instala tabelas se necessário.