Firewall Linux - iptables - Parte 2


Conceitos: Tabelas, Chains, Targets e Política Padrão.

Tabelas:
No iptables, o tratamento dos pacotes é realizado em tabelas. Cada tabela realiza basicamente um tipo operação nos pacotes, conforme vemos a seguir:

1) Tabela filter: Filtragem de pacotes (quem pode acessar o quê, e sob quais condições)
2) Tabela nat: Modificações nos endereços e/ou portas de origem e de destino dos pacotes.
3) Tabela mangle: Alterações avançadas no pacote: inserção de marcas (tags), alteração da prioridade do pacote na "fila" de envio da placa de rede, etc (não vai ser coberta aqui.)

Chains (cadeias, no sentido de correntes ou fluxos):
São contêineres para as regras. O iptables vem com um grupo padrão de chains em cada tabela, e os usuários podem criar chains adicionais, para facilitar a gerência das regras. As chains padrão são (nem todas as tabelas possuem todas as chains):

INPUT: trata os pacotes que estão entrando na máquina e não vão sair, ou seja, o destino final do pacote é a própria máquina firewall.

OUTPUT: trata dos pacotes que foram criados na própria máquina e vão sair dela.

FORWARD: trata os pacotes que atravessam a máquina (entram por uma placa de rede e saem por outra. Ex: pacotes com origem na rede local com destino à Internet ou vice-versa).

PREROUTING: trata os pacotes antes (PRE) da decisão de roteamento (ROUTING). É utilizada para alterar o DESTINO dos pacotes (DNAT) na tabela nat.

POSTROUTING: trata os pacotes após (POST) a decisão de roteamento (ROUTING). É utilizada para alterar a ORIGEM dos pacotes (SNAT) na tabela nat.

Observação: o nome das chains padrão sempre é em letras maiusculas.

Targets (ou alvos):
Define o que é feito com o pacote que combine com a regra. Alguns targets (os que fazem alterações nos pacotes) só podem ser utilizados na tabela NAT.

Observação: é possível a criação de regras sem target. Um pacote que combine com essas regras apenas incrementa a contagem de bytes e pacotes da regra (útil para contabilidade de pacotes.) Para visualizar a contagem de pacotes das

ACCEPT: Aceita os pacotes que batam com a descrição da regra

REJECT: Rejeita os pacotes que batam com a regra. É enviada uma mensagem de rejeição ao emissor do pacote.

DROP: Ignora os pacotes que batam com a regra. É semelhante ao REJECT, porém não é enviada nenhuma mensagem ao emissor.

RETURN: Cancela o processamento do pacote na chain atual e o envia de volta à chain onde estava anteriormente.

SNAT: Altera o campo de origem (source) do pacote IP, podendo alterar também a porta de origem.

DNAT: Altera o campo de destino (destination) do pacote IP, podendo alterar também a porta de destino.

REDIRECT: Faz um DNAT onde apenas a porta de destino pode ser escolhida. O endereço IP de destino sempre é o da própria máquina firewall. Utilizado para proxy tranparente.

MASQUERADE: Mascaramento de IP. Tipo especial de SNAT, utilizado principalmente para compartilhar conexões com IPs dinâmicos, como conexões dial-up (internet discada) e ADSL (Velox, por exemplo).

MARK: "Marca" o pacote com uma etiqueta, para processamento posterior (inclusive por outros programas que não o iptables). A "marca" existe apenas no próprio firewall (programas em outras máquinas não conseguem visualizar a marcação).

TCPMSS: Permite alterar o tamanho máximo do pacote, para solucionar (ou prevenir) problemas de transmissão de dados. Só pode ser utilizada com o protocolo TCP (opção -p tcp)

TOS: Permite alterar o campo TOS (Type Of Service) do cabeçalho IP.

QUEUE/NFQUEUE: Permite enviar o pacote para programas compilados com suporte a biblioteca libipq. Os programas podem manipular o pacote e devolvê-lo ao iptables.

LOG: Cria uma entrada de LOG do pacote que combina com a regra. A entrada é registrada através do SYSLOG. Após ser registrado no sistema de log, o pacote continua seguindo pela chain, para ser processado por outras regras.

ULOG: Uma mistura de QUEUE com LOG, onde o pacote é enviado para um programa para fins de LOG. Isso permite, por exemplo, logar pacotes em bancos de dados (como o MySQL) para facilitar a geração de relatórios.

Caso especial: nome de uma chain personalizada. Faz com que o pacote que bata com aquela regra seja redirecionado para uma chain personalizada (criada pelo usuário) para ser tratado pelas regras desta chain.

Policy (política padrão):
Por mais completas que sejam, suas regras de firewall nunca irão cobrir todas as possibilidades. Por isso, alteramos a POLICY (política padrão) da chain. Um pacote que atravesse toda uma CHAIN sem combinar com nenhuma REGRA é tratado pela POLICY padrão da chain. As POLICY são ACCEPT, REJECT e DROP, e têm o mesmo comportamento dos TARGETS definidos anteriormente. A POLICY padrão das CHAINS é ACCEPT (se um pacote não bater com nenhuma regra ele é aceito)  Normalmente, coloca-se a política padrão de chains como INPUT e FORWARD como DROP. Com isso, tudo o que não for explícitamente liberado será bloqueado.

Nenhum comentário: