iptables

iptables

Descrição da imagem Iptablesfb.png. Em formação
O Criador Rusty Russell ( em )
Desenvolvido por Projeto Netfilter
Primeira versão 1998
Última versão 1.8.7 (15 de janeiro de 2021)
Depósito git: //git.netfilter.org/iptables , git.netfilter.org/iptables e git.netfilter.org/iptables
Escrito em VS
Sistema operacional Linux
Meio Ambiente Linux
Modelo Filtragem de pacotes
Licença GNU GPL
Local na rede Internet www.netfilter.org

iptables é um software livre do espaço do usuário Linux através do qual o administrador do sistema pode configurar as cadeias e regras do firewall no espaço do kernel (que é composto de módulos Netfilter ).

Diferentes programas são utilizados dependendo do protocolo utilizado: iptables é utilizado para o protocolo IPv4 , Ip6tables para IPv6 , Arptables para ARP ( Address Resolution Protocol ) ou ainda Ebtables , específico para frames Ethernet .

Este tipo de modificação deve ser reservado para um administrador de sistema. Portanto, seu uso requer o uso da conta root . O uso do programa é negado a outros usuários.

Na maioria das distribuições Linux , o iptables é iniciado /usr/sbin/iptablespor comando e documentado por sua página de manual iptables e ip6tables, que pode ser visualizada usando o comando "  man iptables ".

iptables também é freqüentemente usado para se referir a componentes de baixo nível (nível kernel). x_tables é o nome do módulo de kernel mais genérico que contém o código compartilhado para os quatro protocolos. É também o módulo que fornece a API de plug - ins. Portanto, Xtables geralmente se refere ao firewall completo (IPv4, IPv6, arp, eb).

História

Netfilter e iptables foram originalmente projetados juntos, então suas histórias foram inicialmente confusas.

Antes do iptables, os principais softwares de criação de firewall no Linux eram o Ipchains (kernel do linux 2.2) e o Ipfwadm (kernel do Linux 2.0), baseado no Ipfw , um programa originalmente desenvolvido sob o BSD .

O iptables mantém os princípios básicos introduzidos no Linux pelo Ipfwadm: listas de regras que especificam o que testar em cada pacote e o que fazer com tal pacote.

O ipchains então introduziu o conceito de cadeia de regras e, finalmente, o iptables estendeu esse conceito aos arrays  : um array é consultado ao decidir se usar o NAT ou não e outro é consultado ao decidir como filtrar um pacote.

Além disso, as três vezes em que a filtragem é realizada durante a transferência de um pacote foram alteradas para que o pacote passe exatamente por um ponto de filtro.

Essa separação permite que o iptables, por sua vez, use as informações que a camada de rastreamento de conexão definiu para cada pacote (essa informação era previamente vinculada ao NAT ). Este recurso torna o iptables superior ao Ipchains , já que o primeiro tem a capacidade de rastrear o estado de uma conexão e redirecionar, modificar ou interromper pacotes de dados com base no estado da conexão e mais apenas na origem, destino ou conteúdo do pacote dados. Um firewall que usa iptables dessa forma é considerado um firewall com estado ( firewall com estado ), ao contrário do ipchains, que pode criar um firewall sem estado (exceto em casos raros). Para simplificar, o Ipchains não usa o contexto relacionado ao encaminhamento de um pacote, enquanto o iptables o faz. Portanto, o iptables é capaz de fazer escolhas melhores para encaminhar pacotes ou estabelecer conexões.

A capacidade de filtrar por processo usando as opções --pid-owner --cmd-owner foi removida do módulo ipt_owner com o lançamento do kernel 2.6.14.

Operação

O Xtables permite ao administrador do sistema criar tabelas, que contêm "strings", constituídas por um conjunto de regras para o tratamento de pacotes. Cada tabela está associada a um tipo de processamento de pacotes (veja Netfilter ). Os pacotes seguem sequencialmente cada regra nas cadeias. Uma regra em uma cadeia pode causar um salto para outra cadeia ( goto ou salto ), e esse processo pode ser repetido quantas vezes forem necessárias, independentemente do nível de aninhamento alcançado.

Cada pacote de rede, de entrada ou saída, passa, portanto, por pelo menos uma cadeia.

A origem do pacote determina a primeira cadeia que ele cruza. Existem cinco canais predefinidos (associados a cinco ganchos de filtro de rede ), porém seu uso não é obrigatório em todas as tabelas. As cadeias predefinidas têm uma política (por exemplo, DROP), que é aplicada ao pacote se ele chegar ao fim da cadeia. O administrador do sistema pode criar quantos outros canais desejar. Essas cadeias não têm política: se um pacote chega ao final da cadeia, ele é devolvido à cadeia que chamou. Uma corrente pode até estar vazia (não há regras).

Os cinco tipos de strings predefinidas são:

Uma cadeia (que é uma lista de regras) não existe independentemente: cada cadeia pertence necessariamente a uma mesa. Iptables inclui quatro tabelas nomeadas: mangle , filter , nat , raw . Este aspecto é frequentemente mal explicado (ou pouco destacado) nos tutoriais que, portanto, sugerem que existem strings fora das tabelas. Essa confusão surge do fato de que a tabela de filtros é a tabela padrão. Por isso, muitas vezes está implícito em comandos e fala. Por exemplo, quando um tutorial fala sobre a cadeia INPUT sem qualquer outra precisão, é portanto a cadeia INPUT da tabela de filtros . Abaixo indicamos comandos para listar as strings definidas nas diferentes tabelas.

Cada regra em uma cadeia contém a especificação (em inglês: jogos ) dos pacotes que correspondem a ela. Também pode conter uma ação (em inglês: target ) (usado para extensões) ou um julgamento (uma das várias decisões integradas). Quando um pacote passa por uma cadeia, cada regra, por sua vez, é examinada. Se uma regra não corresponder ao pacote, o pacote será passado para a próxima regra. Se uma regra coincidir com o pacote, ela executa as ações indicadas pela ação / julgamento, o que pode levar a permitir que o pacote continue na cadeia ou, inversamente, excluí-lo. As especificações são a maior parte das regras, pois contêm as condições sob as quais os pacotes são testados. Essas especificações podem fornecer para qualquer camada do modelo OSI , por exemplo, os parâmetros --mac-source e -p tcp --dport , e também existem especificações independentes de protocolo, por exemplo -m time .

O pacote continua a percorrer a cadeia até:

Front-ends e scripts

Existem muitos softwares de terceiros para iptables que procuram tornar a configuração de regras mais fácil. Front-ends gráficos ou baseados em texto permitem que os usuários gerem regras simples com um único clique. Firestarter é uma interface gráfica disponível para distribuições Linux que usam o ambiente Gnome. Os scripts geralmente se referem a scripts Shell do Unix (mas outras linguagens de script também são possíveis). Eles chamam iptables ou (o mais rápido) "iptables-restore" com um conjunto de regras predefinidas, ou regras de um modelo desenvolvido com a ajuda de um arquivo de configuração simples. As distribuições Linux usam o sistema mais recente de uso de modelos. Essa abordagem baseada em modelo é quase uma forma limitada de um gerador de regras e também existem geradores independentes, por exemplo, em arquivos PHP.

Front-ends, construtores e scripts são frequentemente limitados por seu sistema de modelo e onde esse modelo permite a substituição de regra definida pelo usuário. Além disso, as regras geradas geralmente não são otimizadas para os efeitos que o usuário deseja no firewall, pois isso provavelmente aumentaria os custos de manutenção para o desenvolvedor. Os usuários que têm um conhecimento razoável de iptables e que, além disso, desejam que seus conjuntos de regras sejam otimizados são incentivados a criar suas próprias regras.

O comando iptables -L -v -n permite que você veja quais regras estão definidas para a tabela de filtro, que é a tabela padrão quando não especificada (então o comando iptables -t filter -L -v -n retorna o mesmo resultado que iptables - L -v -n ). Para ver as regras da cadeia da tabela nat , usaremos o comando: iptables -t nat -L -v -n

Notas e referências

  1. Lançamentos do projeto iptables  " (acessado em 22 de janeiro de 2021 )
  2. (em) "  man iptables  "
  3. (em) "  man ip6tables  "
  4. (in) "  página da web do projeto Netfilter / iptables  "
  5. (em) "  Changelog Kernel 2.6.14  "

Artigos relacionados

Outras ferramentas