# Iptables

O iptables é um programa escrito em C, utilizado como ferramenta que configura regras para o protocolo de internet IPv4 na tabela de filtragem de pacotes, utilizando os módulos e framework do kernel Linux (versão 2.3.15 ou posteiro). As configurações de firewall feitas ficarão guardadas no kernel, logo serão perdidas quando o sistema for reiniciado. O iptables-save e iptables-restore ficam responsáveis por salvar as configurações e restaurá-las.
O ip6tables é similar ao iptables mas atua com o protocolo de internet mais atual, o IPv6. Podendo ser definidas multiplas tabelas diferentes. Cada uma contém uma série de cadeias embutidas e pode também conter cadeias definidas pelo usuário. Cada cadeia é uma lista de regras que podem combinar um conjunto de pacotes. Cada regra especifica o que fazer com um pacote que corresponde. Isso é chamado de 'target', que pode ser um salto para uma cadeia definida pelo usuário na mesma tabela.

## História

O autor inicial e chefe do netfilter/iptables foi Paul "Rusty" Russell. Que mais tarde, veio a se juntar a um grupo de pessoas, que juntas formaram a equipe principal do Netfilter (Netfilter Core Team) e mantiveram o projeto netfilter/iptables como um esforço conjunto.
Mas o netfilter/iptables não seria o que é hoje se não fosse pelas inúmeras contribuições de desenvolvedores de software independentes, a quem chamamos de colaboradores. Era costume manter um placar como recompensa para as pessoas que nos ajudavam muito - mas ultimamente tornou-se muito esforço manter esse placar. Assim, foi desativado até novo aviso.
No início do desenvolvimento, algumas pessoas contribuíram com algum código, mas nenhuma delas se tornou colaboradora de longo prazo. Depois de considerar o problema, Rusty decidiu tentar manter um placar de pessoas que contribuíram com patches e relatórios de erros. Foi esse processo de quantificação das contribuições que chamou a atenção a quantidade e a qualidade do trabalho produzido pelo apaixonado canadense francês Marc Boucher, e Rusty decidiu que era hora de iniciar uma Equipe Principal, da qual Marc se tornaria o segundo membro.
A equipe principal (Core Team) realmente começou logo depois que Rusty, em uma viagem a SF em novembro de 1999, fez um desvio para Montreal, para conhecer e discutir alguns grandes problemas de design. Rusty e Marc passaram a noite inteira no escritório de Marc, concebendo a estrutura de múltiplas tabelas (multiple tables framework) que levou à morte do ipnatctl (uma ferramenta separada usada para controlar o NAT nas primeiras versões do Netfilter), generalização do iptables e nascimento dos módulos iptable_{filter, nat, mangle}.
Depois que tudo isso foi poderosamente implementado (e o ip_conntrack reescrito) por Rusty, O projeto começou a receber algumas boas contribuições de James Morris ("louco por filas de links de rede e espaço de usuário", vivendo como Rusty).
Na primavera de 2000, Marc viajou para a Austrália para participar de algumas conferências e passar algum tempo em Canberra trabalhando com Rusty no Linuxcare no netfilter/iptables (corrigindo vários bugs, implementando módulos adicionais e mesclando tudo na árvore oficial do Linux).
Na Sydney Linux Expo, conhecemos James Morris pessoalmente, e sua incrível frieza nos convenceu a convidá-lo para se tornar o terceiro membro da equipe principal do Netfilter, por volta do início de junho.
Após a assimilação de James no coletivo, nossos esforços foram direcionados principalmente para os preparativos para o lançamento do Netfilter como parte do próximo kernel 2.4. Era o início da terceira era do firewall do Linux. Grandes comunidades foram fundadas, "civilizações antigas foram perdidas e novas alianças foram formadas". As missões de James durante esse período incluíram a perversão contínua do código de rede, de modo que agora era possível carregar um analisador ASN.1 no kernel e infligir terror grave aos pacotes SNMP desavisados; e estender a pilha de IP para o espaço do usuário com o Perl. Agora, olhando diretamente para o abismo, notamos as boas ações de um jovem guerreiro do núcleo chamado Harald Welte, que parecia realmente entender o código NAT.
Consequentemente, seu caráter distintivo foi acrescentado ao coletivo. Com o equilíbrio restaurado, o netfilter estava livre para ser lançado no mundo novo do Linux 2.4 e enfrentar o seu maior desafio: os usuários.
A primeira contribuição (de código) de Harald ao projeto Netfilter foi o módulo de rastreamento de conexão do IRC. Depois disso, ele trabalhou em algumas coisas menores, como módulos de correspondência e destino TTL, bem como portabilidade de IPv6. O destino ULOG, incluindo o daemon ulogd, foi o próximo marco. Depois de ser incluído na equipe principal do Netfilter em setembro de 2000, ele assumiu grande parte do trabalho administrativo, como lançamentos, manutenção de listas de SCM, TODO, etc. e se envolveu cada vez mais com questões fundamentais de design.
No momento da redação deste texto, essa é principalmente a nova estrutura conntrack/Nat helper para várias expectativas relacionadas, a nova interface do kernel/espaço de usuário nfnetlink, bem como o novo mundo do espaço de usuário com base em lib-iptables.
No primeiro workshop de desenvolvimento de filtros de rede em novembro de 2001, Jozsef Kadlecsik foi convidado a ingressar no Core Team como seu quinto membro. Jozsef é um colaborador ativo de longa data do filtro de rede. Entre suas contribuições estão: alvo REJECT, código de rastreamento de janelas TCP, desenvolvimento contínuo da API new-nat e a tabela bruta.
No segundo workshop de desenvolvimento de filtros de rede, em agosto de 2003, Martin Josefsson foi convidado a se juntar à equipe do core team. Martin fez muitos trabalhos úteis, especialmente no que diz respeito às otimizações no código de rastreamento de conexão.
Nesse momento, a equipe (Netfilter Core Team) também decidiu eleger formalmente um presidente que recebe a chamada final em todas as decisões. Decidiu-se ainda que os membros da equipe que não contribuem mais ativamente com o código podem se tornar membros eméritos.
Em janeiro de 2004, Patrick McHardy foi convidado a ingressar na equipe do core team por causa de suas contínuas contribuições importantes para a base de código do projeto netfilter. Infelizmente, Patrick foi suspenso em junho de 2016 por não assinar os Princípios da aplicação da GPL orientada para a comunidade.
Em outubro de 2005, Yasuyuki Kozakai foi convidado a ingressar na equipe de corretores, especialmente no que diz respeito ao seu trabalho de longa data no nf_conntrack e ao ip6_tables.
Em fevereiro de 2007, Pablo Neira Ayuso foi convidado a participar da equipe core team, especialmente em relação ao ctnetlink e conntrackd.
Em outubro de 2012, Eric Leblond e Florian Westphal juntaram-se à equipe de funcionários por suas contribuições de longa data e os colegas hackers Harald Welte, Martin Josefsson e Yasuyuki Kozakai entraram oficialmente como membros emérito. Arturo Borrero tornou-se membro da core team em julho de 2017 por suas excelentes contribuições ao nf_tables e ao conntrack-tools.
Durante o Netfilter Workshop 2013 em Copenhague, Pablo Neira Ayuso tornou-se oficialmente o chefe da equipe, embora ele já sirva como co-mantenedor desde 2011.

## Principais Características

* listar o conteúdo do conjunto de regras de filtragem de pacotes
* Adicionar/remover/modificar regras no conjunto de regras de filtragem de pacotes
* listar/zerar contadores por regra do conjunto de regras de filtragem de pacotes

## Implementação

O iptables está disponível por padrão na maioria das distribuições modernas do Linux, por exemplo: Ubuntu, Fedora Linux e Arch Linux. Para implementar a ferramenta iptables é necessário um kernel que possua a infraestrutura netfilter implementada; netfilter é um framework dentro do kernel Linux com o qual outras coisas (como o módulo do iptables) poderão conectar-se. Isso significa que você precisa do kernel 2.3.15 ou posteriores, e responder `Y (SIM)' para CONFIG_NETFILTER na sua configuração do kernel.