Você está na página 1de 74

Guia Foca GNU/Linux

Gleydson Mazioli da Silva <gleydson@guiafoca.org>

Verso 6.43 - segunda, 12 de julho de 2010

Resumo

Este documento tem por objetivo ser uma referncia ao aprendizado do usurio e um guia
de consulta, operao e configurao de sistemas Linux (e outros tipos de *ix). A ltima ver-
so deste guia pode ser encontrada na Pgina Oficial do Foca GNU/Linux (http://www.
guiafoca.org). Novas verses so lanadas com uma freqncia mensal e voc pode rece-
ber avisos de novos lanamentos deste guia preenchendo um formulrio na pgina Web.
Nota de Copyright

Copyleft 2010 - Gleydson Mazioli da Silva.


Permission is granted to copy, distribute and/or modify this document under the terms of
the GNU Free Documentation License, Version 1.1 or any later version published by the Free
Software Foundation; A copy of the license is included in the section entitled GNU Free Doc-
umentation License.
i

Sumrio

1 Introduo 1
1.1 Consideraes sobre o nvel Avanado . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Pr-requisitos para a utilizao deste guia . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 O Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3.1 Algumas Caractersticas do Linux . . . . . . . . . . . . . . . . . . . . . . . 3

2 Explicaes Bsicas 7
2.1 Monitorando os logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.1 Destruindo arquivos/parties de forma segura . . . . . . . . . . . . . . . 7
2.2 Curingas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3 Firewall iptables 11
3.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.1 Verso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.2 Um resumo da histria do iptables . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.3 Caractersticas do firewall iptables . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.4 Ficha tcnica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.5 Requerimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.6 Arquivos de logs criados pelo iptables . . . . . . . . . . . . . . . . . . . . . 14
3.1.7 Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.8 Enviando Correes/Contribuindo com o projeto . . . . . . . . . . . . . . 14
3.1.9 O que aconteceu com o ipchains e ipfwadm? . . . . . . . . . . . . . . . 14
3.1.10 Tipos de firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.11 O que proteger? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
SUMRIO ii

3.1.12 O que so regras? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16


3.1.13 O que so chains? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.14 O que so tabelas? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.15 Habilitando o suporte ao iptables no kernel . . . . . . . . . . . . . . . . . . 17
3.1.16 Ligando sua rede interna a Internet . . . . . . . . . . . . . . . . . . . . . . 18
3.2 Manipulando chains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.1 Adicionando regras - A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.2 Listando regras - L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.3 Apagando uma regra - D . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.4 Inserindo uma regra - I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.5 Substituindo uma regra - R . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.6 Criando um novo chain - N . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.7 Renomeando um chain criado pelo usurio - E . . . . . . . . . . . . . . . . 24
3.2.8 Listando os nomes de todas as tabelas atuais . . . . . . . . . . . . . . . . . 24
3.2.9 Limpando as regras de um chain - F . . . . . . . . . . . . . . . . . . . . . . 24
3.2.10 Apagando um chain criado pelo usurio - X . . . . . . . . . . . . . . . . . 25
3.2.11 Zerando contador de bytes dos chains - Z . . . . . . . . . . . . . . . . . . . 25
3.2.12 Especificando a poltica padro de um chain - P . . . . . . . . . . . . . . . 25
3.3 Outras opes do iptables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3.1 Especificando um endereo de origem/destino . . . . . . . . . . . . . . . . 26
3.3.2 Especificando a interface de origem/destino . . . . . . . . . . . . . . . . . 27
3.3.3 Especificando um protocolo . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.4 Especificando fragmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.5 Especificando uma exceo . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.6 Especificando um alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.7 Salvando e Restaurando regras . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.4 A tabela nat (Network Address Translation) - fazendo nat . . . . . . . . . . . . . . 36
3.4.1 Criando um novo chain na tabela NAT . . . . . . . . . . . . . . . . . . . . 37
3.4.2 Fazendo IP masquerading (para os apressados) . . . . . . . . . . . . . . . 37
3.4.3 Fazendo SNAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4.4 Fazendo DNAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
SUMRIO iii

3.4.5 Monitorando conexes feitas na tabela nat . . . . . . . . . . . . . . . . . . 41


3.5 A tabela mangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.5.1 Especificando o tipo de servio . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.6 Outros mdulos do iptables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.6.1 Conferindo de acordo com o estado da conexo . . . . . . . . . . . . . . . 43
3.6.2 Limitando o nmero de vezes que a regra confere . . . . . . . . . . . . . . 43
3.6.3 Proteo contra ping da morte . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.6.4 Proteo contra syn flood . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.6.5 Proteo contra IP spoofing . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.6.6 Especificando mltiplas portas de origem/destino . . . . . . . . . . . . . . 45
3.6.7 Especificando o endereo MAC da interface . . . . . . . . . . . . . . . . . 46
3.6.8 Conferindo com quem criou o pacote . . . . . . . . . . . . . . . . . . . . . 46
3.6.9 Conferindo com o contedo do pacote . . . . . . . . . . . . . . . . . . . . . 47
3.6.10 Conferindo com o tempo de vida do pacote . . . . . . . . . . . . . . . . . . 47
3.6.11 Conferindo com nmeros RPC . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6.12 Conferindo com tipo de pacote . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6.13 Conferindo com o tamanho do pacote . . . . . . . . . . . . . . . . . . . . . 49
3.7 Caminho percorrido pelos pacotes nas tabelas e chains . . . . . . . . . . . . . . . 49
3.7.1 Ping de 192.168.1.1 para 192.168.1.1 . . . . . . . . . . . . . . . . . . . . . . 49
3.7.2 Conexo FTP de 192.168.1.1 para 192.168.1.1 . . . . . . . . . . . . . . . . . 50
3.7.3 Conexo FTP de 192.168.1.1 para 192.168.1.4 . . . . . . . . . . . . . . . . . 51
3.7.4 Conexo FTP de 200.217.29.67 para a mquina ftp.debian.org.br . . . . . . 52
3.7.5 Ping de 192.168.1.4 para 192.168.1.1 . . . . . . . . . . . . . . . . . . . . . . 53
3.7.6 Conexo FTP de 192.168.1.4 para 192.168.1.1 . . . . . . . . . . . . . . . . . 54
3.7.7 Conexo FTP de 192.168.1.4 para ftp.debian.org.br . . . . . . . . . . . . . . 54
3.7.8 Conexo FTP de 200.198.129.162 para 200.217.29.167 . . . . . . . . . . . . . 56
3.7.9 Grfico geral da passagem dos pacotes . . . . . . . . . . . . . . . . . . . . 56
3.8 Exemplos de configuraes do iptables . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.8.1 Bloqueando conexes de fora para sua mquina . . . . . . . . . . . . . . . 57
3.8.2 Monitorando tentativa de conexo de trojans em sua mquina . . . . . . . 58
3.8.3 Conectando sua rede interna a Internet . . . . . . . . . . . . . . . . . . . . 58
3.8.4 Um exemplo de firewall simples . . . . . . . . . . . . . . . . . . . . . . . . 59
SUMRIO iv

4 Apndice 63
4.1 Sobre este guia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2 Sobre o Autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.3 Referncias de auxlio ao desenvolvimento do guia . . . . . . . . . . . . . . . . . 64
4.4 Onde encontrar a verso mais nova do guia? . . . . . . . . . . . . . . . . . . . . . 65
4.5 Colaboradores do Guia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.6 Marcas Registradas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.7 Futuras verses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.8 Chave Pblica PGP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
1

Captulo 1

Introduo

Bem vindo ao guia Foca GNU/Linux. O nome FOCA significa FOnte de Consulta e
Aprendizado. Este guia dividido em 3 nveis de aprendizado e verso que esta lendo agora
contm:
Avanado

Para melhor organizao, dividi o guia em 3 verses: Iniciante, Intermedirio e Avanado.


Sendo que a verso Iniciante voltada para o usurio que no tem nenhuma experincia no
GNU/Linux. A ltima verso deste guia pode ser encontrada em: Pgina Oficial do guia Foca
GNU/Linux (http://www.guiafoca.org).

Caso tiver alguma sugesto, correo, crtica para a melhoria deste guia, envie um e-mail para
<gleydson@guiafoca.org>.

O Foca GNU/Linux atualizado freqentemente, por este motivo recomendo que preencha a
ficha do aviso de atualizaes na pgina web em Pgina Oficial do guia Foca GNU/Linux
(http://www.guiafoca.org) no fim da pgina principal. Aps preencher a ficha do aviso
de atualizaes, voc receber um e-mail sobre o lanamento de novas verses do guia e o
que foi modificado, desta forma voc poder decidir em copia-la caso a nova verso contenha
modificaes que considera importantes.

Tenho recebido elegios de pessoas do Brasil (e de paises de fora tambm) elogiando o trabalho e
a qualidade da documentao. Agradeo a todos pelo apoio, tenham certeza que este trabalho
desenvolvido pensando em repassar um pouco do conhecimento que adquiri ao comear o
uso do Linux.

Tambm venho recebendo muitos e-mails de pessoas que passaram na prova LPI nvel 1 e 2
aps estudar usando o guia Foca GNU/Linux. Fico bastante feliz por saber disso, pois nunca
tive a inteno de tornar o guia uma referncia livre para estudo da LPI e hoje usado para
estudo desta difcil certificao que aborda comandos, servios, configuraes, segurana, em-
pacotamento, criptografia, etc.
Captulo 1. Introduo 2

1.1 Consideraes sobre o nvel Avanado

Este guia foi compilado incluindo o nvel Avanado do guia FOCA GNU/Linux, ele no tem
a inteno de focar na configurao de servios, servidores, aplicativos, nem garantia que ele
atender a determinada finalidade especfica do usurio (principalmente de uma rede, que
depende de uma perfeita compreenso para adaptao de acordo com os requisitos de uma in-
stalao local). Seu foco principal a instalao do servio, abordando consideraes voltadas
a segurana, e exemplos de configurao e seu funcionamento.
Com relao a captulos sobre servidores, importante observar qual verso documentada
no guia e se confere com a instalada em seu sistema, a fim de que tudo funcione corretamente.
Entretanto, na maioria dos casos, as explicaes relacionadas a uma verso de um programa
so inteiramente vlidas em uma nova verso.

1.2 Pr-requisitos para a utilizao deste guia

assumido que voc ja tenha experincia na configurao de sistemas Linux, conhea boa
parte dos comandos e sua utilizao, tenha noes de rede e saiba como procurar documen-
tao para complementar o que vem aprendendo. Enfim, requer que se tiver interesse em se
aprofundar em determinada rea, que utilize os mtodos de busca de documentao sugeridos
no guia para complementao do aprendizado. O guia no contm todos os materiais para que
a pessoa se torne um expert no assunto, mas contm as referncias para documentaes mais
especficas sobre determinadas reas do sistema.
Este guia no cobre a instalao do sistema. Para detalhes sobre instalao, consulte a docu-
mentao que acompanha sua distribuio GNU/Linux.

1.3 O Linux

O Linux um sistema operacional criado em 1991 por Linus Torvalds na universidade de


Helsinki na Finlndia. um sistema Operacional de cdigo aberto distribudo gratuitamente
pela Internet. Seu cdigo fonte liberado como Free Software (software livre), sob licena GPL,
o aviso de copyright do kernel feito por Linus descreve detalhadamente isto e mesmo ele no
pode fechar o sistema para que seja usado apenas comercialmente.
Isto quer dizer que voc no precisa pagar nada para usar o Linux, e no crime fazer cpias
para instalar em outros computadores, ns inclusive incentivamos voc a fazer isto. Ser um
sistema de cdigo aberto pode explicar a performance, estabilidade e velocidade em que novos
recursos so adicionados ao sistema.
O requisito mnimo para rodar o Linux depende do kernel que ser usado:
2.2.x - Computador 386 SX com 2 MB de memria
2.4.x - Computador 386 SX com 4MB de memria
2.6.x - Computador 486 DX com no mnimo 8MB
Captulo 1. Introduo 3

Para espao em disco requerido 500MB para uma instalao bsica usando modo texto com
suporte a rede. Claro que no considerada a execuo de ambiente grfico ou servios de
rede em produo, que neste caso exigido mais memria RAM e espao em disco para ar-
mazenamento de dados de programas e usurios.
O sistema segue o padro POSIX que o mesmo usado por sistemas UNIX e suas variantes.
Assim, aprendendo o Linux voc no encontrar muita dificuldade em operar um sistema
do tipo UNIX, FreeBSD, HPUX, SunOS, etc., bastando apenas aprender alguns detalhes
encontrados em cada sistema.
O cdigo fonte aberto permite que qualquer pessoa veja como o sistema funciona (til para
aprendizado), corrigir algum problema ou fazer alguma sugesto sobre sua melhoria, esse
um dos motivos de seu rpido crescimento, do aumento da compatibilidade de perifricos
(como novas placas sendo suportadas logo aps seu lanamento) e de sua estabilidade.
Outro ponto em que ele se destaca o suporte que oferece a placas, CD/DVD-RWs, BluRay e
outros tipos de dispositivos de ltima gerao e mais antigos (a maioria deles j ultrapassados
e sendo completamente suportados pelo sistema operacional). Este um ponto forte para
empresas que desejam manter seus micros em funcionamento e pretendem investir em avanos
tecnolgicos com as mquinas que possui.
O Linux desenvolvido por milhares de pessoas espalhadas pelo mundo, cada uma fazendo
sua contribuio ou mantendo alguma parte do kernel gratuitamente. Linus Torvalds ainda
trabalha em seu desenvolvimento e na coordenao dos grupos de trabalho do kernel.
O suporte ao sistema tambm se destaca como sendo o mais eficiente e rpido do que qualquer
programa comercial disponvel no mercado. Existem milhares de consultores e empresas espe-
cializadas no suporte e treinamento espalhados ao redor do mundo. Outra opo de suporte
atravs da comunidade Linux; voc pode se inscrever em uma lista de discusso e relatar
sua dvida ou alguma falha, e sua mensagem ser vista por centenas de usurios na Internet
e algum ir te ajudar ou avisar as pessoas responsveis sobre a falha encontrada para devida
correo.

1.3.1 Algumas Caractersticas do Linux


livre e desenvolvido voluntariamente por programadores experientes, hackers, e con-
tribuidores espalhados ao redor do mundo que tem como objetivo a contribuio para
a melhoria e crescimento deste sistema operacional. Muitos deles estavam cansados do
excesso de propaganda (Marketing) e baixa qualidade de sistemas comerciais existentes
Tambm recebe apoio de grandes empresas como IBM, Sun, HP, etc. para seu desen-
volvimento
Convivem sem nenhum tipo de conflito com outros sistemas operacionais (com o DOS,
Windows, OS/2) no mesmo computador.
Multitarefa real
Multiusurio
Suporte a nomes extensos de arquivos e diretrios (255 caracteres)
Conectividade com outros tipos de plataformas como Apple, Sun, Macintosh, Sparc, Alpha,
PowerPc, ARM, Unix, Windows, DOS, etc.
Captulo 1. Introduo 4

Utiliza permisses de acesso a arquivos, diretrios e programas em execuo na memria


RAM.
Proteo entre processos executados na memria RAM
Suporte a mais de 63 terminais virtuais (consoles)
Modularizao - O Linux somente carrega para a memria o que usado durante o
processamento, liberando totalmente a memria assim que o programa/dispositivo
finalizado
Devido a modularizao, os drivers dos perifricos e recursos do sistema podem ser car-
regados e removidos completamente da memria RAM a qualquer momento. Os drivers
(mdulos) ocupam pouco espao quando carregados na memria RAM (cerca de 6Kb
para a Placa de rede NE 2000, por exemplo)
Suporte nativo a rede e tecnologias avanadas como: balanceamento de carga, ips alias,
failover, vlans, bridge, trunking, OSPF, BGP.
No h a necessidade de se reiniciar o sistema aps a modificar a configurao de qual-
quer perifrico ou parmetros de rede. Somente necessrio reiniciar o sistema no caso
de uma instalao interna de um novo perifrico, falha em algum hardware (queima do
processador, placa me, etc.).
No precisa de um processador potente para funcionar. O sistema roda bem em com-
putadores 386Sx 25 com 4MB de memria RAM (sem rodar o sistema grfico X, que
recomendado 32MB de RAM). J pensou no seu desempenho em um Pentium, Xeon, ou
Athlon? ;-)
Suporte nativo a mltiplas CPUs, assim processadores como Dual Core, Core Duo,
Athlon Duo, Quad Core tem seu poder de processamento integralmente aproveitado,
tanto em 32 ou 64 bits.
Suporte nativo a dispositivos SATA, PATA, Fiber Channel
Suporte nativo a virtualizao, onde o Linux se destaca como plataforma preferida para
execuo de mltiplos sistemas operacionais com performance e segurana.
O crescimento e novas verses do sistema no provocam lentido, pelo contrrio, a cada
nova verso os desenvolvedores procuram buscar maior compatibilidade, acrescentar
recursos teis e melhor desempenho do sistema (como o que aconteceu na passagem do
kernel 2.0.x para 2.2.x, da 2.2.x para a 2.4.x e da 2.4.x para a 2.6.x).
O GNU/Linux distribuido livremente e licenciado de acordo com os termos da GPL.
Acessa corretamente discos formatados pelo DOS, Windows, Novell, OS/2,
NTFS, SunOS, Amiga, Atari, Mac, etc.
O LINUX NO VULNERVEL A VRUS! Devido a separao de privilgios entre pro-
cessos e respeitadas as recomendaes padro de poltica de segurana e uso de contas
privilegiadas (como a de root, como veremos adiante), programas como vrus tornam-se
inteis pois tem sua ao limitada pelas restries de acesso do sistema de arquivos e
execuo. Qualquer programa (nocivo ou no) poder alterar partes do sistema que pos-
sui permisses (ser abordado como alterar permisses e tornar seu sistema mais restrito
no decorrer do guia). Frequentemente so criados exploits que tentam se aproveitar de
falhas existentes em sistemas desatualizados e usa-las para causar danos. Erroneamente
este tipo de ataque classificado como vrus por pessoas mal informadas e so resolvi-
das com sistemas bem mantidos. Em geral, usando uma boa distribuio que tenha um
eficiente sistema de atualizao e bem configurado, voc ter 99.9% de sua tranqulidade.
Rede TCP/IP mais rpida que no Windows e tem sua pilha constantemente melhorada.
Captulo 1. Introduo 5

O GNU/Linux tem suporte nativo a redes TCP/IP e no depende de uma camada inter-
mediria como o WinSock. Em acessos via modem a Internet, a velocidade de transmis-
so 10% maior.
Executa outros sistemas operacionais como Windows, MacOS, DOS ou outro sistema
Linux atravs de consagrados sistemas de virtualizao como Xen, vmware, ou emu-
lao como o DOSEMU, QEMU, WINE.
Suporte completo e nativo a diversos dispositivos de comunicao via infravermelho,
Bluetooth, Firewire, USB. Basta conectar e o seu dispositivo automaticamente recon-
hecido. Raramente so necessrios drivers externos, exceto no caso de dispositivos muito
novos que no tenham o suporte ainda adicionado no sistema.
Suporte a rede via rdio amador.
Suporte a dispositivos Plug-and-Play.
Suporte nativo a pen drivers, dispositivos de armazenamento e cartes de memria.
Suporte nativo a dispositivos I2C
Integrao com gerenciamento de energia ACPI e APM
Dispositivos de rede Wireless. Tanco com criptografia WEB e WPA PSK
Vrios tipos de firewalls avanados de alta qualidade na deteco de trfego indesejvel,
dando ao administrador uma excelente ferramenta de proteo e controle de sua rede.
Roteamento esttico e dinmico de pacotes.
Ponte entre Redes, proxy arp
Proxy Tradicional e Transparente.
Possui recursos para atender a mais de um endereo IP na mesma placa de rede, sendo
muito til para situaes de manuteno em servidores de redes ou para a emulao de
mltiplos computadores. O servidor WEB e FTP podem estar localizados no mesmo
computador, mas o usurio que se conecta tem a impresso que a rede possui servidores
diferentes.
Os sistemas de arquivos usados pelo GNU/Linux (Ext2, Ext3, reiserfs, xfs, jfs)
organiza os arquivos de forma inteligente evitando a fragmentao e fazendo-o um
poderoso sistema para aplicaes multi-usurias exigentes e gravaes intensivas.
Permite a montagem de um servidor de publicao Web, E-mail, News, etc. com um
baixo custo e alta performance. O melhor servidor Web do mercado, o Apache, dis-
tribudo gratuitamente junto com a maioria das distribuies Linux. O mesmo acontece
com o Sendmail.
Por ser um sistema operacional de cdigo aberto, voc pode ver o que o cdigo fonte
(instrues digitadadas pelo programador) faz e adapta-lo as suas necessidades ou de
sua empresa. Esta caracterstica uma segurana a mais para empresas srias e outros
que no querem ter seus dados roubados (voc no sabe o que um sistema sem cdigo
fonte faz na realidade enquanto esta processando o programa).
Suporte a diversos dispositivos e perifricos disponveis no mercado, tanto os novos
como obsoletos.
Pode ser executado em 16 arquiteturas diferentes (Intel, Macintosh, Alpha, Arm, etc.) e
diversas outras sub-arquiteturas.
Empresas especializadas e consultores especializados no suporte ao sistema espalhados
por todo o mundo.
Entre muitas outras caractersticas que voc descobrir durante o uso do sistema (alm
de poder criar outras, caso seja um administrador avanado ou desenvolvedor).
Captulo 1. Introduo 6

TODOS OS TENS DESCRITOS ACIMA SO VERDADEIROS E TESTADOS PARA QUE


TIVESSE PLENA CERTEZA DE SEU FUNCIONAMENTO.
7

Captulo 2

Explicaes Bsicas

Este captulo traz explicaes sobre os principais componentes existentes no computador e do


sistema operacional Linux.

2.1 Monitorando os logs

Os arquivos e diretrios de logs residem em /var/log e registram tudo o que acontecem


com o kernel, com os daemons e utilitrios do sistema. Eles so muito importantes tanto para
monitorar o que acontece com o seu sistema como para ajudar na soluo de problemas di-
versos. comum programas como o servidor web, e-mail, mensagens instantaneas, firewall,
irc, banco de dados, gravarem os arquivos de log em diretrios prprios dentro de /var/log
/programa, desta forma evitam misturar seus arquivos com os de log do sistema residentes
em /var/log.
Acostume-se a olhar constantemente os arquivos de log em seu sistema, isto pode ser impor-
tante para encontrar possveis falhas de segurana, tentativa de acesso ao sistema e, principal-
mente, solucionar problemas (principalmente os mais complicados).

2.1.1 Destruindo arquivos/parties de forma segura

Esta seo tem a inteno de conscientizar o administrador do uso devido de tcnicas para
garantir que dados sensveis sejam apagados de forma um pouco mais segura em seu sistema.
Quando um arquivo apagado, apenas a entrada na tabela de inodes mexida, e ele pode
ainda ser recuperado com o debugfs e um pouco de pacincia e engenharia. O mesmo acon-
tece com as parties, que podem ser recuperadas com facilidade (isto explicado no nvel
Intermedirio do guia). Esta recuperao proporcionada pelas regras de funcionamento do
sistema de arquivos e do esquema de particionamento, ou seja, so permitidas pelo SO.
Vou um pouco mais alm: O disco rgido uma mdia magntica e opera de forma mecnica
para ler/gravar dados. Quando um arquivo apagado, seja por qualquer motivo, ainda
Captulo 2. Explicaes Bsicas 8

possvel recupera-lo. O que permite isto porque o HD nem sempre tem a preciso de gravar
exatamente no mesmo lugar (pois a cabea movida mecanicamente), gravando em trilhas
microscpicamente vizinhas a anterior. Ento a imagem do arquivo que foi apagada continua
l. Segundo ouvi falar, a NASA possui recursos para recuperar at 60 regravaes posteriores
no disco. claro que isto pode ocorrer em pouco tempo, dependendo do tamanho de sua
partio e se esta for uma /var/spool em um servidor de e-mails :-)
Baseado nesta teoria, voc poder apagar os dados de forma destrutiva usando o programa
shred, que regrava o arquivo repetidamente com dados aleatrios. Sua sintaxe a seguinte:

shred -n 70 -v -u arquivo

Isto faz com que ele regrava o contedo do arquivo 70 vezes com dados aleatrios. O -u
trunca e remove o arquivo aps concludo.
Note que o uso de dados aleatrios serve para destruir as possibilidades de uma recuperao
simples, este o motivo de se recomendar sempre o uso de /dev/urandom ao invs de /dev
/zero para destruio de arquivos.
OBS1: Saiba exatamente o que est fazendo pois estes procedimentos servem para dificultar
ao mximo a recuperao de dados.
OBS2: Devido as tecnologias de sistemas que utilizam journaling (XFS, EXT3, EXT4, JFS e
ReiserFS) e sistemas RAID, o shred no funcionar. O shred tambm no funcionar com
sistemas de arquivos via rede (NFS, SMB, etc.). Se procura alguma forma de proteger seus
dados, mesmo que apagados, utilize um mtodo de criptografia como o DM-CRYPTO, crypto-
loop, gpg, etc.
OBS3: Caso esteja usando um sistema de arquivos criptografado, estes procedimentos so
quase desnecessrios (dependendo do nvel de segurana e algortmos que voc utiliza).

2.2 Curingas

Curingas (ou referncia global) um recurso usado para especificar um ou mais arquivos ou
diretrios do sistema de uma s vez. Este um recurso permite que voc faa a filtragem do
que ser listado, copiado, apagado, etc. So usados 4 tipos de curingas no GNU/Linux:

* - Faz referncia a um nome completo/restante de um arquivo/diretrio.

? - Faz referncia a uma letra naquela posio.

[padro] - Faz referncia a uma faixa de caracteres de um arquivo/diretrio. Padro


pode ser:
[a-z][0-9] - Faz referncia a caracteres de a at z seguido de um caracter de 0
at 9.
[a,z][1,0] - Faz a referncia aos caracteres a e z seguido de um caracter 1 ou 0
naquela posio.
Captulo 2. Explicaes Bsicas 9

[a-z,1,0] - Faz referncia a intervalo de caracteres de a at z ou 1 ou 0 naquela


posio.
A procura de caracteres Case Sensitive assim se voc deseja que sejam localizados
todos os caracteres alfabticos voc deve usar [a-zA-Z].
Caso a expresso seja precedida por um ^, faz referncia a qualquer caracter exceto o da
expresso. Por exemplo [^abc] faz referncia a qualquer caracter exceto a, b e c.

{padres} - Expande e gera strings para pesquisa de padres de um arquivo/diretrio.


X{ab,01} - Faz referncia a seqencia de caracteres Xab ou X01
X{a-z,10} Faz referencia a seqencia de caracteres Xa-z e X10.

O que diferencia este mtodo de expanso dos demais que a existncia do arquivo/diretrio
opcional para gerao do resultado. Isto til para a criao de diretrios. Lembrando que os
4 tipos de curingas (*, ?, [], {}) podem ser usados juntos. Para entender melhor vamos
a prtica:
Vamos dizer que tenha 5 arquivo no diretrio /usr/teste: teste1.txt,teste2.txt,
teste3.txt,teste4.new,teste5.new.
Caso deseje listar todos os arquivos do diretrio /usr/teste voc pode usar o coringa *
para especificar todos os arquivos do diretrio:
cd /usr/teste e ls * ou ls /usr/teste/*.
No tem muito sentido usar o comando ls com * porque todos os arquivos sero listados se
o ls for usado sem nenhum Coringa.
Agora para listar todos os arquivos teste1.txt,teste2.txt,teste3.txt com excesso
de teste4.new, teste5.new, podemos usar inicialmente 3 mtodos:
1 Usando o comando ls *.txt que pega todos os arquivos que comeam com qualquer
nome e terminam com .txt.
2 Usando o comando ls teste?.txt, que pega todos os arquivos que comeam com
o nome teste, tenham qualquer caracter no lugar do coringa ? e terminem com
.txt. Com o exemplo acima teste*.txt tambm faria a mesma coisa, mas se tam-
bm tivssemos um arquivo chamado teste10.txt este tambm seria listado.
3 Usando o comando ls teste[1-3].txt, que pega todos os arquivos que comeam
com o nome teste, tenham qualquer caracter entre o nmero 1-3 no lugar da 6a letra
e terminem com .txt. Neste caso se obtm uma filtragem mais exata, pois o coringa ?
especifica qualquer caracter naquela posio e [] especifica nmeros, letras ou intervalo
que ser usado.
Agora para listar somente teste4.new e teste5.new podemos usar os seguintes mtodos:
1 ls *.new que lista todos os arquivos que terminam com .new
2 ls teste?.new que lista todos os arquivos que comeam com teste, contenham qual-
quer caracter na posio do coringa ? e terminem com .new.
3 ls teste[4,5].* que lista todos os arquivos que comeam com teste contenham
nmeros de 4 e 5 naquela posio e terminem com qualquer extenso.
Existem muitas outras formas de se fazer a mesma coisa, isto depende do gosto de cada um. O
que pretendi fazer aqui foi mostrar como especificar mais de um arquivo de uma s vez. O uso
Captulo 2. Explicaes Bsicas 10

de curingas ser til ao copiar arquivos, apagar, mover, renomear, e nas mais diversas partes
do sistema. Alias esta uma caracterstica do GNU/Linux: permitir que a mesma coisa possa
ser feita com liberdade de vrias maneiras diferentes.
11

Captulo 3

Firewall iptables

Este captulo documenta o funcionamento do firewall iptables que acompanha a srie do


kernel 2.4, opes usadas, e aponta alguns pontos fundamentais para iniciar a configurao e
construo de bons sistemas de firewall.

3.1 Introduo

O Firewall um programa que como objetivo proteger a mquina contra acessos indesejados,
trfego indesejado, proteger servios que estejam rodando na mquina e bloquear a passagem
de coisas que voc no deseja receber (como conexes vindas da Internet para sua segura rede
local, evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais). No
kernel do Linux 2.4, foi introduzido o firewall iptables (tambm chamado de netfilter) que
substitui o ipchains dos kernels da srie 2.2. Este novo firewall tem como vantagem ser
muito estvel (assim como o ipchains e ipfwadm), confivel, permitir muita flexibilidade
na programao de regras pelo administrador do sistema, mais opes disponveis ao ad-
ministrador para controle de trfego, controle independente do trfego da rede local/entre
redes/interfaces devido a nova organizao das etapas de roteamento de pacotes.
O iptables um firewall em nvel de pacotes e funciona baseado no endereo/porta de
origem/destino do pacote, prioridade, etc. Ele funciona atravs da comparao de regras para
saber se um pacote tem ou no permisso para passar. Em firewalls mais restritivos, o pacote
bloqueado e registrado para que o administrador do sistema tenha conhecimento sobre o que
est acontecendo em seu sistema.
Ele tambm pode ser usado para modificar e monitorar o trfego da rede, fazer NAT (mas-
querading, source nat, destination nat), redirecionamento de pacotes, marcao de pacotes,
modificar a prioridade de pacotes que chegam/saem do seu sistema, contagem de bytes, di-
vidir trfego entre mquinas, criar protees anti-spoofing, contra syn flood, DoS, etc. O
trfego vindo de mquinas desconhecidas da rede pode tambm ser bloqueado/registrado
atravs do uso de simples regras. As possibilidades oferecidas pelos recursos de filtragem
iptables como todas as ferramentas UNIX maduras dependem de sua imaginao, pois ele
garante uma grande flexibilidade na manipulao das regras de acesso ao sistema, precisando
Captulo 3. Firewall iptables 12

apenas conhecer quais interfaces o sistema possui, o que deseja bloquear, o que tem acesso
garantido, quais servios devem estar acessveis para cada rede, e iniciar a construo de seu
firewall.
O iptables ainda tem a vantagem de ser modularizvel, funes podem ser adicionadas
ao firewall ampliando as possibilidades oferecidas. Usei por 2 anos o ipchains e afirmo que
este um firewall que tem possibilidades de gerenciar tanto a segurana em mquinas isoladas
como roteamento em grandes organizaes, onde a passagem de trfego entre redes deve ser
minuciosamente controlada.
Um firewall no funciona de forma automtica (instalando e esperar que ele faa as coisas
por voc), necessrio pelo menos conhecimentos bsicos de rede tcp/ip, roteamento e portas
para criar as regras que faro a segurana de seu sistema. A segurana do sistema depende do
controle das regras que sero criadas por voc, as falhas humanas so garantia de mais de 95%
de sucesso nas invases.
Enfim o iptables um firewall que agradar tanto a pessoas que desejam uma segurana
bsica em seu sistema, quando administradores de grandes redes que querem ter um controle
minucioso sobre o trfego que passam entre suas interfaces de rede (controlando tudo o que
pode passar de uma rede a outra), controlar o uso de trfego, monitorao, etc.

3.1.1 Verso

assumido que esteja usando a verso 1.2.3 do iptables e baseadas nas opes do kernel
2.4.16 (sem o uso de mdulos experimentais). As explicaes contidas aqui podem funcionar
para verses posteriores, mas recomendvel que leia a documentao sobre modificaes no
programa (changelog) em busca de mudanas que alterem o sentido das explicaes fornecidas
aqui.

3.1.2 Um resumo da histria do iptables

O iptables um cdigo de firewall das verses 2.4 do kernel, que substituiu o ipchains
(presente nas sries 2.2 do kernel). Ele foi includo no kernel da srie 2.4 em meados de
Junho/Julho de 1999.
A histria do desenvolvimento (desde o porte do ipfw do BSD para o Linux at o
iptables (que a quarta gerao de firewalls do kernel) est disponvel no documento,
Netfilter-howto.

3.1.3 Caractersticas do firewall iptables


Especificao de portas/endereo de origem/destino
Suporte a protocolos TCP/UDP/ICMP (incluindo tipos de mensagens icmp)
Suporte a interfaces de origem/destino de pacotes
Manipula servios de proxy na rede
Captulo 3. Firewall iptables 13

Tratamento de trfego dividido em chains (para melhor controle do trfego que entra/sai
da mquina e trfego redirecionado.
Permite um nmero ilimitado de regras por chain
Muito rpido, estvel e seguro
Possui mecanismos internos para rejeitar automaticamente pacotes duvidosos ou mal
formados.
Suporte a mdulos externos para expanso das funcionalidades padres oferecidas pelo
cdigo de firewall
Suporte completo a roteamento de pacotes, tratadas em uma rea diferente de trfegos
padres.
Suporte a especificao de tipo de servio para priorizar o trfego de determinados tipos
de pacotes.
Permite especificar excees para as regras ou parte das regras
Suporte a deteco de fragmentos
Permite enviar alertas personalizados ao syslog sobre o trfego aceito/bloqueado.
Redirecionamento de portas
Masquerading
Suporte a SNAT (modificao do endereo de origem das mquinas para um nico IP ou
faixa de IPs).
Suporte a DNAT (modificao do endereo de destino das mquinas para um nico IP
ou fixa de IPs)
Contagem de pacotes que atravessaram uma interface/regra
Limitao de passagem de pacotes/conferncia de regra (muito til para criar protees
contra, syn flood, ping flood, DoS, etc).

3.1.4 Ficha tcnica

Pacote: iptables
iptables - Sistema de controle principal para protocolos ipv4
ip6tables - Sistema de controle principal para protocolos ipv6
iptables-save - Salva as regras atuais em um arquivo especificado como argumento.
Este utilitrio pode ser dispensado por um shell script contendo as regras executado na
inicializao da mquina.
iptables-restore - Restaura regras salvas pelo utilitrio iptables-save.

3.1.5 Requerimentos

necessrio que o seu kernel tenha sido compilado com suporte ao iptables (veja Ha-
bilitando o suporte ao iptables no kernel on page 17. O requerimento mnimo de memria
necessria para a execuo do iptables o mesmo do kernel 2.4 (4MB). Dependendo do
trfego que ser manipulado pela(s) interface(s) do firewall ele poder ser executado com folga
em uma mquina 386 SX com 4MB de RAM.
Como as configuraes residem no kernel no necessrio espao extra em disco rgido para
a execuo deste utilitrio.
Captulo 3. Firewall iptables 14

3.1.6 Arquivos de logs criados pelo iptables

Todo trfego que for registrado pelo iptables registrado por padro no arquivo /var/log
/kern.log.

3.1.7 Instalao

apt-get install iptables


O pacote iptables contm o utilitrio iptables (e ip6tables para redes ipv6) necessrios
para inserir suas regras no kernel. Se voc no sabe o que ipv6, no precisar se preocupar
com o utilitrio ip6tables por enquanto.

3.1.8 Enviando Correes/Contribuindo com o projeto

A pgina principal do projeto http://netfilter.filewatcher.org. Sugestes podem


ser enviadas para a lista de desenvolvimento oficial do iptables: http://lists.samba.
org.

3.1.9 O que aconteceu com o ipchains e ipfwadm?

O iptables faz parte da nova gerao de firewalls que acompanha o kernel 2.4, mas o su-
porte ao ipchains e ipfwadm ainda ser mantido atravs de mdulos de compatibilidade do
kernel at 2004. Seria uma grande falta de considerao retirar o suporte a estes firewalls do
kernel como forma de obrigar a aprenderem o iptables (mesmo o suporte sendo removido
aps este perodo, acredito que criaro patches externos para futuros kernels que no traro
mais este suporte). Se precisa do suporte a estes firewalls antes de passar em definitivo para o
iptables leia Habilitando o suporte ao iptables no kernel on page 17.
Se voc um administrador que gosta de explorar todos os recursos de um firewall, usa todos
os recursos que ele oferece ou mantm uma complexa rede corporativa, tenho certeza que
gostar do iptables.

3.1.10 Tipos de firewalls

Existem basicamente dois tipos de firewalls:


nvel de aplicao - Este tipo de firewall analisam o contedo do pacote para tomar
suas decises de filtragem. Firewalls deste tipo so mais intrusivos (pois analisam o
contedo de tudo que passa por ele) e permitem um controle relacionado com o con-
tedo do trfego. Alguns firewalls em nvel de aplicao combinam recursos bsicos
existentes em firewalls em nvel de pacotes combinando as funcionalidade de controle
de trfego/controle de acesso em uma s ferramenta. Servidores proxy, como o squid,
so um exemplo deste tipo de firewall.
Captulo 3. Firewall iptables 15

nvel de pacotes - Este tipo de firewall toma as decises baseadas nos parmetros do
pacote, como porta/endereo de origem/destino, estado da conexo, e outros parmet-
ros do pacote. O firewall ento pode negar o pacote (DROP) ou deixar o pacote passar
(ACCEPT). O iptables um excelente firewall que se encaixa nesta categoria. Firewall
em nvel de pacotes o assunto explicado nesta seo do guia mas ser apresentada uma
explicao breve sobre o funcionamento de anlise de strings do iptables.
Os dois tipos de firewalls podem ser usados em conjunto para fornecer uma camada dupla de
segurana no acesso as suas mquinas/mquinas clientes.

3.1.11 O que proteger?

Antes de iniciar a construo do firewall bom pensar nos seguintes pontos:


Quais servios precisa proteger. Servios que devem ter acesso garantido a usurios
externos e quais sero bloqueados a todas/determinadas mquinas. recomendvel
bloquear o acesso a todas portas menores que 1024 por executarem servios que rodam
com privilgio de usurio root, e autorizar somente o acesso as portas que realmente
deseja (configurao restritiva nesta faixa de portas).
Que tipo de conexes eu posso deixar passar e quais bloquear. Servios com autenti-
cao em texto plano e potencialmente inseguros como rlogin, telnet, ftp, NFS, DNS,
LDAP, SMTP RCP, X-Window so servios que devem ser ter acesso garantido somente
para mquinas/redes que voc confia. Estes servios podem no ser s usados para
tentativa de acesso ao seu sistema, mas tambm como forma de atacar outras pessoas
aproveitando-se de problemas de configurao. A configurao do firewall ajuda a pre-
venir isso, mesmo se um servio estiver mal configurado e tentando enviar seus pacotes
para fora, ser impedido. Da mesma forma se uma mquina Windows de sua rede for
infectada por um trojan no haver pnico: o firewall poder estar configurado para blo-
quear qualquer tentativa de conexo vinda da internet (cracker) para as mquinas de sua
rede. Para cpia de arquivos via rede insegura (como atravs da Internet), recomen-
dado o uso de servios que utilizam criptografia para login e transferncia de arquivos
ou a configurao de uma VPN.
Que mquinas tero acesso livre e quais sero restritas.
Que servios devero ter prioridade no processamento.
Que mquinas/redes NUNCA devero ter acesso a certas/todas mquinas.
O volume de trfego que o servidor manipular. Atravs disso voc pode ter que bal-
ancear o trfego entre outras mquinas, configurar protees contra DoS, syn flood, etc.
O que tem permisso de passar de uma rede para outra (em mquinas que atuam como
roteadores/gateways de uma rede interna).
Etc.
A anlise destes pontos pode determinar a complexidade do firewall, custos de implemen-
tao, prazo de desenvolvimento e tempo de maturidade do cdigo para implementao. Ex-
istem muitos outros pontos que podem entrar na questo de desenvolvimento de um sistema
de firewall, eles dependem do tipo de firewall que est desenvolvendo e das polticas de segu-
rana de sua rede.
Captulo 3. Firewall iptables 16

3.1.12 O que so regras?

As regras so como comandos passados ao iptables para que ele realize uma determi-
nada ao (como bloquear ou deixar passar um pacote) de acordo com o endereo/porta
de origem/destino, interface de origem/destino, etc. As regras so armazenadas dentro dos
chains e processadas na ordem que so inseridas.
As regras so armazenadas no kernel, o que significa que quando o computador for reiniciado
tudo o que fez ser perdido. Por este motivo elas devero ser gravadas em um arquivo para
serem carregadas a cada inicializao.
Um exemplo de regra: iptables -A INPUT -s 123.123.123.1 -j DROP.

3.1.13 O que so chains?

Os Chains so locais onde as regras do firewall definidas pelo usurio so armazenadas para
operao do firewall. Existem dois tipos de chains: os embutidos (como os chains INPUT,
OUTPUT e FORWARD) e os criados pelo usurio. Os nomes dos chains embutidos devem ser
especificados sempre em maisculas (note que os nomes dos chains so case-sensitive, ou seja,
o chain input completamente diferente de INPUT).

3.1.14 O que so tabelas?

Tabelas so os locais usados para armazenar os chains e conjunto de regras com uma deter-
minada caracterstica em comum. As tabelas podem ser referenciadas com a opo -t tabela e
existem 3 tabelas disponveis no iptables:

filter - Esta a tabela padro, contm 3 chains padres:


INPUT - Consultado para dados que chegam a mquina
OUTPUT - Consultado para dados que saem da mquina
FORWARD - Consultado para dados que so redirecionados para outra interface de
rede ou outra mquina.
Os chains INPUT e OUTPUT somente so atravessados por conexes indo/se originando
de localhost.
OBS: Para conexes locais, somente os chains INPUT e OUTPUT so consultados na
tabela filter.

nat - Usada para dados que gera outra conexo (masquerading, source nat, destination
nat, port forwarding, proxy transparente so alguns exemplos). Possui 3 chains padres:
PREROUTING - Consultado quando os pacotes precisam ser modificados logo que
chegam. o chain ideal para realizao de DNAT e redirecionamento de portas
(Fazendo DNAT on page 40).
OUTPUT - Consultado quando os pacotes gerados localmente precisam ser modifi-
cados antes de serem roteados. Este chain somente consultado para conexes que
se originam de IPs de interfaces locais.
Captulo 3. Firewall iptables 17

POSTROUTING - Consultado quando os pacotes precisam ser modificados aps o


tratamento de roteamento. o chain ideal para realizao de SNAT e IP Masquerad-
ing (Fazendo SNAT on page 38).

mangle - Utilizada para alteraes especiais de pacotes (como modificar o tipo de servio
(TOS) ou outros detalhes que sero explicados no decorrer do captulo. Possui 2 chains
padres:
INPUT - Consultado quando os pacotes precisam ser modificados antes de serem
enviados para o chain INPUT da tabela filter.
FORWARD - Consultado quando os pacotes precisam ser modificados antes de serem
enviados para o chain FORWARD da tabela filter.
PREROUTING - Consultado quando os pacotes precisam ser modificados antes de
ser enviados para o chain PREROUTING da tabela nat.
POSTROUTING - Consultado quando os pacotes precisam ser modificados antes de
serem enviados para o chain POSTROUTING da tabela nat.
OUTPUT - Consultado quando os pacotes precisam ser modificados antes de serem
enviados para o chain OUTPUT da tabela nat.
Veja A tabela mangle on page 41 para mais detalhes sobre a tabela mangle.

3.1.15 Habilitando o suporte ao iptables no kernel

Para usar toda a funcionalidade do firewall iptables, permitindo fazer o controle do que tem
ou no permisso de acessar sua mquina, fazer Masquerading/NAT em sua rede, etc., voc
precisar dos seguintes componentes compilados em seu kernel (os mdulos experimentais
fora ignorados intencionalmente):

*
* Network Options:
*

Network packet filtering (replaces ipchains) [Y/m/n/?]


Network packet filtering debugging [Y/m/n/?]

e na Subseo:

*
* IP: Netfilter Configuration
*
Connection tracking (required for masq/NAT) (CONFIG_IP_NF_CONNTRACK) [M/n/y/?]
FTP protocol support (CONFIG_IP_NF_FTP) [M/n/?]
IRC protocol support (CONFIG_IP_NF_IRC) [M/n/?]
IP tables support (required for filtering/masq/NAT) (CONFIG_IP_NF_IPTABLES) [Y
limit match support (CONFIG_IP_NF_MATCH_LIMIT) [Y/m/n/?]
MAC address match support (CONFIG_IP_NF_MATCH_MAC) [M/n/y/?]
netfilter MARK match support (CONFIG_IP_NF_MATCH_MARK) [M/n/y/?]
Captulo 3. Firewall iptables 18

Multiple port match support (CONFIG_IP_NF_MATCH_MULTIPORT) [M/n/y/?]


TOS match support (CONFIG_IP_NF_MATCH_TOS) [M/n/y/?]
LENGTH match support (CONFIG_IP_NF_MATCH_LENGTH) [M/n/y/?]
TTL match support (CONFIG_IP_NF_TTL) [M/n/y/?]
tcpmss match support (CONFIG_IP_NF_MATCH_TCPMSS) [M/n/y/?]
Connection state match support (CONFIG_IP_NF_MATCH_STATE) [M/n/?]
Packet filtering (CONFIG_IP_NF_FILTER) [M/n/y/?]
REJECT target support (CONFIG_IP_NF_TARGET_REJECT) [M/n/?]
Full NAT (CONFIG_IP_NF_NAT) [M/n/?]
MASQUERADE target support (CONFIG_IP_NF_TARGET_MASQUERADE) [M/n/?]
REDIRECT target support (CONFIG_IP_NF_TARGET_REDIRECT) [M/n/?]
Packet mangling (CONFIG_IP_NF_MANGLE) [M/n/y/?]
TOS target support (CONFIG_IP_NF_TARGET_TOS) [M/n/?]
MARK target support (CONFIG_IP_NF_TARGET_MARK) [M/n/?]
LOG target support (CONFIG_IP_NF_TARGET_LOG) [M/n/y/?]
TCPMSS target support (CONFIG_IP_NF_TARGET_TCPMSS) [M/n/y/?]

Esta configurao permite que voc no tenha problemas para iniciar o uso e configurao do
seu firewall iptables, ela ativa os mdulos necessrios para utilizao de todos os recursos do
firewall iptables. Quando conhecer a funo de cada um dos parmetros acima (durante o
decorrer do texto), voc poder eliminar muitas das opes desnecessrias para seu estilo de
firewall ou continuar fazendo uso de todas ;-)
OBS1: A configurao acima leva em considerao que voc NO executar os cdi-
gos antigos de firewall ipfwadm e ipchains. Caso deseje utilizar o ipchains ou o
ipfwadm, ser preciso responder com M a questo IP tables support (required for fil-
tering/masq/NAT) (CONFIG_IP_NF_IPTABLES). Ser necessrio carregar manualmente o
mdulo correspondente ao firewall que deseja utilizar (modprobe iptables_filter.o no
caso do iptables).
No execute mais de um tipo de firewall ao mesmo tempo!!!
OBS2: recomendvel ativar o daemon kmod para carga automtica de mdulos, caso con-
trrio ser necessrio compilar todas as partes necessrias embutidas no kernel, carregar os
mdulos necessrios manualmente ou pelo iptables (atravs da opo modprobe=mdulo).

3.1.16 Ligando sua rede interna a Internet

Se a sua inteno (como da maioria dos usurios) conectar sua rede interna a Internet de
forma rpida e simples, leia Fazendo IP masquerading (para os apressados) on page 37 ou
Fazendo SNAT on page 38. Um exemplo prtico de configurao de Masquerading deste
tipo encontrado em Conectando sua rede interna a Internet on page 58.
Aps configurar o masquerading, voc s precisar especificar o endereo IP da mquina
masquerading (servidor) como Gateway da rede. No Windows 9x/NT/2000 isto feito no
Painel de Controle/Rede/Propriedades de Tcp/IP. No Linux pode ser feito com route add
default gw IP_do_Servidor.
Captulo 3. Firewall iptables 19

3.2 Manipulando chains

O iptables trabalha com uma tabela de regras que analisada uma a uma at que a ltima
seja processada. Por padro, se uma regra tiver qualquer erro, uma mensagem ser mostrada
e ela descartada. O pacote no conferir e a ao final (se ele vai ser aceito ou rejeitado) depen-
der das regras seguintes.
As opes passadas ao iptables usadas para manipular os chains so SEMPRE em mais-
culas. As seguintes operaes podem ser realizadas:

3.2.1 Adicionando regras - A

Como exemplo vamos criar uma regra que bloqueia o acesso a nosso prpria mquina
(127.0.0.1 - loopback). Primeiro daremos um ping para verificar seu funcionamento:

#ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.6 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.5 ms

--- 127.0.0.1 ping statistics ---


2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.5/0.5/0.6 ms

Ok, a mquina responde, agora vamos incluir uma regra no chain INPUT (-A INPUT) que
bloqueie (-j DROP) qualquer acesso indo ao endereo 127.0.0.1 (-d 127.0.0.1):
iptables -t filter -A INPUT -d 127.0.0.1 -j DROP
Agora verificamos um novo ping:

#ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes

--- 127.0.0.1 ping statistics ---


2 packets transmitted, 0 packets received, 100% packet loss

Desta vez a mquina 127.0.0.1 no respondeu, pois todos os pacotes com o destino 127.0.0.1 (-d
127.0.0.1) so rejeitados (-j DROP). A opo -A usada para adicionar novas regras no final do
chain. Alm de -j DROP que serve para rejeitar os pacotes, podemos tambm usar -j ACCEPT
para aceitar pacotes. A opo -j chamada de alvo da regra ou somente alvo pois define o
destino do pacote que atravessa a regra (veja Especificando um alvo on page 32). Bem vindo
a base de um sistema de firewall :-)
OBS1: - O acesso a interface loopback no deve ser de forma alguma bloqueado, pois muitos
aplicativos utilizam soquetes tcp para realizarem conexes, mesmo que voc no possua uma
rede interna.
Captulo 3. Firewall iptables 20

OBS2: - A tabela filter ser usada como padro caso nenhuma tabela seja especificada atravs
da opo -t.

3.2.2 Listando regras - L

A seguinte sintaxe usada para listar as regras criadas:


iptables [-t tabela] -L [chain] [opes]
Onde:
tabela uma das tabelas usadas pelo iptables. Se a tabela no for especificada, a tabela
filter ser usada como padro. Veja O que so tabelas? on page 16 para detalhes.
chain Um dos chains disponveis na tabela acima (veja O que so tabelas? on page 16) ou
criado pelo usurio (Criando um novo chain - N on page 22). Caso o chain no seja
especificado, todos os chains da tabela sero mostrados.
opes As seguintes opes podem ser usadas para listar o contedo de chains:
-v - Exibe mais detalhes sobre as regras criadas nos chains.
-n - Exibe endereos de mquinas/portas como nmeros ao invs de tentar a res-
oluo DNS e consulta ao /etc/services. A resoluo de nomes pode tomar
muito tempo dependendo da quantidade de regras que suas tabelas possuem e ve-
locidade de sua conexo.
-x - Exibe nmeros exatos ao invs de nmeros redondos. Tambm mostra a faixa
de portas de uma regra de firewall.
--line-numbers - Exibe o nmero da posio da regra na primeira coluna da
listagem.
Para listar a regra criada anteriormente usamos o comando:

#iptables -t filter -L INPUT

Chain INPUT (policy ACCEPT)


target prot opt source destination
DROP all -- anywhere localhost

O comando iptables -L INPUT -n tem o mesmo efeito, a diferena que so mostrados


nmeros ao invs de nomes:

#iptables -L INPUT -n

Chain INPUT (policy ACCEPT)


target prot opt source destination
DROP all -- 0.0.0.0/0 127.0.0.1

#iptables -L INPUT -n --line-numbers


Captulo 3. Firewall iptables 21

Chain INPUT (policy ACCEPT)


num target prot opt source destination
1 DROP all -- 0.0.0.0/0 127.0.0.1

#iptables -L INPUT -n -v
Chain INPUT (policy ACCEPT 78 packets, 5820 bytes)
pkts bytes target prot opt in out source destinatio
2 194 DROP icmp -- * * 0.0.0.0/0 127.0.0.1

Os campos assim possuem o seguinte significado:


Chain INPUT Nome do chain listado
(policy ACCEPT 78 packets, 5820 bytes) poltica padro do chain (veja Especificando a
poltica padro de um chain - P on page 25).
pkts Quantidade de pacotes que atravessaram a regra (veja Zerando contador de bytes dos
chains - Z on page 25).
bytes Quantidade de bytes que atravessaram a regra. Pode ser referenciado com K (Kilobytes),
M (Megabytes), G (Gigabytes).
target O alvo da regra, o destino do pacote. Pode ser ACCEPT, DROP ou outro chain. Veja
Especificando um alvo on page 32 para detalhes sobre a especificao de um alvo.
prot Protocolo especificado pela regra. Pode ser udp, tcp, icmp ou all. Veja Especificando um
protocolo on page 28 para detalhes.
opt Opes extras passadas a regra. Normalmente ! (veja Especificando uma exceo on
page 31) ou f (veja Especificando fragmentos on page 31).
in Interface de entrada (de onde os dados chegam). Veja Especificando a interface de
origem/destino on page 27.
out Interface de sada (para onde os dados vo). Veja Especificando a interface de
origem/destino on page 27.
source Endereo de origem. Veja Especificando um endereo de origem/destino on page 26.
destination Endereo de destino. Veja Especificando um endereo de origem/destino on
page 26.
outras opes Estas opes normalmente aparecem quando so usadas a opo -x:
dpt ou dpts - Especifica a porta ou faixa de portas de destino.
reject-with icmp-port-unreachable - Significa que foi usado o alvo RE-
JECT naquela regra (veja Alvo REJECT on page 32).

3.2.3 Apagando uma regra - D

Para apagar um chain, existem duas alternativas:


1 Quando sabemos qual o nmero da regra no chain (listado com a opo -L) pode-
mos referenciar o nmero diretamente. Por exemplo, para apagar a regra criada acima:
iptables -t filter -D INPUT 1 Esta opo no boa quando temos um firewall
complexo com um grande nmero de regras por chains, neste caso a segunda opo a
mais apropriada.
2 Usamos a mesma sintaxe para criar a regra no chain, mas trocamos -A por -D: iptables
-t filter -D INPUT -d 127.0.0.1 -j DROP Ento a regra correspondentes no
Captulo 3. Firewall iptables 22

chain INPUT ser automaticamente apagada (confira listando o chain com a opo -L).
Caso o chain possua vrias regras semelhantes, somente a primeira ser apagada. OBS:
No possvel apagar os chains defaults do iptables (INPUT, OUTPUT. . . ).

3.2.4 Inserindo uma regra - I

Precisamos que o trfego vindo de 192.168.1.15 no seja rejeitado pelo nosso firewall. No
podemos adicionar uma nova regra (-A) pois esta seria includa no final do chain e o trfego
seria rejeitado pela primeira regra (nunca atingindo a segunda). A soluo inserir a nova
regra antes da regra que bloqueia todo o trfego ao endereo 127.0.0.1 na posio 1:
iptables -t filter -I INPUT 1 -s 192.168.1.15 -d 127.0.0.1 -j ACCEPT
Aps este comando, temos a regra inserida na primeira posio do chain (repare no nmero
1 aps INPUT) e a antiga regra nmero 1 passa a ser a nmero 2. Desta forma a regra acima
ser consultada, se a mquina de origem for 192.168.1.15 ento o trfego estar garantido, caso
contrrio o trfego com o destino 127.0.0.1 ser bloqueado na regra seguinte.

3.2.5 Substituindo uma regra - R

Aps criar nossa regra, percebemos que a nossa inteno era somente bloquear os pings com
o destino 127.0.0.1 (pacotes ICMP) e no havia necessidade de bloquear todo o trfego da
mquina. Existem duas alternativas: apagar a regra e inserir uma nova no lugar ou modificar
diretamente a regra j criada sem afetar outras regras existentes e mantendo a sua ordem no
chain (isso muito importante). Use o seguinte comando:
iptables -R INPUT 2 -d 127.0.0.1 -p icmp -j DROP
O nmero 2 o nmero da regra que ser substituda no chain INPUT, e deve ser especificado.
O comando acima substituir a regra 2 do chain INPUT (-R INPUT 2) bloqueando (-j DROP)
qualquer pacote icmp (-p icmp) com o destino 127.0.0.1 (-d 127.0.0.1).

3.2.6 Criando um novo chain - N

Em firewalls organizados com um grande nmero de regras, interessante criar chains in-
dividuais para organizar regras de um mesmo tipo ou que tenha por objetivo analisar um
trfego de uma mesma categoria (interface, endereo de origem, destino, protocolo, etc) pois
podem consumir muitas linhas e tornar o gerenciamento do firewall confuso (e conseqente-
mente causar srios riscos de segurana). O tamanho mximo de um nome de chain de 31
caracteres e podem conter tanto letras maisculas quanto minsculas.
iptables [-t tabela] [-N novochain]
Para criar o chain internet (que pode ser usado para agrupar as regras de internet) usamos o
seguinte comando:

iptables -t filter -N internet


Captulo 3. Firewall iptables 23

Para inserir regras no chain internet basta especifica-lo aps a opo -A:

iptables -t filter -A internet -s 200.200.200.200 -j DROP

E ento criamos um pulo (-j) do chain INPUT para o chain internet:


iptables -t filter -A INPUT -j internet
OBS: O chain criando pelo usurio pode ter seu nome tanto em maisculas como minsculas.
Se uma mquina do endereo 200.200.200.200 tentar acessar sua mquina, o iptables con-
sultar as seguintes regras:

INPUT internet
---------------------------- -----------------------------
| Regra1: -s 192.168.1.15 | | Regra1: -s 200.200.200.200|
|--------------------------| |---------------------------|
| Regra2: -s 192.168.1.1 | | Regra2: -d 192.168.1.1 |
|--------------------------| -----------------------------
| Regra3: -j DROP |
----------------------------

O pacote tem o endereo de origem


200.200.200.200, ele passa pela
primeira e segunda regras do chain
INPUT, a terceira regra direciona
para o chain internet

_______________________________________
v / v
/-------------------------|-\ / /-------------------------------------|-\
| Regra1: -s 192.168.1.15 | | / | Regra1: -s 200.200.200.200 -j DROP \___
|-------------------------|-| / |---------------------------------------|
| Regra2: -s 192.168.1.1 | | / | Regra2: -d 200.200.200.202 -j DROP |
|-------------------------|-|/ \---------------------------------------/
| Regra3: -j internet /|
|---------------------------| No chain internet, a primeira regra confe
| Regra4: -j DROP | com o endereo de origem 200.200.200.200
\---------------------------/ o pacote bloqueado.

Se uma mquina com o endereo de origem 200.200.200.201 tentar acessar a mqui


ento as regra consultadas sero as seguintes:

O pacote tem o endereo de origem


Captulo 3. Firewall iptables 24

200.200.200.201, ele passa pela


primeira e segunda regras do chain
INPUT, a terceira regra direciona
para o chain internet ______________________________________
v / v
/-------------------------|-\ / /-------------------------------------|-\
| Regra1: -s 192.168.1.15 | | / | Regra1: -s 200.200.200.200 -j DROP | |
|-------------------------|-| / |-------------------------------------|-|
| Regra2: -s 192.168.1.1 | | / | Regra2: -s 200.200.200.202 -j DROP | |
|-------------------------|-|/ \-------------------------------------|-/
| Regra3: -j internet /| v
|---------------------------| /
| Regra4: -j DROP --+-------------------------------------------
\------------------------/-/ O pacote passa pelas regras 1 e 2 do chain
| internet, como ele no confere com nenhuma
v das 2 regras ele retorna ao chain INPUT e
Esta regra a nmero 4 analisado pela regra seguinte.
que diz para rejeitar o
pacote.

3.2.7 Renomeando um chain criado pelo usurio - E

Se por algum motivo precisar renomear um chain criado por voc na tabela filter, nat ou mangle,
isto poder ser feito usando a opo -E do iptables:

iptables -t filter -E chain-antigo novo-chain

Note que no possvel renomear os chains defaults do iptables.

3.2.8 Listando os nomes de todas as tabelas atuais

Use o comando cat /proc/net/ip_tables_names para fazer isto. interessante dar uma
olhada nos arquivos dentro do diretrio /proc/net, pois os arquivos existentes podem lhe
interessar para outras finalidades.

3.2.9 Limpando as regras de um chain - F

Para limpar todas as regras de um chain, use a seguinte sintaxe:


iptables [-t tabela] [-F chain]
Onde:

tabela Tabela que contm o chain que desejamos zerar.


Captulo 3. Firewall iptables 25

chain Chain que desejamos limpar. Caso um chain no seja especificado, todos os chains da
tabela sero limpos.

iptables -t filter -F INPUT


iptables -t filter -F

3.2.10 Apagando um chain criado pelo usurio - X

Para apagarmos um chain criado pelo usurio, usamos a seguinte sintaxe:


iptables [-t tabela] [-X chain]
Onde:
tabela Nome da tabela que contm o chain que desejamos excluir.
chain Nome do chain que desejamos apagar. Caso no seja especificado, todos os chains
definidos pelo usurio na tabela especificada sero excludos.
OBS: - Chains embutidos nas tabelas no podem ser apagados pelo usurio. Veja os nomes
destes chains em O que so tabelas? on page 16.

iptables -t filter -X internet


iptables -X

3.2.11 Zerando contador de bytes dos chains - Z

Este comando zera o campo pkts e bytes de uma regra do iptables. Estes campos podem ser
visualizados com o comando iptables -L -v. A seguinte sintaxe usada:
iptables [-t tabela] [-Z chain] [-L]
Onde:
tabela Nome da tabela que contm o chain que queremos zerar os contadores de bytes e pa-
cotes.
chain Chain que deve ter os contadores zerados. Caso no seja especificado, todos os chains da
tabela tero os contadores zerados. Note que as opes -Z e -L podem ser usadas juntas,
assim o chain ser listado e imediatamente zerado. Isto evita a passagem de pacotes
durante a listagem de um chain.

iptables -t filter -Z INPUT

3.2.12 Especificando a poltica padro de um chain - P

A poltica padro determina o que acontecer com um pacote quando ele chegar ao final das
regras contidas em um chain. A poltica padro do iptables ACCEPT mas isto pode ser
alterado com o comando:
Captulo 3. Firewall iptables 26

iptables [-t tabela] [-P chain] [ACCEPT/DROP]


Onde:
tabela Tabela que contm o chain que desejamos modificar a poltica padro.
chain Define o chain que ter a poltica modificada. O chain deve ser especificado.
ACCEPT/DROP ACCEPT aceita os pacotes caso nenhuma regra do chain conferir (usado em
regras permissivas). DROP rejeita os pacotes caso nenhuma regra do chain conferir (us-
ado em regras restritivas).
A poltica padro de um chain mostrada com o comando iptables -L:

# iptables -L INPUT

Chain INPUT (policy ACCEPT)


target prot opt source destination
DROP icmp -- anywhere localhost

No exemplo acima, a poltica padro de INPUT ACCEPT (policy ACCEPT), o que significa
que qualquer pacote que no seja rejeitado pela regra do chain, ser aceito. Para alterar a
poltica padro deste chain usamos o comando:

iptables -t filter -P INPUT DROP

NOTA: As polticas de acesso PERMISSIVASS (ACCEPT) normalmente so usadas em con-


junto com regras restritivas no chain correspondentes (tudo bloqueado e o que sobrar lib-
erado) e polticas RESTRITIVAS (DROP) so usadas em conjunto com regras permissivas no
chain correspondente (tudo liberado e o que sobrar bloqueado pela poltica padro).

3.3 Outras opes do iptables

3.3.1 Especificando um endereo de origem/destino

As opes -s (ou src/source)e -d (ou dst/destination) servem para especificar en-


dereos de origem e destino respectivamente. permitido usar um endereo IP completo
(como 192.168.1.1), um hostname (debian), um endereo fqdn (www.debian.org) ou um par
rede/mscara (como 200.200.200.0/255.255.255.0 ou 200.200.200.0/24).
Caso um endereo/mscara no sejam especificados, assumido 0/0 como padro (todos as
mquinas de todas as redes). A interpretao dos endereos de origem/destino dependem do
chain que est sendo especificado (como INPUT e OUTPUT por exemplo).
OBS: Caso seja especificado um endereo fqdn e este resolver mais de um endereo IP, sero
criadas vrias regras, cada uma se aplicando a este endereo IP especfico. recomendvel
sempre que possvel a especificao de endereos IPs nas regras, pois alm de serem muito
rpidos (pois no precisar de resoluo DNS) so mais seguros para evitar que nosso firewall
seja enganado por um ataque de IP spoofing.
Captulo 3. Firewall iptables 27

# Bloqueia o trfego vindo da rede 200.200.200.*:


iptables -A INPUT -s 200.200.200.0/24 -j DROP

# Bloqueia conexes com o destino 10.1.2.3:


iptables -A OUTPUT -d 10.1.2.3 -j DROP

# Bloqueia o trfego da mquina www.dominio.teste.org a rede 210.21.1.3


# nossa mquina possui o endereo 210.21.1.3
iptables -A INPUT -s www.dominio.teste.org -d 210.21.1.3 -j DROP

3.3.2 Especificando a interface de origem/destino

As opes -i (ou in-interface) e -o (ou out-interface) especificam as interfaces de


origem/destino de pacotes. Nem todos as chains aceitam as interfaces de origem/destino
simultaneamente, a interface de entrada (-i) nunca poder ser especificada em um chain OUT-
PUT e a interface de sada (-o) nunca poder ser especificada em um chain INPUT. Abaixo uma
rpida referncia:

+---------------------+--------------------------------+
TABELA | CHAIN | INTERFACE |
| +----------------+---------------+
| | ENTRADA (-i) | SADA (-o) |
+---------+---------------------+----------------+---------------+
| | INPUT | SIM | NO |
| filter | OUTPUT | NO | SIM |
| | FORWARD | SIM | SIM |
+---------+---------------------+----------------+---------------+
| | PREROUTING | SIM | NO |
| nat | OUTPUT | NO | SIM |
| | POSTROUTING | NO | SIM |
+---------+---------------------+----------------+---------------+
| | PREROUTING | SIM | NO |
| mangle | | | |
| | OUTPUT | NO | SIM |
+---------+---------------------+----------------+---------------+

O caminho do pacote na interface ser determinado pelo tipo da interface e pela posio dos
chains nas etapas de seu roteamento. O chain OUTPUT da tabela filter somente poder conter
a interface de sada (veja a tabela acima). O chain FORWARD da tabela filter o nico que
aceita a especificao de ambas as interfaces, este um timo chain para controlar o trfego
que passa entre interfaces do firewall.
Por exemplo para bloquear o acesso do trfego de qualquer mquina com o endereo
200.123.123.10 vinda da interface ppp0 (uma placa de fax-modem):
Captulo 3. Firewall iptables 28

iptables -A INPUT -s 200.123.123.10 -i ppp0 -j DROP

A mesma regra pode ser especificada como

iptables -A INPUT -s 200.123.123.10 -i ppp+ -j DROP

O sinal de + funciona como um coringa, assim a regra ter efeito em qualquer interface de
ppp0 a ppp9. As interfaces ativas no momento podem ser listadas com o comando ifconfig,
mas permitido especificar uma regra que faz referncia a uma interface que ainda no existe,
isto interessante para conexes intermitentes como o PPP. Para bloquear qualquer trfego
local para a Internet:

iptables -A OUTPUT -o ppp+ -j DROP

Para bloquear a passagem de trfego da interface ppp0 para a interface eth1 (de uma de nossas
redes internas):

iptables -A FORWARD -i ppp0 -o eth1 -j DROP

3.3.3 Especificando um protocolo

A opo -p (ou protocol) usada para especificar protocolos no iptables. Podem ser es-
pecificados os protocolos tcp, udp e icmp. Por exemplo, para rejeitar todos os pacotes UDP
vindos de 200.200.200.200:

iptables -A INPUT -s 200.200.200.200 -p udp -j DROP

OBS1: Tanto faz especificar os nomes de protocolos em maisculas ou minsculas.

Especificando portas de origem/destino

As portas de origem/destino devem ser especificadas aps o protocolo e podem ser precedidas
por uma das seguintes opes:
--source-port ou --sport - Especifica uma porta ou faixa de portas de origem.
--destination-port ou --dport - Especifica uma porta ou faixa de portas de des-
tino.
Uma faixa de portas pode ser especificada atravs de PortaOrigem:PortaDestino:

# Bloqueia qualquer pacote indo para 200.200.200.200 na faixa de


# portas 0 a 1023
iptables -A OUTPUT -d 200.200.200.200 -p tcp --dport :1023 -j DROP
Captulo 3. Firewall iptables 29

Caso a PortaOrigem de uma faixa de portas no seja especificada, 0 assumida como padro,
caso a Porta Destino no seja especificada, 65535 assumida como padro. Caso precise es-
pecificar diversas regras que envolvam o tratamento de portas diferentes, recomendo da uma
olhada em Especificando mltiplas portas de origem/destino on page 45, antes de criar um
grande nmero de regras.

Especificando mensagens do protocolo ICMP

O protocolo ICMP no possui portas, mas possvel fazer um controle maior sobre o trfego
ICMP que entra/sai da rede atravs da especificao dos tipos de mensagens ICMP. Os tipos
de mensagens devem ser especificados com a opo icmp-type CdigoICMP logo aps a
especificao do protocolo icmp:

iptables -A INPUT -s 200.123.123.10 -p icmp --icmp-type time-exceeded -i ppp+

A regra acima rejeitar mensagens ICMP do tipo time-exceeded (tempo de requisio exce-
dido) que venham do endereo 200.123.123.10 atravs da interface ppp+.
Alguns tipos de mensagens ICMP so classificados por categoria (como o prprio time-
exceeded), caso a categoria time-exceeded seja especificada, todas as mensagens daquela
categoria (como ttl-zero-during-transit, ttl-zero-during-reassembly) conferiro na regra es-
pecificada.Os tipos de mensagens ICMP podem ser obtidos com o comando iptables -p
icmp -h:

echo-reply (pong)
destination-unreachable
network-unreachable
host-unreachable
protocol-unreachable
port-unreachable
fragmentation-needed
source-route-failed
network-unknown
host-unknown
network-prohibited
host-prohibited
TOS-network-unreachable
TOS-host-unreachable
communication-prohibited
host-precedence-violation
precedence-cutoff
source-quench
redirect
network-redirect
host-redirect
Captulo 3. Firewall iptables 30

TOS-network-redirect
TOS-host-redirect
echo-request (ping)
router-advertisement
router-solicitation
time-exceeded (ttl-exceeded)
ttl-zero-during-transit
ttl-zero-during-reassembly
parameter-problem
ip-header-bad
required-option-missing
timestamp-request
timestamp-reply
address-mask-request
address-mask-reply

OBS1: No bloqueie mensagens do tipo host-unreachable e source-quench, pois ter


srios problemas no controle de suas conexes. A primeira diz que o destino est inalcanavel
e a segunda que o host est sobrecarregado, assim os pacotes devem ser enviados mais lenta-
mente.

Especificando pacotes syn

Pacotes syn so usados para iniciarem uma conexo, o uso da opo syn serve para especificar
estes tipos de pacotes. Desta maneira possvel bloquear somente os pacotes que iniciam uma
conexo, sem afetar os pacotes restantes. Para que uma conexo ocorra necessrio que a
mquina obtenha a resposta a pacotes syn enviados, caso ele seja bloqueado a resposta nunca
ser retornada e a conexo no ser estabelecida.

iptables -A INPUT -p tcp --syn --dport 23 -i ppp+ -j DROP

A regra acima bloqueia (-j DROP) qualquer tentativa de conexo (syn) vindas da interface
ppp+ ao telnet (dport 23) da mquina local, conexes j efetuadas o so afetadas por esta
regra. A opo syn somente pode ser especificada para o protocolo tcp.
ATENO: - A situao de passagem de pacotes durante deve ser levada em conta durante
a inicializao do firewall, bloqueando a passagem de pacotes durante o processo de configu-
rao, criando regras que bloqueiam a passagem de pacotes (exceto para a interface loopback)
at que a configurao do firewall esteja completa, pode ser uma soluo eficiente.
Outra alternativa segura configurar as regras de firewall antes das interfaces de rede se
tornarem ativas (usando a opo pre-up comando_firewall no arquivo de configurao /etc
/network/interfaces em sistemas Debian.
Captulo 3. Firewall iptables 31

3.3.4 Especificando fragmentos

A opo -f (ou fragment) permite especificar regras que confiram com fragmentos. Frag-
mentos so simplesmente um pacote maior dividido em pedaos para poder ser transmitido
via rede TCP/IP para remontagem do pacote pela mquina de destino.
Somente o primeiro fragmento possui detalhes de cabealho para ser processado, os segundos
e seguintes somente possuem alguns cabealhos necessrios para dar continuidade ao processo
de remontagem do pacote no destino.
Uma regra como

iptables -A INPUT -s 200.200.200.1 -f -j DROP

derrubar os fragmentos de 200.200.200.1 derrubar o segundo pacote e pacotes seguintes en-


viados por 200.200.200.1 at ns.
OBS1: Note que se o cabealho do pacote no tiver detalhes suficientes para checagem de
regras no iptables, a regra simplesmente no ira conferir.
OBS2: No preciso especificar a opo -f para conexes NAT, pois os pacotes so remon-
tados antes de entrarem no cdigo de filtragem.
OBS3: A opo -f tambm pode ser usada para evitar o flood por fragmentos (bomba de
fragmentos) que, dependendo da intensidade, podem at travar a mquina.

3.3.5 Especificando uma exceo

Muitos parmetros (como o endereo de origem/destino, protocolo, porta, mensagens ICMP,


fragmentos, etc) podem ser precedidos pelo sinal ! que significa exceo. Por exemplo:

iptables -t filter -A INPUT ! -s 200.200.200.10 -j DROP

Diz para rejeitar todos os pacotes EXCETO os que vem do endereo 200.200.200.10.

iptables -A INPUT -p tcp ! --syn -s 200.200.200.10 ! -i eth0 -j DROP

Diz para bloquear todos os pacotes EXCETO os que iniciam conexes (! syn), EXCETO para
pacotes vindos pela interface eth0 (! -i eth0).

iptables -A INPUT -s 200.200.200.10 ! -p tcp -j DROP

Bloqueia todos os pacotes vindos de 200.200.200.10, EXCETO os do protocolo tcp.


Captulo 3. Firewall iptables 32

3.3.6 Especificando um alvo

O alvo (-j) o destino que um pacote ter quando conferir com as condies de uma regra, um
alvo pode dizer para bloquear a passagem do pacote (-j DROP), aceitar a passagem do pacote
(-j ACCEPT), registrar o pacote no sistema de log (-j LOG), rejeitar o pacote (-j REJECT), redi-
recionar um pacote -j REDIRECT, retornar ao chain anterior sem completar o processamento
no chain atual (-j RETURN), passar para processamento de programas externos (-j QUEUE),
fazer source nat (-j SNAT), destination nat (-j DNAT), etc. Podem existir mais alvos, pois o
iptables modularizvel, e mdulos que acrescentam mais funes podem ser carregados
em adio aos j existentes no kernel.

Nos exemplos anteriores vimos o uso de diversos alvos como o DROP e o ACCEPT. Apenas
farei uma breve referncia sobre os alvos mais usados em operaes comuns dos chains. Os
alvos REDIRECT, SNAT e DNAT sero explicados em uma seo seguinte:
ACCEPT O pacote ACEITO e o processamento das regras daquele chains concludo. Pode
ser usado como alvo em todos os chains de todas as tabelas do iptables e tambm pode
ser especificado na poltica padro das regras do firewall (veja Especificando a poltica
padro de um chain - P on page 25).
DROP Rejeita o pacote e o processamento das regras daquele chain concludo. Pode ser
usado como alvo em todos os chains de todas as tabelas do iptables e tambm pode
ser especificado na poltica padro das regras do firewall (veja Especificando a poltica
padro de um chain - P on page 25).
REJECT Este um mdulo opcional que faz a mesma funo do alvo DROP com a diferena
de que uma mensagem ICMP do tipo icmp-port-unreachable (TCP/UDP) ou host-
unreachable (ICMP) retornada para a mquina de origem. Pode ser usado como alvo
somente nos chains da tabela (no como poltica padro).
LOG Este mdulo envia uma mensagem ao syslog caso a regra confira, o processamento
continua normalmente para a prxima regra (o pacote no nem considerado ACEITO
ou REJEITADO).
RETURN Retorna o processamento do chain anterior sem processar o resto do chain atual.
QUEUE Passa o processamento para um programa a nvel de usurio.

Alvo REJECT

Para ser usado, o mdulo ipt_REJECT deve ser compilado no kernel ou como mdulo.
Este alvo rejeita o pacote (como o DROP) e envia uma mensagem ICMP do tipo icmp-port-
unreachable como padro para a mquina de origem.

um alvo interessante para bloqueio de portas TCP, pois em alguns casos da a impresso que
a mquina no dispe de um sistema de firewall (o alvo DROP causa uma parada de muito
tempo em alguns portscanners e tentativas de conexo de servios, revelando imediatamente
o uso de um sistema de firewall pela mquina). O alvo REJECT vem dos tempos do ipchains
e somente pode ser usado na tabela filter. Quando um pacote confere, ele rejeitado com a
mensagem ICMP do tipo port unreachable, possvel especificar outro tipo de mensagem
ICMP com a opo reject-with tipo_icmp.
Captulo 3. Firewall iptables 33

OBS: REJECT pode ser usado somente como alvo na tabela filter e no possvel especifica-lo
como poltica padro do chain filter (como acontecia no ipchains. Uma forma alternativa
inserir como ltima regra uma que pegue todos os pacotes restantes daquele chain e tenha
como alvo REJECT (como iptables -A INPUT -j REJECT), desta forma ele nunca atin-
gir a poltica padro do chain.

# Rejeita pacotes vindos de 200.200.200.1 pela interface ppp0:


iptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT

Especificando LOG como alvo

Este alvo usado para registrar a passagem de pacotes no syslog do sistema. um alvo muito
interessante para ser usado para regras que bloqueiam determinados trfegos no sistema (para
que o administrador tome conhecimento sobre tais tentativas), para regras de fim de chain
(quando voc tem um grande conjunto de regras em um firewall restritivo e no sabe onde
suas regras esto sendo bloqueadas), para satisfazer sua curiosidade, etc.

# Para registrar o bloqueio de pacotes vindos de 200.200.200.1 pela interface


iptables -A INPUT -s 200.200.200.1 -i ppp+ -j LOG
# Para efetuar o bloqueio
iptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT

Note que no exemplo anterior a regra que registra o pacote (-j LOG) deve aparecer antes da
regra que REJEITA (-j REJECT), caso contrrio a regra de LOG nunca funcionar. A regra que
REJEITA poderia tambm ser trocada por uma regra que ACEITA, caso queira registrar um
pacote que deve ser aceito (se a poltica padro do seu firewall for restritiva (-P DROP). A
nica coisa que muda nas regras de log o alvo da regra, isto facilita a implementao de
grandes conjuntos de regras de firewall.
A regra acima mostrar a seguinte sada no syslog do sistema:

Aug 25 10:08:01 debian kernel: IN=ppp0 OUT= MAC=10:20:30:40:50:60:70:80:90:00:

Os campos possuem o seguinte significado:


Aug 25 10:08:01 Ms, dia e hora do registro do pacote.
debian Nome do computador que registrou o pacote.
kernel: Daemon que registrou a mensagem, no caso o iptables faz parte do prprio kernel.
IN=ppp0 Especifica a interface de entrada (de onde o pacote veio).
OUT= Especifica a interface de sada (para onde o pacote foi).
MAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00 Endereo mac da interface de rede (pode ser
obtido com arp interface).
SRC=200.200.200.1 Endereo de origem do pacote.
DST=200.210.10.10 Endereo de destino do pacote.
SEQ=234234343 Nmero de seqncia da recepo. ativado com a opo log-tcp-sequence.
Captulo 3. Firewall iptables 34

LEN=61 Tamanho em bytes do pacote IP.


TOS=0x00 Prioridade do cabealho TOS (Tipo). Veja a seo Especificando o tipo de servio
on page 41 para mais detalhes.
PREC=0x00 Prioridade do cabealho TOS (Precedncia). Veja a seo Especificando o tipo de
servio on page 41 para mais detalhes.
TTL=64 Tempo de vida do pacote. No exemplo, 64 roteadores (hops).
ID=0 Identificao nica destes datagrama. Esta identificao tambm usada pelos fragmen-
tos seguintes deste pacote.
DF Opo Dont fragment (no fragmentar) do pacote. Usada quando o pacote pequeno
o bastante para no precisar ser fragmentado.
MF Opo More Fragments (mais fragmentos) esto para ser recebidos.
FRAG=100 Tamanho do fragmento especificado em pacotes de 8 bits. No exemplo acima, o
pacote tem o tamanho de 800 bytes (100*8).
PROTO=UDP Nome do protocolo. Pode ser TCP, UDP ou ICMP
SPT=1031 Porta de origem da requisio.
DPT=53 Porta de destino da requisio.
LEN=41 Tamanho do pacote.
O log acima mostra uma consulta DNS (porta destino 53) para nossa mquina (INPUT) de
200.200.200.1 para 200.210.10.10.
O problema que em um grande nmero de regras ser difcil saber qual regra conferiu
(pois teramos que analisar o endereo/porta origem/destino) e o destino do pacote (se ele
foi ACEITO ou BLOQUEADO) pois voc pode ter regras para ambas as situaes. Por este
motivo existem algumas opes teis que podemos usar com o alvo LOG:
log-prefix descrio Permite especificar uma descrio para a regra do firewall de at 29
caracteres. Caso tiver espaos, devem ser usadas aspas.
log-level nvel Especifica o nvel da mensagem no syslog.
log-tcp-options Registra campos do cabealho TCP nos logs do sistema.
log-ip-options Registra campos do cabealho IP nos logs do sistema
log-tcp-sequence Registra os nmeros de seqencia TCP. Evite ao mximo o uso desta opo,
pois a seqencia de nmeros TCP pode ser a chave para um seqestro de seo ou IP
spoofing em seu sistema caso algum usurio tenha acesso a estes logs. Caso utilize tcp/ip
em servidores pblicos, o uso desta opo ajudar a entender bem os ataques DoS cau-
sados por syn-flood e porque ativar os SynCookies (veja Proteo contra syn flood on
page 44).
OBS1:Lembre-se que estas opes so referentes ao alvo LOG e devem ser usadas aps este,
caso contrrio voc ter um pouco de trabalho para analisar e consertar erros em suas regras
do firewall.
OBS2:Caso esteja usando o firewall em um servidor pblico, recomendo associar um limite a
regra de log, pois um ataque poderia causar um DoS enchendo sua partio. Leia mais sobre
isso em Limitando o nmero de vezes que a regra confere on page 43.

# Complementando o exemplo anterior:


# Para registrar o bloqueio de pacotes vindos de 200.200.200.1 pela interface
iptables -A INPUT -s 200.200.200.1 -i ppp+ -j LOG --log-prefix "FIREWALL: Derr
Captulo 3. Firewall iptables 35

# Para efetuar o bloqueio


iptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT

Retornar a seguinte mensagem no syslog:

Aug 25 10:08:01 debian kernel: FIREWALL: Derrubado IN=ppp0 OUT= MAC=10:20:30:4

Agora voc sabe o que aconteceu com o pacote (Rejeitado). A padronizao de mensagens de
firewall tambm importante para a criao de scripts de anlise que podero fazer a anlise
dos logs do seu firewall (para criao de estatsticas que podem servir como base para a criao
de novas regras de firewall ou eliminao de outras).
OBS: Se voc sente falta da funo -l do ipchains que combina o alvo e log na mesma regra
voc pode criar um alvo como o seguinte:

iptables -N log-drop
iptables -A log-drop -j LOG
iptables -A log-drop -j DROP

E usar log-drop como alvo em suas regras. Mesmo assim esta soluo limitada em re-
lao a -l do ipchains porque o iptables no inclui detalhes de qual chain bloqueou o
pacote/qual pacote foi bloqueado, assim necessrio a especificao da opo log-prefix para
as mensagens se tornarem mais compreensveis. Esta limitao pode ser contornada utilizando
um firewall feito em linguagem shell script, desta forma voc ter um controle maior sobre o
seu programa usando funes e integrao com outros utilitrios.

Especificando RETURN como alvo

O alvo RETURN diz ao iptables interromper o processamento no chain atual e retornar o


processamento ao chain anterior. Ele til quando criamos um chain que faz um determinado
tratamento de pacotes, por exemplo bloquear conexes vindas da internet para portas baixas,
exceto para um endereo IP especfico. Como segue:

1-) iptables -t filter -A INPUT -i ppp0 -j internet


2-) iptables -t filter -j ACCEPT
3-) iptables -t filter -N internet
4-) iptables -t filter -A internet -s www.debian.org -p tcp --dport 80 -j RETU
5-) iptables -t filter -A internet -p tcp --dport 21 -j DROP
6-) iptables -t filter -A internet -p tcp --dport 23 -j DROP
7-) iptables -t filter -A internet -p tcp --dport 25 -j DROP
8-) iptables -t filter -A internet -p tcp --dport 80 -j DROP
Captulo 3. Firewall iptables 36

Quando um pacote com o endereo www.debian.org tentando acessar a porta www (80)
de nossa mquina atravs da internet (via interface ppp0), o chain nmero 1 confere, ento o
processamento continua no chain nmero 4, o chain nmero 4 confere ento o processamento
volta para a regra nmero 2, que diz para aceitar o pacote.
Agora se um pacote vem com o endereo www.dominio.com.br tentando acessar a porta
www *80) de nossa mquina atravs da internet (via interface ppp0), o chain nmero 1 confere,
ento o processamento continua no chain nmero 4, que no confere. O mesmo acontece com
os chains 5, 6 e 7. O chain nmero 8 confere, ento o acesso bloqueado.
Como pode notou, o alvo RETURN facilita bastante a construo das regras do seu firewall,
caso existam mquinas/redes que sejam excees as suas regras. Se ela no existisse, seria
necessrio especificar diversas opes -s, -d, etc para poder garantir o acesso livre a determi-
nadas mquinas.

3.3.7 Salvando e Restaurando regras

As regras que voc est trabalhosamente criando e testando manualmente enquanto manipula
o iptables podem ser salvas de 2 formas; uma delas escrevendo um shell script que tenha
todos os comandos, um por linha. Isto recomendado quando tem um firewall grande e que
exige uma boa padronizao de regras, bem como sua leitura, comentrios. O script shell
tambm permite o uso de funes presente no interpretador de comando, portanto se voc
uma pessoa que gosta de interagir com as funes do shell e deixar as coisas mais flexveis,
prefira esta opo.
A outra forma usando as ferramentas iptables-save e iptables-restore baseada na
idia do ipchains-save e ipchains-restore. O iptables-save deve ser usado sempre
que modificar regras no firewall iptables da seguinte forma:

iptables-save >/dir/iptables-regras

Uma das vantagens do uso do iptables-save ele tambm salvar os contadores de chains,
ou seja, a quantidade de pacotes que conferiram com a regra. Isto tambm pode ser feito
com algumas regras adicionais em seu shell script, caso tenha interesse nesses contadores para
estatsticas ou outros tipos de relatrios.
Para restaurar as regras salvas, utilize o comando:

iptables-restore </dir/iptables-regras

3.4 A tabela nat (Network Address Translation) - fazendo nat

A tabela nat serve para controlar a traduo dos endereos que atravessam o cdigo de
roteamento da mquina Linux. Existem 3 chains na tabela nat: PREROUTING, OUTPUT e
POSTROUTING (veja O que so tabelas? on page 16 para maiores detalhes).
Captulo 3. Firewall iptables 37

A traduo de endereos tem inmeras utilidades, uma delas o Masquerading, onde


mquinas de uma rede interna podem acessar a Internet atravs de uma mquina Linux,
redirecionamento de porta, proxy transparente, etc. Esta seo abordar os tipos de NAT, ex-
emplos de como criar rapidamente uma conexo IP masquerading e entender como a traduo
de endereos funciona no iptables.

Se sua inteno ligar sua rede a Internet existem duas opes:


Voc possui uma conexo que lhe oferece um endereo IP dinmico (a cada conexo
dado um endereo IP - como uma conexo PPP) ento o IP masquerading o que
precisa (veja Fazendo IP masquerading (para os apressados) on this page ou Fazendo
IP Masquerading on page 39).
Voc tem uma conexo que lhe oferece um endereo IP permanente (ADSL, por exemplo)
ento o SNAT o que precisa (veja Fazendo SNAT on the following page).

3.4.1 Criando um novo chain na tabela NAT

O procedimento para criao de um novo chain nesta tabela o mesmo descrito em Criando
um novo chain - N on page 22 ser necessrio somente especificar a tabela nat (-t nat) para
que o novo chain no seja criado na tabela padro (-t filter).

iptables -t nat -N intra-inter

Que criar o chain chamado intra-inter na tabela nat. Para inserir regras neste chain ser
necessrio especificar a opo -t nat.

3.4.2 Fazendo IP masquerading (para os apressados)

Voc precisar de um kernel com suporte ao iptables (veja Habilitando o suporte ao iptables
no kernel on page 17 e ip_forward e ento digitar os dois comandos abaixo para habilitar o
masquerading para todas as mquinas da rede 192.168.1.*:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE


echo "1" >/proc/sys/net/ipv4/ip_forward

A configurao do servidor Linux est completa, agora os clientes da rede precisaro ser
configurados para usar o endereo IP do servidor Linux como gateway. recomendvel
instalar um servidor proxy e DNS na mquina Linux para acelerar o desempenho das req-
uisies/resoluo de nomes das mquinas em rede. A utilizao de bits TOS tambm pode
trazer um grande aumento de velocidade para os diferentes servios da rede (veja Especifi-
cando o tipo de servio on page 41).
Captulo 3. Firewall iptables 38

3.4.3 Fazendo SNAT

SNAT (source nat - nat no endereo de origem) consiste em modificar o endereo de origem
das mquinas clientes antes dos pacotes serem enviados. A mquina roteadora inteligente
o bastante para lembrar dos pacotes modificados e reescrever os endereos assim que obter a
resposta da mquina de destino, direcionando os pacotes ao destino correto. Toda operao de
SNAT feita no chain POSTROUTING.
permitido especificar endereos de origem/destino, protocolos, portas de origem/destino,
interface de entrada/sada (dependendo do chain), alvos, etc. desnecessrio especificar frag-
mentos na tabela nat, pois eles sero remontados antes de entrar no cdigo de roteamento.
O SNAT a soluo quando voc tem acesso a internet atravs de um nico IP e deseja fazer
que sua rede tenha acesso a Internet atravs da mquina Linux. Nenhuma mquina da Inter-
net poder ter acesso direto as mquinas de sua rede interna via SNAT.
OBS: A observao acima no leva em conta o controle de acesso externo configurado na
mquina que estiver configurando o iptables, uma configurao mau realizada pode ex-
por sua mquina a acessos externos indesejados e comprometer sua rede interna caso algum
consiga acesso direto ao servidor.
necessrio especificar SNAT como alvo (-j SNAT) quando desejar que as mquinas de sua
rede interna tenha acesso a Internet atravs do IP fixo da mquina Linux (para conexes inter-
mitentes como PPP, veja Fazendo IP Masquerading on the facing page). O parmetro --to
IP:portas deve ser usado aps o alvo SNAT. Ele serve para especificar um endereo IP, faixa
de endereos e opcionalmente uma porta ou faixa de portas que ser substituda. Toda a oper-
ao de SNAT realizada atravs do chain POSTROUTING:

# Modifica o endereo IP dos pacotes vindos da mquina 192.168.1.2 da rede int


# que tem como destino a interface eth1 para 200.200.217.40 (que o nosso end
# IP da interface ligada a Internet).
iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth1 -j SNAT --to 200.200.217

Os pacotes indo para a Internet (nossa conexo feita via eth1, nossa interface externa) vindo
do endereo 192.168.1.2, so substitudos por 200.241.200.40 e enviados para fora. Quando a
resposta a requisio retornada, a mquina com iptables recebe os pacotes e faz a oper-
ao inversa, modificando o endereo 200.241.200.40 novamente para 192.168.1.2 e enviando
a resposta a mquina de nossa rede interna. Aps definir suas regras de NAT, execute o co-
mando echo 1 >/proc/sys/net/ipv4/ip_forward para habilitar o suporte a redire-
cionamento de pacotes no kernel.
Tambm possvel especificar faixas de endereos e portas que sero substitudas:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 200.200.

Modifica o endereo IP de origem de todas as mquinas da rede 192.168.1.0/24 que tem o des-
tino a interface eth0 para 200.241.200.40 a 200.241.200.50. O endereo IP selecionado escolhido
de acordo com o ltimo IP alocado.
Captulo 3. Firewall iptables 39

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 200.200.

Idntico ao anterior, mas faz somente substituies na faixa de portas de origem de 1 a 1023.

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 200.200.

Faz o mapeamento para a faixa de portas 200.200.217.40 a 200.200.217.50 e de 200.200.217.70 a


200.200.217.73.
OBS1: Se por algum motivo no for possvel mapear uma conexo NAT, ela ser derrubada.
OBS2: Tenha certeza que as respostas podem chegar at a mquina que fez o NAT. Se estiver
fazendo SNAT em um endereo livre em sua rede (como 200.200.217.73).
OBS3: Como notou acima, o SNAT usado quando temos uma conexo externa com um ou
mais IPs fixos. O Masquerading uma forma especial de SNAT usada para funcionar em
conexes que recebem endereos IP aleatrios (PPP).
OBS4: No se esquea de habilitar o redirecionamento de pacotes aps fazer suas regra de
NAT com o comando: echo 1 >/proc/sys/net/ipv4/ip_forward, caso contrrio o
redirecionamento de pacotes no funcionar.

Fazendo IP Masquerading

O IP Masquerading um tipo especial de SNAT usado para conectar a sua rede interna a
internet quando voc recebe um IP dinmico de seu provedor (como em conexes ppp). Todas
as operaes de IP Masquerading so realizadas no chain POSTROUTING. Se voc tem um IP
fixo, deve ler Fazendo SNAT on the preceding page.
Para fazer IP Masquerading de uma mquina com o IP 192.168.1.2 para ter acesso a Internet,
use o comando:

iptables -t nat -A POSTROUTING -s 192.168.1.2/32 -o ppp0 -j MASQUERADE

A diferena que o alvo -j MASQUERADE. O comando acima faz IP Masquerading de


todo o trfego de 192.168.1.2 indo para a interface ppp0: O endereo IP dos pacotes vindos
de 192.168.1.2 so substitudos pelo IP oferecido pelo seu provedor de acesso no momento
da conexo, quando a resposta retornada a operao inversa realizada para garantir que
a resposta chegue ao destino. Nenhuma mquina da internet poder ter acesso direto a sua
mquina conectava via Masquerading.
Para fazer o IP Masquerading de todas as mquinas da rede 192.168.1.*:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

Aps definir a regra para fazer Masquerading (SNAT), execute o comando echo 1
>/proc/sys/net/ipv4/ip_forward para habilitar o suporte a redirecionamento de pa-
cotes no kernel.
Captulo 3. Firewall iptables 40

3.4.4 Fazendo DNAT

DNAT (Destination nat - nat no endereo de destino) consiste em modificar o endereo de


destino das mquinas clientes. O destination nat muito usado para fazer redirecionamento
de pacotes, proxyes transparentes e balanceamento de carga.
Toda operao de DNAT feita no chain PREROUTING. As demais opes e observaes do
SNAT so tambm vlidas para DNAT (com exceo que somente permitido especificar a
interface de origem no chain PREROUTING).

# Modifica o endereo IP destino dos pacotes de 200.200.217.40 vindo da interf


# para 192.168.1.2.
iptables -t nat -A PREROUTING -s 200.200.217.40 -i eth0 -j DNAT --to 192.168.1

Tambm possvel especificar faixas de endereos e portas que sero substitudas no DNAT:

iptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -j DNAT --to 200.200.2

Modifica o endereo IP de destino do trfego vindos da interface 192.168.1.0/24 para um IP


de 200.241.200.40 a 200.241.200.50. Este um excelente mtodo para fazer o balanceamento
de carga entre servidores. O endereo IP selecionado escolhido de acordo com o ltimo IP
alocado.

iptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -j DNAT --to 200.200.2

Idntico ao anterior, mas faz somente substituies na faixa de portas de destino de 1024 a
5000. A operao acima a mesma realizada pelo ipmasqadm dos kernels da srie 2.2.
OBS1: Se por algum motivo no for possvel mapear uma conexo NAT, ela ser derrubada.
OBS2: No se esquea de conferir se o ip_forward est ajustado para 1: echo 1
>/proc/sys/net/ipv4/ip_forward.

Redirecionamento de portas

O redirecionamento de portas permite a voc repassar conexes com destino a uma porta para
outra porta na mesma mquina. O alvo REDIRECT usado para fazer esta operao, junto com
o argumento to-port especificando a porta que ser redirecionada. Este o mtodo DNAT es-
pecfico para se para fazer proxy transparente (para redirecionamento de endereos/portas,
veja Fazendo DNAT on this page). Todas as operaes de redirecionamento de portas real-
izada no chain PREROUTING e OUTPUT da tabela nat.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port

Redireciona as conexes indo para a porta 80 para a porta 81 (rodando squid) no firewall.
ATENO: O squid possui suporte a proxy transparente, e poder atender as requisies
acima da regra acima.
Captulo 3. Firewall iptables 41

3.4.5 Monitorando conexes feitas na tabela nat

Use o comando cat /proc/net/ip_conntrack para listar todas as conexes atuais


tratadas pelo mdulo nat.

3.5 A tabela mangle

A tabela mangle serve para especificar aes especiais para o tratamento do trfego que atrav-
essa os chains. Nesta tabela existem cincos chains: PREROUTING, POSTROUTING, INPUT,
OUTPUT e FORWARD (veja O que so tabelas? on page 16 para maiores detalhes).
Em geral, cada um deste chain processado antes do chain correspondente na tabela filter e
nat para definir opes especiais para o trfego (por exemplo, o chain PREROUTING da tabela
mangle processado antes do PREROUTING da tabela nat). O chain OUTPUT da tablea mangle
corresponde ao OUTPUT da tabela nat. Opes como o Tipo de Servio (TOS) especificado
nesta tabela para classificar e aumentar consideravelmente a velocidade de trfego consid-
erados em tempo real. Mesmo aps o trfego ser estabelecido, os chains da tabela mangle
continuam ativos para garantir que as opes especiais relacionadas com a conexo continuem
fazendo efeito (veja os exemplos de Caminho percorrido pelos pacotes nas tabelas e chains
on page 49).

3.5.1 Especificando o tipo de servio

O tipo de servio um campo existente no cabealho de pacotes do protocolo ipv4 que tem a
funo especificar qual a prioridade daquele pacote. A prioridade definida usando o algo-
ritmo FIFO do prprio kernel, sendo uma das alternativas de controle/priorizao de trfego
das mais simples e rpidas.
Uma das vantagens da utilizao do tipo de servio dar prioridade ao trfego de pacotes
interativos (como os do ICQ, IRC, servidores de chat), etc. Com o TOS especificado, mesmo
que esteja fazendo um download consumindo toda a banda de sua interface de rede, o trfego
com prioridade interativa ser enviado antes, aumentando a eficincia do uso de servios em
sua mquina.
Em testes realizados em minha conexo de 56K, o uso de regras TOS aumentou bastante o de-
sempenho em trfego interativo (em torno de 300%), durante o uso total da banda da interface
ppp em grande consumo de banda.
Usamos o alvo TOS (-j TOS) para especificar a modificao do tipo de servio nos pacotes que
atravessam as regras do firewall, acompanhada do argumento set-tos TOS que define a nova
prioridade dos pacotes. Os valores aceitos so os seguintes:
Espera Mnima especificado atravs de Minimize-Delay, 16 ou 0x10
Mximo Processamento especificado atravs de Maximize-Throughput, 8, ou 0x08.
Mxima Confiana especificado atravs de Maximize-Reliability, 4 ou 0x04.
Custo mnimo Especificado atravs de Minimize-Cost, 2 ou 0x02.
Prioridade Normal Especificado atravs de Normal-Service, 0 ou 0x00.
Captulo 3. Firewall iptables 42

Os pacotes vem por padro com o valor TOS ajustado como prioridade normal (bits tos ajus-
tados para 0x00). O tipo Mnima Espera o de maior prioridade, recomendado para trfego
interativo.

Especificando o TOS para trfego de sada

Este o mais usado, pois prioriza o trfego que sai da mquina (com destino a Internet, por
exemplo). Sua operao realizada atravs do chain OUTPUT ou POSTROUTING.
Para priorizar todo o trfego de IRC de nossa rede interna indo para a interface ppp0:

iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 6666-6668 -j TOS --set-tos

O bit TOS ajustado para Espera mnima e ser enviado antes dos pacotes com prioridade
normal para fora. Para priorizar a transmisso de dados ftp saindo da rede:

iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 20 -j TOS --set-tos 8

Para priorizar o trfego de ICQ da rede:

iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 5190 -j TOS --set-tos 16

Existem muitas outras otimizaes que podem ser feitas, s depende dos requerimentos e
anlise de cada servio da rede pelo administrador.
OBS: - Os pacotes que atravessam o alvo TOS somente tem os bits tipo do servio modificados,
eles no sero de qualquer forma rejeitados.

Especificando o TOS para o trfego de entrada

Este prioriza o trfego que entra da mquina. Sua operao realizada no chain INPUT ou
PREROUTING. No faz muito sentido o uso deste chain dentro de uma rede pequena/mdia,
pois o trfego que recebermos ser priorizado pelo chain de sada de outras mquinas da in-
ternet/outras redes antes de chegar a nossa (desde que elas tambm estejam usando TOS).
Para priorizar o processamento do trfego interativo vindo de servidores IRC para nossa rede:

iptables -t mangle -A PREROUTING -i eth0 -p tcp --sport 6666-6668 -j TOS --set

Modifica o tipo de servio para mnima espera de todo o trfego enviado por servidores de IRC
vindo da interface eth0.
OBS: - Os pacotes que atravessam o alvo TOS somente tem os bits tipo do servio modificados,
eles no sero de qualquer forma rejeitados.
Captulo 3. Firewall iptables 43

3.6 Outros mdulos do iptables

Os mdulos do iptables so especificados com a opo -m mdulo ou match mdulo e permitem


expandir a funcionalidade do firewall atravs de novas conferncias e recursos de filtragem
adicionais, como limitar a conferncia de regras do firewall (um mtodo til de limitar ping
floods, syn floods, etc).

3.6.1 Conferindo de acordo com o estado da conexo

Este mdulo permite especificar regras de acordo com o estado da conexo do pacote, isto
feito atravs da interpretao da sada do mdulo ip_conntrack. O parmetro state
OPES deve acompanhar este mdulo. As opes permitidas so as seguintes:

NEW - Confere com pacotes que criam novas conexes

ESTABLISHED - Confere com conexes j estabelecidas

RELATED - Confere com pacotes relacionados indiretamente a uma conexo, como men-
sagens de erro icmp, etc.

INVALID - Confere com pacotes que no puderam ser identificados por algum motivo.
Como respostas de conexes desconhecidas.

Caso seja necessrio especificar mais de uma opes estas devem ser separadas por vrgulas.

iptables -A INPUT -m state --state NEW -i ppp0 -j DROP

Bloqueia qualquer tentativa de nova conexo vindo da interface ppp0.

iptables -A INPUT -m state --state NEW,INVALID -i ppp0 -j LOG

Permite registrar novas conexes e pacotes invlidos vindos da interface ppp0.

3.6.2 Limitando o nmero de vezes que a regra confere

A opo -m limit permite especificar o nmero de vezes que uma regra conferir quando todas
as outras condies forem satisfeitas. O nmero padro de conferncia de 3 por hora, a no
ser que seja modificado atravs dos argumentos aceitos pelo limit:

--limit num/tempo - Permite especificar a taxa de conferncias do limit. O parmetro


num especifica um nmero e tempo pode ser
s - Segundo
m - Minuto
Captulo 3. Firewall iptables 44

h - Hora
d - Dia
Assim uma regra como iptables -A INPUT -m limit --limit 5/m -j
ACCEPT permitir que a regra acima confira apenas 5 vezes por minuto (limit
2/s). Este limite pode ser facilmente adaptado para uma regra de log que confere
constantemente no causar uma avalanche em seus logs. O valor padro 3/h.

--limit-burst num - Especifica o nmero inicial mximo de pacotes que iro conferir,
este nmero aumentado por 1 a cada vez que o parmetro limit acima no for atingido.
O valor padro 5.

3.6.3 Proteo contra ping da morte

A regra abaixo pode tomada como base para proteo contra ping flood:

iptables -t filter -A ping-chain -p icmp --icmp-type echo-request -m limit --l


iptables -t filter -A ping-chain -j DROP

A regra acima limita em 1 vez por segundo (limit 1/s) a passagem de pings (echo requests)
para a mquina Linux.

iptables -t filter -A ping-chain -i ppp0 -p icmp --icmp-type echo-reply -m lim


iptables -t filter -A ping-chain -j DROP

Limita respostas a pings (echo reply) vindos da interface ppp0 (-i ppp0) a 1 por segundo.
ATENO: O exemplo acima somente para a criao de suas prprias regras com limitaes,
caso um pacote no confira ele ser bloqueado pela prxima regra. Se uma regra como esta for
colocada no chain INPUT sem modificaes, ela no ter o efeito desejado, podendo colocar
em risco a sua instalao pela falsa impresso de segurana. Portanto, recomendvel sempre
testar as modificaes para ter certeza que elas tem efeito.

3.6.4 Proteo contra syn flood

A regra abaixo uma boa proteo para os ataques syn floods:

iptables -t filter -A syn-chain -p tcp --syn -m limit --limit 2/s -j ACCEPT


iptables -t filter -A syn-chain -j DROP

Esta regra limita o atendimento de requisies de conexes a 2 por segundo. Outra


forma de aumentar a segurana contra syn-floods atravs do prprio kernel ati-
vando a opo TCP Synflood na compilao e depois executando: echo 1
>/proc/sys/net/ipv4/tcp_synflood. No entanto, utilize estas opes com cautela em
Captulo 3. Firewall iptables 45

servidores que possuem um grande nmero de acessos para no ter problemas que afetem seu
clientes.
ATENO: Os exemplos acima devem so somente exemplos para criao de suas prprias
regras com limitaes, caso um pacote no confira com a regra ele ser bloqueado pela prxima
regra. Se uma regra como esta for colocada no chain INPUT sem modificaes, ela no ter o
efeito desejado, podendo colocar em risco a sua instalao pela falsa impresso de segurana.
Portanto, recomendvel sempre testar as modificaes para ter certeza que elas tem efeito.

3.6.5 Proteo contra IP spoofing

A especificao de endereos de origem/destino junto com a interface de rede pode ser usado
como um detector de ataques spoofing. A lgica que todos os endereos que NUNCA devem
vir da interface X devem ser negados imediatamente. As regras abaixo so colocadas no inicio
do chain INPUT para detectar tais ataques:

iptables -A INPUT -s 192.168.1.0/24 -i ! eth0 -j DROP


iptables -A INPUT ! -s 192.168.1.0/24 -i eth0 -j DROP

A primeira regra diz para bloquear todos os endereos da faixa de rede 192.168.1.* que NO
vem da interface eth0, a segunda regra diz para bloquear todos os endereos que no sejam
192.168.1.* vindos da interface eth0. O smbolo ! serve para especificar excees (veja Especi-
ficando uma exceo on page 31. O kernel do Linux automaticamente bloqueia a passagem
de pacotes que dizem ser de 127.0.0.1 e no est vindo da interface loopback.
O mtodo preferido para controlar o ip spoofing atravs do cdigo de roteamento do kernel
(a no ser que esteja usando algum tipo de roteamento de origem assimtrico necessrio por
alguns programas especiais):

for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 >$i
done

Desta forma qualquer endereo dizendo ser 192.168.1.5 vindo de ppp0 ser imediatamente
rejeitado. Uma checagem adicional contra IP spoofing pode ser feita no arquivo /etc
/host.conf .

3.6.6 Especificando mltiplas portas de origem/destino

O mdulo multiport permite que seja especificado mltiplas portas para um alvo. Podem
ser especificadas at 15 portas em um nico parmetro e basta que uma porta confira para
que a regra entre em ao, pois a comparao feita usando condies or. O parmetro
multiport deve ser acompanhado de um dos argumentos abaixo:
Captulo 3. Firewall iptables 46

--source-port [porta1, porta2...] - Faz a regra conferir se a porta de origem


estiver presente entre as portas especificadas.
--destination-port [porta1, porta2...] - Faz a regra conferir se a porta de
destino estiver presente entre as portas especificadas.
--port [porta1, porta2...] - Faz a regra conferir caso a porta de origem ou des-
tino esteja presente no parmetro.
Este mdulo pode eliminar muitas regras de firewall que fazem o mesmo tratamento de pa-
cotes para diversas portas diferentes.

iptables -A INPUT -p tcp -i ppp0 -m multiport --destination-port 21,23,25,80,1

Bloqueia todos os pacotes vindo de ppp0 para as portas 21 (ftp), 23 (telnet), 25 (smtp), 80
(www), 110 (pop3), 113 (ident), 6667 (irc).

3.6.7 Especificando o endereo MAC da interface

O mdulo mac serve para conferir com o endereo Ethernet dos pacotes de origem. Somente
faz sentido se usado nos chains de PREROUTING (da tabela nat) ou INPUT (da tabela filter).
Aceita como argumento a opo mac-source endereo. O smbolo ! pode ser usado para
especificar uma exceo.

iptables -t filter -A INPUT -m mac --mac-source 00:80:AD:B2:60:0B -j DROP

Confere com a mquina com endereo ethernet igual a 00:80:AD:B2:60:0B.

3.6.8 Conferindo com quem criou o pacote

Este mdulo confere com o usurio que iniciou a conexo. somente vlido no chain OUTPUT
da tabela filter. Os seguintes argumentos so vlidas para este mdulo:

--uid-owner UID - Confere se o pacote foi criado por um processo com o UID especi-
ficado. At o momento somente UID numricos so aceitos.

--gid-owner GID - Confere se o pacote foi criado por um usurio pertencente ao grupo
GID. At o momento somente GID numricos so aceitos.

--pid-owner PID - Confere se o pacote foi criado por um processo com o PID especi-
ficado.

--sid-owner ID - Confere se o pacote foi criado por um processo no grupo de seo


especificado.

OBS: - Lembre-se que pacotes que no possuem detalhes suficientes de cabealho nunca con-
feriro!
Captulo 3. Firewall iptables 47

iptables -A OUTPUT -m owner --gid-owner 100 -p udp -j DROP

Rejeita um conexes indo para portas UDP de pacotes criados pelo usurios pertencentes ao
grupo 100.

3.6.9 Conferindo com o contedo do pacote

O mdulo string do iptables permite a inspeo de contedo de um pacote e tomar uma


ao se determinado tipo de trfego for encontrado em um pacote. Esta tcnica pode ser usada
tanto para segurana como para economia de banda dentro da rede. Esta opo *NO* torna
o iptables como um firewall proxy, pois o proxy tem a habilidade de inspecionar o contedo,
protocolo, comandos do pacote e decidir se o seu contedo nocivo ou no. O firewall em
nvel de pacotes fazendo inspeo de contedo, chega a ser 3 a 10 vezes mais rpido do que
um proxy, assim seu uso deve ser analisado dependendo do trfego que circula pelo link e da
segurana dos dados que trafegam atravs dele.
Uma boa prtica aliar esta opo a um IDS externo usando o alvo QUEUE e deixando o
trabalho de espeo de contedo para ele. Um exemplo de restrio direta o bloqueio do
envio de qualquer informao confidencial sigilosa para fora da rede interna (nmero de con-
tas, tudo que conferir com CPF, CGC, endereos de e-mail, memorandos, etc). De qualquer
forma, analise o trfego de sua rede antes de querer implementar qualquer soluo baseada
neste mtodo sob o risco de afetar trfego legtimo.
Outra utilidade eficiente a diminuio de trfego, pois podemos barrar programas que so-
brecarregam o link em uma rede com muitos usurios como, por exemplo, usando o Kazaa ou
qualquer outro programa para cpia de arquivos via Internet. Veja alguns exemplos:

# Bloqueia qualquer tentativa de acesso ao programa Kazaa


iptables -A INPUT -m string --string "X-Kazaa" -j DROP

# No permite que dados confidenciais sejam enviados para fora da empresa


# e registra o ocorrido.
iptables -A OUTPUT -m string --string "conta" -j LOG --log-prefix "ALERTA: dad
iptables -A OUTPUT -m string --string "conta" -j DROP

# Somente permite a passagem de pacotes que no contm ".exe" em seu contedo


iptables -A INPUT -m string --string ! ".exe" -j ACCEPT

3.6.10 Conferindo com o tempo de vida do pacote

O mdulo ttl pode ser usado junto com as seguintes opes para conferir com o tempo de
vida (TTL) de um pacote:
--ttl-eq [num]
--ttl-lt [num]
--ttl-gq [num]
Captulo 3. Firewall iptables 48

Veja alguns exemplos:

# Confere com todos os pacotes que tem o TTL maior que 100
iptables -A INPUT -m ttl --ttl-gt 100 -j LOG --log-prefix "TTL alto"

# Confere com todos os pacotes que tem o TTL igual a 1


iptables -A INPUT -m ttl --ttl-eq 1 -j DROP

OBS: Tenha um especial cuidado durante a programao de regras que usem TTL, como elas
esto especialmente associadas com o estado da comunicao estabelecida entre as duas pon-
tas e o tipo de protocolo, cuidados especiais devem ser tomados para que seu firewall no
manipule de forma incorreta trfego vlido.

3.6.11 Conferindo com nmeros RPC

O mdulo rpc permite um controle especial sobre o trfego RPC que chega at a sua mquina.
Um uso til restringir a chamada a determinados nmeros RPC e permitir outros (por exem-
plo, permitindo somente o servio keyserv e bloqueando outros como o ypserv ou portmapper).
As seguintes opes podem ser usadas com o mdulo nfs:
--rpcs [procedimentos] - Confere com a lista de chamadas RPC especificadas.
Mais de um procedimento RPC pode ser especificado como nome ou nmero separando-
os com vrgulas. Um arquivo til que contm esta lista o /etc/rpc.
--strict - Ignora servios RPC que no contenham a chamada get do portmapper. Em
situaes normais, o inicio de qualquer solicitao RPC.
Veja alguns exemplos:

# Para conferir com todas as chamadas RPC referentes a conexes iniciadas


# para o portmapper
iptables -A INPUT -m rpc --rpcs portmapper --strict -j DROP

# Para permitir que somente as chamadas para status e statmon sejam


# aceitas
iptables -A INPUT -m rpc --rpcs 100023,100024 -j ACCEPT

3.6.12 Conferindo com tipo de pacote

O mdulo pkttype permite identificar um pacote do tipo unicast (direcionado a voc), broad-
cast (direcionado a uma determinada rede, definida pela netmask) ou multicast (destinado a
grupos de redes) e desta forma realizar aes em cima destes. O tipo de pacote identificado
logo aps a opo pkt-type. Veja alguns exemplos:

# Bloqueia a passagem de pacotes multicast de uma rede para outra


iptables -A FORWARD -i eth0 -o eth0 -m pkttype --pkt-type multicast -j DROP
Captulo 3. Firewall iptables 49

# Como deve ter notado, possvel fazer a associao com diversas especifica
# de mdulos, bastando apenas especificar uma opo "-m" para cada mdulo
# adicional:
# Permite a passagem de pacotes broadcast de uma rede para outra com
# limitao de 5/s.
iptables -A FORWARD -i eth0 -o eth0 -m pkttype --pkt-type broadcast -m limit -

3.6.13 Conferindo com o tamanho do pacote

O tamanho do pacote pode ser usado como condio de filtragem atravs do mdulo length.
O tamanho do pacote especificado atravs da opo length e o argumento segue a mesma
sintaxe da especificao de portas no iptables sendo separados por :. Veja alguns exemplos:

# Bloqueia qualquer pacote ICMP maior que 30Kb


iptables -A INPUT -i eth0 -m length --length 30000: -j DROP

# Bloqueia qualquer pacote com o tamanho entre 20 e 2000 bytes


iptables -A INPUT -i eth0 -m length --length 20:2000 -j DROP

3.7 Caminho percorrido pelos pacotes nas tabelas e chains

MUITO importante entender a funo de cada filtro e a ordem de acesso dos chains de acordo
com o tipo de conexo e interface de origem/destino. Esta seo explica a ordem que as regra
so atravessadas, isso lhe permitir planejar a distribuio das regras nos chains, e evitar erros
de localizao de regras que poderia deixar seu firewall com srios problemas de segurana,
ou um sistema de firewall totalmente confuso e sem lgica.
Nos exemplos abaixo assumirei a seguinte configurao:
A mquina do firewall com iptables possui o endereo IP 192.168.1.1 e conecta a
rede interna ligada via interface eth0 a internet via a interface ppp0.
Rede interna com a faixa de endereos 192.168.1.0 conectada ao firewall via interface
eth0
Interface ppp0 fazendo conexo com a Internet com o endereo IP 200.217.29.67.
A conexo das mquinas da rede interna (eth0) com a rede externa (ppp0) feita via
Masquerading.
Tambm utilizarei a sintaxe CHAIN-tabela para fazer referncia aos chains e tabelas dos blocos
ASCII: INPUT-filter - chain INPUT da tabela filter.
ATENO: A ordem de processamento das regras do iptables, diferente do ipchains
devido a incluso do novo sistema de nat e da tabela mangle.

3.7.1 Ping de 192.168.1.1 para 192.168.1.1


Endereo de Origem: 192.168.1.1
Captulo 3. Firewall iptables 50

Endereo de Destino: 192.168.1.1


Interface de Entrada: lo
Interface de Sada: lo
Protocolo: ICMP
Descrio: Ping para o prprio firewall

SADA DE PACOTES (envio do ping para 192.168.1.1):


+-------------+ +----------+ +-------------+ +------------------+ +--
|OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| =>|POSTROUTING-mangle|=>|PO
+-------------+ +----------+ +-------------+ +------------------+ +--

ENTRADA DOS PACOTES (Retorno da resposta ping acima):


+-----------------+ +------------+ +------------+
|PREROUTING-mangle| =>|INPUT-mangle|=>|INPUT-filter|
+-----------------+ +------------+ +------------+

Quando damos o ping (echo request) os pacotes seguem o caminho em SADA DE PACOTES
percorrendo os chains na ordem especificada e retornam via ENTRADA DOS PACOTES (echo
reply). No envio da resposta da requisio de ping, o caminho de sada do pacote ignora os
chains OUTPUT-nat e POSTROUTING-nat (j que no necessrio nat) mas sempre processa
os chains correspondentes da tabela mangle na ordem indicada acima.
OBS1: Para conexes com destinos na prpria mquina usando um endereo IP das interfaces
locais, a interface ser ajustada sempre para lo (loopback).
OBS2: Em qualquer operao de entrada/sada de pacotes, os dois chains da tabela mangle so
sempre os primeiros a serem acessados. Isto necessrio para definir a prioridade e controlar
outros aspectos especiais dos pacotes que atravessam os filtros.
OBS3: O chain OUTPUT da tabela filter consultado sempre quando existem conexes se
originando em endereos de interfaces locais.

3.7.2 Conexo FTP de 192.168.1.1 para 192.168.1.1


Endereo de Origem: 192.168.1.1
Endereo de Destino: 192.168.1.1
Interface de Origem: lo
Interface de Destino: lo
Porta Origem: 1404
Porta Destino: 21
Protocolo: TCP
Descrio: Conexo ftp (at o prompt de login, sem transferncia de
arquivos).

SADA DOS PACOTES (envio da requisio para 192.168.1.1):


+-------------+ +----------+ +-------------+ +------------------+
Captulo 3. Firewall iptables 51

|OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => +POSTROUTING-mangle| =>


+-------------+ +----------+ +-------------+ +------------------+

ENTRADA DE PACOTES (respostas da requisio vindas de 192.168.1.1):


+-----------------+ +------------+ +------------+
|PREROUTING-mangle| => |INPUT-mangle| => |INPUT-filter|
+-----------------+ +------------+ +------------+

A requisio ftp passa atravs dos chains especificados em SADA DOS PACOTES e retorna por
ENTRADA DE PACOTES. Aps a conexo ser estabelecida, o caminho de SADA DE PACOTES
ser:

+-------------+ +-------------+ +------------------+


|OUTPUT-mangle| => |OUTPUT-filter| => |POSTROUTING-mangle|
+-------------+ +-------------+ +------------------+

pois os dados de entrada que vem da interface externa, so passados diretamente a mquina do
firewall, no necessitando de tratamento SNAT (os chains OUTPUT-nat e POSTROUTING-nat
so processado somente uma vez a procura de regras que conferem, principalmente para fazer
SNAT). Note novamente que mesmo no sendo necessrio NAT, o chain POSTROUTING-
mangle checado.
OBS1: Para conexes com destinos na prpria mquina usando um endereo IP das interfaces
locais, a interface ser ajustada sempre para lo (loopback).
OBS2: Em qualquer operao de entrada/sada de pacotes, os dois chains da tabela mangle so
sempre os primeiros a serem acessados. Isto necessrio para definir a prioridade e controlar
outros aspectos especiais dos pacotes que atravessam os filtros.

3.7.3 Conexo FTP de 192.168.1.1 para 192.168.1.4


Endereo de Origem: 192.168.1.1
Endereo de Destino: 192.168.1.4
Interface de Origem: eth0
Interface de Destino: eth0
Porta Origem: 1405
Porta Destino: 21
Protocolo: TCP
Descrio: Conexo ftp (at o prompt de login, sem transferncia de
arquivos).

SADA DOS PACOTES (envio da requisio para 192.168.1.4):


+-------------+ +----------+ +-------------+ +------------------+
|OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => +POSTROUTING-mangle| =>
+-------------+ +----------+ +-------------+ +------------------+
Captulo 3. Firewall iptables 52

ENTRADA DE PACOTES (respostas da requisio de 192.168.1.4):


+-----------------+ +------------+ +------------+
|PREROUTING-mangle| => |INPUT-mangle| => |INPUT-filter|
+-----------------+ +------------+ +------------+

A requisio ftp passa atravs dos chains especificados em SADA DOS PACOTES com o des-
tino 192.168.1.4 porta 21 e retorna por ENTRADA DE PACOTES para 192.168.1.1 porta
1405. Aps a conexo ser estabelecida, o caminho de SADA DE PACOTES ser:

+-------------+ +-------------+ +------------------+


|OUTPUT-mangle| => |OUTPUT-filter| => |POSTROUTING-mangle|
+-------------+ +-------------+ +------------------+

pois os dados no precisam de tratamento SNAT (os chains OUTPUT-nat e POSTROUTING-


nat so processado somente uma vez a procura de regras que conferem, principalmente para
fazer SNAT).
OBS: Em qualquer operao de entrada/sada de pacotes, os dois chains da tabela mangle so
sempre os primeiros a serem acessados. Isto necessrio para definir a prioridade e controlar
outros aspectos especiais dos pacotes que atravessam os filtros.

3.7.4 Conexo FTP de 200.217.29.67 para a mquina ftp.debian.org.br


Endereo de Origem: 200.217.29.67
Endereo de Destino: 200.198.129.162
Interface de Origem: ppp0
Interface de Destino: ppp0
Porta Origem: 1407
Porta Destino: 21
Protocolo: TCP
Descrio: Conexo ftp (at o prompt de login, sem transferncia de
arquivos).

SADA DOS PACOTES (envio da requisio para 200.198.129.162):


+-------------+ +----------+ +-------------+ +------------------+
|OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => +POSTROUTING-mangle| =>
+-------------+ +----------+ +-------------+ +------------------+

ENTRADA DE PACOTES (respostas da requisio vindas de 200.198.129.162):


+-----------------+ +------------+ +------------+
|PREROUTING-mangle| => |INPUT-mangle| => |INPUT-filter|
+-----------------+ +------------+ +------------+
Captulo 3. Firewall iptables 53

A requisio ftp passa atravs dos chains especificados em SADA DOS PACOTES com o des-
tino 200.198.129.162 porta 21 (aps a resoluo DNS de www.debian.org.br) e retorna
por ENTRADA DE PACOTES para 200.217.29.67 porta 1407. Aps a conexo ser estab-
elecida, o caminho de sada de pacotes :

+-------------+ +-------------+ +------------------+


|OUTPUT-mangle| => |OUTPUT-filter| => |POSTROUTING-mangle|
+-------------+ +-------------+ +------------------+

pois os dados no precisam de tratamento SNAT (os chains OUTPUT-nat e POSTROUTING-


nat so processado somente uma vez a procura de regras que conferem, principalmente para
fazer SNAT).
E aps a conexo estabelecida, o caminho de entrada de pacotes passa a ser:

+-----------------+ +------------+ +------------+


|PREROUTING-mangle| => |INPUT-mangle| => |INPUT-filter|
+-----------------+ +------------+ +------------+

pois os dados no precisam de tratamento DNAT (o chain PREROUTING-nat processado


somente uma vez a procura de regras que conferem, principalmente para fazer DNAT).
OBS: Para qualquer operao de entrada/sada de pacotes, os dois chains da tabela mangle so
sempre os primeiros a serem acessados. Isto necessrio para definir a prioridade e controlar
outros aspectos especiais dos pacotes que atravessam os filtros.

3.7.5 Ping de 192.168.1.4 para 192.168.1.1


Endereo de Origem: 192.168.1.4
Endereo de Destino: 192.168.1.1
Interface de Entrada: eth0
Interface de Sada: eth0
Protocolo: ICMP
Descrio: Ping de 192.168.1.4 para a mquina do firewall.

ENTRADA DE PACOTES (recebimento da requisio, vinda de 192.168.1.4):


+-----------------+ +--------------+ +------------+ +------------+
|PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-mangle| => |INPUT-filter|
+-----------------+ +--------------+ +------------+ +------------+

SADA DE PACOTES (envio da resposta a 192.168.1.4)


+-------------+ +-------------+ +------------------+
|OUTPUT-mangle| => |OUTPUT-filter| => |POSTROUTING-mangle|
+-------------+ +-------------+ +------------------+
Captulo 3. Firewall iptables 54

Quando damos o ping (echo request) os pacotes seguem o caminho em ENTRADA DE PACOTES
percorrendo os chains na ordem especificada e retornam via SADA DOS PACOTES (echo reply).
OBS1: Para qualquer operao de entrada/sada de pacotes, os dois chains da tabela man-
gle so sempre os primeiros a serem acessados. Isto necessrio para definir a prioridade e
controlar outros aspectos especiais dos pacotes que atravessam os filtros.

3.7.6 Conexo FTP de 192.168.1.4 para 192.168.1.1


Endereo de Origem: 192.168.1.4
Endereo de Destino: 192.168.1.1
Interface de Origem: eth0
Interface de Destino: eth0
Porta Origem: 1030
Porta Destino: 21
Protocolo: TCP
Descrio: Conexo ftp (at o prompt de login, sem transferncia de
dados).

ENTRADA DOS PACOTES (envio da requisio vindas de 192.168.1.4):


+-----------------+ +--------------+ +------------+ +------------+
|PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-mangle| => |INPUT-filter|
+-----------------+ +--------------+ +------------+ +------------+

SADA DE PACOTES (respostas da requisio acima para 192.168.1.4):


+-------------+ +-------------+ +------------------+
|OUTPUT-mangle| => |OUTPUT-filter| => |POSTROUTING-mangle|
+-------------+ +-------------+ +------------------+

A requisio ftp passa atravs dos chains especificados em ENTRADA DOS PACOTES com o
destino 192.168.1.1 porta 21 e retorna por SADA DE PACOTES para 192.168.1.4 porta
1030. Aps a conexo ser estabelecida, o caminho de entrada de pacotes :

+-----------------+ +------------+ +------------+


|PREROUTING-mangle| => |INPUT-mangle| => |INPUT-filter|
+-----------------+ +------------+ +------------+

pois os dados no precisam de tratamento DNAT (o chain PREROUTING-nat processado


somente uma vez a procura de regras que conferem, principalmente para fazer DNAT).
OBS: O roteamento sempre realizado aps o processamento do chain PREROUTING da
tabela nat.

3.7.7 Conexo FTP de 192.168.1.4 para ftp.debian.org.br


Endereo de Origem: 192.168.1.4
Captulo 3. Firewall iptables 55

Endereo de Destino: 200.198.129.162


Interface de Origem: eth0
Interface de Destino: ppp0
Porta Origem: 1032
Porta Destino: 21
Protocolo: TCP
Descrio: Conexo ftp (at o prompt de login, sem transferncia de
dados).

SADA DOS PACOTES (requisio vindas de 192.168.1.4):


+-----------------+ +--------------+ +--------------+
|PREROUTING-mangle| => |PREROUTING-nat| => |FORWARD-mangle| => (continua abaix
+-----------------+ +--------------+ +--------------+
+--------------+ +------------------+ +---------------+
|FORWARD-filter| => |POSTROUTING-mangle| => |POSTROUTING-nat|
+--------------+ +------------------+ +---------------+

ENTRADA DE PACOTES (respostas da requisio acima, enviadas para 192.168.1.4):


+-----------------+ +--------------+ +--------------+ +--------------
|PREROUTING-mangle| => |FORWARD-mangle| => |FORWARD-filter| => |POSTROUTING-ma
+-----------------+ +--------------+ +--------------+ +--------------

A requisio ftp passa atravs dos chains especificados em SADA DOS PACOTES com o des-
tino 200.198.129.162 porta 21 (aps a resoluo DNS de ftp.debian.org.br) e retorna
por ENTRADA DE PACOTES para 192.168.1.4 porta 1032.
Note que o Masquerading regrava os pacotes; para a mquina 200.198.129.162 a
conexo est sendo feita para 200.217.29.67. As respostas de conexes vindas de
200.198.129.162 e indo para 200.217.29.67 so regravadas no firewall com o destino
192.168.1.4 e enviadas para a mquina correspondente. Aps a conexo ser estabelecida, o
caminho de sada de pacotes para 200.198.129.163 :

+-----------------+ +--------------+ +--------------+ +--------------


|PREROUTING-mangle| => |FORWARD-mangle| => |FORWARD-filter| => |POSTROUTING-ma
+-----------------+ +--------------+ +--------------+ +--------------

Aps a conexo estabelecida, o caminho da entrada de pacotes vindos de 200.198.129.163 :

+-----------------+ +--------------+ +--------------+ +--------------


|PREROUTING-mangle| => |FORWARD-mangle| => |FORWARD-filter| => |POSTROUTING-ma
+-----------------+ +--------------+ +--------------+ +--------------

Isto acontece porque aps feita a conexo Masquerading (via PREROUTING-nat), o firewall
j sabe como reescrever os pacotes para realizar a operao de Masquerading, reescrevendo
todos os pacotes que chegam de www.debian.org.br para 192.168.1.4.
Captulo 3. Firewall iptables 56

OBS: As conexes Masquerading feitas atravs da rede interna, so enviadas para


200.198.129.162 tem o endereo de origem ajustado para 200.217.29.67 que o IP de
nossa interface ppp0. Quando as respostas atravessam o firewall, os pacotes so checados pra
saber se so uma resposta a uma conexo masquerading e far a regravao dos pacotes sub-
stituindo o endereo de destino para 192.168.1.4. Caso uma operao de Masquerading
falhe, os pacotes sero Bloqueados.

3.7.8 Conexo FTP de 200.198.129.162 para 200.217.29.167


Endereo de Origem: 200.198.129.162
Endereo de Destino: 200.217.29.67
Interface de Origem: ppp0
Interface de Destino: ppp0
Porta Origem: 3716
Porta Destino: 21
Protocolo: TCP
Descrio: Conexo ao servio ftp do firewall

ENTRADA DOS PACOTES (requisio vinda de 200.198.129.162):


+-----------------+ +--------------+ +-------------+ +------------+
|PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-mangle | => |INPUT-filter|
+-----------------+ +--------------+ +-------------+ +------------+

SADA DE PACOTES (respostas da requisio de 200.198.129.162):


+-------------+ +-------------+ +------------------+
|OUTPUT-mangle| => |OUTPUT-filter| => |POSTROUTING-mangle|
+-------------+ +-------------+ +------------------+

A requisio ftp passa atravs dos chains especificados em ENTRADA DOS PACOTES com
o destino 200.217.29.67 (nossa interface ppp0 local) porta 21 e retorna por SADA DE
PACOTES para 200.198.129.162 porta 3716 (tambm via ppp0). Aps a conexo ser esta-
belecida, o caminho de entrada de pacotes :

+-----------------+ +------------+ +------------+


|PREROUTING-mangle| => |INPUT-mangle| => |INPUT-filter|
+-----------------+ +------------+ +------------+

Isto acontece porque aps feita a anlise do chain PREROUTING (para necessidade de DNAT),
a mquina j saber tomar a deciso apropriada para gerenciar aquela conexo.

3.7.9 Grfico geral da passagem dos pacotes

Este grfico foi retirado do documento netfilter-hacking-HOWTO.txt e mostra a estru-


tura geral de passagem dos pacotes nas tabelas/chains. Os exemplos de passagem de pacotes
Captulo 3. Firewall iptables 57

acima podero ser facilmente comparados com as etapas abaixo para compreender a estrutura
do iptables.

E ---> PREROUTING ------> (ROTEAM.) ---> FORWARD ----------> POSTROUTING --> S


Mangle e | Mangle ^ Mangle
NAT (DNAT)) | Filter | NAT (SRC)
| (ROTEAM.)
v |
IN Mangle, OUT - Mangle,
| Filter ^ NAT (DNAT)
| | Filter
v |
+----------------------------------------+
| Processo Local |
+----------------------------------------+

3.8 Exemplos de configuraes do iptables

Exemplo de como bloquear todas as conexes para a mquina do firewall permitindo somente
conexes da mquina Linux para fora.

3.8.1 Bloqueando conexes de fora para sua mquina

As regras a seguir servem para bloquear tentativas de conexes da interface de Internet (ppp0)
a sua rede sem bloquear o trfego de conexes j iniciadas. O trfego de outras interfaces no
afetado com as regras a seguir:

iptables -A INPUT -i ppp0 -m state --state ! ESTABLISHED,RELATED -j DROP

Todas as conexes vindas de ppp0 de estado diferente de ESTABLISHED e RELATED (NEW e


INVALID) sero derrubadas. Veja Conferindo de acordo com o estado da conexo on page 43
para detalhes.

iptables -A INPUT -i ppp0 --syn -j DROP

Este acima mais simples e possui o mesmo efeito: Pacotes SYN so usados para ini-
ciar conexes, derrubando pacotes deste tipo significa bloquear novas conexes. Pacotes de
conexes j estabelecidas ainda so permitidos.
Estas regras acima servem para quem no deseja NENHUM acesso indevido a sua mquina.
Existem outras formas de bloquear conexes de modo mais seletivo usando chains especficos,
endereos de origem/destino, portas, etc., este tipo de configurao muito usada caso precise
fornecer algum tipo de servio que seja acessvel externamente e protegendo outros.
Captulo 3. Firewall iptables 58

3.8.2 Monitorando tentativa de conexo de trojans em sua mquina

As regras abaixo alertam sobre a tentativa de conexo dos trojans For Win mais conhecidos.
Coloquei isto aqui por curiosidade de algumas pessoas, pois mquinas Linux so imunes a
este tipo de coisa:

#!/bin/sh

TROJAN_PORTS="12345 31336 31337 31338 3024 4092 5714 5742 2583 8787 5556 5557"

iptables -t filter -N trojans-in

for PORTA in ${TROJAN_PORTS};do


iptables -A trojans-in -p tcp --sport=1024: --dport=${PORTA} -j LOG \
--log-prefix "FIREWALL: Trojan ${PORTA} "
iptables -A trojans-in -p tcp --sport=1024: --dport=${PORTA} -j DROP
done

iptables -t filter -A INPUT -i ppp0 -j trojans-in

A primeira linha do iptables cria o chain trojans-in dentro da tabela filter que usaremos para
armazenar nossas regras de firewall. A segunda (dentro do lao for) faz uma regra de LOG
para registrar as tentativas de acesso de trojans em nosso sistema, a terceira rejeita o acesso. A
quarta regra do iptables cria de todo o trfego vindo da interface ppp0 pra o chain trojans-in
(queremos que s o trfego vindo da internet seja analisado pelo chain trojans-in).
Muitas das portas especificadas na varivel TROJAN_PORTS so antigas conhecidas de quem
j brincou ou sofreram com o Back Orifice, Win Crack, NetBus (quem nunca passou pela
fase de ter uma lista com mais de 100 netmasks e conseguir encontrar centenas de mquinas
por dia infectadas pelo BO? :-).
No cdigo acima a nica coisa que precisa fazer para adicionar mais portas inseri-las na
varivel TROJAN_PORTS e executar o programa. O lao do for executar as 2 regras para
cada porta processada (economizando linhas e linhas de regras, me livrando de uma LER e
poupando muitos bytes neste guia ;-).
Dependendo do nmero de portas alvo, este cdigo pode ser muito simplificado usando o
recurso multiport do iptables (veja Especificando mltiplas portas de origem/destino on
page 45 para detalhes).

3.8.3 Conectando sua rede interna a Internet

O seguinte exemplo permite ligar sua rede interna com a faixa de IPs 192.168.1.* a internet
(usando uma conexo discada do tipo ppp):

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -j MASQUERADE


echo "1" >/proc/sys/net/ipv4/ip_forward
Captulo 3. Firewall iptables 59

3.8.4 Um exemplo de firewall simples

Esta seo possui um exemplo mais elaborado de firewall que servir para mquinas conec-
tadas via ppp com uma rede interna conectada via Masquerading. Este exemplo no to
complexo e cobre as expectativas mais comuns de pessoas que gostam de explorar os potenci-
ais de rede no Linux ou satisfazer sua curiosidade. Ele poder ser facilmente adaptado para
atender outro tipo de necessidade. A configurao assumida a seguinte:
1 Mquina do firewall com 2 interfaces de rede, uma eth0 com o IP 192.168.1.1 que
serve de ligao a sua rede Interna, a outra ppp0 que a interface Internet.
2 Qualquer acesso externo a mquinas da rede interna bloqueado.
3 Os usurios da rede local tem acesso livre ao servidor Linux.
4 Qualquer acesso externo a mquina do firewall bloqueado, exceto conexes para o
servio Apache (httpd). Outras tentativas de conexes devem ser explicitamente reg-
istradas nos logs do sistema para conhecimento do administrador.
5 Todos os usurios possuem acesso livre a Internet via Masquerading, exceto que o acesso
para o servio www deve ser obrigatoriamente feito via squid, e o servidor smtp a ser
usado dever ser o do firewall Linux.
6 Prioridades sero estabelecidas para os servios de telnet, IRC,talk e DNS.

#!/bin/sh
# Modelo de configurao de firewall
# Autor: Gleydson M. Silva
# Data: 05/09/2001
# Descrio: Produzido para ser distribudo livremente, acompanha o guia
# Foca GNU/Linux. http://www.guiafoca.org
#

# assumido um sistema usando kmod para carga automtica dos mdulos usados p
# esta configurao do firewall:
# ipt_filter
# ipt_nat
# ipt_conntrack
# ipt_mangle
# ipt_TOS
# ipt_MASQUERADE
# ipt_LOG

# Se voc tem um kernel modularizado que no utiliza o kmod, ser necessrio


# carregar estes mdulos via modprobe, insmod ou iptables --modprobe=modulo

##### Definio de poltica padro do firewall #####


# Tabela filter
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD DROP
# Tabela nat
Captulo 3. Firewall iptables 60

iptables -t nat -P PREROUTING ACCEPT


iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING DROP
# Tabela mangle
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT

##### Proteo contra IP Spoofing #####


for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 >$i
done

##### Ativamos o redirecionamento de pacotes (requerido para NAT) #####


echo "1" >/proc/sys/net/ipv4/ip_forward

# O iptables define automaticamente o nmero mximo de conexes simultneas


# com base na memria do sistema. Para 32MB = 2048, 64MB = 4096, 128MB = 8192,
# sendo que so usados 350 bytes de memria residente para controlar
# cada conexo.
# Quando este limite excedido a seguinte mensagem mostrada:
# "ip_conntrack: maximum limit of XXX entries exceed"
#
# Como temos uma rede simples, vamos abaixar este limite. Por outro lado isto
# criar uma certa limitao de trfego para evitar a sobrecarga do servidor.
echo "2048" > /proc/sys/net/ipv4/ip_conntrack_max

###############################################################
# Tabela filter #
###############################################################

##### Chain INPUT #####


# Criamos um chain que ser usado para tratar o trfego vindo da Internet e
iptables -N ppp-input

# Aceita todo o trfego vindo do loopback e indo pro loopback


iptables -A INPUT -i lo -j ACCEPT
# Todo trfego vindo da rede interna tambm aceito
iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT

# Conexes vindas da interface ppp0 so tratadas pelo chain ppp-input


iptables -A INPUT -i ppp+ -j ppp-input

# Qualquer outra conexo desconhecida imediatamente registrada e derrubada


iptables -A INPUT -j LOG --log-prefix "FIREWALL: INPUT "
Captulo 3. Firewall iptables 61

iptables -A INPUT -j DROP

##### Chain FORWARD ####


# Permite redirecionamento de conexes entre as interfaces locais
# especificadas abaixo. Qualquer trfego vindo/indo para outras
# interfaces ser bloqueado neste passo
iptables -A FORWARD -d 192.168.1.0/24 -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -o ppp+ -j ACCEPT
iptables -A FORWARD -j LOG --log-prefix "FIREWALL: FORWARD "
iptables -A FORWARD -j DROP

##### Chain ppp-input ####


# Aceitamos todas as mensagens icmp vindas de ppp0 com certa limitao
# O trfego de pacotes icmp que superar este limite ser bloqueado
# pela regra "...! ESTABLISHED,RELATED -j DROP" no final do
# chain ppp-input
#
iptables -A ppp-input -p icmp -m limit --limit 2/s -j ACCEPT

# Primeiro aceitamos o trfego vindo da Internet para o servio www (porta 80)
iptables -A ppp-input -p tcp --dport 80 -j ACCEPT

# A tentativa de acesso externo a estes servios sero registrados no syslog


# do sistema e sero bloqueados pela ltima regra abaixo.
iptables -A ppp-input -p tcp --dport 21 -j LOG --log-prefix "FIREWALL: ftp "
iptables -A ppp-input -p tcp --dport 25 -j LOG --log-prefix "FIREWALL: smtp "
iptables -A ppp-input -p udp --dport 53 -j LOG --log-prefix "FIREWALL: dns "
iptables -A ppp-input -p tcp --dport 110 -j LOG --log-prefix "FIREWALL: pop3 "
iptables -A ppp-input -p tcp --dport 113 -j LOG --log-prefix "FIREWALL: identd
iptables -A ppp-input -p udp --dport 111 -j LOG --log-prefix "FIREWALL: rpc"
iptables -A ppp-input -p tcp --dport 111 -j LOG --log-prefix "FIREWALL: rpc"
iptables -A ppp-input -p tcp --dport 137:139 -j LOG --log-prefix "FIREWALL: sa
iptables -A ppp-input -p udp --dport 137:139 -j LOG --log-prefix "FIREWALL: sa
# Bloqueia qualquer tentativa de nova conexo de fora para esta mquina
iptables -A ppp-input -m state --state ! ESTABLISHED,RELATED -j LOG --log-pref
iptables -A ppp-input -m state --state ! ESTABLISHED,RELATED -j DROP
# Qualquer outro tipo de trfego aceito
iptables -A ppp-input -j ACCEPT

#######################################################
# Tabela nat #
#######################################################
Captulo 3. Firewall iptables 62

##### Chain POSTROUTING #####


# Permite qualquer conexo vinda com destino a lo e rede local para eth0
iptables -t nat -A POSTROUTING -o lo -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j ACCEPT

# No queremos que usurios tenham acesso direto a www e smtp da rede externa,
# squid e smtpd do firewall devem ser obrigatoriamente usados. Tambm registra
# as tentativas para monitorarmos qual mquina est tentando conectar-se diret
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -p tcp --dport 80 -j
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -p tcp --dport 25 -j
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -p tcp --dport 25 -j
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -p tcp --dport 80 -j
# feito masquerading dos outros servios da rede interna indo para a interfa
# ppp0
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -j MASQUERADE

# Qualquer outra origem de trfego desconhecida indo para eth0 (conexes vinda
# de ppp+) so bloqueadas aqui
iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.0/24 -j LOG --log-prefix "
iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.0/24 -j DROP
# Quando iniciamos uma conexo ppp, obtermos um endereo classe A (10.x.x.x) e
# estabelecida a conexo real, este endereo modificado. O trfego indo para
# a interface ppp no dever ser bloqueado. Os bloqueios sero feitos no
# chain INPUT da tabela filter
iptables -t nat -A POSTROUTING -o ppp+ -j ACCEPT

# Registra e bloqueia qualquer outro tipo de trfego desconhecido


iptables -t nat -A POSTROUTING -j LOG --log-prefix "FIREWALL: SNAT "
iptables -t nat -A POSTROUTING -j DROP

###############################################
# Tabela mangle #
###############################################

##### Chain OUTPUT #####


# Define mnimo de espera para os servios ftp, telnet, irc e DNS, isto
# dar uma melhor sensao de conexo em tempo real e diminuir o tempo
# de espera para conexes que requerem resoluo de nomes.
iptables -t mangle -A OUTPUT -o ppp+ -p tcp --dport 21 -j TOS --set-tos 0x10
iptables -t mangle -A OUTPUT -o ppp+ -p tcp --dport 23 -j TOS --set-tos 0x10
iptables -t mangle -A OUTPUT -o ppp+ -p tcp --dport 6665:6668 -j TOS --set-tos
iptables -t mangle -A OUTPUT -o ppp+ -p udp --dport 53 -j TOS --set-tos 0x10
63

Captulo 4

Apndice

Este captulo contm consideraes sobre o guia Foca GNU/Linux.

4.1 Sobre este guia

O guia Foca foi criado em 12 de Novembro de 1999. A verso que est lendo tem o obje-
tivo de servir como referncia a usurios Avanados que j dominam grande parte do sis-
tema operacional e procuram aprender mais sobre os seus detalhes e configuraes especi-
ais ou com referncia de consulta rpida. Uma verso que abrange um diferente nvel de
aprendizado ou mais completa pode ser baixada de Pgina Oficial do guia Foca GNU/Linux
(http://www.guiafoca.org).
A verso que esta lendo agora foi gerada com as seguintes opes:
Descrio detalhada de comandos
Opes usadas em comandos e programas
Observaes sobre comandos e configuraes
Exemplos para a melhor compreenso do assunto discutido.
e contm o(s) nvel(is) de aprendizado (Iniciante, Intermedirio e Avanado):
Avanado
O Foca GNU/Linux atualizado frequentemente, por este motivo recomendo que assine um
dos canais de comunicao para ser informado de novas verses:
Assinar o Twitter do focalinux <@focalinux>
Assinar o RSS presente na pgina do guia e atualizaes.
A ficha do aviso de atualizaes na pgina web em Pgina Oficial do guia Foca
GNU/Linux (http://www.guiafoca.org) no fim da pgina principal. Aps
preencher a ficha do aviso de atualizaes, eu te enviarei um e-mail sobre o lanamento
de novas verses do guia e o que foi modificado, desta forma voc poder decidir em
copia-la caso a nova verso contm modificaes que considera importantes.
Verses diferentes deste guia podem ser geradas a partir do cdigo fonte SGML ou obtidas
atravs da home page principal (para detalhes veja Onde encontrar a verso mais nova do
guia? on page 65).
Captulo 4. Apndice 64

4.2 Sobre o Autor

Gleydson Mazioli da Silva Capixaba, nascido em Vila Velha. Amante de eletrnica desde
criana, foi atraido para a informtica atravs da curiosidade em funcionamento e reparo de
hardware.
Se dedica ao sistema Linux desde 1997. determinado na realizao de testes de ferramentas e
sistemas avaliando pontos fortes e fracos de cada uma. Logo que iniciou em Linux passou a
estudar exaustivamente aspectos tcnicos de distribuies e rede em Linux/BSD.
Entre coisas que gosta de fazer/implementar em Linux: possibilidade de pesquisa e atual-
izao de conhecimento constante, automatizao e tomada inteligente de decises, nveis de
segurana da informao (tanto fsico e lgico), firewalls, virtualizao, redes virtuais, inte-
grao de sistemas, forense computacional, documentao de processos, desenvolvimento de
ferramentas GPL para a comunidade, depurao, desenvolvimento de documentaes, etc.
Um dos desenvolvedores da distribuio Liberdade, CAETECT, Debian-BR e desenvolvedor ofi-
cial da distribuio Debian. Atuou como tradutor do LDP-BR, traduzindo vrios HOW-TOs im-
portantes para a comunidade Linux Brasileira. um dos administradores do projeto CIPSGA,
cuidando de uma infinidade de servios que o projeto oferece a comunidade que deseja estru-
tura para hospedar, fortalecer e manter projetos em software livre.
Trabalhou para algumas empresas do Esprito Santo, no Governo Federal e de estados na im-
plantao de sistemas em software livre. Atualmente atua como gerente de tecnologia da Spirit
Linux, uma empresa focada na inovao, avaliao e integrao de ferramentas de cdigo
aberto junto a seus clientes.
Concorda com certificaes, mas destaca que o mais importante aproveitar a oportunidade
dada pela certificao para estudo e auto avaliao de seus pontos fracos e assim procurar
melhora-los. Possui certificao LPI nvel 3 e um ISO9001 internacional em Administrao
Linux, como primeiro no ranking Brasileiro.
E-mail: E-mail: <gleydson@guiafoca.org>, Twitter: <@gleydsonmazioli>.

4.3 Referncias de auxlio ao desenvolvimento do guia


As sees sobre comandos/programas foram construdas aps uso, teste e observao do
comportamento das opes dos comandos/programas, help on line, pginas de manual,
info pages e documentao tcnica do sistema.
How-tos do Linux (principalmente o Networking Howto, Security-Howto) ajudaram a for-
mar a base de desenvolvimento do guia e desenvolver algumas sees (verses Inter-
medirio e Avanado somente).
Todos os exemplos e sees descritivas do guia so de minha autoria. Quanto a exemplos
de configuraes e utilizao de programas, ser citada a origem que foram baseados no
desmerecendo o trabalho de seus autores.
Uso de programas e macetes aprendidos no dia a dia para gerenciar mquinas, controlar
redes e automatizar sistemas.
Captulo 4. Apndice 65

As sees do nvel avanado foram construdas com base em testes e usando metodologia
prpria com o objetivo de oferecer uma documentao objetiva e clara ao administrador
de rede, auxiliando-o na tomada de decises para soluo de problemas. Partes extraidas
de outras documentaes no nvel Avanado tero as referncias explicitamente citadas
em seus respectivos captulos.
Manual de Instalao da Debian GNU/Linux - Os captulos contendo materiais extrados
do manual de instalao da Debian so muito teis e explicativos, seria desnecessrio
reescrever um material como este. O texto claro e didaticamente organizado, o docu-
mento aborda detalhes tcnicos teis sobre hardwares em geral e o Linux ausentes nos
manuais de outras distribuies Linux.

4.4 Onde encontrar a verso mais nova do guia?

Novas verses deste guia, avisos de lanamento, outros nveis de aprendizado (Iniciante, In-
termedirio e Avanado), verses para outras distribuies Linux podem ser encontradas em:
Pgina Oficial do guia Foca GNU/Linux (http://www.guiafoca.org).
Se quiser receber notificaes de novas verses, use uma das formas a seguir:
por E-Mail: envie uma mensagem para <gleydson@guiafoca.org> pedindo para ser
includo na lista de atualizaes do guia ou preencha o formulrio encontrado no final
da Home Page do guia.
Twitter: Assine o Twitter do guia Foca: @focalinux
RSS: Assine o RSS na pgina oficial do guia (citado acima) para receber atualizaes e
novidades.

4.5 Colaboradores do Guia

Entre as principais colaboraes at a verso atual, posso citar as seguintes:

Djalma Valois <djalma@cipsga.org.br> - Pela atual hospedagem do Foca


GNU/Linux. Estou muito feliz vendo o Foca GNU/Linux fazendo parte de um pro-
jeto to positivo como o CIPSGA para o crescimento e desenvolvimento do software
livre nacional.
Bakurih <bakurih@yahoo.com> - Reviso inicial do guia, aps suas primeiras ver-
ses.
Eduardo Marcel Maan <macan@debian.org> - Pela antiga hospedagem, na
poca do site metainfo.
Michelle Ribeiro <michelle@cipsga.org.br> - Por dispensar parte de seu
atencioso tempo enviando revises e sugestes que esto melhorando bastante a qual-
idade do guia. Entre eles detalhes que passaram despercebidos durante muito tempo no
guia e pgina principal.
E tambm por cuidar do fonte do guia ;-)
Captulo 4. Apndice 66

Augusto Campos <brain@matrix.com.br> - Descrio sobre a distribuio Suse .

Paulo Henrique Baptista de Oliveira <baptista@linuxsolutions.


com.br> - Pelo apoio moral oferecido durante os freqentes lanamentos do guia,
acompanhamento e divulgao.

Diego Abadan <diego@hipernet.ufsc.br> - Envio de correes significativas,


novos endereos de listas de discusso.

Alexandre Costa <alebyte@bol.com.br> - Envio de centenas de patches ortogr-


ficos nas verses Iniciante e Intermedirio do guia que passaram desapercebidas durante
vrias verses do guia. . .

Christoph Simon <ciccio@prestonet.com.br> - Pela pesquisa e a gigantesca


coletnea de textos sobre o Linux enviada. Eles esto sendo muito teis tanto para mim
quanto no desenvolvimento do guia.

Gustavo Noronha <dockov@zaz.com.br> - Vem enviando freqentes correes,


contribuies construtivas ao desenvolvimento alm de apoio ao desenvolvimento do
guia . Vale a pena destaca-lo por sua atual dedicao junto a distribuio Debian/GNU,
sua traduo e a comunidade Open Source.

Pedro Zorzenon Neto <pzn@debian.org> - Envio de diversas atualizaes para o


nvel Avanado, principalmente sobre o firewall iptables.

4.6 Marcas Registradas

Todas as marcas registradas citadas neste guia so propriedades de seus respectivos autores.

4.7 Futuras verses

Estes so os materiais que pretendo adicionar em futuras verses do guia:

Acrescentar mais detalhes sobre o sistema grfico X-Window.

Entre outros tens que venho estudando para verificar se encaixam no perfil do guia.

Esta uma futura implementao que venho estudando para acompanhar o crescimento do
guia. Sugestes so bem vindas e podem ser enviadas para <gleydson@guiafoca.org>.
Captulo 4. Apndice 67

4.8 Chave Pblica PGP

Chaves PGP so usadas para criptografar arquivos, e-mails ou qualquer outra coisa que
desejamos que somente uma pessoa tenha acesso. O PGP segue o padro de chave
pblica/privada; a chave pblica distribuda a todos e a chave privada permanece na posse
do criador para que ele seja o nico a ter acesso aos dados criptografados aps digitar a frase
de acesso correta.
Minha chave PGP segue abaixo, ela tambm pode ser encontrada em http://pgp.ai.mit.
edu. Se voc deseja saber mais sobre o PGP, recomendo um excelente documento encontrado
na seo Apostilas em http://www.cipsga.org.br/

-----BEGIN PGP PUBLIC KEY BLOCK-----


Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

mQGiBDl7WYgRBACsQNtIozvf8XId+xEpF2D1x7nqgFdJyn1QA2VzXg0/OZ9DewXj
qr7ChEIoyyzAmxBSubE/jdtkAb9+2LsE9+OXgzJvBc4luYpv+HG2IXlMPujI9drO
ubLlK6xqPiakBgqBTS74rp/ZEEAGQsr0sug7b8nsXHMk+spyGkjsU8pPWwCgltai
4vfmBDMZMqBYvUoksVxbaKcD/ApAMghgE53KAAKFtwXI0o7K1DJmdZBufCvGDbEB
Y3MVS4BI+aXxoP5zQpEmQ5+lYOZ8RjPL9pNUJa9nOQtjf7Kiw/41BPDtlZXCeRR5
OcQTit0lYRCLGam7FZ22uliwh0h/3lpf4olMff3qeLqv1DECbo8Qsdn6yxynLihE
OA9kA/9K1sqiIl/+gXM3/Sjz8EcrwQNklV3MoaETbDmukbXcOEUjdqfFr1xARM5W
8SKoVrWO5y1oa1e9XcQuK6g8c7KeJsK/GEWYiRwX2X2AqdBC2ZzVfJSmgpguZJHn
ltMdYZhPwZaCsNPdQSlem3UrGupL0pbpT7PqkvyAHBH2itB9X7RKR2xleWRzb24g
TWF6aW9saSBkYSBTaWx2YSAoQ2hhdmUgUEdQIFBlc3NvYWwpIDxnbGV5ZHNvbkBl
c2NlbHNhbmV0LmNvbS5icj6IVgQTEQIAFgUCOXtZiAQLCgQDAxUDAgMWAgECF4AA
CgkQpWvD35hbooFdwgCfQijPTW5VH+Cep1HIBvyuw9uMg7wAoI/RYW0tkjjnhrgH
8+Zqx6AgGlQ/iEYEEBECAAYFAjnlrPAACgkQoUSye+uc2tWZPgCfVgR4lbd8XPBm
bjPupLzB3EYAPI8AoJomkfsgz+NuUZy1mD6pI1Ptc/fDiEYEEBECAAYFAjm4FfUA
CgkQco65AkzGCoF34gCgsVcH4b3s6kfCtjD7iMMhkubnDnUAoL2UiorB3Z/m3f9A
RZiRMhQUclMRiEYEEBECAAYFAjm4ITAACgkQt1anjIgqbEupXgCg1/NjvT562Hgt
/ft5JETOf3yOFywAn1SmK3unyhMU5GU9d49MNM3fNgBtiEYEEBECAAYFAjnFWrYA
CgkQORwuc54x+1t8VQCeMZTCla98rrI60EnlkAvb9AaScm4AnA4V795vcVlr3ix9
f6fcl5YGamKciEYEEBECAAYFAjvSF6sACgkQUZATEoypqPVQ7wCbBTRiSGGMzMTd
KJotfRKf5aoUAr0AoIAX0oE5XEEFm7Ea0IQqG91T9TvXtDtHbGV5ZHNvbiBNYXpp
b2xpIGRhIFNpbHZhIChEZXZlbG9wZXIpIDxnbGV5ZHNvbkBkZWJpYW4ub3JnPohX
BBMRAgAXBQI7BR7fBQsHCgMEAxUDAgMWAgECF4AACgkQpWvD35hbooESRACcCliY
yxR02KEBYs8cxKav9L0wlzwAn2Z9DWAbqi9Mv4fqPqZ7mViSMRbeiEYEEBECAAYF
AjsauX0ACgkQt1anjIgqbEvBEACffJxYfK22YPQ8ZkcjIc85BCiPLuUAnRq1EE9i
ukdUHPUo0vzHBeiN355miEYEEBECAAYFAjxEY28ACgkQGERS+iaKCE2fgwCeNGNV
Mpa1EWgXF+Hj15gidVjaVCAAn187X6eATJAVzspveNSf/Ny1iuFnuQENBDl7WasQ
BACxhBiSFOGa8tv7MOn0XVa6WCViBuQs9QJx2ZnMrx/KssRHMsNXnps+i+zVENqr
1Lz5zPpP7eWgrUy6B7/V9R4LV8nwHC1lZrR/1xyJ6G5j9RLSbYInZCLIAFUMlAar
iTThMhvXM+Pf7SXPj+ivrP9EYPSLxqTs1K/dWAbrDK/QiwADBQP9Hgc3EOw+7luB
/bXWssQp70bF9yvZLCGOgIE/rZIbOXumXkPlV7FTDgv+h47Bgcj2KDPEM98LUyxG
Captulo 4. Apndice 68

GcJAmrC9gWH7mYEUFNn1bGD+qHRwJ7+xj45NXBJDOBbHzTDS8QhacCRGW1CvRVgP
8ycPDOv/hmGfAJEzqzUkSO1uBcPmmXSIRgQYEQIABgUCOXtZqwAKCRCla8PfmFui
gQHnAJ4kDKHKvG9s9OjGV6RvszTDGE51igCcCZn0rO/Si0ek97bTCIusQzJF/pA=
=bvnT
-----END PGP PUBLIC KEY BLOCK-----

Você também pode gostar