Um filtro de pacotes é um sofware que analiza o cabeçalho (header) dos pacotes enquanto eles passam, e decide o destino do pacote como um todo. Ele pode decidir entre descartar (DROP) o pacote (descartando-o como se nunca o tivesse recebido), aceitar (ACCEPT) o pacote (deixar o pacote seguir seu caminho), ou algo mais complicado que isso.
No Linux, filtragem de pacotes está implementada diretamente no kernel (como um módulo ou diretamente compilado), e há várias coisas interessantes que podem ser feitas com os pacotes, mas o princípio geral é analizar o cabeçalho dos pacotes e decidir o que ser feito com o pacote.
Controle. Segurança. Vigilância.
quando uma máquina Linux é utilizada para conectar sua rede interna em outra rede (a Internet, por exemplo) há a oportunidade de permitir certo tipo de tráfego, e rejeitar outro. Por exemplo, o cabeçalho do pacote contém o endereço de destino do pacote, logo você pode evitar que os pacotes saiam em direção a um endereço. Por exemplo, eu utilizo o Konqueror para ler as tirinhas do Dilbert. Há publicidade do doubleclick.net nesta página, e o Konqueror gasta meu precioso tempo baixando-a. Pode-se dizer ao netfilter para não permitir pacotes vindos de doubleclick.net (há melhores maneiras de se fazer isso: veja o Junkbuster).
quando uma máquina Linux é a única coisa entre o caos da Internet e sua calma e organizada rede, é bom saber que é possível restringir o tráfego vindo do mundo externo. Por exemplo, você pode permitir que qualquer tipo de pacote saia da sua rede, mas você é preocupado com o famoso ataque `Ping of Death (Ping da Morte)' vindo de mal-feitores do mundo externo. Como outro exemplo, você pode não gostar da idéia de permitir que qualquer um da rede externa conecte-se via telnet na sua máquina Linux, mesmo que todas as contas da máquina tenham senhas. Talvez você queira (como a maioria das pessoas) ser apenas um observador, e não um servidor. Simplesmente não deixe ninguém conectar, dizendo ao filtro de pacotes para rejeitar pacotes requisitando a criação de novas conexões.
às vezes uma máquina mal configurada na rede local pode decidir enviar pacotes descontroladamente para o mundo externo. É interessante dizer ao filtro de pacotes para te informar se algo anormal ocorrer, talvez você possa fazer algo para resolver o problema, ou você pode ser apenas mais um curioso :)
Os kernels Linux têm tido filtros de pacotes desde a série 1.1. A primeira geração, baseada no ipfw do BSD, foi portada por Alan Cox no final de 1994. Essa implementação foi melhorada por Jos Vos e outros para o Linux 2.0; a ferramenta userspace `ipfwadm' controlava as regras de filtragem do kernel. Em meados de 1998, para o Linux 2.2, eu reescrevi muitas linhas de código do kernel, com a ajuda de Michael Neuling, e introduzi a ferramente userspace `ipchains'. Finalmente, a ferramenta da quarta geração, o `iptables', e mais um árduo trabalho de reedição do kernel ocorreu em meados de 1999 para o Linux 2.4. Este HOWTO concentra-se no 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) podem conectar-se. Isso significa que você precisa do kernel 2.3.15 ou posteriores, e respoder `Y (SIM)' para CONFIG_NETFILTER na sua configuração do kernel.
A ferramenta iptables
conversa com o kernel e fala quais são os pacotes
a serem filtrados. Ao menos que você seja um programador, ou apenas um curioso,
esta é a forma pela qual você controlará a filtragem dos pacotes.
A ferramenta iptables
insere e apaga regras da tabela de filtragem de
pacotes do kernel. Isso significa que qualquer coisa que você configure será
perdida assim que o Linux for reiniciado.
iptables
é uma substituição para ipfwadm
e ipchains
:
veja
Utilizando ipchains e ipfwadm para saber
como evitar a utilização de iptables se você está utilizando alguma dessas ferramentas.
Sua configuração atual de firewall está guardada no kernel, logo será perdida na próxima vez que a máquina for reiniciada. Escrever o iptables-save e o iptables-restore está na minha lista de afazeres. Quando eles existirem, prometo que funcionarão muito bem.
Por enquanto, coloque os comandos necessários para configurar suas regras em um script de inicialização. Esteja certo de que o script faça algo inteligente caso algum dos comandos falhe (usualmente `exec /sbin/sulogin').