Firewall iptables em 10 minutos

Você pode tornar suas máquinas Linux 2.4 seguras em tempo mínimo.

Resumo

Preocupado com o último worm? Ou com o próximo? Gaste alguns minutos com o iptables para proteger seu Linux de ataques óbvios.

por Joshua Drake

(LinuxWorld) -- Conforme vou escrevendo esta coluna, o mundo sofre a infestação de outro worm Internet, e novamente os worms são criados para atacar máquinas Microsoft. Para sorte da minha compania, não usamos qualquer máquina Microsoft, mas o worm Nimda ainda assim nos afeta.

O Nimda devora nossa banda uma vez que outras companias que compartilham nossa subnet estão executando máquinas Windows 98, NT e 2000 infectadas. Estas bestas doentes e mal administradas da terra da pouca luz estão agora tentando infestar nossa segura, estável, fácil de usar e bem comportada máquina Linux (alguém adivinhou que estou um pouco irritado?).

Isto me levou a iniciar a edição de algumas regras de nosso firewall, e, no processo, considerar que, como migramos recentemente para o kernel 2.4, alguém pode estar interessado em como criar rapidamente um firewall baseado no kernel do Linux 2.4.

Os exemplos dados a seguir não criarão o firewall perfeito. O que eu estou descrevendo é projetado para dar ao administrador do sistema umas poucas idéias sobre a proteção da máquina contra ataques óbvios.

Por quê 2.4/iptables?

A versão 2.2 do kernel Linux usava a aplicação ipchains para controlar o firewall. Para fazer um firewall padrão, o ipchains é uma solução decente. Nós ainda o utilizamos em algumas de nossas máquinas, e ainda há um argumento positivo para os firewalls baseados em kernel 2.2, que é o fato que o kernel 2.4 ainda possui alguns problemas de estabilidade sob carga pesada.

Colocando de lado este problema de estabilidade, o kernel 2.4 possui uma riqueza de funções de rede que o 2.2 não tem. Entre estas está incluída “stateful firewalling” e opções de qualidade-de-serviço sólidas. Pode-se dizer que o kernel 2.4, e seu código de firewall iptables, possibilita que qualquer um construa firewalls intrincados capazes de competir com o CheckPoint e assemelhados.

Usando o iptables

O comando para executar o iptables é simples: como root escreva iptables. A execução do comando anterior deve mostrar uma saída semelhante à seguinte:

[root@jd root]# /sbin/iptables
iptables v1.2.1: no command specified
Try `iptables -h' or 'iptables --help' for more information.
[root@jd root]#

Se você quer ver uma saída com as opções disponíveis no iptables, você pode passar a opção -h durante a execução do programa. O comando -h vai resultar em uma saída parecida com o seguinte:

[root@jd root]# /sbin/iptables -h
iptables v1.2.1
Usage: iptables -[ADC] chain rule-specification [options]
       iptables -[RI] chain rulenum rule-specification
[options]
       iptables -D chain rulenum [options]
       iptables -[LFZ] [chain] [options]
       iptables -[NX] chain
       iptables -E old-chain-name new-chain-name
       iptables -P chain target [options]
       iptables -h (print this help information)

Commands:
Either long or short options are allowed.
  --append -A chain 		Append to chain
  --delete -D chain		Delete matching rule from chain
  --delete -D chain rulenum
  [...]

Para este artigo, não irei fazer uma explicação exaustiva de todas as opções do iptables. Se você quer uma introdução avançada ao iptables, eu sugiro a leitura do Linux 2.4 Packet Filtering HOWTO (veja em Recursos).

Quanto estiver desenvolvendo um firewall pessoal ou no desktop, eu pratico uma filosofia simples. Se você não vai usar, não abra. Por exemplo, se você não vai hospedar um site Web, não abra a porta 80. Se você não estiver usando o telnet (e não existe uma boa razão na Terra para usar o telnet), não abra a porta 23!

Em um esforço para seguir minha filosofia, o caminho mais rápido para o nirvana da proteção de portas é a seguinte chain iptables:

/sbin/iptables -A INPUT -p tcp --syn -j DROP

A declaração anterior vai permitir a você, usuário do computador, executar todas as atividades normais de Internet. Você poderá navegar na Internet, conectar-se para fora usando o ssh, ou conversar com um colega usando o ICQ. Por outro lado, o mundo externo, quanto tentar se conectar a seu computador Linux via TCP/IP, será simplesmente ignorado. Esta é uma solução razoável para a maioria dos computadores Linux.

Entretanto, um dos benefícios do Linux é a capacidade de gerenciamento remoto. Uma das formas mais populares que as pessoas usam para administrar remotamente seus computadores Linux é via a suíte SSH (veja em Recursos). O SSH tipicamente opera na porta 22 e, portanto, precisamos habilitar conexões à porta 22, ao mesmo tempo que mantemos o resto das conexões fechadas. Isto pode ser feito com as seguintes chains iptable:

/sbin/iptables -A INPUT -p tcp --syn --destination-port 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --syn -j DROP

Provavelmente não é uma boa idéia deixar o mundo conectar-se a sua máquina pela porta 22 a menos que você esteja rodando um servidor público. Portanto, podemos limitar que máquinas podem conectar-se à porta 22 modificando a iptable chain, e acrescentando a opção -s. A -s no exemplo abaixo especifica quais endereços de origem tem permissão de conectar ao servidor:

/sbin/iptables -A INPUT -p tcp --syn -s 192.168.1.110/32 --destination-port 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --syn -j DROP

O acréscimo de -s 192.168.1.110/32 vai permitir que somente a máquina com o endereço IP 192.168.1.110 consiga conectar-se a seu host protegido.

Quando você está criando um firewall baseado no iptables, cada chain (ou para ser mais simples, cada linha) será lida em seqüência. Asssim, a configuração anterior é possível para somente uma máquina tendo direitos de conexão via SSH, e rodar um servidor Web público. Isto pode ser feito com os seguintes comandos:

/sbin/iptables -A INPUT -p tcp --syn -s 192.168.1.110/32 --destination-port 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --syn --destination-port 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --syn -j DROP

Esta é só uma introdução ao iptables, mas dá uma representação razoável do que é essencial para um firewall. Se você está usando um kernel 2.4, pode ser uma boa hora para revisar o aspecto de seu firewall. Para encerrar, se você ainda está rodando um kernel 2.2 e está procurando por uma boa ferramenta de configuração de firewall, dê uma olhada no Guard Dog (veja Recursos).

Sobre o autor

Joshua Drake é o co-fundador de Command Prompt, Inc., uma empresa de desenvolvimento de programas personalizados Linux e PostgreSQL. Ele também é o autor atual do Linux Networking HOWTO, o Linux PPP HOWTO, e o Linux Consultants HOWTO. Seu projeto mais atual é um novo livro sobre o PostgreSQL para a O'Reilly, Practical PostgreSQL

Recursos

Histórias Relacionadas

Sites Relacionados


Nota

Artigo traduzido de http://www.linuxworld.com/site-stories/2001/0920.ipchains.html.

1