A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Linux

Filtragem de pacotes no Linux 2.4

Qui

26

Abr

2007


17:47

(3 votos, média 3.67 de 5) 


Extensões do iptables

O iptables aceita extensões, o que significa que podemos adicionar novas capacidades para ampliar o poder de fogo tanto do kernel quanto da ferramenta iptables.

Algumas destas extensões são padrão, outras são mais exóticas. As extensões podem ser criadas por qualquer pessoa e distribuídas para usuários interessados.

As extensões do kernel normalmente são colocadas num subdiretório dos módulos do kernel (/lib/modules/2.4.0-test10/kernel/net/ipv4/netfilter, por exemplo). São carregadas por demanda se o kernel tiver sido compilado com CONFIG_KMOD ou então inseridas manualmente.

As extensões do programa iptables são bibliotecas compartilhadas que normalmente estão em /usr/local/lib/iptables/, se bem que algumas distribuições as colocam em /lib/iptables ou /usr/lib/iptables.

As extensões podem ser de dois tipos: novos alvos e novos controles (matches) - falaremos sobre novos alvos logo adiante. Alguns protocolos oferecem automaticamente novos testes. Os disponíveis atualmente são TCP, UDP e ICMP como mostrado abaixo. Para estes, você poderá especificar os novos testes na linha de comando logo após a opção '-p', o que carregará a extensão. Para testes explícitos, use a opção '-m' para carregar a extensão para disponibilizar as opções adicionadas.

Para obter ajuda, use a opção '-p', '-j' ou '-m' seguida de '-h' ou '--help':

    # iptables -p tcp --help
    #
Extensões TCP

As extensões TCP são carregadas automaticamente se '-p tcp' for especificado. Elas fornecem as seguintes opções (nenhuma das quais atua sobre fragmentos).

  • --tcp-flags: Seguida por um '!' opcional, então duas strings de flags, permite filtrar flags TCP específicas. A primeira string de flags é a máscara: uma lista de flags que você quer examinar. A segunda string de flags indica qual ou quais devem ser ativadas. Por exemplo,
            # iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
    
    indica que todas as flags devem ser examinadas ('ALL' é sinônimo de 'SYN,ACK,FIN,RST,URG,PSH'), mas apenas SYN e ACK devem ser ativadas. Também existe um argumento `NONE', que significa nenhuma flag.
  • --syn: opcionalmente precedida por um '!', é a forma resumida de `--tcp-flags SYN,RST,ACK SYN'.
  • --source-port: seguida por um '!' opcional e por uma única porta TCP ou uma sequência de portas. As portas podem ser citadas por nome (como listado em /etc/services) ou por números. A sequência pode ser dois nomes de portas separados por ':', uma porta seguida de ':' (para especificar maior ou igual à porta citada) ou ':' seguido pela porta (para especificar menor ou igual à porta citada).
  • --sport: sinônimo de '--source-port' (porta de origem).
  • --destination-port e --dport: o mesmo que acima, só que especificam a porta de destino ao invés de porta de origem.
  • --tcp-option: seguida por um '!' opcional e um número, identifica um pacote com a opção TCP igual ao número indicado. Pacotes que não têm cabeçalho TCP completo são eliminados automaticamente assim que houver uma tentativa de examinar suas opções TCP.
Explicação das flags TCP

Em algumas ocasiões é interessante permitir conexões TCP apenas num sentido. Por exemplo, você pode querer permitir conexões com um servidor WWW externo, mas não conexões vindas deste servidor.

A abordagem simplista seria bloquear todos os pacotes TCP vindos do servidor. Infelizmente as conexões TCP, para funcionarem, exigem pacotes transitando nos dois sentidos.

A solução está em bloquear apenas os pacotes que solicitam uma conexão. Estes pacotes são chamados pacotes SYN. Este é o modo abreviado de denominá-los porque, tecnicamente falando, são pacotes com a flag SYN ativada e as flags RST e ACK zeradas. Bloqueando apenas este tipo de pacote pode-se impedir tentativas de conexão.

A flag '--syn' é usada para fazer este tipo de bloqueio. Ela só é válida para regras que especificam TCP como protocolo. Por exemplo, para especificar tentativas de conexão feitas por 192.168.1.1:

    -p TCP -s 192.168.1.1 --syn

Esta flag pode ser invertida precedendo-a com '!', o que significa todos os pacotes com exceção dos que iniciam uma conexão.

Extensões UDP

Estas extensões são carregadas automaticamente se '-p udp' for especificado. Elas oferecem as opções '--source-port', '--sport', '--destination-port' e '--dport' da mesma forma que as do TCP.

Extensão ICMP

Esta extensão é carregada automaticamente se '-p icmp' for especificado. Ela oferece apenas uma opção:

  • --icmp-type: seguida por um '!' opcional, um nome do tipo de icmp (por exemplo, 'host-unreachable'), um tipo numérico (por exemplo, '3') ou um tipo numérico e um código separados por '/' (por exemplo, '3/3'). Uma lista dos nomes dos tipos pode ser obtida com '-p icmp --help'.

Informações adicionais