Ver Feed RSS

The JEdi lair's

Netfilter/Iptables - Parte 1

Avaliação: 3 votos, 4,67 média.
Bom dia galera, uma breve introdução sobre minha pessoa e depois o que interessa de verdade!

Sou usuário GNU/Linux desde 1998 e venho dedicado meu tempo ao estudo de segurança da informação. Atualmente atuo como administrador de segurança de redes. Pronto!

Vejo que um assunto muito comum no UnderLinux Forums é Netfilter/Iptables. Vou tentar esclarecer um pouco sobre o assunto nesse primeiro post. Não pretendo criar um guia definitivo, porém quem tiver palpites sobre melhora do conteúdo do post por favor me envie.

1 - Mais do que breve conceito do Netfilter/Iptables

O Netfilter/Iptables é o filtro de pacotes padrão do kernel GNU/Linux desde as versões 2.4. Por filtro de pacotes entendemos um mecanismo que faz a verificação dos cabeçalhos TCP/IP dos pacotes de rede e toma decisão em relação ao seu conteúdo. Alguns módulos adicionam funcionalidades relacionadas as camadas mais altas, L7 por exemplo, porém esse não é a utilização mais adequada de um filtro de pacotes.

O funcionamento do Netfilter/Iptables é dividido em chains, tables, matches e targets.

2 - Tables
As tables determinam que tipo de decisão será feita nos pacotes. Exemplificando, a table mangle, da qual falarei mais detalhadamente, pode alterar o conteúdo dos pacotes enquanto a tabela filter pode somente tomar decisões quanto a passagem ou não do pacote através do sistema de filtro.

O Netfilter/Iptables trabalha com quatro tabelas distintas, a saber:

filter: Essa tabela é utilizada para tomada de decisão quanto a passagem ou não de um pacote através do filtro. Essa é a tabela padrão.

nat: Essa tabela é consultada quando um pacote que cria uma nova conexão, seja de entrada ou saída, é encontrado. Esta é a tabela usada para "compatilhar a conexão" e/ou "rotear os pacotes".

mangle: Essa tabela poder realizar alterações especiais de forma a auxiliar os mecanismos de filtro de pacotes, fair queueing e packet routing.

raw: Esta tabela é usada, principalmente, para configurar excessões no mecanismo de connection tracking do kernel (ativado através do módulo ip_conntrack).

A ordem de avaliação das tabelas é a seguinte:

raw ->> mangle ->> nat ->> filter

Agora surge o questionamento: tá, e como eu faço a tomada de decisões? Calma!

3 - Chains
As chains são usadas para o controle de fluxo dos pacotes dentro das tabelas, por exemplo entrada na filter, saída na nat, etc. Existem cinco chains principais:

INPUT (mangle, filter)
Essa chain é utilizada para verificar pacotes destinados a máquina filtro de pacotes.

OUTPUT (raw, mangle, nat, filter)
Essa chain é utilizada para verificar pacotes originados da máquina filtro de pacotes.

FORWARD (mangle, filter)
Essa chain é utilizada para verificar pacotes que irão atravesar duas interfaces de rede.

PREROUTING (raw, mangle, nat)
Essa chain é utilizada para verificar pacotes destinados a máquina filtro de pacotes mas com foco na tomada de decisão de roteamento tais como o redirecionamento dos pacotes. Todos os pacotes de entrada são verificados pelas regras desta chain antes de passar pela avaliação da chain INPUT.

POSTROUTING (mangle, nat)
Essa chain é utilizada para verificar pacotes que tem como endereço uma rede diferente de sua rede de origem. Tentando esmiuçar, quando um cliente dentro de uma rede local tenta acessar o conteúdo da Internet através da máquina filtro de pacotes (gateway).

4 - Comandos
Bem, o comando básico para o uso da userspace tool Netfilter/Iptables é o iptables!!! Incrível!!! O iptables possui os seguintes comandos:

-t ou --table table
Especifica a tabela a qual desejamos utilizar. Por padrão, se o -t não for especificado, a tabela filter será usada.

-L ou --list [chain]
Exibe as regras presentes em todas as chains, caso não seja especificado uma chain. Podemos utilizar os modificadores --line-numbers (exibe o número da regra), -v ou --verbose (modo verbose), -n ou --numeric (todas as informações são exibidas em formato númerico) e -x ou --exact (todos os valores serão exibidos em bytes).

ex: iptables -t nat -L
|
\-> Lista todas as regras presentes nas chains da tabela nat

ex: iptables -t mangle -L OUTPUT
|
\-> Lista todas as regras presentes na chain OUTPUT da tabela mangle.

-F ou --flush [chain]
Apaga todas as regras de todas as chains ou uma chain específica.

ex: iptables -F
|
\-> Apaga todas as regras de todas as chains da tabela filter (Lembre-se: tabela filter é padrão!).

ex: iptables -t nat -F PREROUTING
|
\-> Apaga todas as regras da chain PREROUTING da tabela nat.

-Z ou --zero [chain]
Zera os contadores de bytes de todas as chains ou de uma chain específica.

ex: iptables -t mangle -Z FORWARD
|
\-> Zera os contadores da chain forward da tabela mangle.

ex: iptables -t raw -Z
|
\-> Zera os contadores de todas as chains da tabela raw.

-N ou --new-chain new-chain
Cria uma chain definida pelo usuário. A nova chain não pode ter o mesmo nome de um target ou target extension. Posteriormente falaremos de chains definidas pelo usuário.

-X ou --delete-chain [chain]
Apaga todas as chains definidas pelo usuário ou uma chain específica.

ex: iptables -X
|
\-> Apaga todas as chains definidas pelo usuário na tabela filter.

ex: iptables -t nat -X banidos
|
\-> Apaga a chain banidos da tabela nat.

obs: As chains precisam estar vazias (-F)!

-A ou --append chain [regra]
Adiciona uma regra no final de uma chain.

ex: iptables -A INPUT
|
\-> Adiciona regra vazia após a ultima regras presente na chain INPUT da tabela filter.

-I ou --insert chain [numregra] [regra]
Adiciona uma regra no inicio da chain ou na posição especificada por numregra.

ex: iptables -t mangle -I INPUT 1
|
\-> Adiciona regra vazia na posição 1 da chain INPUT da tabela mangle.

obs: As regras posteriores a numregra serão alocadas na próxima posição.

-R ou --replace chain numregra regra
Repõe a regra presente em numregra com regra.

ex: iptables -t raw -R OUTPUT 3
|
\-> Repõe a regra presente na terceira posição da chain OUTPUT da tabela raw com uma regra nula.

-D ou --delete chain regra
-D ou --delete chain numregra
Apaga a regra que contém regra ou a regra na posição numregra.

ex: iptables -D INPUT
|
\-> Apaga uma regra nula da chain INPUT da tabela filter.

ex: iptables -t mangle -D FORWARD 4
|
\-> Apaga a regra presente na quarta posição da chain FORWARD da tabela mangle.

-P ou --policy chain target
Define o policiamento padrão de uma chain. Apenas as chains padrões podem ter policiamento. Na secção targets veremos quais os targets válidos para policiamento.

5 - Parâmetros
Bom pessoal, na secção anterior tentei trabalhar com regras nulas para não atropelar a explicação dos parâmetros. Parâmetros são os mecanismos usados para verificar o conteúdo dos cabeçalhos dos pacotes. Além dos parâmetros existem as match extensions que adicionam funcinalidades ao Netfilter/Iptables porém dedicarei uma secção exclusiva nesse post para explica-las.

-p, --protocol [!] proto
Verifica o protocolo do pacote. Os valores aceitos para proto são tcp, udp, icmp ou all.

ex: iptables -t raw -A PREROUTING -p tcp
|
\-> Essa regra irá conferir com todos os pacotes que passarão pelo firewall que utilizem o protocolo TCP.

ex: iptables -A INPUT -p ! icmp
|
\-> Essa regra irá conferir com todos os pacotes que estão entrando no filtro de pacotes que não utilizam o protocolo ICMP. ! significa não!

-s ou --source ou --src [!] origem
Verifica a origem do pacote.

ex: iptables -t mangle -I FORWARD -p udp -s 192.168.0.1
|
\-> Essa regra irá conferir com os pacotes atravesando duas interfaces de rede através do protocolo udp e que tenha como origem o endereço 192.168.0.1.

ex: iptables -t nat -A PREROUTING -p icmp -s 10.1.0.0/16
|
\-> Essa regra irá conferir com os pacotes chegando numa interface de rede através do protocolo ICMP e que tenha como origem a rede 10.1.0.0 com máscara de sub-rede 255.255.0.0.

-d ou --destination ou --dst [!] destino
Verifica o destino do pacote.

ex: iptables -A FORWARD -s 10.1.0.2 -d 192.168.55.1
|
\-> Essa regra irá conferir com todos os pacotes atravesando o filtro de pacotes com origem do host 10.1.0.2 e destino 192.168.55.1

ex: iptables -t nat -A POSTROUTING -d 192.168.100.0/24
|
\-> Essa regra irá conferir com todos os pacotes que tentarão deixar a rede através do filtro de pacotes com destino a rede 192.168.100.0 com máscara de sub-rede 255.255.255.0.

-i ou --interface
Verifica a interface na qual o pacote foi recebido. Essa match só existe nas chains INPUT, FORWARD, PREROUTING e em chains criadas pelo usuário.

ex: iptables -t nat -A PREOUTING -i ppp0 -s 192.168.25.25
|
\-> Essa regra irá conferir com pacotes que chegam ao filtro através da interface ppp0 e que tenham como host de origem 192.168.25.25.

ex: iptables -A INPUT -p udp -i eth+
|
\-> Essa regra irá conferir com todos os pacotes destinados ao filtro de pacotes que tenham como interfaces de entrada eth0, eth1, ... , ethN, ou seja todas as interfaces prefixadas por eth.

Por equanto é só...
Continua no próximo post... Limitação de 10000 caracteres!
Categorias
Não Categorizado

Comentários

Página 1 de 4 1234 ÚltimoÚltimo
  1. Avatar de benezinha
    Olá,

    Parabens pela iniciativa. Excelente material!
  2. Avatar de PEdroArthurJEdi
    Muito obrigado!
  3. Avatar de Duca
    Putz!
    Muito bom!
    Para não ter limitação de caracteres é só usar o wiki.
    Logo, eu irei colocar seu Tutorial lá.
    Parabéns mesmo!
  4. Avatar de Magnun
    Muito bom cara... É por iniciativas como essa que o Under-Linux cresce cada dia mais!
    Parabéns!!
  5. Avatar de MarcusMaciel
    Duca acho que a limitacao é boa pra nao ficar muito extenso o artigo... Sobre o Wiki o objetivo dele é colocar artigos já existentes para que possam ser completados por outras pessoas. Pois sempre existem lacunas a serem completadas
Página 1 de 4 1234 ÚltimoÚltimo

+ Enviar Comentário



Visite: BR-Linux ·  VivaOLinux ·  Dicas-L