Sei sulla pagina 1di 139

Firewall: Segurana de redes Linux

Paul Russell Gleydson Mazioli da Silva Alexandre Folle de Menezes

Traduo Oficial Alfamdia


Alexandre Folle de Menezes

Verso 1.1, agosto/2002.

As marcas registradas utilizadas no decorrer deste livro so usadas unicamente para fins didticos, sendo estas propriedade de suas respectivas companhias. A Alfamdia no assume qualquer responsabilidade por erros ou omisses, ou por danos resultantes do uso das informaes contidas neste livro. O captulo 5 uma adaptao do texto: Linux IPCHAINS-HOWTO Copyright 1999 - Paul Russell, <ipchains@rustcorp.com <mailto:ipchains@rustcorp.com>> Traduo para o portugus por Gleydson Mazioli da Silva, <gleydson@linuxbr.com.br <mailto:gleydson@linuxbr.com.br>> O captulo 6 uma adaptao do texto: Guia Foca GNU/Linux Copyleft 1999-2002 - Gleydson Mazioli da Silva. Fonte: http://focalinux.cipsga.org.br Os captulos 1, 2 e 4 foram escritos por: Copyright 2002 por Alexandre Folle de Menezes <mailto:menezes@alfamidia.com.br> Traduo para portugus - Brasil, 2002: Alfamdia Ltda Rua Flix da Cunha, 818 Porto Alegre - RS - Brasil Fone/Fax: +55 (51) 3346-7300 E-mail: alfamidia@alfamidia.com.br URL: http://www.alfamidia.com.br Esta apostila uma coletnea de textos com licena GNU ou livres encontrados na Internet, conforme referncias acima. Este material foi totalmente montado com fins didticos, sem objetivo comercial. Foram acrescentados exemplos e exerccios desenvolvidos pela Alfamdia Ltda.

CONTEDO
CONTEDO ................................................................................................................... 5 1 TCP/IP ..................................................................................................................... 11

1.1 A CAMADA FSICA ................................................................................................. 11 1.2 A CAMADA DE ENLACE DE DADOS ....................................................................... 12 1.3 A CAMADA DE REDE ............................................................................................. 12 1.3.1 O DATAGRAMA IP............................................................................................... 13 1.3.2 FRAGMENTAO DOS DATAGRAMAS .................................................................. 14 1.4 CAMADA DE TRANSPORTE .................................................................................... 14 1.4.1 TCP..................................................................................................................... 14 1.4.1.1 O pacote TCP .................................................................................................. 15 1.4.2 UDP .................................................................................................................... 16 1.4.3 ICMP .................................................................................................................. 16 1.5 MONTAGEM DOS PACOTES.................................................................................... 17 1.6 ROTEAMENTO ....................................................................................................... 18 1.6.1 REEMPACOTAMENTO ........................................................................................... 20 EXERCCIOS.................................................................................................................... 20 2 ENDEREAMENTO............................................................................................. 21

2.1 ENDEREAMENTO DE ENLACE (MAC) ................................................................ 21 2.2 ENDEREAMENTO DE REDE (IP) .......................................................................... 21 2.2.1 MULTIHOMING .................................................................................................... 22 2.2.2 CLASSES DE REDE IP ........................................................................................... 22 2.2.3 ENDEREOS RESERVADOS PARA USO EM REDES PRIVADAS ................................. 23 2.2.4 ENDEREOS ESPECIAIS ........................................................................................ 23 2.2.4.1 O endereo de Rede......................................................................................... 23 2.2.4.2 O endereo de Broadcast................................................................................. 23 2.2.4.3 O endereo de Loopback ................................................................................. 24 2.2.5 DIVISO EM SUB-REDES ....................................................................................... 24 2.2.5.1 Mscaras de Sub-Rede .................................................................................... 24 2.2.6 SUPER-REDES E CDIR......................................................................................... 25 2.2.7 REFERNCIA RPIDA DE MSCARA DE REDES ...................................................... 25 2.3 ENDEREAMENTO DE SESSO (PORTAS) ............................................................. 26 EXERCCIOS.................................................................................................................... 27 3 CONECTANDO REDES ....................................................................................... 28

3.1 ROTEAMENTO ....................................................................................................... 28 3.1.1 ROTAS ESTTICAS E DINMICAS .......................................................................... 28 3.1.2 GATEWAY............................................................................................................ 29 3.2 NETFILTER ............................................................................................................ 29 3.2.1 ANATOMIA DO NETFILTER ................................................................................... 30 3.2.2 NAT .................................................................................................................... 30 3.2.2.1 Tipos de NAT .................................................................................................. 31 3.2.3 IMPLEMENTAO DE UM SERVIO NAT .............................................................. 31 4 VULNERABILIDADES NO PROTOCOLO TCP/IP ........................................ 32

4.1 DISPONIBILIDADE DOS DADOS............................................................................... 32 4.2 SOBRE O PROTOCOLO TCP/IP ............................................................................. 32 4.3 IP SPOOFING ......................................................................................................... 32 4.3.1 SERVIOS VULNERVEIS AO IP SPOOFING:.......................................................... 33 4.3.2 MEDIDAS PARA SE PREVENIR DE ATAQUES IP SPOOFING: .................................... 34 4.4 SOBRE OS ATAQUES ............................................................................................... 34 4.4.1 SYN FLOODING................................................................................................... 34 4.4.2 LAND ................................................................................................................... 34 4.4.3 WINNUKE ............................................................................................................ 35 4.4.4 TEARDROP .......................................................................................................... 35 4.4.5 NEWTEAR............................................................................................................ 36 4.4.6 BONK/BOINK ....................................................................................................... 36 4.4.7 SSPING ................................................................................................................. 36 4.4.8 SMURF ................................................................................................................. 36 5 FIREWALL IPCHAINS........................................................................................ 38

5.1 INTRODUO ......................................................................................................... 38 5.1.1 O QUE? ................................................................................................................ 38 5.1.2 POR QUE? ............................................................................................................ 38 5.1.3 COMO? ................................................................................................................ 38 5.1.4 ONDE? ................................................................................................................. 39 5.2 BSICO SOBRE A FILTRAGEM DE PACOTES........................................................... 39 5.2.1 O QUE ? ............................................................................................................. 39 5.2.2 POR QUE? ............................................................................................................ 39 5.2.3 COMO? ................................................................................................................ 40 5.2.3.1 Um kernel com filtragem de pacotes............................................................... 40 5.2.3.2 O ipchains .................................................................................................. 41 5.2.3.3 Fazendo regras permanentes............................................................................ 41 5.3 ROTEAMENTO, MASQUERADING, PORTFORWARDING, IPAUTOFW...................... 42

5.3.1 GUIA RPIDO DE TRS LINHAS PARA MASQUERADING ......................................... 42 5.3.2 CONFIGURAES DE FIREWALL SIMPLES ............................................................. 42 5.3.2.1 Rede Pblica .................................................................................................... 43 5.3.2.2 Rede Privada: Masquerading........................................................................... 43 5.3.2.3 Rede Privada: Proxies Transparentes .............................................................. 44 5.3.2.4 Rede Privada: Proxies Tradicionais................................................................. 46 5.3.2.5 Servios Internos Limitados ............................................................................ 46 5.3.3 MAIS DETALHES SOBRE MASQUERADING ............................................................ 47 5.4 IP FIREWALLING CHAINS ..................................................................................... 47 5.4.1 COMO OS PACOTES ATRAVESSAM OS FILTROS...................................................... 47 5.4.1.1 Usando ipchains......................................................................................... 49 5.4.1.2 Operaes em uma regra Simples ................................................................... 50 5.4.1.3 Especificaes de Filtragem ............................................................................ 51 5.4.1.4 Efeitos do Lado da Filtragem .......................................................................... 55 5.4.1.5 Operaes em Masquerading .......................................................................... 62 5.4.1.6 Checando um Pacote ....................................................................................... 62 5.4.1.7 Multiplas Regras at Once and Watching What Happens ................................ 63 5.4.2 EXEMPLOS TEIS ................................................................................................. 64 5.4.2.1 Usando ipchains-save............................................................................. 65 5.4.2.2 Usando ipchains-restore...................................................................... 66 5.5 DIVERSOS .............................................................................................................. 66 5.5.1 COMO ORGANIZAR SUAS REGRAS DE FIREWALL ................................................... 67 5.5.2 O QUE NO FILTRAR ............................................................................................ 67 5.5.2.1 Pacotes ICMP .................................................................................................. 67 5.5.2.2 Conexes TCP para DNS (servidores de nomes)............................................ 68 5.5.2.3 Pesadelos FTP ................................................................................................. 68 5.5.3 FILTRANDO O PING OF DEATH (PING DA MORTE) ................................................. 68 5.5.4 FILTRANDO O TEARDROP E BONK........................................................................ 69 5.5.5 FILTRANDO BOMBAS DE FRAGMENTO ................................................................. 69 5.5.6 MODIFICANDO REGRAS DO FIREWALL ................................................................. 69 5.5.7 COMO EU CONFIGURO A PROTEO IP SPOOF?.................................................... 69 5.6 PROBLEMAS COMUNS ............................................................................................ 71 5.6.1 IPCHAINS -L TRAVA! ........................................................................................... 71 5.6.2 MASQUERADING/FORWARDING NO FUNCIONA!................................................. 71 5.6.3 -J REDIR NO FUNCIONA!.............................................................................. 71 5.6.4 CORINGAS NAS INTERFACES NO FUNCINAM! ..................................................... 71 5.6.5 TOS NO FUNCIONA! .......................................................................................... 71 5.6.6 IPAUTOFW E IPPORTFW NO FUNCIONAM! ........................................................... 72

5.6.7 XOSVIEW EST QUEBRADO! ................................................................................. 72 5.6.8 FALTA DE SEGMENTAO COM -J REDIRECT! ............................................ 72 5.6.9 EU NO POSSO CONFIGURAR TEMPO LIMITE NO MASQUERADE! ........................... 72 5.6.10 EU DESEJO PROTEGER IPX! ............................................................................... 72 6 FIREWALL IPTABLES........................................................................................ 73

6.1 INTRODUO ......................................................................................................... 73 6.1.1 VERSO ............................................................................................................... 74 6.1.2 UM RESUMO DA HISTRIA DO IPTABLES............................................................... 74 6.1.3 CARACTERSTICAS DO FIREWALL IPTABLES ......................................................... 74 6.1.4 FICHA TCNICA .................................................................................................... 75 6.1.5 REQUERIMENTOS ................................................................................................. 75 6.1.6 ARQUIVOS DE LOGS CRIADOS PELO IPTABLES ...................................................... 75 6.1.7 INSTALAO ........................................................................................................ 75 6.1.8 ENVIANDO CORREES/CONTRIBUINDO COM O PROJETO .................................... 76 6.1.9 O QUE ACONTECEU COM O IPCHAINS E IPFWADM? ............................................... 76 6.1.10 TIPOS DE FIREWALLS ......................................................................................... 76 6.1.11 O QUE PROTEGER?............................................................................................. 77 6.1.12 O QUE SO REGRAS?.......................................................................................... 78 6.1.13 O QUE SO CHAINS? .......................................................................................... 78 6.1.14 O QUE SO TABELAS?........................................................................................ 78 6.1.15 HABILITANDO O SUPORTE AO IPTABLES NO KERNEL .......................................... 79 6.1.16 LIGANDO SUA REDE INTERNA A INTERNET ......................................................... 80 6.2 MANIPULANDO CHAINS ......................................................................................... 80 6.2.1 ADICIONANDO REGRAS - A.................................................................................. 81 6.2.2 LISTANDO REGRAS - L ......................................................................................... 81 6.2.3 APAGANDO UMA REGRA - D ................................................................................ 84 6.2.4 INSERINDO UMA REGRA - I................................................................................... 84 6.2.5 SUBSTITUINDO UMA REGRA - R ........................................................................... 84 6.2.6 CRIANDO UM NOVO CHAIN - N ............................................................................ 85 6.2.7 LISTANDO OS NOMES DE TODOS OS CHAINS ATUAIS ............................................. 86 6.2.8 LIMPANDO AS REGRAS DE UM CHAIN - F.............................................................. 86 6.2.9 APAGANDO UM CHAIN CRIADO PELO USURIO - X............................................... 86 6.2.10 ZERANDO CONTADOR DE BYTES DOS CHAINS - Z ............................................... 87 6.2.11 ESPECIFICANDO O POLICIAMENTO PADRO DE UM CHAIN - P............................. 87 6.3 OUTRAS OPES DO IPTABLES ............................................................................. 88 6.3.1 ESPECIFICANDO UM ENDEREO DE ORIGEM/DESTINO .......................................... 88 6.3.2 ESPECIFICANDO A INTERFACE DE ORIGEM/DESTINO ............................................. 89 6.3.3 ESPECIFICANDO UM PROTOCOLO ......................................................................... 90

6.3.3.1 Especificando portas de origem/destino .......................................................... 90 6.3.3.2 Especificando mensagens do protocolo ICMP................................................ 91 6.3.3.3 Especificando pacotes syn............................................................................... 92 6.3.4 ESPECIFICANDO FRAGMENTOS ............................................................................. 92 6.3.5 ESPECIFICANDO UMA EXCEO ........................................................................... 93 6.3.6 ESPECIFICANDO UM ALVO.................................................................................... 93 6.3.6.1 Alvo REJECT .................................................................................................. 94 6.3.6.2 Especificando LOG como alvo ....................................................................... 94 6.3.6.3 Especificando RETURN como alvo................................................................ 97 6.4 A TABELA NAT (NETWORK ADDRESS TRANSLATION) - FAZENDO NAT ............... 98 6.4.1 CRIANDO UM NOVO CHAIN NA TABELA NAT....................................................... 98 6.4.2 FAZENDO IP MASQUERADING (PARA OS APRESSADOS) ........................................ 98 6.4.3 FAZENDO SNAT.................................................................................................. 99 6.4.3.1 Fazendo IP Masquerading ............................................................................. 100 6.4.4 FAZENDO DNAT ............................................................................................... 101 6.4.4.1 Redirecionamento de portas .......................................................................... 101 6.4.5 MONITORANDO CONEXES FEITAS NA TABELA NAT .......................................... 102 6.5 A TABELA MANGLE ............................................................................................. 102 6.5.1 ESPECIFICANDO O TIPO DE SERVIO ................................................................... 102 6.5.1.1 Especificando o TOS para trfego de sada................................................... 103 6.5.1.2 Especificando o TOS para o trfego de entrada ............................................ 103 6.6 OUTROS MDULOS DO IPTABLES ........................................................................ 104 6.6.1 CONFERINDO DE ACORDO COM O ESTADO DA CONEXO .................................... 104 6.6.2 LIMITANDO O NMERO DE VEZES QUE A REGRA CONFERE ................................. 104 6.6.3 PROTEO CONTRA PING DA MORTE .................................................................. 105 6.6.4 PROTEO CONTRA SYN FLOOD ......................................................................... 105 6.6.5 PROTEO CONTRA IP SPOOFING ...................................................................... 106 6.6.6 ESPECIFICANDO MLTIPLAS PORTAS DE ORIGEM/DESTINO................................. 106 6.6.7 ESPECIFICANDO O ENDEREO MAC DA INTERFACE........................................... 107 6.6.8 CONFERINDO COM QUEM CRIOU O PACOTE ........................................................ 107 6.7 CAMINHO PERCORRIDO PELOS PACOTES NAS TABELAS E CHAINS .................... 107 6.7.1 PING DE 192.168.1.1 PARA 192.168.1.1 ............................................ 108 6.7.2 CONEXO FTP DE 192.168.1.1 PARA 192.168.1.1 ............................................ 109 6.7.3 CONEXO FTP DE 192.168.1.1 PARA 192.168.1.4 ............................................ 109 6.7.4 CONEXO FTP DE 200.217.29.67 PARA FTP.DEBIAN.ORG.BR ................. 110 6.7.5 PING DE 192.168.1.4 PARA 192.168.1.1 ............................................................ 111 6.7.6 CONEXO FTP DE 192.168.1.4 PARA 192.168.1.1 ............................................ 112 6.7.7 CONEXO FTP DE 192.168.1.4 PARA FTP.DEBIAN.ORG.BR ................................ 113

6.7.8 CONEXO FTP DE 200.198.129.162 PARA 200.217.29.167 .............................. 114 6.7.9 GRFICO GERAL DA PASSAGEM DOS PACOTES ................................................... 114 6.8 EXEMPLOS DE CONFIGURAES DO IPTABLES ................................................... 115 6.8.1 BLOQUEANDO CONEXES DE FORA PARA SUA MQUINA ................................... 115 6.8.2 MONITORANDO TENTATIVA DE CONEXO DE TROJANS EM SUA MQUINA ......... 115 6.8.3 CONECTANDO SUA REDE INTERNA A INTERNET ................................................. 116 6.8.4 UM EXEMPLO DE FIREWALL SIMPLES ................................................................. 116 7 O PROXY SQUID ................................................................................................ 121

7.1 INTRODUO ....................................................................................................... 121 7.2 REQUISITOS BSICOS .......................................................................................... 121 7.3 O FEIJO COM ARROZ ......................................................................................... 122 7.3.1 INSTALAO ...................................................................................................... 122 7.3.2 CONFIGURAO ................................................................................................ 123 7.4 CONTROLANDO OS USURIOS ............................................................................. 124 7.5 EXEMPLOS DE CONFIGURAO .......................................................................... 126 7.5.1 PERMITIR HTTP_ACCESS PARA APENAS UMA MQUINA COM MAC ADDRESS IGUAL A 00:08:C7:9F:34:41 :....................................................................................................... 126 7.5.2 PARA RESTRINGIR ACESSO NAS HORAS DE TRABALHO (9 HORAS - 17 HORAS, DE SEGUNDA SEXTA) DA FAIXA DE IP 192.168.2.0 MSCARA 255.255.255.0 :................... 126 7.5.3 POSSO USAR UMA LISTA DE CONTROLE COM MULTIPLOS HORRIOS PARA DIFERENTES USURIOS?..................................................................................................................... 126 7.5.4 QUERO CRIAR UMA ACL PARA BLOQUEAR SITES COM A PALAVRA SEXO POIS MEUS FUNCIONRIOS FICAM BAIXANDO FILMES EM DIVX DE PORNOGRAFIA:.......................... 127 7.5.5 A IDIA ACIMA E TIMA, MAS EU TENHO UMA LISTA DE PALAVRAS PARA FAZER O MESMO. TEREI QUE REPETIR ESSE COMANDO VRIAS VEZES?........................................ 127 7.5.6 AINDA EXISTEM SITES QUE ESCAPAM A ESSE CONTROLE. GOSTARIA DE BLOQUE-LOS DIRETAMENTE................................................................................................................ 127 7.5.7 MEU DIRETOR RECLAMA QUE AGORA NO CONSEGUE MAIS LER AS ENTREVISTAS NO SITE DA PLAYBOY.......................................................................................................... 127 7.5.8 E UMA LISTA DE DIRETRIOS? ........................................................................... 127 7.6 RECURSOS NA INTERNET .................................................................................... 128 APNDICE A. LICENA DE PUBLICAO LIVRE...................................... 129

1 TCP/IP
O TCP/IP um protocolo que conecta redes LAN ou WAN, homogneas ou heterogneas. Ele pode fazer tanto a comunicao entre hosts ponto-a-ponto, como a comunicao entre cliente e servidor. Existem dois tipos de interao entre aplicaes. Comunicao Orientada Conexo apropriada quando as aplicaes precisam de uma troca contnua de dados. Em contraste, a Comunicao No Orientada Conexo apropriada quando as aplicaes trocam mensagens isoladas, geralmente com quantidades pequenas de dados. Para conseguir uma troca de dados confivel entre os ns, so necessrios vrios procedimentos: empacotamento dos dados, determinao do caminho a ser seguido pelos pacotes, transmisso dos dados, adaptao da taxa de transmisso de acordo com a capacidade do destino de receber dados, gerenciamento de erros e retransmisso de dados. Isso resulta em uma implementao complicada. Para facilitar essa tarefa, pode se usar uma implementao modular, agrupando as tarefas relacionadas em camadas distintas. Para o TCP/IP foi adotado um modelo de comunicao dividido em camadas, que depois viria a influenciar o modelo OSI que hoje considerado padro. Cada camada acrescenta informaes de controle ao pacote de dados e transmite seu pacote para a camada inferior, que tambm adiciona seus dados.

1.1 A camada Fsica


A camada fsica trabalha com a mdia fsica, conectores, e os sinais que representam 0 e 1. Por exemplo, um modem padro V.90 ou V.92 implementam as funes da camada fsica.

1.2 A camada de Enlace de Dados


A camada de enlace de dados usa a capacidade de transmisso de dados brutos da camada fsica e transforma-a em uma linha que parea camada de rede ser livre de erros de transmisso. O protocolo PPP um exemplo de camada de enlace de dados. Na camada de Enlace de Dados, os dados so organizados em quadros.

Cada quadro tem um cabealho que inclui o endereo e controla a informao e um trailer que usado para deteco de erros. Um cabealho de quadro de LAN contm a os endereos fsicos de origem e destino, que identificam as placas de rede. Note que o Enlace pode ser uma rede local ou uma conexo Ponto-aPonto.

1.3 A camada de Rede


O IP (Internet Protocol) executa as funes da camada de rede. O IP roteia os dados entre sistemas. Os dados podem atravessar um nico enlace ou podem ser retransmitidos por vrios enlaces pela internet. As unidades de dados so chamadas datagramas. Os datagramas tm um cabealho IP que contm endereamento de rede. Os roteadores examinam o endereo de destino no cabealho IP para direcionar os datagramas para seu destino. A camada IP dita No-Orientada Conexo porque cada datagrama roteado independentemente e o IP no garante a entrega confivel ou em seqncia dos datagramas.

1.3.1

O Datagrama IP
O cabealho de um datagrama IP pode ser visto na figura abaixo: Os campos do cabealho tm o seguinte significado: VERS: verso do protocolo IP que foi usada para criar o datagrama (4bits) HLEN: comprimento do cabealho, medido em palavras de 32 bits (4 bits) TOTAL-LENGTH: este campo proporciona o comprimento datagrama medido em bytes, incluindo cabealho e dados. do

SERVICE-TYPE: este campo especifica como o datagrama poderia ser manejado TTL(Time To Live): especifica o tempo que o datagrama est permitido a permanecer no sistema Internet. Gateways e hosts que processam o datagrama devem decrementar o campo TTL cada vez que um datagrama passa por eles e devem remov-lo quando seu tempo expirar. PROTOCOL: especifica qual protocolo de alto nvel foi usado para criar a mensagem que est sendo transportada na rea de dados do datagrama. HEADER-CHECKSUM: assegura integridade dos valores do cabealho. SOURCE AND DESTINATION IP ADDRESS: especifica o endereo IP de 32 bits do remetente e receptor. IDENTIFICATION, FLAGS e FRAGMENTS: estes trs campos controlam a fragmentao e a unio dos datagramas. O campo de identificao contm um nico inteiro que identifica o datagrama, um campo muito importante porque quando um gateway fragmenta um datagrama, ele copia a maioria dos campos do cabealho do datagrama em cada fragmento, ento a identificao tambm deve ser copiada, com o propsito de que o destino saiba quais fragmentos pertencem a quais datagramas. Cada fragmento tem o mesmo formato que um datagrama completo. FRAGMENT OFFSET: especifica o incio do datagrama original dos dados que esto sendo transportados no fragmento. medido em unidades de 8 bytes.

1.3.2 Fragmentao dos Datagramas


Ao realizar trocas de pacotes, os aplicativos da Internet se deparam com um problema: A diferena do tamanho das mensagens nas diversas redes. Nesse

caso, o protocolo IP suporta o processo de fragmentao, onde os datagramas so divididos em unidades menores. O procedimento de fragmentao realizado por um gateway, onde as mensagens so partidas em unidades menores e adequadamente identificadas. a estao destino ento reagrupar as instrues baseado nas identificaes do gateway. Na identificao dos fragmentos o gateway cria um header para cada fragmento.O header contm os endereos iniciais das redes e uma identificao referente mensagem a qual faz parte. J na fase de reagrupamento, a estao destino, ao receber o primeiro fragmento, independentemente de estar na ordem correta, aciona um timer. Se uma margem de tempo padro for ultrapassada e a mensagem no estiver completamente recontituida, a estao destino descarta os fragmentos recebidos e retorna origem uma mensagem de erro.

1.4 Camada de Transporte


1.4.1 TCP
O TCP (Transmission Control Protocol) proporciona conexes de dados confiveis para as aplicaes. O TCP conta com mecanismos que garantem que os dados so entregues s suas aplicaes locais: ntegros Em seqncia Completos Sem duplicatas Numerao dos segmentos Estabelecimento de Timeout Retransmisso dos segmentos

Os mecanismos bsicos que o TCP usa para conseguir isso so:

O lado que recebe os dados deve coloc-los em na seqncia correta, descartando duplicatas e confirmando o recebimento dos mesmos. O TCP implementado apenas nos hosts. O TCP um protocolo fullduplex, ou seja, ambos os lados podem enviar dados ao mesmo tempo. O TCP adiciona um cabealho ao pacote de dados da aplicao, formando um segmento. O TCP passa os segmentos ao IP, que ento roteia os mesmos at seu

destino. O TCP aceita segmentos do IP, determina qual aplicao o destino, e passa os dados para a aplicao apropriada. 1.4.1.1 O pacote TCP

Os campos do cabealho tm o seguinte significado: Porta Origem e Destino: estes campos no cabealho TCP contm os nmeros de portas TCP que identificam os programas de aplicao dos extremos de uma conexo. Nmero de sequncia (32 bits): identifica a posio no fluxo de bytes do segmento enviado pelo transmissor. Nmero de Reconhecimento (32 bits): este campo identifica a posio do byte mais alto (ou ltimo byte) que o fonte recebeu. Offset: contm um inteiro que especifica o incio da poro de dados do segmento. Este campo necessrio j que o campo Options varia em comprimento dependendo de quais opes tenham sido includas. Reserv: reservado para uso futuro. Flags (6 bits): determina o propsito e contedo do segmento, codificado assim: o URG - Campo de ponteiro Urgente vlido o ACK - Campo de Reconhecimento vlido o PSH - Este segmento solicita um PUSH o RST - Reset da conexo o SYN - Sincroniza numeros de sequncias o FIN - O transmissor chega ao fim do fluxo de bytes. WINDOW: atravs deste campo o software TCP indica quantos dados ele tem capacidade de receber em seu buffer. URGENT POINTER: TCP atravs deste campo permite que o transmissor especifique que alguns dados so urgentes, isto significa que os dados sero expedidos to rpido quanto seja possvel. OPTIONS: o software TCP usa este campo para se comunicar com o software do outro extremo da conexo. CHECKSUM: usado para verificar a integridade tanto do cabealho como dos dados do segmento TCP.

1.4.2 UDP
O UDP no faz nenhuma garantia quanto entrega dos dados, e dever da aplicao trocar informaes que confirmem a chegada dos dados. O UDP implementado apenas nos hosts. Com o UDP (User Datagram Protocol), uma aplicao manda uma mensagem isolada para outra aplicao. O UDP adiciona um cabealho, formando um datagrama UDP. O UDP passa os segmentos ao IP, que ento roteia os mesmos at seu destino. O UDP aceita segmentos do IP, determina qual aplicao o destino, e passa os dados para a aplicao apropriada.

1.4.3 ICMP
O IP tem um projeto simples e elegante. Em condies normais, o IP faz um uso muito eficiente da memria e recursos de transmisso. Como IP prov um servio de expedio de datagramas sem conexo e no confivel, e alm disso um datagrama viaja de um gateway a outro at alcanar um gateway que possa exped-lo diretamente estao destino; necessrio um mecanismo que emita informaes de controle e de erros quando acontecerem problemas na rede. Alguns dos problemas tpicos que podem acontecer so: Um gateway no pode expedir ou rotear um datagrama; Um gateway detecta congestionamento. uma condio no usual, tal como

O mecanismo de controle que emite mensagens quando acontece algum erro a funo principal do protocolo ICMP. O ICMP permite aos gateways enviar mensagens de erros ou de controle a outros gateways ou hosts. ICMP prov comunicao entre o software de IP numa mquina e o software de IP numa outra mquina.
Tabela 1-1 Mensagens ICMP

Tipo 0 3 4 5 8 11 12 13 14 ICMP somente reporta

Mensagem Echo Reply Destination Unreachable Source Quench Redirect Echo Time Exceeded Parameter Problem Time Stamp Time Stamp Reply condies de erros fonte original. A fonte deve

relatar os erros aos programas de aplicao individuais e tomar ao para corrigir o problema. Uma das mensagens que o ICMP pode enviar : Destination Unreachable, o qual, por sua vez pode ser dos seguintes tipos: Network Unreachable (rede no alcanvel) Host Unreachable (mquina no alcanvel) Port Unreachable (porta no alcanvel) Destination Host Unknown (mquina destino desconhecido) Destination Network Unknown (rede destino desconhecida)

1.5 Montagem dos pacotes


Na maioria das redes, a informao dividida em vrias partes, chamadas de pacotes, por duas razes: compartilhamento de recursos e deteco/correo de erros. Obviamente no justo que um nico usurio da domine os recursos da rede por muito tempo. Com a diviso da informao em pacotes, cada um dos pacotes pode ser enviado/recebido individualmente, permitindo assim que outros pacotes possam trafegar pela rede. Isso possibilita um compartilhamento justo dos recursos. Na maioria dos casos, os dispositivos so conectados atravs de cabos. Em alguns casos, usa-se ondas de rdio ou mesmo luz infravermelha. Ambas as formas de conexo fsica esto sujeitas a interferncias, que podem corromper os dados que trafegam na rede. Grande parte do trabalho complexo em redes detectar e solucionar os erros no trfego dos dados. A maioria das tcnicas de deteco e correo de erros baseada no uso de checksums. Quando a informao enviada, anexado em seu final um nmero indicando a soma de todos os bytes da mesma. Na recepo, esse nmero comparado com a soma dos dados recebidos. Se houver diferena, a informao est corrompida e deve ser retransmitida. Caso o bloco de dados seja muito grande, o reenvio vai tomar muito tempo, degradando a performance da rede. Para minimizar este problema, divide-se a informao em pacotes. Se houver algum erro, basta retransmitir apenas os pacotes corrompidos.

1.6 Roteamento
O TCP/IP pode ser usado em redes locais e para interligao de redes. As diversas redes locais conversam atravs dos roteadores. Pode haver mais de um

caminho entre dois pontos. As redes isoladas so conectadas por meio de Roteadores IP. Roteadores modernos so equipados com vrios slots que podem receber diferentes tipos de adaptadores de rede: Ethernet, Token-Ring, FDDI, PPP, etc. O software de IP roda nos hosts e nos roteadores. Se o destino est no mesmo enlace, manda-se o datagrama diretamente para ele; Se o destino no est no mesmo enlace, manda-se o pacote para o roteador local; Se o destino no estiver no mesmo enlace do roteador, este ir repasslo ao prximo roteador. Este processo continua at que o destino seja atingido.

Pode ser til ilustrar isto com um exemplo. Imagine um simples roteador de escritrio, ele pode ter um link intermitente com a Internet, um nmero de segmentos Ethernet alimentando as estaes de trabalho e outro link PPP intermitente fora de outro escritrio. Quando o roteador recebe um datagrama de qualquer de suas conexes de rede, o mecanismo que usa determina qual a prxima interface deve enviar o datagrama. Computadores simples tambm precisam rotear, todos os computadores na Internet tm dois dispositivos de rede. Um a interface loopback (explicada acima), o outro usado para falar com o resto da rede, talvez uma interface Ethernet, talvez uma interface serial PPP ou SLIP. Cada computador mantm uma lista de regras especiais de roteamento, chamada tabela de roteamento. Esta tabela contm colunas que tipicamente contm no mnimo trs campos, o primeiro o endereo de destino, o segundo o nome da interface que o datagrama deve ser roteado e o terceiro opcionalmente o endereo IP da outra mquina que levar o datagrama em seu prximo passo atravs da rede. No GNU/Linux voc pode ver a tabela de roteamento usando um dos seguintes comandos:
cat /proc/net/route route -n netstat -r

O processo de roteamento muito simples: um datagrama (pacote IP) recebido, o endereo de destino (para quem ele ) examinado e comparado com cada item da tabela de roteamento. O item que mais corresponder com o endereo selecionado e o datagrama direcionado a interface especificada. Se o campo gateway estiver preenchido, ento o datagrama direcionado para aquele computador pela interface especificada, caso contrrio o endereo de destino assumido sendo uma rede suportada pela interface.

Em uma LAN pequena, as tabelas de roteamento podem ser feitas manualmente. Em redes maiores, os roteadores mantm suas tabelas atualizadas trocando informaes entre si. Roteadores podem descobrir eventos como: Uma nova rede adicionada a internet; Um caminho foi interrompido, e um destino no pode ser atingido; Uma nova rota foi estabelecida para um destino.

No existe um padro nico para troca de informao entre roteadores. A liberdade de escolha do protocolo estimulou a competio e levou a grandes melhorias nos protocolos. Os protocolos de roteamento mais usados so o RIP e o OSPF.

1.6.1 Reempacotamento
Existe um evento olmpico onde um competidor nada uma parte do percurso, pega uma bicicleta e pedala outra parte, e corre uma terceira etapa. O IP funciona da mesma maneira. O datagrama foi projetado para poder ser mudado de uma mdia para outra at chegar ao seu destino. Antes de um datagrama ser transmitido por um enlace, ele empacotado em um quadro apropriado para o enlace. Quando um roteador recebe o quadro: O roteador desempacota o quadro e extrai o datagrama O roteador analisa o endereo de destino e descobre a mdia do prximo trecho O roteador reempacota o datagrama em um novo quadro, apropriado para o prximo lao

Exerccios
1. Em que nvel de TCP/IP rodam o telnet e o ftp? a) Fsico b) Sesso c) Aplicao d) Transporte e) Enlace

2. Qual das seguintes aplicaes no usa o protocolo UDP? a) TFTP b) DNS c) RPC d) FTP e) SNMP

2 ENDEREAMENTO
Em uma rede, o endereo de um dispositivo uma forma de identificar esse dispositivo como sendo nico. Normalmente, os endereos de rede possuem um formato padronizado e bem definido.

2.1

Endereamento de Enlace (MAC)

Os endereos MAC (Media Access Control) so atribudos aos adaptadores de rede durante sua fabricao, sendo que cada adaptador tem um endereo que o identifica como nico. Cada fabricante tem um cdigo que o diferencia dos demais. Os endereos MAC so escritos no seguinte formato:
00-c0-49-3f-c6-0c

Os primeiros bytes contm o cdigo do fabricante, os demais contm o modelo e nmero serial do adaptador de rede.

2.2

Endereamento de Rede (IP)

O protocolo IP usa Endereos IP para identificar estaes e para rotear os dados para elas. cada estao deve ser atribudo um endereo IP exclusivo. Um endereo IP um nmero de 32 bits. Este tamanho foi escolhido para caber convenientemente em um registrador de 32 bits. O espao de 32 endereamento resultante possui 2 (ou 4.294.967.296) nmeros possveis. A notao de ponto foi inventada para facilitar a leitura e escrita dos nmeros IP. Cada octeto do endereo convertido para um nmero decimal, e os nmeros so separados por pontos. Por exemplo, o endereo da estao blintz.med.yale.edu 130.132.19.31.Em redes roteadas, o endereo composto de pelo menos dois nmeros: o da rede e o do n. Se dois dispositivos possurem endereos com o mesmo nmero de rede, ento eles esto localizados na mesma rede. Do contrrio, esto em redes distintas, mas unidas atravs de um roteador. O nmero que ir diferencia-los dentro desta rede o nmero do n. Os endereos IP so nmeros que identificam seu computador em uma rede TCP/IP. Inicialmente voc pode imaginar o IP como um nmero de telefone. O IP composto por quatro bytes e a conveno de escrita dos nmeros chamada de "notao decimal pontuada". Por conveno, cada interface (placa usada p/ rede) do computador ou roteador tem um endereo IP. Tambm permitido que o mesmo endereo IP seja usado em mais de uma interface de uma mesma mquina, mas normalmente cada interface tem seu prprio endereo IP.

As Redes do Protocolo Internet so seqncias contnuas de endereos IP. Todos os endereos dentro da rede tm um nmero de dgitos dentro dos endereos em comum. A poro dos endereos que so comuns entre todos os endereos de uma rede chamada de poro da rede. O conjunto dos dgitos restantes chamado de poro dos hosts. O nmero de bits que so compartilhados por todos os endereos dentro da rede chamado de netmask (mscara da rede) e o papel da netmask determinar quais endereos pertencem ou no a rede. Por exemplo, considere o seguinte:
Tabela 2-1 Formao de Endereos IP

192.168.110.23 Endereo do Host 255.255.255.0 Mscara da Rede 192.168.110. Poro da Rede .23 Poro do Host 192.168.110.0 Endereo da Rede 192.168.110.255 Endereo Broadcast Qualquer endereo que finalizado em zero em sua netmask revelar o endereo da rede a que pertence. O endereo de rede ento sempre o menor endereo numrico dentro da escalas de endereos da rede e sempre possui a poro host dos endereos codificada como zeros. O endereo de broadcast um endereo especial que cada computador em uma rede "escuta" em adio a seu prprio endereo. Este um endereo onde os datagramas enviados so recebidos por todos os computadores da rede. Certos tipos de dados, como informaes de roteamento e mensagens de alerta, so transmitidos para o endereo broadcast, assim todo computador na rede pode receb-las simultaneamente. Existem dois padres normalmente usados para especificar o endereo de broadcast. O mais amplamente aceito para usar o endereo mais alto da rede como endereo broadcast. No exemplo acima este seria 192.168.110.255. Por algumas razes outros sites tm adotado a conveno de usar o endereo de rede como o endereo broadcast. Na prtica no importa muito se usar este endereo, mas voc deve ter certeza que todo computador na rede esteja configurado para escutar o mesmo endereo broadcast.

2.2.1 Multihoming
Os sistemas no tem endereos IP, as suas interfaces que os tm. Um roteador com quatro interfaces de rede precisa de quatro endereos IP. Um sistema que est ligado a mais de uma sub-rede chamado de multihomed.

2.2.2 Classes de Rede IP


Por razes administrativas aps pouco tempo no desenvolvimento do

protocolo IP alguns grupos arbitrrios de endereos foram formados em redes e estas redes foram agrupadas no que foram chamadas de classes. Estas classes armazenam um tamanho padro de redes que podem ser usadas. As faixas alocadas so:
Tabela 2-2 Classes de Endereamento

Bits Mais Mscara de Classe Significativos Rede 00000 255.0.0.0 A 10000 255.255.0.0 B 11000 255.255.255.0 C 11100 240.0.0.0 D 11110 E

Endereos Possveis na Rede


0.0.0.0 128.0.0.0 192.0.0.0 224.0.0.0 240.0.0.0 127.255.255.255 191.255.255.255 223.255.255.255 239.255.255.255 255.255.255.255

2.2.3 Endereos reservados para uso em Redes Privadas


Se voc estiver construindo uma rede privada que nunca ser conectada a Internet, ento voc pode escolher qualquer endereo que quiser. No entanto, para sua segurana e padronizao, existem alguns endereos IP's que foram reservados especificamente para este propsito. Eles esto especificados no RFC1597 e so os seguintes:
Tabela 2-3 Endereos IP Reservados Para Redes Privadas

Classe Mscara de Rede Endereos Possveis na Rede 255.0.0.0 10.0.0.0 - 10.255.255.255 A 255.255.0.0 172.16.0.0 - 172.31.255.255 B 255.255.255.0 192.168.0.0 - 192.168.255.255 C Voc deve decidir primeiro qual ser a largura de sua rede e ento escolher a classe de rede que ser usada. Pode-se obter um software de Proxy que repassa a informao entre os computadores internos e o mundo exterior atravs do endereo de Classe C registrado.

2.2.4 Endereos Especiais


Nem todos os nmeros podem ser atribudos a uma sub-rede ou estao. Por exemplo, alguns endereos so reservados para broadcast, outros so reservados para tabelas de roteamento. 2.2.4.1 O endereo de Rede Se um nmero IP tiver todos os bits da estao em 0, ele se refere rede, e no uma estao especfica. Por outro lado, se os bits da sub-rede fossem todos 0, a identificao seria ambgua, por isso essa combinao invlida.

2.2.4.2 O endereo de Broadcast O endereo IP 255.255.255.255 reservado para broadcast para todos os sistemas no link local. Se os bits da estao forem todos 1, feito um broadcast para a sub-rede correspondente. Por exemplo, o Endereo 192.18.7.255 significa um broadcast para a rede 192.18.7.0. Se os bits da estao e sub-rede forem todos 1, feito um broadcast para todas as estaes da rede indicada. Um boa regra nunca usar endereos de rede ou estao cujos bits sejam todos iguais (0 ou 1). Da pode-se deduzir que um campo nunca pode ter menos do que 2 bits. 2.2.4.3 O endereo de Loopback No extremo oposto do broadcast, existem mensagens que nunca deixam a estao local. Existem muitas estaes que contm processos clientes e servidores. Os clientes locais comunicam-se com o servidor por IP. Para fazer isso, eles geralmente usam um endereo especial chamado Endereo de Loopback. Por conveno, qualquer endereo comeando com 127 reservado para esse propsito. Na prtica, apenas o endereo 127.0.0.1 usado.2.2.5

Diviso em sub-redes
Uma rede de Classe A tem 16.777.216 endereos, uma rede de Classe B suporta 65.536 e uma de Classe C apenas 256. A grande diferena entre esses nmeros levam uma alocao muito ineficiente dos blocos e contribui para o esgotamento dos endereos IP. Por outro lado, uma organizao com um endereo de classe C s tem um espao de endereamento de 1 byte. Pode ser feito ento a diviso de 4 bits para o endereo de sub-rede e 4 bits para o endereo do sistema2.2.5.1 Mscaras de Sub-Rede

O trfego roteado para uma estao olhando para as partes de rede e sub-rede do seu endereo IP. Um endereo de Classe A, B ou C tem a parte de rede com tamanho fixo. Mas em organizaes que escolhem os seus campos de sub-rede, como as estaes e roteadores reconhecem o campo? A resposta que os sistemas tem que ser configurados para conhecer o tamanho da parte de sub-rede do endereo. O tamanho do campo da sub-rede armazenado em um parmetro chamado Mscara de Sub-rede, ou Subnet Mask. uma seqncia de 32 bits, onde os bits correspondentes rede e sub-rede so setados em 1, e os bits do sistema so setados em 0. Por exemplo, se quisermos usar o terceiro byte de um endereo classe C

para indicar a sub-rede, a mscara seria:


11111111 11111111 11111111 00000000

As mscaras geralmente so expressas usando a notao decimal, ento a mscara acima seria escrita como 255.255.255.0. J no caso de querermos dividir um endereo Classe C usando 4 bits para o campo da sub-rede, a mscara ficaria assim:
11111111 11111111 11111111 11110000

Ou, na forma decimal, 255.255.255.240. Bits de Nmeros de Bits da Nmero de Sub-Rede Sub-Rede Estao Mquinas 0 0 8 254 1 2 7 128 2 4 6 62 3 8 5 30 4 16 4 14 5 32 3 6 6 64 2 2 7 1 -

Mscara 255.255.255.0 255.255.255.128 255.255.255.192 255.255.255.224 255.255.255.240 255.255.255.248 255.255.255.252 Invlido

A tabela acima mostra as vrias maneiras em que um endereo local de classe C pode ser dividido. Ele tambm mostra o nmero de sub-redes e estaes para cada partio. O nmero de sub-redes e estaes menor do que o que se espera porque alguns endereos so reservados para propsitos especficos.2.2.6 Super-Redes e CDIR

O mtodo de atribuir blocos de endereos de classe A, B e C era muito ineficiente. Um bloco de Classe C proporciona 254 endereos, que pode ser muito ou pouco, dependendo do tamanho da organizao. Pode haver escassez ou desperdcio de endereos. Faria mais sentido atribuir s organizaes o nmero de bits que elas realmente precisam. Isso feito facilmente. Se uma organizao precisa de 4000 endereos, ela ganha 12 bits para usar como parte local de seu endereamento. Os 20 bits restantes so o prefixo, usado como endereo de super-rede ou prefixo. A maneira de nomear esse endereo sem classe /20. Obter um prefixo de 20 bits equivalente a obter 16 blocos contnuos de classe C. Para rotear para uma organizao, o roteador precisa saber o nmero de bits no prefixo e o padro de bits designado para o prefixo da organizao. O roteador pode ento enviar trfego para a organizao com uma nica entrada na tabela de roteamento. Isto chamado Classless Internet-Domain Routing (CDIR).2.2.7 Referncia rpida de mscara de redes A tabela abaixo faz referncia s mscaras de rede mais comuns e a quantidade de mquinas mximas que ela atinge. Note que a especificao da mscara tem influncia direta na classe de rede usada:

Mscara Mscara (32 bits) (octal)


Classe A:

Nmero de Mquinas 16,777,214 8,388,606 4,194,302 2,197,150 1,048,574 524,286 262,142 131,070 65,534 32,766 16,382 8,190 4,094 2,046 1,022 510 254 126 62 30 14 6 2 1

/8 /9 /10 /11 /12 /13 /14 /15


Classe B:

/255.0.0.0 /255.128.0.0 /255.192.0.0 /255.224.0.0 /255.240.0.0 /255.148.0.0 /255.252.0.0 /255.254.0.0 /255.255.0.0 /255.255.128.0 /255.255.192.0 /255.255.224.0 /255.255.240.0 /255.255.248.0 /255.255.252.0 /255.255.254.0 /255.255.255.0 /255.255.255.128 /255.255.255.192 /255.255.255.224 /255.255.255.240 /255.255.255.248 /255.255.255.252 /255.255.255.255

/16 /17 /18 /19 /20 /21 /22 /23


Classe C:

/24 /25 /26 /27 /28 /29 /30 /32

Qualquer outra mscara fora desta tabela (principalmente para a classe A), dever ser redimensionada com uma calculadora de IP para chegar a um nmero aproximado de redes/mquinas aproximados que deseja.

2.3

Endereamento de Sesso (Portas)

Todo processo que deseje estabelecer comunicao com outro processo deve se identificar de alguma forma. O TCP/IP implementa essa comunicao atravs do uso do conceito de portas (ou ports). A porta um nmero de 16 bits que identifica processos (ou servios de rede). O nmero da porta de origem e o nmero da porta de destino esto includos no cabealho de cada segmento TCP ou pacote UDP. Um socket uma combinao de um endereo IP com um nmero de

porta, e identifica um processo como nico na rede.

Exerccios
1. O que significa a sigla MAC? a) Media Assynchronous Connection b) Master Assynchronous Connection c) Media Access Connection d) Media Access Control e) Master Access Control

2. Que endereo de rede no roteado na internet? a) 128.9.0.0 b) 10.0.0.0 c) 191.168.72.0 d) 171.20.20.0 e) 8.0.0.0 3. So mscaras padro de redes classe A, B e C: a) 0.0.0.255, 0.0.255.255, 0.255.255.255 b) 0.0.0.0, 0.0.0.255, 0.0.255.255 c) 255.0.0.0, 255.255.0.0, 255.255.255.0 d) 0.0.0.0, 255.0.0.0, 255.255.0.0 e) 255.255.255.0, 255.255.0.0, 255.0.0.0

3 CONECTANDO REDES
Adaptado de
<http://www.conectiva.com/doc/livros/online/8.0/servidor/conectividade.html#CONECTANDOREDES>

A criao de grandes redes de computadores possvel graas interligao de pequenas redes de computadores. No entanto, essa diviso de redes em pequenas unidades gera a necessidade de se criar meios que permitam que essas unidades sejam capazes de se conectar e trocar informaes. Alm dos meios fsicos (cabos, hubs, roteadores, etc.) so necessrios tambm os meios lgicos que permitam essa troca de informao. Sero estudados a seguir os conceitos bsicos sobre roteamento, e em seguida ser visto um tipo particular de roteamento chamado NAT (Network Address Translation).

3.1 Roteamento
Para entender melhor como funciona o processo de transmisso de um pacote de dados dentro de uma rede, pode ser feita uma analogia com o processo de uma ligao telefnica. Ao se discar o nmero do telefone com quem se deseja falar, a sua central telefnica verifica se o nmero est conectado a ela, se no estiver ela "encaminha" a sua ligao para outra central que por sua vez faz o mesmo teste, at chegar a central onde se localiza o nmero de destino. Os cdigos de pas, rea e o prefixo do telefone so utilizados para determinar para qual central sua ligao deve ser encaminhada. Cada central por onde a ligao passa, alm de decidir para onde encaminhar a ligao, funciona tambm como uma espcie de retransmissora ao receber sua ligao de uma central e repassla para outra. Um processo bastante semelhante acontece em uma rede de computadores, ou seja, quando um computador tenta se comunicar com outro que no esteja diretamente ligado a ele (ou em sua sub-rede), ele deve enviar seus datagramas para uma mquina especial, ligada a duas ou mais redes e que encaminhar os datagramas para o destino. Essa mquina especial recebe o nome de gateway ou roteador, e ao processo de decidir para onde repassar os datagramas chamamos de roteamento. A idia bsica do roteamento a criao de regras que estabeleam que caminho um datagrama deve tomar baseado no endereo de destino dele. Em uma mquina cliente essa regra bastante simples: tudo que no for para a rede local deve ser enviado para a mquina gateway (essa regra chamada rota padro). J em uma mquina gateway podem ser necessrias muito mais regras, principalmente se essa mquina est conectada a um grande nmero de redes.

3.1.1 Rotas estticas e dinmicas


Existem dois tipos de rotas que podem ser utilizadas por um roteador: rotas

estticas e dinmicas. As rotas estticas so explicitamente configuradas pelo administrador, enquanto que as rotas dinmicas podem ser "aprendidas" atravs da utilizao de um servio especial para esse fim. As rotas dinmicas utilizam protocolos especiais como o RIP (Routing Information Protocol <http://www.conectiva.com/doc/livros/online/8.0/servidor/>), OSPF (Open Shortest Path First) e BGP (Border Gateway Protocol) para divulgar e aprender rotas. O Linux possui o servio routed que capaz de utilizar estes protocolos. As rotas estticas podem ser configuradas com o auxlio do Linuxconf, e no necessitam de nenhum servio adicional. Ser visto aqui apenas a configurao de rotas estticas, j que a utilizao de rotas dinmicas normalmente s necessria em grandes redes e Sistemas Autonmos (AS).

3.1.2 Gateway
Um gateway ou roteador funciona como uma porta de sada de uma rede; ele um mquina equipada com duas ou mais interfaces ou dispositivos de rede e capaz de fazer o repasse de datagramas para fora ou para dentro da rede. Essa mquina possui diferentes nmeros IPs associados a cada interface. O Linux capaz de decidir automaticamente por qual interface de rede ele deve enviar datagramas baseado nos IPs de cada interface e na definio da rota padro. Existem alguns casos nos quais necessrio informar ao seu gateway como alcanar uma determinada rede, por exemplo, no caso dessa rede estar por trs de um outro gateway. Para esses casos especiais necessrio inserir uma rota esttica para esta rede (caso no se esteja usando um servio de rotas dinmicas).

3.2 Netfilter
O kernel do Linux possui recursos bastante sofisticados para filtrar e transformar pacotes IP. Esses recursos, agrupados sob o nome de netfilter, podem ser configurados com o auxlio do comando iptables. O netfilter permite a construo de firewalls e de gateways com NAT (Network Address Translation). O site oficial do netfilter <http://netfilter.gnumonks.org/>. Sero estudados aqui os conceitos bsicos do netfilter e como utilizar o recurso de NAT.

3.2.1

Anatomia do netfilter

O netfilter possui um conjunto de ganchos (tambm chamados de cadeias ou chain) em vrios pontos da pilha de um protocolo (ser considerado aqui somente o protocolo IPv4). Cada gancho um ponto no caminho que um pacote IP percorre ao entrar ou sair de uma mquina, conforme a figura abaixo: O gancho PRE-ROUTING est ligado entrada de pacotes na mquina; aps a deciso de roteamento os pacotes que no so destinados mquina local atravessam o gancho FORWARD e finalmente saem da mquina passando pelo gancho POST-ROUTING. O gancho INPUT atravessado pelos pacotes que chegam com destino mquina local enquanto que o gancho OUTPUT utilizado pelos pacotes originados na mquina local. Para filtrar ou transformar pacotes IP, o netfilter possui estruturas chamadas tabelas, que se ligam a conjuntos de ganchos. Essas tabelas so implementadas atravs de mdulos do kernel. Por padro o kernel possui trs tabelas: filter, nat e mangle. Cada tabela possui regras ligadas a cada um dos ganchos usados por ela. Estas regras podem ser criadas pelo administrador, de acordo com suas necessidades (isto , um firewall, NAT, etc.). Cada regra especifica um padro ou critrio a ser comparado com pacotes IPs e um alvo, ou o que fazer com cada pacote que casa com o padro especificado. Os alvos podem ser aes prdefinidas de cada tabela, como por exemplo, DROP ou MASQUERADE, que, respectivamente, descartam ou mascaram um pacote, ou ainda uma outra regra. A tabela nat, que ser utilizada a seguir, est ligada aos ganchos PREROUTING, POST-ROUTING e OUTPUT.

3.2.2 NAT
Os nmeros IPs da Internet so finitos e cada nmero deve ser nico. O crescimento explosivo da Internet tem transformado estes nmeros em um recurso escasso, e para se obter um nmero ou conjunto de IPs vlidos necessrio requisit-los a um rgo regulador e pagar por eles. Logo, em muitos casos no se justifica construir redes locais utilizando-se nmeros IPs vlidos. Como alternativa certos intervalos de nmeros IPs so considerados invlidos, isto , no so utilizados na Internet, permitindo assim que eles possam ser utilizados em intranets sem problemas, ou seja, vrias intranets podem utilizlos desde que no estejam diretamente conectadas umas s outras. No entanto, isso cria um dilema: como conectar uma intranet que utiliza nmeros IPs invlidos Internet? A resposta a essa pergunta atravs da utilizao de um roteador que possua um nmero IP vlido e que seja capaz de fazer uma traduo de endereos de rede (NAT). Para entender melhor o que isso significa considere o seguinte cenrio: uma rede local ligada Internet atravs de um roteador com conexo discada. Ao se conectar na Internet, a mquina gateway recebe um nmero IP vlido do provedor de acesso. Quando uma mquina da intranet precisa se conectar a um site (por exemplo), ela envia seus pacotes IPs com a requisio mquina gateway, que por sua vez altera os cabealhos destes pacotes inserindo o nmero IP que ela recebeu do provedor e os envia atravs de sua conexo. O site responde requisio enviando a resposta para a mquina gateway que altera novamente os cabealhos dos pacotes e os envia mquina que originalmente os requisitou. Dessa forma, cada mquina da intranet se comporta como se estivesse ligada diretamente Internet, enquanto que as vrias mquinas na Internet "enxergam" apenas a sua mquina gateway. 3.2.2.1 Tipos de NAT possvel dividir o NAT em dois tipos: o NAT de origem (SNAT) e o NAT de destino (DNAT). O NAT de origem quando voc altera o endereo de origem de um pacote, isto , a conexo passa a ter um outro endereo de origem. Esse tipo de NAT sempre criado utilizando-se o gancho POSTROUTING, logo antes do pacote sair da mquina. O mascaramento (como tambm conhecido) uma forma de SNAT. O NAT de destino se caracteriza pela alterao do endereo de destino do pacote, isto , alterando o destino de uma conexo que passa pela mquina. Este tipo de NAT sempre criado utilizando-se o gancho PRE-ROUTING. Balanceamento de carga, proxys transparentes e repasse de portas so tipos de DNAT.

3.2.3 Implementao de um servio NAT


Um servio de NAT necessrio em solues de Conexo Discada, mas pode ser utilizado tambm como uma forma de aumentar a segurana de uma

intranet, uma vez que ele "esconde" as mquinas da rede mostrando para o resto do mundo apenas a mquina gateway.

4 VULNERABILIDADES NO PROTOCOLO TCP/IP


Ultimamente temos presenciado um novo fenmeno no underground digital. O fenmeno em si no novo, mas tornou-se muito fcil acessar as ferramentas necessrias para fazer ms aes, temos experimentado muitas instncias.O fenmeno conhecido por diferentes nomes (Smurph, Land, Bonk,etc). O intuito de todos, contudo, o mesmo: impedir computadores desabilitando seu uso como pretendido. Esse captulo tenta explicar esses ataques.

4.1

Disponibilidade dos dados

Podemos dividir a segurana dos dados em trs partes diferentes: integridade, confidencialiade e disponibilidade. Se algum, que no autorizado, gerencia e muda seus dados, a integridade comprometida. Voc no poder mais acreditar que o valor dessa informao verdadeiro. A confidencialidade da sua informao comprometida se uma pessoa for capaz de entrar no seu computador. Se puder conhecer uma informao a qual no se pretendia que essa pessoa conhecesse. Ela poder tambm distribuir a informao. A ltima categoria - disponibilidade - onde os ataques aqui discutidos pertencem. A disponibilidade dos dados importante no decorrer dos negcios e grandes perdas podem ocorrer se a informao importante no estiver disponvel devido a um ataque contra um computador. Tais ataques so frequentemente chamados de "Denial-of-Service" (DoS).

4.2

Sobre o protocolo TCP/IP

Todos os ataques discutidos aqui se beneficiam de vulnerabilidades na implementao do protocolo TCP/IP visando a interrupo da atividade do computador atacado. Para entender os ataques necessrio um conhecimento bsico de como o protocolo foi projetado para funcionar. TCP/IP uma abreviao de Transmission Control Protocol/Internet Protocol e um dos vrios protocolos desenvolvidos pelo Departamento de Defesa dos Estados Unidos no final da dcada de 70. A razo pela qual o protocolo foi desenhado era a necessidade de construir uma rede de computadores capaz de se conectar com outra rede do mesmo tipo (roteamento). Essa rede chamou-se ARPANET (Advanced Research Project Agency Internetwork), e a irm mais nova da Internet. Antes de ler sobre os ataques, recomendo que voc leia a seo sobre TCP/IP.

4.3

IP Spoofing

Um ataque spoofing envolve a falsificao do endereo de origem. o ato de usar uma mquina para representar o papel de outra. A maioria das aplicaes e ferramentas no UNIX baseam-se na autenticao do IP de origem. Muitos programadores tm usado controle de acesso baseado na mquina para segurana das suas redes. O endereo IP de origem um identificador nico mas no fivel. Ele pode facilmente ser forjado (spoofed). Para entender o processo de spoofing, Primeiro vou explicar o o processo de autenticao do TCP e do IP e depois como um atacante pode enganar a sua rede. O sistema cliente comea por enviar uma mensagem SYN para o servidor. O servidor ento confirma a mensagem SYN enviando uma mensagem de SYNACK para o cliente. O cliente ento completa estabelecendo a conexo respondendo com uma mensagem de ACK. A conexo entre o cliente e o servidor ento aberta, e os dados especficos do servio podem ser trocado entre o cliente e o servidor. Cliente e servidor podem agora enviar dados especficos do servio. O TCP usa nmeros seqenciais. Quando um circuito virtual estabelecido entre duas mquinas, o TCP designa para cada pacote um nmero com um ndice identificador. Amboa as mquinas usam este nmero para verificarem erros e fazerem relatrios. Rik Farrow, no seu artigo "Sequence Number Attacks", explica o sistema de nmeros seqenciais como sendo o seguinte: "Os nmeros seqenciais so usados para confirmar a recepo de dados. No incio de uma ligao TCP, o cliente envia um pacote TCP com uma nmero seqencial inicial, mas nenhum reconhecimento. Se existir um servidor de aplicao a correr na outra ponta da ligao, o servidor envia de volta um pacote TCP com o seu prprio nmero seqencial, e o reconhecimento; o nmero inicial do pacote do cliente mais um. Quando o sistema cliente recebe este pacote, ele deve enviar de volta o seu prprio reconhecimento; a sequncia de nmero inicial do servidor mais um." Desta forma um atacante tem dois problemas: 1) Ele deve falsificar o endereo origem. 2) Ele deve manter um nmero seqencial com o destino. A segunda tarefa a mais complicada porque quando o destino ajusta o nmero seqencial inicial, o agressor deve responder corretamente. Assim que o agressor adivinhe o nmero seqencial correcto, pode ento sincronizar com o destino e estabelecer uma sesso vlida.

4.3.1 Servios vulnerveis ao IP Spoofing:


Configuraes e servios que so vulnerveis ao IP spoofing :

RPC (Servios de Invocao Remota de Funes) Qualquer servio que use autenticao de endereo IP O sistema X Window O conjunto de servios R (rlogin, rsh, etc.)

4.3.2 Medidas para se prevenir de ataques IP Spoofing:

Evite usar autenticao de endereo de origem. Implemente criptografia na autenticao em todo o sistema. Configure a sua rede para rejeitar pacotes de redes externas que declaram ser de um endereo local. Isto geralmente feito com um router. Se voc permitir ligaes externas de mquinas seguras, possibilite encriptao da sesso no router.

4.4

Sobre os ataques

Os ataques descritos nesse documento so apenas alguns dos que esto disponveis na Internet. Seu denominador comum que todos usam vulnerabilidades ou implementaes errneas do protocolo TCP/IP ou ainda, vulnerabilidades na especificao do TCP/IP em si. Qualquer um mais interessado pode dar uma olhada no site www.rootshell.com <http://www.rootshell.com/> que descreve vrios ataques. Esse site tambm tem links para download de programas que protegem contra esses ataques. Todos os ataques descritos abaixo funcionam em computadores com Windows for Workgroups, Windows 95 ou Windows NT . Podem tambm funcionar para outros sistemas operacionais. Uma vez mais indico www.rootshell.com <http://www.rootshell.com/> para uma lista completa de ataques que funcionam em diferentes sistemas operacionais.

4.4.1 SYN Flooding


Esta a famlia dos ataques DoS (Denial-of-Service) que usa variaes da mesma tcnica. O ataque realizado enviando uma stream de pacotes para o computador alvo requisitando uma conexo (a flag SYN setada). A cada vez que o computador alvo recebe tal requisio, recursos so alocados - mas nenhuma conexo efetivada. Quando muitas requisies so recebidas o computador alvo no pode mais alocar recursos para o trfego da rede - como resultado o computador pode parar.

4.4.2 Land
Aqui o ataque acontece enviando-se um pacote com a flag SYN setada (i.e. requisitando a abertura de uma conexo) para qualquer porta da mquina alvo. O pacote modificado de tal maneira que os endereos de envio e de recebimento do pacote so idnticos (spoofing). Essa situao no corretamente manipulada por algumas implementaes do TCP/IP - o computador pra. Esse ataque direcionado porta 139 de mquinas rodando o sistema operacional Windows.

4.4.3 WinNuke
O nuke tem sido uma atividade popular, principalmente em escolas. Esse tipo de ataque voltado principalmente para computadores rodando Windows. O efeito principal o congelamento do computador, que precisa ser reiniciado. A razo pela qual o computador trava que a Microsoft no manipula um flag especial de status no protocolo TCP - a flag URG(para urgente). Esse flag setado em um pacote enviado para um computador rodando um sistema operacional Windows. O computador ir esperar por uma stream (cadeia de dados) da chamada Out-of-Band (OOB) banda de trfego do computador que envia. Esse tipo de trfego tem prioridade mais alta que o trfego ordinrio da rede. O problema surge quando tais mensagens no so enviadas: o computador para. Parece que se trata de resultado de uma m implementao do protocolo TCP/IP da Microsoft, onde essa situao no tratada satisfatoriamente. Esse ataque muito simples de ser realizado (utiliza um canal legtimo)tem sido at mesmo implementado com uma linha de cdigo na linguagem Perl. Normalmente, o ataque direcionado contra a porta 139 (Servio NetBIOS Session) do computador. Por exemplo: suponhamos que um computador com IP 200.133.10.126 esteja com a porta 139 aceitando conexes. Na barra de endereos do Browser, podemos digitar: <http://200.133.10.126:139> e se ficarmos atualizando a pgina, estaremos atacando essa mquina. Um simples JavaScript pode automatizar essa tarefa. Felizmente, fcil proteger um computador contra esse tipo de ataque. A Microsoft desenvolveu patches para download. Quando esse patches so instalados, voc est protegido contra esse tipo de ataque.

4.4.4 TearDrop
Esse ataque utiliza outra vulnerabilidade na implementao do protocolo TCP/IP. O resultado desse ataque pode variar, mas, normalmente o computador trava e precisa ser reiniciado. Os sistemas operacionais mais vulnerveis so Windows(95/98/NT) e Linux. A razo pela qual o ataque acontece deve-se a um erro em parte do protocolo TCP/IP que toma conta de pacotes fragmentados. A fragmentao do

pacote pode ocorrer se o pacote que est sendo recebido for maior do que o tamanho permitido pela rede. Caso positivo, o pacote dividido em pacotes menores, consistindo em partes do pacote original. Quando os pacotes menores chegam ao computador recipiente, ele tenta coloc-los juntos -aqui ocorre o erro e o computador pra. Tecnicamente, o ataque conduzido mandando uma combinao especial de dois pacotes UDP/IP. O primeiro tem deslocamento 0, a flag MF (mais fragmentos) setada para 1 e tamanho N. O segundo tem deslocamento menor que N, flag MF resetada para 0 e tamanho menor que N. O segundo pacote sobrepes-se ao primeiro. Uma implementao errnea do TCP/IP interpreta o fim do pacote antes do seu comeo e o computador pra.

4.4.5 NewTear
Esse ataque parecido com o TearDrop. A diferena o tamanho da sobreposio dos pacotes (20 bytes, enquanto o TearDrop usa 28) e a manipulao do tamanho do UDP. Esse ataque funciona contra mquinas rodando Windows95/98 e NT mesmo que o patch TearDrop esteja instalado, o que demonstra que a Microsoft no levou as variaes do ataque em conta quando o patch foi programado.

4.4.6 Bonk/Boink
Outra variao do ataque TearDrop. O deslocamento do fragmento do segundo pacote ajustado para ser maior do que o comprimento do cabealho IP. Semelhante aos outros ataques, o computador pra. No se sabe porqu esse ataque funciona. O Bonk ataca a porta 55 das mquinas. O Boink uma variao do Bonk a diferena que esse ltimo permite ataques em outras portas, alm da 55.

4.4.7 Ssping
Uma variao do ataque chamado "Ping da Morte". Uma pessoa manda um pacote ICMP (ECHO_REQUEST) com um tamanho anormal para a mquina alvo. O tamanho mximo para datagramas TCP/IP 65536 octetos (1 octeto = 8 bits). Contudo, possvel mandar datagramas maiores do que o tamanho mximo definido. Quando a mquina alvo recebe tal pacote pode parar. Mais uma vez, o erro deve-se a m implementao na seco do TCP/IP que manipula pacotes fragmentados. Um teste simples para testar se voc vulnervel pingar seu prprio computador. Use o comando ping -s 65510 seu_ip. Se sua mquina parar voc vulnervel a esse tipo de ataque.

4.4.8 Smurf
Smurfing outro tipo de ataque semelhante aos que foram discutidos aqui. Esse tipo de ataque Smurf pode ser considerado mais perigoso que os outros. O ataque Smurf no tem inteno de parar um computador, mas sim uma rede inteira. realizado enviando contnuas stream (cadeias) de pacote ICMP modificados para a rede alvo. Os pacotes so modificados de modo que o endereo da mquina que envia os dados idntico ao endereo do alvo (spoofing). Alm disso, os pacotes so enviados para os chamados endereos broadcast, o que resulta em os pacotes modificados serem enviados para todos os computadores de uma rede. Os computadores dessa rede iro responder enviando uma mensagem de ICMP ECHO_RESPONSE para o computador que eles assumem ter enviado a mensagem ( o computador alvo da rede).Se o atacante tiver uma conexo rpida,no preciso ser um grande matemtico para saber que a quantidade de dados gerados pode parar a rede atacada. A rede ir parar at que o atacante pare de enviar os pacotes ou o trfego seja bloqueado. Esse tipo de ataque tem sido usado para parar vrios Provedores de Acesso Internet e todos os seus usurios. Efetivamente, difcil se proteger desse tipo de ataque.

5 FIREWALL IPCHAINS
Adaptado do Linux IPCHAINS-HOWTO, Paul Russell, <ipchains@rustcorp.com <mailto:ipchains@rustcorp.com>>, v1.0.7, 12 March 1999 Traduo para o portugus por Gleydson Mazioli da Silva, <gleydson@linuxbr.com.br <mailto:gleydson@linuxbr.com.br>>

5.1 Introduo
Este o Linux IPCHAINS-HOWTO; Veja Onde? para o ver site principal, que contm a ltima cpia. Voc tambm deve ler o Linux NET-3-HOWTO. O IPMasquerading HOWTO, o PPP-HOWTO, o Ethernet-HOWTO e o Firewall HOWTO que podem ser uma leitura interessante. (Ento denovo a FAQ alt.fan.bigfoot). Se a filtragem de pacotes passado para voc, leia a seo Porque?, Seo Como? e verifique os ttulos na seo IP Firewalling Chains. Se voc esta convertendo atravs do ipfwadm, leia a secao Introduo, Seo Como?, e os Apndices da seo Diferenas entre ipchains e ipfwadm e a seo Usando o script ipfwadm-wrapper.

5.1.1 O que?
O ipchains do Linux uma regravao do codigo de firewall IPv4 do linux (que foi originalmente roubado do BSD) e uma regravao do ipfwadm, que foi uma regravao do ipfw dos BSDs, eu acho. requerido para administrar os filtros de pacotes IP nos kernels do linux 2.1.102 e superiores.

5.1.2 Por que?


O antigo codigo do firewall do Linux no negociava com fragmentos, tinha contadores de 32 bits (no Intel no mnimo), no permitia especificao de outros protocolos seno TCP, UDP ou ICMP, no faziam grandes alteraes dinmicamente, no especificava regras contrrias, possuia alguns truques, e dificil de gerenciar ( podendo causar erros do usurio).

5.1.3 Como?
Atualmente o cdigo est no kernel em desenvolvimento do 2.1.192. Para as sries do kernel 2.0, voc precisar fazer o download de um patch da pgina Internet. Se seu kernel 2.0 mais recente que o patch fornecido, o patch antigo ser OK; esta parte dos kernels 2.0 razoavelmente estvel (eg. o patch do kernel 2.0.34 funciona perfeitamente com o kernel 2.0.35). Desde ento

o patch 2.0 incompatvel com patches do ipportfw e ipautofw, eu no recomendo aplica-los a no ser que voc ralmente necessita da funcionalidade que o ipchains oferece.

5.1.4 Onde?
A pgina oficial The Linux <http://www.rustcorp.com/linux/ipchains> IP Firewall Chains Page

L existe uma lista de discusso para relatar bugs, discusses, desenvolvimento e uso. Entre na lista de discusso enviando uma mensagem contendo a palavra subscribe para <<ipchains-request@rustcorp.com>>. Para enviar E-Mails para a lista use ipchains ao invs de ipchains-request.

5.2 Bsico sobre a filtragem de pacotes


5.2.1 O que ?
Todo o trfego da rede enviado em forma de pacotes. Por exemplo, copiando este pacote (digamos de 50k) pode fazer voc receber 36 ou assim pacotes de 1460 bytes em cada um, (puxando nmeros ao acaso). O inicio de cada pacote diz onde ele esta indo, de onde vem, o tipo do pacote, e outros detalhes administrativos. Isto inicia o pacote e chamado de cabealho (head). O resto do pacote que contm o dado atual sendo transmitido, usualmente chamado de corpo (body). Alguns protocolos, como TCP, que usado para o trafego na web, mail, e logins remotos, usam o conceito de conexo-antes de qualquer pacote com os dados atuais serem enviados, vrios pacotes de configurao (com cabealhos especiais) so trocados dizendo Eu desejo conectar, OK e Obrigado. Ento os pacotes normais so trocados. Uma filtragem de pacotes uma pea de software que olha no cabealho do pacote quando eles passam, e decide o destino de todo o pacote. Ele pode decidir negar o pacote (DENY - ie. descartar o pacote como se ele nunca tivesse o recebido), aceita o pacote (ACCEPT - ie. deixar o pacote seguir adiante), ou rejeitar o pacote (REJECT - como negar, mas avisa a origem do pacote sobre o acontecido). No Linux, a filtragem de pacotes embutida no kernel, e aqui esto algumas coisas que ns podemos fazer com os pacotes, mas o principio geral de olhar o cabealho dos pacotes e decidindo seu destino.

5.2.2 Por que?


quando voc est usando um computador linux para Controle: conectar sua rede interna a outra rede (digo, a Internet) voc tem a oportunidade de permitir certos tipos de trfego, e desativar outros. Por exemplo, o cabealho do pacote contm o endereo de destino do pacote, assim voc pode prevenir pacote de irem para certas partes de fora da rede. Como outro exemplo, eu uso o Netscape para acessar os arquivos Dilbert. L esto anncios da pgina doubleclick.net, e o Netscape desperdia partes do meu tempo copiando-a. Dizendo para o filtro de pacotes no permitir qualquer pacotes para ou de o endereo conhecido por doubleclick.net resolve este problema (l esto meios melhores de se fazer isto). Segurana: quando um computador linux a nica coisa entre o caos da Internet e sua bonita e organizada rede, maravilhoso conhecer como voc pode restringir o que vem batendo em sua porta. Por exemplo, voc pode permitir ir para fora de sua rede, mas voc pode estar preocupado com os conhecidos Ping of Death (ping da morte) que vem de computadores maliciosos de fora. Como outro exemplo, voc pode no desejar que pessoas de fora TELNETiando seu computador linux, embora mesmo que todas suas contas tenham senhas; talvez voc deseja (como muitas pessoas) ser um observador na Internet, e no um servidor (legando ou caso contrrio) -simplesmente no deixe ningum conectar em seu computador, tendo filtros de pacotes rejeitando pacotes de entrada usado para iniciar conexes. Vigilncia: muitas vezes uma mquina mal configurada na rede local pode decidir enviar pacotes para fora da rede. bom dizer ao filtro de pacotes para avisa-lo se alguma coisa de anormal ocorre; talvez voc pode fazer alguma coisa sobre isto, ou talvez voc est simplesmente curioso por natureza.

5.2.3 Como?
5.2.3.1 Um kernel com filtragem de pacotes Voc precisar de um kernel que tem o novo IP firewall chains nele. Voc pode ver ser o kernel que est executando tem isto instalado verificando pelo arquivo /proc/net/ip_FWchains. Se ele existe, seu kernel tem o suporte. Caso contrrio, voc precisar compilar um kernel com o IP firewall chains. Primeiro copie o cdigo fonte do kernel que deseja. Se possui um kernel nmerado 2.1.102 ou maior, voc no precisar aplicar o patch (est na verso principal do kernel agora). Caso contrrio, aplique o patch da pgina web listada acima, e ajuste a configurao como detalhado abaixo. Se voc no sabe como

fazer isto, sem pnico- leia o Kernel-HOWTO. As opes de configurao que precisa configurar para os kernels da srie 2.0 so:
CONFIG_EXPERIMENTAL=y CONFIG_FIREWALL=y CONFIG_IP_FIREWALL=y CONFIG_IP_FIREWALL_CHAINS=y

Para os kernels da srie 2.1 ou 2.2:


CONFIG_FIREWALL=y CONFIG_IP_FIREWALL=y

A ferramenta ipchains fala com o kernel e diz a ele quais pacotes filtrar. A no ser que voc seja um programador, ou curioso demais, assim voc controlar a filtragem de pacotes. 5.2.3.2 O ipchains A ferramenta ipchains insere ou deleta regras da seo de filtragem de pacotes do kernel. Isto quer dizer que qualquer coisa que voc configurar, ser perdida na reinicializao; veja Fazendo Regras Permanentes para como fazer as regras serem restauradas quando o Linux iniciado. O ipchains substitui o ipfwadm, que foi usado pelo antigo cdigo de firewall de IP. H um conjunto de scripts teis disponveis no site ftp do ipchains: <ftp://ftp.rustcorp.com/ipchains/ipchains-scripts-1.1.2.tar.gz> Este contm um script shell chamado ipfwadm-wrapper que permite fazer a filtragem de pacotes como fez antes. Voc provavelmente no deve usar este script a no ser se deseje fazer um mtodo rpido de upgrade em um sistema que usa o ipfwadm (ele lento, no checa argumentos, etc). Neste caso, voc no precisa muito deste HOWTO. Veja Apndice Diferenas entre ipchains e ipfwadm e Apndice Usando o script ipfwadm-wrapper para um assunto mais detalhado sobre ipfwadm. 5.2.3.3 Fazendo regras permanentes Sua configurao atual do firewall armazenada no kernel, e assim ser perdida na reinicialziao. Eu recomendo usar os scripts ipchains-save e ipchains-restore para fazer estas regras permanentes. Para fazer isto, configure suas regras, ento execute (como root):

# ipchains-save > /etc/ipchains.rules

Crie um script parecido com o seguinte:


#! /bin/sh # Script para controlar a filtragem de pacotes. # Se no existir regras, no faz nada. [ -f /etc/ipchains.rules ] || exit 0 case $1 in start) echo -n Ativando a filtragem de pacotes: /sbin/ipchains-restore < /etc/ipchains.rules || exit 1 echo 1 > /proc/sys/net/ipv4/ip_forward echo . ;; stop) echo -n Desativando a filtragem de pacotes: echo 0 > /proc/sys/net/ipv4/ip_forward /sbin/ipchains -X /sbin/ipchains -F /sbin/ipchains -P input ACCEPT /sbin/ipchains -P output ACCEPT /sbin/ipchains -P forward ACCEPT echo . ;; *) echo Use: /etc/init.d/packetfilter {start|stop} exit 1 ;; esac exit 0

Tenha certeza que isto est antes no processo de inicializao. No meu caso (Debian 2.1), eu fiz um link simblico chamado S39packetfilter em meu diretrio /etc/rcS.d (isto ser executado antes de S40network).

5.3 Roteamento, masquerading, portforwarding, ipautofw...


Este HOWTO sobre filtragem de pacotes. Isto quer dizer decidindo que pacote ter permisso de passar ou no. No entanto, o Linux est sendo um parque de diverses para hackers, voc provavelmente desejar mais do que isso. Um problema que a mesma ferramenta (ipchains) usada para controlar tanto o masquerading e transparent proxy, embora estejam nacionalmente separados da filtragem de pacotes (a implementao atual do Linux obscurece estes junto no naturalmente, deixando a impresso que eles

foram descontinuados). Masquerading e proxying so discutidos em HOWTOs separados, e as caractersticas auto forwarding e port forwarding so controladas por ferramentas separadas, mas mesmo assim muitas pessoas me perguntam sobre elas, eu tambm vou incluir diversos cenrios comuns e indicar quando cada um deve ser aplicado. Os mritos de segurana de cada configurao no sero discutidos aqui.

5.3.1 Guia rpido de trs linhas para Masquerading


Isto assume que sua interface externa chamada ppp0. Use ifconfig para acha-la, e ajuste ao guia.
# ipchains -P forward DENY # ipchains -A forward -i ppp0 -j MASQ # echo 1 > /proc/sys/net/ipv4/ip_forward

5.3.2 Configuraes de firewall simples


Voc trabalha na littlecorp.com. Voc tem uma rede interna, e uma conexo dialup (PPP) simples com a Internet (firewall.littlecorp.com que 1.2.3.4). Voc usa Ethernet em sua rede local, e sua mquina pessoal chamada myhost. Esta seo ilustrar os diferentes arranjos no qual so comuns. Leia com ateno porque cada um sutilmente diferente. 5.3.2.1 Rede Pblica Neste cenrio, sua rede pessoal uma parte da Internet: pacotes pode seguir sem alteraes atravs de ambas as redes. O endereo IP da rede interna deve ser escolhido aplicando por um bloco de endereos IP, assim o resto da rede conhecer como obter pacotes para voc. Isto implica em uma conexo permanente. Neste cenrio, a filtragem de pacotes usada para que pacotes podem ser direcionados entre sua rede e o resto da internet, eg. para restringir o resto da internet para somente acessar seus servidores web internos. Exemplo: Permitindo acesso web de sua rede privada para a Internet. 1. Sua rede interna configurada de acordo com os blocos de endereos IP que possui registrados, (digamos 1.2.3.*). 2. O firewall est configurado para permitir qualquer trfego.

3. Netscape est configurado para conectar diretamente. 4. DNS deve estar configurado corretamente em sua rede. 5. O firewall deve ser a rota padro (gateway) para sua rede privada. Netscape em myhost l <http://slashdot.org>. 1. Netscape procura o nome slashdot.org, e obtm 207.218.152.131. Ele ento abre uma conexo para aquele endereo IP, usando a porta local 1050, e pergunta do servidor web (porta 80) pela pgina web. 2. Pacotes passam atravs do firewall, simplesmente como passam atravs de diversos firewalls entre voc e slashdot.org. 3. Netscape desenha a pgina.

ie. Aqui existe somente uma conexo: de 1.2.3.100 (myhost) porta 1050, para 207.218.152.131 (slashdot.org) porta 80. 5.3.2.2 Rede Privada: Masquerading Neste cenrio, pacotes da rede privada nunca atravessam a Internet sem um tratamento especial, e vice versa. O endereo Ip da rede privada devem ser escolhidos de acordo com o RFC1597 Private Network Allocations (ie. 10.*.*.*, 172.16.*.* or 192.168.*.*). Ao invs de usar um proxy, ns usamos facilidades especiais do kernel chamadas masquerading. Masquerading regravam pacotes quando passam atravs do firewall, assim eles sempre parecem vir do prprio firewall. Ele ento re-escreve as respostas assim eles pareceram estar indo para o recipiente original. Masquerading possui mdulos separados para manipular protocolos enganados, como FTP, RealAudio, Quake, etc. Para procolos realmente difceis de manipular, a facilidade auto forwarding pode manipular muitos destes configurando automticamente o forward de portas para configuraes de portas relacionadas: procure por ipportfw (kernels 2.0) ou ipmasqadm (kernels 2.1). Quaisquer servios que voc deseja acessar na Internet deve estar no firewall. (Mas veja Servios Internos Limitados abaixo). Exemplo: Permitindo acesso web da rede privada com a Internet. 1. A rede privada possui endereos 192.168.1.*, com myhost sendo

192.168.1.100, e a interface Ethernet do firewall sendo 192.168.1.1.

2. O firewall configurado para masquerade (mascarar) qualquer pacotes vindo da rede privada e indo para a porta 80 de um host da internet. 3. 4. 5. Netscape est configurado para conectar diretamente. DNS deve ser configurado corretamente na rede privada. O firewall deve ser a rota default (gateway) para a rede privada.

Netscape em myhost l <http://slashdot.org>. 1. Netscape procura o nome slashdot.org, e obtm 207.218.152.131. Ele ento abre uma conexo para aquele endereo IP, usando a porta local 1050, e pergunta ao servidor web (porta 80) pela pgina web. 2. Como os pacotes de myhost (porta 1050) para slashdot.org (porta 80) passam atravs do firewall, eles so regravados para virem da interface PPP do firewall, porta 65000. O firewall possui um endereo Internet vlido (1.2.3.4) assim responde pacote de slashdot.org. 3. Como pacotes de slashdot.org (porta 80) para firewall.littlecorp.com (port 65000) vem, eles so regravados para irem para myhost, porta 1050. Esta a mgica real do masquerading: ele relembra quando ele regravou pacotes enviados para regrar as respostas quando retornarem. 4. Netscape desenha a pgina.

ie. Do ponto de vista de slashdot.org, a conexo feita de 1.2.3.4 (interface PPP do firewall) porta 65000 para 207.218.152.131 (slashdot.org) porta 80. Do ponto de vista de myhost, a conexo feita de 192.168.1.100 (myhost) porta 1050, para 207.218.152.131 (slashdot.org) porta 80. 5.3.2.3 Rede Privada: Proxies Transparentes Neste cenrio, pacotes da rede privada nunca atravessam a Internet e vice versa. O endereo IP da rede privada deve ser escolhido de acordo com o RFC1597 Private Network Allocations (ie. 10.*.*.*, 172.16.*.* or 192.168.*.*). O nico meio de conectar com a internet conectando com o firewall, que a nica mquina entre as duas redes e que conectam ambas. Voc executa um programa (no firewall) chamando um proxy transparente para fazer isto; o kernel envia pacotes de sada para o transparent proxy ao invs de envia-los adiante (ie. ele abastarda o roteamento). Proxyes transparentes querem dizer que o cliente no precisa saber que h um proxy envolvido. Qualquer servio que desejar acessar na Internet deve estar no firewall. (Mas veja Servios Internos Limitados abaixo).

Exemplo: Permitindo acesso web da rede privada para a Internet. 1. A rede privada usa endereos 192.168.1.*, com myhost sendo 192.168.1.100, e a interface Ethernet do firewall sendo 192.168.1.1. 2. Um proxy web transparente (eu acredito que existem patches para squid para permitir ele operar desta maneira, ou tente transproxy) instalado e configurado no firewall, digo executando na porta 8080. 3. O kernel esta configurado para redirecionar conexo para a porta 80 do proxy, usando ipchains. 4. Netscape diretamente. na rede privada est configurado para conectar

5. DNS precisa estar configurado na rede privada (ie. executar um servidor DNS como um proxy no firewall).

voc precisa

6. A rota default (gateway) precisa estar configurado na rede privada, para enviar pacotes para o firewall. Netscape em myhost l <http://slashdot.org>. 1. Netscape localiza o nome slashdot.org, e obtem 207.218.152.131. Ele abre uma conexo para aquele endereo IP, usando a porta local 1050, e pergunta ao servidor web (porta 80) pela pgina web. 2. Como os pacotes de myhost (porta 1050) para slashdot.org (porta 80) passam pelo firewall, eles so direcionados para proxy transparente aguardando na porta 8080. O proxy transparente abre uma conexo usando (usando a porta local 1025) com 207.218.152.131 porta 80 (que aqui onde os pacotes originais esto indo). 3. Como o proxy recebe a pgina web de sua conexo com o servidor web, ele copia os dados para a conexo com o Netscape. 4. Netscape desenha a pgina.

ie. Do ponto de vista de slashdot.org, a conexo feita de 1.2.3.4 (interface PPP do firewall) porta 1025 para 207.218.152.131 (slashdot.org) porta 80. Do ponto de vista de myhost, a conexo feita de 192.168.1.100 (myhost) porta 1050, para 207.218.152.131 (slashdot.org) porta 80, mas ele est atualmente falando com o proxy transparente. 5.3.2.4 Rede Privada: Proxies Tradicionais Neste cenrio, pacotes vindo da rede privada nunca atravessam para a Internet, e vice versa. O endereo IP da rede privada usam os endereos de acordo com o RFC1597 Private Network Allocations (ie. 10.*.*.*, 172.16.*.* or

192.168.*.*). O nico meio de se conectar com a Internet conectando com o firewall, que a nica mquina na rede que conectam ambas. Voc executa um programa (no firewall) chamado proxy para fazer isto (h proxies para FTP, acesso Web, telnet, RealAudio, Usenet News e outros servios). Veja o Firewall HOWTO. Qualquer servio que voc deseja acessar na Internet deve estar no firewall (mas veja Servios Internos Limitados abaixo). Exemplo: Permitindo acesso web da rede privada para a Internet. 1. A rede privada usa endereos 192.168.1.*, com myhost sendo 192.168.1.100, e a interface do firewall firewall sendo designada 192.168.1.1. 2. Um proxy web (eg. squid) est instalado e configurado no firewall, digo executando na porta 8080. 3. Netscape na rede privada est configurado para usar a porta 8080 do firewall como um proxy. 4. 5. 6. privada. DNS no precisa ser configurado na rede privada. DNS no precisa estar configurado no firewall. Sem rota padro (gateway) necessitando ser configurado na rede

Netscape em myhost l <http://slashdot.org>. 1. Netscape conecta-se com o firewall na porta 8080, usando a porta 1050 em myhost. Ele pergunta pela pgina internet <http://slashdot.org>. 2. O proxy procura o nome slashdot.org, e obtm 207.218.152.131. Ele abre uma conexo com aquele endereo IP (usando a porta 1025 na interface externa do firewall), e pergunta ao servidor web (porta 80) pela pgina web. 3. Como ele recebe a pgina web de sua prpria conexo com o servidor web, ele copia os dados para a conexo do Netscape. 4. Netscape desenha a pgina.

ie. Do ponto de vista de slashdot.org, a conexo feita de 1.2.3.4 (interface PPP do firewall) porta 1025 para 207.218.152.131 (slashdot.org) porta 80. Do ponto de vista de myhost, a conexo feita de 192.168.1.100 (myhost) porta 1050, para 192.168.1.1 (interface Ethernet do firewall) porta 8080. 5.3.2.5 Servios Internos Limitados Existem alguns truques que voc pode usar para permitir a Internet acessar

seus servios internos, em lugar de executar servios no firewall. Estes funcionaro com aproximao baseada em proxy ou masquerading para conexes externas. Uma simples aproximao executar um redirector, que um poor-mans proxy que aguarda por uma conexo em uma determinada porta, e ento abre uma conexo em um porta e host fixo, e copia os dados entre as duas conexes. Um exemplo disto o programa redir. Do ponto de vista da Internet, a conexo feita para seu firewall. Do ponto de vista de seu servidor interno, a coneo feita da interface interna do firewall para o servidor. Outra aproximao (que requer um kernel 2.0 com patch para ipportfw, ou um kernel 2.1 ou superior) usar um port forwarding no kernel. Isto faz o mesmo trabalho que o redir em um mtodo diferente: o kernel regrava os pacotes enquanto passam, alterando seus endereos de destino e portas para apontarem para hosts e portas internas. Do ponto de vista da da internet, a conexo feita para seu firewall. Do ponto de vista de seu servidor interno, uma conexo feita do host Internet para o servidor.

5.3.3 Mais detalhes sobre Masquerading


David Ranch escreveu um excelente novo HOWTO em Masquerading, que tem uma larga quantidade de materiais com este HOWTO. Voc pode atualmente encontrar ete HOWTO em <http://www.ecst.csuchico.edu/~dranch/LINUX/indexLINUX.html#ipmasq> Logo eu iria esperar que isto fosse encontrado em algum lugar do Projeto de documentao do Linux, em <http://www.metalab.unc.edu/LDP> A pgina oficial <http://ipmasq.cjb.net>. do Masquerading est disponvel em

5.4 IP Firewalling Chains


Esta seo descreve tudo o que voc realmente precisa saber para construir um filtro de pacotes que se encaixe em suas necessidades.

5.4.1 Como os pacotes atravessam os filtros


O kernel inicia com trs listas de regras; estas listas so chamadas firewall chains ou simplesmente chains. Os trs chains so chamados input output e forward. Quando um pacote entra (digo, atravs da placa Ethernet) o kernel usa o chain de entrada e decide seu destino. Se ele sobrevive a este passo, ento o prximo passo do kernel decidir onde enviar o pacote (isto chamado roteamento). Se o seu destino for outra mquina, ele consultar o chain forward. Finalmente, antes de simplesmente o pacote ir para fora da rede, o kernel consulta o chain output.

Um chain uma lista de checagem de regras. Cada regra diz se o cabealho do pacote parece com isto, ento aqui esta o que fazer com o pacote. Se a regra no confere com o pacote, ento a prxima regra no chain consultada. Finalmente, se no existem mais regras a consultar, ento o kernel procura no policiamento do chains para decidir o que fazer. Em um sistema consciente em segurana, este policiamento normalmente diz ao kernel para rejeitar ou negar o pacote. Para fans da arte em ASCII, isto mostra o caminho completo do pacote entrando em uma mquina.
| ACEITAR/ interface lo | v REDIRECIONAR _______ | --> S --> ______ --> D --> ~~~~~~~~ -->|forward|----> _______ --> a |input | e {Routing } |Chain | |output |ACEITAR n |Chain | m {Decision} |_______| --->|Chain | i |______| a ~~~~~~~~ | | ->|_______| t | s | | | | | y | q | v | | | | v e v NEGAR/ | | v | NEGAR/ r Processo Local REJEITAR | | NEGAR/ v REJEITAR a | | | REJEITAR NEGAR d --------------------- | e -----------------------------

> C h e c k s u m | | v NEGAR

Aqui est uma descrio passo a passo de cada estgio: Checksum: Este um teste para verificar se o pacote no est corrompido de alguma forma. Se estiver, ele negado. Sanity: Esta atualmente um destas checagens de sanidade antes de cada chain firewall, mas o chain input o mais importante. Muitos pacotes malformados podem deixar o cdigo de checagem de regras confuso, e estes so negados aqui (uma mensagem mostrada no syslog se isto acontecer). input chain: Este o primeiro chain firewall que ser testado contra o pacote. Se a deciso do chain no for NEGAR ou REJEITAR, o pacote passa. Demasquerade: Se o pacote uma resposta de um pacote anterior do masquerade, (mascaramento) ele desmascarado, e pula para o chain output. Se voc no usa o IP masquerading, voc pode ignorar esta parte no diagrama. Routing decision (deciso do roteamento): O campo de destino examinado pelo cdigo de roteamento, para decidir se o pacote deve ir para um processo local (veja processos locais abaixo) ou direcionado (forward) para uma mquina remota (veja forward chains abaixo).

Local process (processo local): Um processo sendo executado em uma mquina pode receber pacotes aps o passo de deciso do roteamento, e pode enviar pacotes (que vo pelo passo de deciso do reteamento, quando atravessam o chain output). interface lo: Se pacotes de um processo locai so desinados a um processo local, eles vo atravs do chain output com a interface configurada para lo, ento retorna pelo chain input tambm com a interface lo. A interface lo normalmente chamada de interface loopback. local: Se o pacote no foi criado por um processo local, ento o chain forward checado, caso contrrio o pacote vai atravs do chain output. forward chain: Este chain usado para qualquer pacote que est tentando passar entre esta mquina para outra. output chain: Este chain usado para todos os pacotes antes de serem enviados para fora.

5.4.1.1 Usando ipchains Primeiro, verifique se voc tem a verso do ipchains que este documento se refere:
$ ipchains-version ipchains 1.3.9, 17-Mar-1999

Note que eu recomendo 1.3.4 (que no possui opes longas, como sport), ou 1.3.8 ou superior; estes so muito estveis. ipchains tem uma pgina de manual razoavelmente detalhada (man ipchains), e se voc precisa de mais detalhes em particularidades, voc deve checar a interface de programao (man 4 ipfw), ou o arquivo net/ipv4/ip_fw.c no cdigo fonte do kernel 2.1.x, que (obviamente) autoritativo. Tambm existem um excelente guia de referncia rpida por Scott Bronson no pacote fonte, em ambas A4 e US Letter PosScript. Existem diferentes outras coisas que voc pode fazer com ipchains. Primeiro operaes para gerenciar chains completos. Voc inicia com trs chains input, output e forward que voce no pode apagar. 1. 2. 3. Criar um novo chain (-N). Deletar um chain vazio (-X). Alterar a poltica de um chain interno (-P).

4. 5. 6. Z).

Listar as regras em um chain (-L). Esvaziar as regras do chain (-F). Zerar os contadores de pacote e byte em todas as regras no chain (-

Existem diversos meios de manipular regras dentro do chain: 1. 2. 3. 4. 5. Adiciona uma nova regra no chain (-A). Insere uma nova na mesma posio no chain (-I). Substitui uma regra na mesma posio no chain (-R). Deleta uma regra na mesma posio no chain (-D). Deleta a primeira regra que confere no chain (-D).

Existem poucas operaes para masquerading, que esto no ipchains que um bom lugar para coloca-las: 1. 2. -S). (Mas veja Eu no posso configurar tempo mximo no masquerade) O funo final (e talvez a mais til) permite a voc checar o que aconteceu com o dado pacote se ele atravessou o chain. 5.4.1.2 Operaes em uma regra Simples Este o po-e-manteiga do ipchains; manipulando regras. Mas especificamente voc ira provavelmene usar os comandos append (-A) e delete (D). os outros (-I para inserir e -R para substituir) so simples extenses nestes conceitos. Cada regra especifica uma cofigurao de condies em que o pacote se encontra, e o que fazer quando a encontra (um alvo). Por exemplo, voc pode desejar negar todos os pacotes ICMP vindo do endereo IP 127.0.0.1. Assim neste caso nossas condies so que o protocolo deve ser ICMP e que o endereo de origem deve ser 127.0.0.1. Nosso alvo NEGAR. Lista de conexes atuais do masquerade (-M -L). Configura os valores de tempo mximo (timeout) do masquerade (-M

127.0.0.1 a interface loopback, que voc tem mesmo se no possuir uma conexo real da rede. Voc pode usar o programa ping para gerar tais pacotes (ele simplesmente envia um ICMP tipo 8 (echo request) com todos os hosts cooperativos que devem servialmente responder com o pacote ICMP tipo 0 (echo reply). Isto til para testes.
# ping -c 1 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=64 time=0.2 ms --- 127.0.0.1 ping statistics --1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.2/0.2/0.2 ms # ipchains -A input -s 127.0.0.1 -p icmp -j DENY # ping -c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes --- 127.0.0.1 ping statistics --1 packets transmitted, 0 packets received, 100% packet loss

Voc pode ver aqui que o primeiro ping se sucede( o -c 1que dizer para o ping enviar somente um pacote simples) Ento ns adicionamos (-A) um chain input, uma regra especificando que para pacotes vindo de 127.0.0.1 (-s 127.0.0.1) com o protocolo ICMP (-p ICMP) devem ser negados (-j DENY). Quando ns testamos nossa regra, usando o segundo ping, Existe uma pausa antes do programa aguardar a resposta que nunca vem. Ns podemos apagar uma regra em um dos dois meios. Primeiro ns conhecemos que esta a nica regra no chain input, ns podemos usar um nmero para apagar, como em:
# ipchains -D input 1

Para apagar a regra nmero 1 no chain input. O segundo meio espelhar o comando -A, mas trocando o -A com -D. Isto til quando voce tem um complexo conjunto de regras e voc no deseja contalas para retirar a regra 37. Neste caso, ns podemos usar:
# ipchains -D input -s 127.0.0.1 -p icmp -j DENY

A sintaxe de -D deve ter exatamente as mesmas opes que os comandos -A (ou -I ou -R). Se existem mltiplas regras idnticas no mesmo chain, somente a primeira ser apagada.

5.4.1.3 Especificaes de Filtragem Voc deve sempre usar -p para especificar um protocolo, e -s para especificar um endereo de origem, mas existem outras opes que ns podemos usar para especificar caractersticas do pacote. O que segue um compndio exaustivo. 5.4.1.3.1 Especificando o endereo IP de origem e Destino Endereos IPs de origem (-s) e destino (-d) podem ser especificados em quatro meios. O meio mais comum usar o nome completo, como localhost ou www.linuxhq.com <http://www.linuxhq.com>. O segundo mtodo especificar o endereo IP como 127.0.0.1. O terceiro e quarto meio permite especificar um grupo de endereos IPs, como 199.95.207.0/24 ou 199.95.207.0/255.255.255.0. Estes dois especificam qualquer endereos IP de 192.95.207.0 para 192.95.207.255 inclusive; os digitos depois da / dizem dizem que a parte do endereo IP significante. /32 ou /255.255.255.255 o padro (abrange todos os endereos IPs). Para especificar qualquer endereo IP, deve ser usado /0, como no exemplo:
# ipchains -A input -s 0/0 -j DENY

Isto raramente usado, como o efeito acima o mesmo como no especificar a opo -s. 5.4.1.3.2 Especificando Inverso Muitas opes, incluindo a -s e -d podem ter seus argumentos seguidos de ! (que significa no) para atingirem endereos NO iguais ao especificado. Por exemplo, -s ! localhost atinge qualquer pacote menos de localhost. 5.4.1.3.3 Especificando o Protocolo O protocolo pode ser especificado com a opo -p. O protocolo pode ser um nmero (se conhecer os valores numricos dos protocolos para IP) ou um nome para casos especiais de TCP, UDP ou ICMP. Caso especificar tcp tambm funcinar como TCP. O nome do protcolo pode usar o prefixo !, para inverter a regra, como -p ! TCP. 5.4.1.3.3.1 Especificando portas UDP e TCP Para casos especiais onde um protocolo TCP ou UDP especificado, existem argumentos extras indicando a porta TCP ou UDP, ou um (exclusivo) faixa de portas (mas veja Dirigindo Fragmentos abaixo). Uma faixa representada pelo caracter :, como 6000:6010, que abrange 11 nmeros de portas, de 6000 para 6010. Se o menor nmero omitido, o padro ser 0. Se o maior nmero for omitido, o padro ser 65535. Assim para especificar conexes TCP vindo de portas abaixo de 1024, a sintaxe deve ser como -p TCP -s 0.0.0.0/0 :1023. Nmeros de portas podem ser especificadas por nomes, eg. www.

Note que a especificao de portas devem ser precedidas por uma !, que inverte a regra. Assim para especificar qualquer pacote TCP menos uma pacote WWW, voc deve especificar p TCP -d 0.0.0.0/0 ! www importante realizar aquela especificao
p TCP -d ! 192.168.1.1 www

muito diferente de
p TCP -d 192.168.1.1 ! www

A primeira especifica qualquer pacote TCP para a porta WWW em qualquer mquina menos 192.168.1.1. O segundo especifica qualquer conexo TCP para qualquer porta em 192.168.1.1 menos a porta WWW. Finalmente, este caso significa no para a porta WWW e no para 192.168.1.1:
p TCP -d ! 192.168.1.1 ! www

5.4.1.3.3.2 Especificando tipo do ICMP Type e Code ICMP tambm permite um argumento opcional, mas como ICMP no possui portas, (ICMP possui tipo e cdigo) eles possuem diferentes significados. Voc pode especifica-los como nomes ICMP (use ipchains -h icmp para listar os nomes) aps a opo -s, ou como um tipo e cdigo ICMP numrico, onde os tipos seguem a opco -s e o cdigo segue a opo -d. Os nomes ICMP so razoavelmente logos: voc somente precisa usar bastante letras para fazer um nome se distinguir de outros. Aqui est um pequena tabela de alguns dos pacotes ICMP mais comuns: Nmero Nome Requerido por 0 echo-reply pong 3 destination-unreachable Qualquer trfego TCP/UDP. 5 redirect se no estiver executando um daemon de roteamento 8 echo-request ping 11 time-exceeded traceroute Note que os nomes ICMP no podem ser precedidos de ! no momento. Ateno: NO, bloqueie as mensagems ICMP do tipo 3! (Veja Pacotes ICMP abaixo) 5.4.1.3.4 Especificando a Interface A opo -i especifica o nome de uma interface para atingir. Uma interface

o dispositivo fsico onde o pacote vem, ou onde vai. Voc pode usar o comando ifconfig para listas as interfaces que esto em up (ie. trabalhando no momento). A interface para pacotes de entrada (ie. pacotes atravessando as regras de entrada) considerada sendo uma interface onde eles vem. Logicamente, a interface para pacotes enviados (pacotes atravessando as regras de sada) a interface onde eles vo. A interface para pacotes atravessando os chains forward tambm a interface onde eles sero enviados para fora; me parece uma deciso bastante arbitrria. perfeitamente legal especificar uma interface que atualmente no existe; a regra no atingir nada at que a interface seja iniciada. Isto extremamente til para conexes PPP dialup (normalmente a interface ppp0). Como um caso especial, um nome de interface finalizando com um + atinge todas as interfaces (at mesmo se existem atualmente ou no) que comeam com aquele string. Por exemplo, para especificar uma regra que atinge todas as interfaces PPP, a opo -i ppp+ pode ser usada. O nome da interface pode ser precedida por uma ! para no atingir pacotes que NO conferem com a interface especificada. 5.4.1.3.5 Especificando somente pacotes TCP SYN muitas vezes til permitir conexes TCP em uma direo, mas no em outra. Por exemplo, voc pode desejar permitir conexes para uma servidor WWW externo, mas no conexes daquele servidor. Uma aproximao ingnua pode ser bloquear pacotes TCP vindo do servidor. Infelizmente, conexes TCP requerem pacotes indo em ambas direes para funcionarem corretamente. A soluo bloquear somente os pacotes usados para requisitar uma conexo. Estes pacotes so chamados SYN (ok, tcnicamente eles so pacotes com a flag SYN configurada, e as flags FIN e ACK limpas, mas ns os chamamos de pacotes SYN). Desativando somente estes pacotes, ns podemos parar tentativas de conexes em seus rastros. A flag -y usada para isto: somente vlida para regras que especificam TCP como seu protocolo. Por exemplo, para especificar tentativas de conexo TCP de 192.168.1.1:
p TCP -s 192.168.1.1 -y

Mais uma vez, esta opo pode ser invertida se for precedida de um !, que diz que cada pacote sem ser a inicializao da conexo. 5.4.1.3.6 Dirigindo Fragmentos As vezes um pacote muito grande para passar de uma s vez. Quando isto acontece, o pacote dividido em framentos, e enviado como mltiplos pacotes. O outro lado remonta os fragmentos para reconstruir o pacote inteiro.

O problema com fragmentos que muitas das especificaess listadas acima (em particular, porta de origem, porta de destino, tipo ICMP, cdigo ICMP, ou opo TCP SYN) requerem que o kernel verifique no inicio do pacote, que o nico que contm o primeiro fragmento. Se sua mquina a nica conectada a uma rede externa, ento voc pode dizer para o kernel do linux para remontar todos os fragmentos dos pacotes que passam atravs dele, compilando o kernel com IP: always defragment (sempre desfragmentar) configurado para Y. Isto ntidamente evita isto. Caso contrrio, importante entender como os fragmentos so tratados pelas regras de filtragem. O primeiro fragmento tratado como qualquer outro pacote. O segundo e os fragmentos seguintes no so. Assim uma regra -p TCP -s 192.168.1.1 www (especificando uma porta de origem de www) nunca atingir um fragmento (do segundo em diante). Nem ser o oposto a regra -p TCP -s 192.168.1.1 ! www. No entanto, voc pode especificar uma regra especificamente para o segundo e outros fragmentos, usando a opo -f. Obviamente, ilegal especificar uma porta TCP ou UDP, tipo ICMP, cdigo ICMP ou a opo TCP SYN em tal regra de fragmento. tambm permitido especificar que uma regra que no se aplica ao segundo e fragmentos seguintes, procedendo -f com !. Normalmente considerado como seguro deixar o segundo e outros fragmentos atravessarem, desde que a filtragem afetar o primeiro fragmento, e assim previne a remontagem no computador de destino, porm, tem sido conhecido bugs para permitir o travamento de mquinas simplesmente enviando fragmentos. Nota para cabeas de rede: pacotes mal formados (TCP, UDP e pacotes ICMP muitos curtos para o cdigo de firewall ler as portas ou cdigo e tipo ICMP) so tratados como fragmentos tambm. Sometne fragmentos TCP iniciando na posio 8 so explicitamente derrubados pelo cdigo do firewall (uma mensagem aparecer no syslog se isto ocorrer). Como um exemplo, a seguinte regra derrubar quaisquer fragmentos indo para 192.168.1.1:
# ipchains -A output -f -d 192.168.1.1 -j DENY

5.4.1.4 Efeitos do Lado da Filtragem OK, agora ns conhecemos todos os mtodos que podemos atingir um pacote usando uma regra. Se um pacote confere com a regra, as seguintes coisas podem acontecer: 1. O contador de byte para aquela regra aumentado pelo tamando do pacote (cabealho e tudo).

2. 3. 4. alterado. 5. 2.0).

O contador de pacotes para aquela regra incrementado. Se a regra o requisitar, o pacote registrado. Se a regra o requisitar, o campo do pacote Type Of Service Se a regra o requisitar, o pacote marcado (no em kernels da srie

6. O alvo da regra examinado para decidir o que fazer com o prximo pacote. Para variedade, todos estas regras esto em ordem de importncia. 5.4.1.4.1 Especificando um alvo Um alvo diz ao kernel o que fazer com um pacote que confere cum uma regra. ipchains usa -j (pense como jump-to - pular para) para a especificao do alvo. O nome do alvo deve ser menor que 8 letras, e case sensitive: RETURN e return so completamente diferentes. O caso mais simples quando no h um alvo especificado. Este tipo de regra (muitas vezes chamado de uma regra de contagem) til para uma contagem simples de certos tipos de pacotes. Se esta regra confere ou no, o kernel simplesmente examina a prxima regra no chain. Por exemplo, para contar o nmero de pacotes de 192.168.1.1, ns podemos fazer isto:
# ipchains -A input -s 192.168.1.1

(Usando ipchains -L -v ns podemos ver os contadores e bytes associados com cada regra). Existem seis alvos especiais. Os primeiros trs, ACCEPT, REJECT e DENY so muito simples. ACCEPT aceita o pacote, DENY bloqueia o pacote, como se nunca o tivesse recebido. REJECT rejeita o pacote, mas (se ele no um pacote ICMP) gera uma resposta ICMP para a origem para dizer que o destino est inalcanavel. A prxima, MASQ diz ao kernel mascarar (masquerade) o pacote. Para isto funcionar, seu kernel precisa estar compilado com IP Masquerading ativado. Para detalhes sobre isto, veja Masquerading_HOWTO e o apndice Diferenas ente ipchains e ipfwadm. Este alvo somente vlido para pacotes atravessando o chain forward. O alvo mais especial REDIRECT que diz ao kernel para enviar um pacote para uma porta local em vez de onde tivesse vindo. Isto pode ser somente especificado por regras especificando TCP ou UDP como seus protocolos. Opcionalmente, uma porta (nome ou nmero) podem ser especificadas seguidas de -j REDIRECT que causar o redirecionamento do pacote para uma porta particular, at mesmo se for endereado para outra porta. Este alvo somente vlido para pacotes atravessando a regra de entrada.

O alvo final especial RETURN que idntico a cair fora do final da regra imediatamente. (Veja Configurando o Policiamento abaixo). Qualquer outro alvo indica uma regra definida pelo usurio (como descrita em Operaes em todo o Chain abaixo). O pacote comear atravessando as regras naquele chain. Se aquele chain no decide o destino do pacote, ento uma vez passam por aquele chain como finalizado, passar se resume na prxima regra no chain atual. Hora de mais arte ASCII. Considere dois (tolos) chains: input (o chain embutido) e Test (um chain definido pelo usurio).
input ---------------------------| Rule1: -p ICMP -j REJECT | |--------------------------| | Rule2: -p TCP -j Test | |--------------------------| | Rule3: -p UDP -j DENY | Test ---------------------------| Rule1: -s 192.168.1.1 | |--------------------------| | Rule2: -d 192.168.1.1 | ----------------------------

Considerando um pacote TCP vindo de 192.168.1.1, indo para 1.2.3.4. Ele entra no chain input, e testado na regra 1 - sem bater com a regra. A regra 2 bate, e seu alvo Test, assim a prxima regra examinada o inicio do teste. Regra 1 em test confere, mas no especifica um alvo, assim a prxima regra examinada, Regra 2. Isto no confere, assim ns atingimos o final do chain. Ns retornamos ao chain de entrada, onde ns simplesmente examinamos a Regra 2, assim ns agora examinamos Regra3, que no confere. Assim o caminho do pacote :
V __________________________ input | / Test V ------------------------|--/ -----------------------|---| Rule1 | /| | Rule1 | | |-----------------------|/-| |----------------------|---| | Rule2 / | | Rule2 | | |--------------------------| -----------------------V---| Rule3 /--+___________________________/ ------------------------|--V

Veja a seo Como organizar suas regras de Firewall para meios para usar regras definidas pelo usurios efetivamente. 5.4.1.4.2 Registrando pacotes Este o lado do efeito que confere com uma regra que possui; voc pode ter o pacote que bateu com a regra registrado com a opo -l. Voc normalmente no precisar disto para pacotes rotineiros, mas ela uma caracterstica til se voc deseja verificar por eventos excepcionais. O kernel registra esta informao parecida como:

Packet log: input DENY eth0 PROTO=17 192.168.2.1:53 192.168.1.1:1025 L=34 S=0x00 I=18 F=0x0000 T=254

Esta mensagem de registro designada para ser concisa, e contm informaes tcnicas teis somente para gurus de rede, mas ela pode ser til para o resto de ns. Cada uma que dizer o seguinte: 1. input este o chain que contm a regra que confere com o pacote, causando a mensagem de registro. 2. DENY o que a regra disse fazer com o pacote. Se isto - ento a regra no afetou o pacote (uma regra de registro). 3. eth0 o nome da interface. Porque isto foi o chain de entrada, ela significa que o pacote veio de eth0. 4. PROTO=17 significa que o pacote foi protocolo 17. Uma lista de nmeros de protocolos esta disponvel em etc/prococols. Os mais comuns so 1 (ICMP), 6(TCP) e 17(UDP). 5. 192.168.2.1 significa que o endereo IP de origem do pacote foi 192.168.2.1. 6. :53 significa que a porta de origem foi 53. Olhando em /etc/services verificado que esta uma porta domnio (ie. esta provavelmente a resposta do DNS). Para UDP e TCP, este nmero a porta de origem. Para ICMP, ele o tipo ICMP. Para outros, ele ser 65535. 7. 192.168.0.1 o IP de destino. 8. :1025 significa que a porta de destino foi 1025. Para UDP e TCP, este nmero a porta de destino. Para ICMP, ele o cdigo ICMP. Para outros, ele ser 65535. 9. L=34 significa que o pacote teve um total de 34 bytes. 10. S=0x00 campo que significa o tipo do servio (dividido por 4 para obter o tipo do servio com usado pelo ipchains). 11. I=18 a identificao do IP. 12. F=0x0000 os fragmentos 16-bits offset plus flags. Um valor iniciando com 0x4 ou 0x5 significa que o bit de fragmento no esta configurado. 0x2 ou 0x3 significa que o bit mais fragmentos esta configurado; espere mais fragmentos aps isto. O resto dos nmeros so o offset deste fragmento, dividido por 8. 13. T=254 o tempo de vida do pacote. Um subtrado deste valor para cada ciclo, e normalmente iniciam em 15 ou 255. 14. (#5) este pode ser um nmero final em parnteses em kernels mais recentes (talvez aps 2.2.9). Este um nmero de regra que causa o registro do pacotes.

Em sistemas linux padres, esta sada do kernel capturada por klogd (o daemon de registro do kernel) que o envia para o syslogd (o daemon de registro do sistema). O arquivo /etc/syslog.conf controla o funcionamento de syslogd, especificando um destino para cada facilidade (facility - em nosso caso, a facilidade kernel) e nvel (para ipchains, o nvel usado info). Por exemplo, meu (Debian) /etc/syslog.conf contm duas linhas que conferem kern.info:
kern.* -/var/log/kern.log .=info;.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages

Estas significam que as mensagem so duplicadas em /var/log/kern.log e /var/log/messages. Para mais detalhes, veja man syslog.conf. 5.4.1.4.3 Manipulando o tipo do Servio Existem quatro bits raramente usados no cabealho IP, chamaos de bits de tipo do servio (TOS). Eles afetam o mtodo como os pacotes so tratados; os quatros bits so Minima Espera, Mximo processamento, Mxima Confiabilidade e Mnimo Custo. Somente um destes bits permitido ser configurado. Rob van Nieuwkerk, o autor do TOS-mangling code, colocou o que segue: Especialmente o Minimo de Espera importante para mim. Eu deixo ele ligado para pacotes interativos em meu roteador (Linux). Eu uso um modem de 33k6. O linux inicializa pacotes em 3 meios. Deste meio eu tenho performance interativa aceitvel enquando fao downloads grandes ao mesmo tempo. (Ele pode at mesmo ser melhor se l no tiver tal bit no driver serial, mas a latencia mantida agora por 1.5 segundos). Nota: Obviamente, voc tem o controle atravs de pacotes de entrada: voc pode somente controlar a prioridade dos pacotes deixando seu computador. Para negociar prioridades com o outro computador, um protocolo como RSVP (que no conheo nada sobre ele, no me pergunte sobre isto) deve ser usado. O uso mais comum configurar telnet e conexes de controle FTP para o Minima Espera e dados FTP para Mximo Processamento. Isto pode ser feito como segue:
ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10 ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10 ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08

A opo -t pede dois parmetros extras, ambos em hexadecimal. Estes permitem giros complexos dos bitos TOS: o primeira mascara ANDed com o pacote atual TOS, e ento a segunda mscara XORed com ele. Se isto muito confuso, apenas use a seguinte tabela:
TOS Name Minimum Maximum Maximum Minimum Delay Throughput Reliability Cost Value 0x01 0x01 0x01 0x01 0x10 0x08 0x04 0x02 Typical Uses ftp, telnet ftp-data snmp nntp

Andi Klenn foi ao ponto fora dos seguintes (tambm editado para postaridade): Talvez ele possa ser til para incluir uma referncia para de ifconfig para a discusso sobre bits TOS. O tamanho do dispositivo padro afinado para placas ethernet, em modems ele muito grande e faz os 3 agendamentos das bandas (que possui canais baseados no TOS) funcionarem subtimamente. uma boa idia configura-lo para um valor entre 4-10 no modem ou simples canal b para links ISDN: em dispositivos empacotados necessrio um grande canal. Este uma problema 2.0 e no 2.1, mas em 2.1 ele um opo do ifconfig (com nettools recentes), enquanto em 2.0 ele requer patches fontes nos controladores de dispositivos para alterar. Assim, para ver mximos beneficios da manipulao TOS para links de modems PPP, faa ifconfig $1 txqueuelen em seu /etc/ppp/ip-up script. O nmero usado depende da velocidade do modem e da quantidade de buffer no modem; aqui configuraes que Andi me passou denovo: O melhor valor para dadas configuraes precisam ser testadas. Se os canais so muito pequenos em um roteador ento os pacotes sero derrubados. Tambm claro que um obtm o benefcio at mesmo sem regravao TOS, apenas aquela regravao TOS ajuda obter benefcios para programas no coperativos (mas todos os programas padres do linux so coperativos). 5.4.1.4.4 Marcando um Pacote Isto permite complexas e poderosas interaes com Alexey Kuznetsovs nova Qualidade de implementaes de Servio, tambm como forwarding baseado em marcas em kernels da srie 2.1. Esta opo no entanto ignorada em kernels da srie 2.0. 5.4.1.4.5 Operaes em todo o chain Uma caracterstica muito til do ipchains a abilidade de agrupar regras relacionadas em chains. Voc pode chamar chains do que quiser, desde que no sejam nomes utilizados pelos chains embutidos (input, output e forward) ou os alvos (MASQ, REDIRECT, ACCEPT, DENY, REJECT ou RETURN). Eu sugiro

evitar totalmente identificaes em maisculas, porque que eu posso usar estas para futura extenso. O nome do chain pode ser maior que 8 caracteres. 5.4.1.4.6 Criando um novo chain Vou criar um novo chain. Porque eu sou como um imaginador da mesma categoria, eu chamarei isto de test.
# ipchains -N test

muito simples. Agora voc pode colocar regras nele como detalhado acima. 5.4.1.4.7 Apagando um chain Apagar um chain tambm simples.
# ipchains -X test

Porque -X? Bem, todas as boas letras foram usadas. Existem um par de restries para apagar chains: elas devem ser vazias (veja Limpando um Chain abaixo) e eles no devem ser o alvo de qualquer regra. Voc no pode deletar qualquer destes trs chains embutidos. 5.4.1.4.8 Limpando um Chain Existe um mtodo simples de esvaziar todas as regras fora do chain, usando o comando -F.
# ipchains -F forward

Se voc no especificar um chain, ento todos os chains sero limpos. 5.4.1.4.9 Listando um chain Voc pode listar todas as regras em um chain usando o comando -L.
# ipchains -L input Chain input (refcnt = 1): (policy ACCEPT) target prot opt source ACCEPT icmp ----- anywhere # ipchains -L test Chain test (refcnt = 0): target prot opt source DENY icmp ----- localnet/24 #

destination anywhere

ports any

destination anywhere

ports any

O refcnt listado para test o nmero de regras que tem test como seu alvo. Este pode ser zero (e o chain ser vazio) antes deste chain ser apagado.

Se o nome do chain omitido, todos os chains so listados. Existem trs opes que podem acompanhar -L. A -n (numrica) opo muito til porque ela previne ipchains de tentar localizar endereos IP, que (se voc esta usando DNS como muitas pessoas) causa larga espera se seu DNS se no estiver configurado corretamente, ou se voc filtrar suas requisies DNS. Ele faz as portas serem listadas como nmeros ao invs de nomes. A opo -v mostra os detalhes das regras, como o pacote e contadores de byes, as mscaras TOS, a interface, e a marca do pacote. Caso contrrio estes valores so omitidos. Por exemplo:
# ipchains -v -L input Chain input (refcnt = 1): (policy ACCEPT) pkts bytes target prot opt tosa tosx ifname destination ports 10 840 ACCEPT icmp ----- 0xFF 0x00 lo anywhere any

mark

source anywhere

Note que o pacote e o contador do byte so mostrados usando os sufixos K, M ou G para 100, 1,000,000 e 1,000,000,000 respectivamente. Usando a opo -x (nmeros expandidos) so mostrados nmeros completos, no discutirei como eles so grandes. 5.4.1.4.10 Resetando (Zerando) Contadores Isto til para permitir resetar os contadores. Isto pode ser feito com a opo -Z (zero counters). Por exemplo:
# ipchains -v -L input Chain input (refcnt = 1): (policy ACCEPT) pkts bytes target prot opt tosa tosx 10 840 ACCEPT icmp ----- 0xFF 0x00 # ipchains -Z input # ipchains -v -L input Chain input (refcnt = 1): (policy ACCEPT) pkts bytes target prot opt tosa tosx 0 0 ACCEPT icmp ----- 0xFF 0x00

ifname lo

mark

source destination ports anywhere anywhere any

ifname lo

mark

source destination ports anywhere anywhere any

O problema disto que muitas vezes voc precisa conhecer os valores do contador imediatamente antes dele ser resetado. No exemplo acima, muitos pacotes pode passar entre os comandos -L e -Z. Por esta razo, voc pode usar -L e -Z juntos, para resetar os contadores enquando os l. Infelizmene, se voc fizer isto, voc no poder operar em um chain simples: voc ter que listar e zerar todos os chains imediatamente.
# ipchains -L -v -Z Chain input (policy ACCEPT):

pkts bytes target 10 840 ACCEPT

prot opt tosa tosx ifname icmp ----- 0xFF 0x00 lo

mark

source destination ports anywhere anywhere any

Chain forward (refcnt = 1): (policy ACCEPT) Chain output (refcnt = 1): (policy ACCEPT) Chain test (refcnt = 0): 0 0 DENY icmp ----- 0xFF 0x00 ppp0 # ipchains -L -v Chain input (policy ACCEPT): pkts bytes target prot opt tosa tosx ifname 10 840 ACCEPT icmp ----- 0xFF 0x00 lo Chain forward (refcnt = 1): (policy ACCEPT) Chain output (refcnt = 1): (policy ACCEPT) Chain test (refcnt = 0): 0 0 DENY icmp ----- 0xFF 0x00 ppp0

localnet/24 anywhere any

mark

source destination ports anywhere anywhere any

localnet/24 anywhere any

5.4.1.4.11 Configurando a Poltica Ns mostramos o que acontece quando um pacote atinge o final do chain de entrada embutido quando ns discutimos como um pacote anda atravs dos chains em Especificando um Alvo acima. Neste caso, o policiamento do chain determina o destino do pacote. Somente chains embutidos (input output e forward) tem policiamento, porque se um pacote cai no final de um chain definido pelo usurio, a passagem resumida no chain anterior. O policiamento pode ser qualquer dos primeiros quatro alvos especiais: ACCEPT, DENY, REJECT, MASQ. MASQ somente vlido para o chain forward. tambm importante notar que o alvo RETURN em uma regra em um dos chains embutidos til para acertar o policiamento de um chain quando o pacote se encaixa em uma regra. 5.4.1.5 Operaes em Masquerading Existem diversos parmetros que voc pode usar para IP Masquerading. Eles esto empacotados com ipchains porque no compensa fazer uma ferramenta separada para eles (no entanto isto pode mudar). O comando IP Masquerading -M, e ele pode ser combinado com -L para listar conexes Masquerade atuais, ou -S para configurar parmetros masquerade. O comando -L pode ser acompanhado por -n (mostar nmeros ao invs de nomes dos hosts e nomes das portas) ou -v (mostra deltas em nmeros sequenciais para conexo masquerade, apenas em caso de preocupao). O comando -S deve ser seguido de trs valores de timeout, cada um em

segundos: para sees TCP, para sees TCP aps um pacote FIN, e para pacotes UDP. Se voc no desejar alterar um destes valores, simplesmente passe um valor 0. Os valores padres esto listados em /usr/src/linux/include/net/ip_masq.h, atualmente 15 minutos, 2 minutos e 5 minutes respectivamente. O valor mais comum para ser alterado o primeiro, para FTP (veja Pesadelos FTP abaixo). Note os problemas com as configuraes de timeout listados em Eu no posso configurar timeouts em masquerade!. 5.4.1.6 Checando um Pacote Muitas vezes voc deseja ver o que esta acontecendo quando um certo pacote entra em sua mquina, tal como para verificar seus chains de entrada. ipchains tem o comando -C para permitir isto, usando exatamente as mesmas rotinas que o kernel usa para diagnosticar pacotes reais. Voc especifica que chain testar o pacote seguido do argumento -C com seu nome. Considerando que o kernel sempre inicia atravessando os chains input, output e forward, voc est permitido o inicio da travessia em qualquer chain para fins de testes. Os detalhes do pacote so especificados usando a mesma sintaxe usada para expecificar regras do firewall. Em particular, um protocolo (-p), endereo de origem (-s), endereo de destino (-d) e interface (-i) so compulsrios. Se o protoclo TCP ou UDP, ento uma porta simples de origem e destino devem ser especificadas, e um tipo ICMP e um cdigo devem ser especificados para o protocolo ICMP (a no ser que a opo -f espeficada para indicar uma regra de fragmento, em tal caso estas opes so ilegais). Se o protocolo TCP (e a opo -f no especificada), a opo -y deve ser especificada, para indicar que o pacote test deve ter o bit SYN ajustado. Aqui est um exemplo de teste de um pacote TCP SYN de 192.168.1.1 porta 60000 para 192.168.1.2 porta www, vindo na interface eth0, entrando no chain input. Isto uma clssica inicializao de conexo WWW.
# ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 www packet accepted

5.4.1.7 Multiplas Regras at Once and Watching What Happens Muitas vezes uma simples linha de comando pode resultar em mltiplas regras sendo afetadas. Isto feito em duas maneiras. Primeiro, se voc

especificar um hostname que resolve (usando DNS) mltiplos endereos IPs, ipchains pode atuar como se voc tivesse digitado mltiplos comandos com cada combinao de endereos. Assim se o hostname www.foo.com <http://www.foo.com> resolve trs endereos IPs, e o hostname www.bar.com <http://www.bar.com> resolve dois endereos IPs, ento o comando ipchains -A input -j reject -s www.bar.com <http://www.bar.com> -d www.foo.com <http://www.foo.com> acumula seis regras para o chain de entrada. O outro meio de ter o ipchains fazendo mltiplas aes usar a opo bidirecional (-b). Esta opo faz o ipchains se comportar como se voc tivesse digitado o comando duas vezes, a segunda vez com os argumentos -s e -d invertidos. Assim, para evitar forwarding para ou de 192.168.1.1, voc deve fazer o seguinte:
# ipchains -b -A forward -j reject -s 192.168.1.1

Pessoalmente, eu no gosto muito da opo -b; se voc deseja convenincia, veja Usando ipchains-save abaixo. A opo -b pode ser usada com insert (-I), delete (-D) (mas no com variaes que pegam regras numricas), comando append (-A) e comando check (-C). Outra opo til -v (verbose) que mostra exatamente o que o ipchains est fazendo com seus comandos. Isto til se voc est negociando com comandos que podem afetar multiplas regras. Por exemplo, aqui ns checamos a ao dos fragmentos entre 192.68.1.1 e 192.168.1.2.
# ipchains -v -b -C input -p tcp -f -s 192.168.1.1 -d 192.168.1.2 -i lo tcp opt ---f- tos 0xFF 0x00 via lo 192.168.1.1 -> 192.168.1.2 * packet accepted tcp opt ---f- tos 0xFF 0x00 via lo 192.168.1.2 -> 192.168.1.1 * packet accepted

* ->

* ->

5.4.2 Exemplos teis


Eu tenho uma conexo dialup PPP (-i ppp0). Eu pego news (-p TCP -s news.virtual.net.au nntp) e mail (-p TCP -s mail.virtual.net.au pop-3) a toda hora que disco. Eu uso o mtodo FTP da Debian para atualizar minha mquina regularmente (-p TCP -y -s ftp.debian.org.au <ftp://ftp.debian.org.au> ftp-data). Eu surfo na WEB atravs do meu proxy ISP enquando isto est sendo feito (-p TCP -d proxy.virtual.net.au 8080), mas odeio os anncios de doubleclick.net

dos arquivos Dilbert (-p TCP -y -d 199.95.207.0/24 e p TCP -y -d 199.95.208.0/24). Eu no noto pessoas tentando entrar pelo ftp em minha mquina enquando eu estou online (-p TCP -d $LOCALIP ftp), mas no desejo qualquer um de fora pretendendo ter um endereo IP de minha rede interna (-s 192.168.1.0/24).Isto normalmente chamado de IP spoofing, e aqui est um belo meio de proteger voc dele em kernels 2.1.x e superiores: veja Como eu configuro a proteo IP spoof?. A configurao razoavelmente simples, porque no existe atualmente nenhuma outra mquina na minha rede interna. Eu no desejo que nenhum processo local (ie. Netscape, linx etc...) se conecte em doubleclick.net:
# ipchains -A output -d 199.95.207.0/24 -j REJECT # ipchains -A output -d 199.95.208.0/24 -j REJECT

Agora eu desejo configurar prioridades em varios pacotes de sada (no existe muitos motivos de se fazer isto em pacotes que entram). Desde que eu tenho diversos nmeros destas regras, sensato colocar todas elas em um simples chain, chamado ppp-out.
# ipchains -N ppp-out # ipchains -A output -i ppp0 -j ppp-out

Minimo de espera para trfego WEB e telnet.


# ipchains -A ppp-out -p TCP -d proxy.virtual.net.au 8080 -t 0x01 0x10 # ipchains -A ppp-out -p TCP -d 0.0.0.0 telnet -t 0x01 0x10

Baixo custo para dados ftp, nntp, pop-3:


# ipchains -A ppp-out -p TCP -d 0.0.0.0/0 ftp-data -t 0x01 0x02 # ipchains -A ppp-out -p TCP -d 0.0.0.0/0 nntp -t 0x01 0x02 # ipchains -A ppp-out -p TCP -d 0.0.0.0/0 pop-3 -t 0x01 0x02

Existem algumas restries em pacotes vindo da inteface ppp0: deixe criar um chain chamado ppp-in
# ipchains -N ppp-in # ipchains -A input -i ppp0 -j ppp-in

Agora, nenhum pacote vindo de ppp0 deve reivindicar um endereo de origem de 192.168.1.*, assim ns registramos e negamos todos eles:

# ipchains -A ppp-in -s 192.168.1.0/24 -l -j DENY

Eu permito pacotes UDP para DNS (eu executo um programa de cache de nomes que redireciona todas as requisies para 203.29.16.1, assim eu espero respostas DNS somente dele), entrada FTP, e somente retorno de dados ftp(ftpdata) (que deve somente estar indo para uma porta acima de 1023, e no as portas X11 em torno de 6000).
# # # # ipchains ipchains ipchains ipchains -A -A -A -A ppp-in ppp-in ppp-in ppp-in -p -p -p -p UDP TCP TCP TCP -s -s -s -d 203.29.16.1 -d $LOCALIP dns -j ACCEPT 0.0.0.0/0 ftp-data -d $LOCALIP 1024:5999 -j ACCEPT 0.0.0.0/0 ftp-data -d $LOCALIP 6010: -j ACCEPT $LOCALIP ftp -j ACCEPT

Finalmente, pacotes local-para-local esto OK:


# ipchains -A input -i lo -j ACCEPT

Agora, meu policiamento padro no chain de entrada DENY, assim qualquer outra coisa derrubada:
# ipchains -P input DENY

NOTA: Eu no configurei meus chains nesta ordem, como os pacotes podem ir atravs da minha configurao. Seguramente normalmente feito o DENY (bloqueio) primeiro, ento inseridas as regras. claro, se suas regras requerem chamadas DNS para resolver nomes de hosts, voc ter problemas. 5.4.2.1 Usando ipchains-save Configurar regras de firewall simplesmente do jeito que desejar, e ento tente se lembrar dos comandos que usou assim voc pode estar na prxima hora em pane. Assim ipchains-save um script que l sua configurao atual dos chains e salva em um arquivo. No momento eu mantenho seu suspense sobre o que o ipchains-restore faz. ipchains-save pode salvar uma simples regra, ou todas as regras (se nenhum nome de regra especificada). A nica opo atualmente permitida -v que mostra as regras (para stderr) quando so salvas. O policiamento do chain tambm salvo para as regras input, output e forward.
# ipchains-save > my_firewall Saving input. Saving output. Saving forward.

Saving ppp-in. Saving ppp-out.

5.4.2.2 Usando ipchains-restore O ipchains-restore restaura chains que foram salvos com ipchainssave. Ele pode usar duas opes -v que descreve cada resgra sendo includa, e -f que fora a limpeza de regras definidas pelo usurio se elas existem, como descrito abaixo. Se uma regra definida pelo usurio encontrada em input, ipchains-restore checa se aquele chain realmente existe. Se existir, ento voc ser perguntado se os chains devem ser limpos (limpeza de todas as regras) ou se a restaurao deste chain deve ser ignorada. Se voc especificar -f na linha de comando, voc no ser perguntado; a regra ser limpa. Por exemplo:
# ipchains-restore < my_firewall Restoring input. Restoring output. Restoring forward. Restoring ppp-in. Chain ppp-in already exists. Skip or flush? [S/f]? s Skipping ppp-in. Restoring ppp-out. Chain ppp-out already exists. Skip or flush? [S/f]? f Flushing ppp-out.

5.5 Diversos
Esta seo contm todas as informaes e FAQs que eu pude colocar dentro da estrutura do arquivo abaixo.

5.5.1 Como organizar suas regras de firewall


Esta questo requer muita concentrao. Voc pode tentar organiza-las para melhorar a velocidade (minimizar o nmeros de checagem de regras para os pacotes mais comuns) ou para diminuir o gerenciamento. Se voc tiver um link intermitente, digamos PPP, voc pode desejar configurar a primeira regra do chain de entrada para -i ppp0 -j DENY na inicializao, ento tendo qualquer coisa como esta em seu script ip-up:
# Re-create the ppp-in chain.

ipchains-restore -f < ppp-in.firewall # Replace DENY rule with jump to ppp-handling chain. ipchains -R input 1 -i ppp0 -j ppp-in

Seu script ip-down deve se parecer com isto:


ipchains -R input 1 -i ppp0 -j DENY

5.5.2 O que no filtrar


Existem muitas coisa que voc deve estar atento antes de iniciar a filtragem de tudo o que no desejar. 5.5.2.1 Pacotes ICMP Pacotes ICMP so usados (entre outras coisas) para indicar falhas de outros protocolos (tal como TCP e UDP). Pacotes destination-unreachable em particular. Bloqueando estes pacotes significa que voc nunca obter erros Host unreachable ou No route to host; qualquer conexo simplesmente aguardar por uma resposta que nunca vir. Isto irritante, mas raramente fatal. Um problema pior o papel de pacotes ICMP em na descoberta MTU. Todas as boas implementaes TCP (incluindo o Linux) usa a descoberta MTU para tentar entender qual pacote grande que pode ir para um destino sem ser fragmentado (fragmentao diminui a performance, especialmente quando fragmentos ocasionais so perdidos). Descoberta MTU funciona enviando pacotes com o bit Dont Fragment ajustado, e ento enviando pacotes pequenos se ele obter um pacote ICMP indicando Fragmentao necessria mas DF ajustado (fragmentao necessria). Este um tipo de pacote destinationunreachable, e se ele nunca recebido, o host local no reduzir o MTU, e a performance ser abismal ou no existente. Note que comum ele bloquear todas as mensagens de redirecionamento ICMP (tipo 5); estas podem ser usados para manipular roteamento (embora boas stacks IP tem protees), e assim so frequentemente vistas como ligeiramente ariscadas. 5.5.2.2 Conexes TCP para DNS (servidores de nomes) Se estiver tentando bloquear conexes TCP de sada, se lembre que DNS nem sempre usa UDP; se a resposta do servidor excede, 512 bytes, o cliente usa uma conexo TCP (ainda indo para o nmero de porta 53) para obter a resposta. Isto pode ser uma armadilha porque DNS sempre trabalha mais ou menos se voc bloquear tais transferncias TCP; voc pode experimentar esperas longas e estranhas ou outros problemas DNS ocasionais se voc o fizer.

Se suas requisies DNS sempre so direcionadas para a mesma origem externa (ou diretamente usando a linha nameserver em /etc/resolv.conf ou usando um servidor de nomes cache no modo forward), ento voc precisar somente permitir conexes TCP para a porta domnio naquele servidor de nomes da porta de domnio local (se usando um servidor de nomes cache) ou de uma porta alta (>1023) se estiver usando /etc/resolv.conf. 5.5.2.3 Pesadelos FTP O problema clssico de filtragem de pacotes o FTP. FTP tem dois modos; um o tradicional que chamado modo ativo e o mais recente chamado de modo passivo. Navegadores Web normalmente usam o modo passivo, mas programas FTP de linha de comando normalmente usam o modo ativo. No modo ativo, quando o computador remoto tenta enviar um arquivo (ou at mesmo o resultado de um comando ls ou dir) ele tenta abrir uma conexo TCP com a mquina local. Isto significa que voc no pode filtrar estas conexes TCP sem bloquear o FTP ativo. Se voc tem a opo de usar o modo passivo, ento bem; modo passivo faz as conexes de dados de cliente para servidor, at mesmo para dados de entrada. Caso contrrio, recomendado que voc somente permita conexes TCP para portas acima de 1024 e no entre 6000 e 6010 (6000 usada pelo XWindow).

5.5.3 Filtrando o Ping of Death (ping da morte)


Computadores Linux so agora imunes aos famosos Ping of Death, que envolve o envio de grandes pacotes ICMP ilegais que sobrecarrega os buffers na pilha TCP no receptor e causa destruio. Se voc est protegendo computadores que podem ser vulnerveis, voc deve simplesmente bloquear fragmentos ICMP. Pacotes normais ICMP no so grandes o bastante para requerer fragmentao, assim voc no deve bloquear nada exceto grandes pings. Eu tenho ouvido (no confirmados) relatos que muitos sistemas requerem somente o ltimo fragmento de um pacote ICMP acima de seu tamanho para o corromper, assim bloquear somente o primeiro fragmento no recomendado. Sobre os programas exploit e tenho sempre visto que todos usam ICMP, no existem razes que fragmentos TCP ou UDP (ou um protocolo desconhecido) possa ser usado neste ataque, assim bloqueando fragmentos ICMP somente uma soluo temporria.

5.5.4 Filtrando o Teardrop e Bonk


Teardrop e Bonk so dois ataques (principalmente sobre mquinas Microsoft Windows NT) que confiam em fragmentos sobrepostos. Tendo seu

roteador Linux fazendo desfragmentao, ou no permitindo todos os fragmentos para suas mquinas vulnerveis so as outras opes.

5.5.5 Filtrando Bombas de Fragmento


Algumas pilhas TCP so comentadas por ter problemas negociando com grandes nmeros de fragmentos de pacotes quando eles no recebem todos os fragmentos. Linux no tem este problema. Voc pode filtrar fora fragmentos (que podem interromper legitimos usurios) ou compilar seu kernel com IP: always defragment ajustado para Y (somente se seu computador linux o roteador para estes pacotes).

5.5.6 Modificando regras do firewall


Existem alguns assuntos cronometrados envolvidos em alterar regras do firewall. Se voc no cuidadoso, voc pode deixar pacotes passarem enquanto estiver fazendo suas alteraes. Uma soluo simplssima fazer o seguinte:
# ipchains -I input 1 -j DENY # ipchains -I output 1 -j DENY # ipchains -I forward 1 -j DENY

... faz alteraes ...


# ipchains -D input 1 # ipchains -D output 1 # ipchains -D forward 1

Isto bloqueia todos os pacotes durante as alteraes. Se suas alteraes so restritas para um chain simples, voc deve criar um novo chain com novas regras, e ento trocar (-R) a regra que aponta para o antigo chain para a nova que aponta para o novo chain: ento voc pode apagar o antigo chain. Esta substituio ocorrer atomicamente.

5.5.7 Como eu configuro a proteo IP Spoof?


IP spoofing uma tcnica onde um host envia pacotes que parecem ser de outro host. Desde que a filtragem de pacotes faz decises baseadas no endereo de origem, IP spoofing usado para filtros de pacotes bobos. Ele tambm usado para ocultar a identidade de atacantes usando ataques SYN, Teardrop, Ping of Death e outros (no se preocupe se no sabe o que eles fazem). O melhor meio para proteger de IP spoofing chamado Verificao do endereo de Origem, e feito pelo cdigo de roteamento, e no o firewall

completamente. Procure por um arquivo chamado /proc/sys/net/ipv4/conf/all/rp_filter. Se ele existe, ento ligando a Verificao do Endereo de Origem (Source Address Verification) em cada inicializao a soluo certa para voc. Para fazer isto, insira as seguintes linhas em qualquer lugar de seus scripts init, antes de qualquer placa de rede ser inicializada:
# This is the best method: turn on Source Address Verification and get # spoof protection on all current and future interfaces. if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then echo -n Setting up IP spoofing protection... for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f done echo done. else echo PROBLEMS SETTING UP IP SPOOFING PROTECTION. BE WORRIED. echo CONTROL-D will exit from this shell and continue system startup. echo # Start a single user shell on the console /sbin/sulogin $CONSOLE fi

Se voc no puder fazer isto, voc pode inserir manualmente regras para proteger cada interface. Isto requer conhecimento de cada interface. Os kernels 2.1 automticamente rejeitam pacotes dizendo vir de endereos 127.* (reservados para a interfaceloopback local, lo). Por exemplo, digamos que temos trs interfaces, eth0, eth1 e ppp0. Ns podemos usar ifconfig para nos dizer o endereo e netmask das interfaces. Digamos eth0 foi ligada a rede 192.168.1.0 com a netmasq 255.255.255.0, eth1 foi ligada a rede 10.0.0.0 com a netmask 255.0.0.0, e ppp0 conectado com a internet (onde qualquer endereo exceto endereos IP privados so permitodos), ns devemos inserir as seguintes regras:
# # # # ipchains ipchains ipchains ipchains -A -A -A -A input input input input -i -i -i -i eth0 -s ! ! eth0 -s eth1 -s ! ! eth1 -s 192.168.1.0/255.255.255.0 -j DENY 192.168.1.0/255.255.255.0 -j DENY 10.0.0.0/255.0.0.0 -j DENY 10.0.0.0/255.0.0.0 -j DENY

Esta idia no to boa como a Verificao do endereo de origem, porque se sua rede muda, voc deve mudar suas regras de firewall para prevenila. Se voc est executando um kernel da srie 2.0, voc pode desejar proteger a interface loopback tambm, usando uma regra como esta:
# ipchains -A input -i ! lo -s 127.0.0.0/255.0.0.0 -j DENY

5.6 Problemas comuns


5.6.1 ipchains -L Trava!
Voc est provavelmente bloqueando chamada DNS; e eventualmente o time out. Tente usar a opo -n (nmerico) com ipchains, que no mostra nomes.

5.6.2 Masquerading/Forwarding no funciona!


Certifique-se que o forward de pacotes est ativado (em kernels recentes desativado por padro, dizendo que pacotes nunca tentam atravessar o chain forward). Voc pode alterar isto (como root) digitando:
# echo 1 > /proc/sys/net/ipv4/ip_forward

Se isto funciona para voc, coloque isto em algum lugar em seus scripts de inicializao assim ele ser ativado toda hora; voc deve configurar seu firewall antes de executar este comando, caso contrrio existe uma oportunidade de pacotes escaparem.

5.6.3

-j REDIR no funciona!

Voc deve permitir pacotes forward (veja acima) para o redirecionamento funcionar; caso contrrio o cdigo de roteamento bloqueia o pacote. Assim se voc est simplesmente usando o redirecionamento, e no tem qualquer forward, voc dever estar atento a isto. Note que REDIR (sendo no chain input) no afeta conexes de um processo local.

5.6.4 Coringas nas Interfaces no funcinam!


Existe um bug nas verses 2.1.102 e 2.1.103 do kernel (e alguns patches antigos que produzi) que fazem comandos ipchains falharem ao especificar uma inteface com coringas (tal como -i ppp+). Isto est corrigido nos kernels mais recentes, e no patch 2.0.34 do web site. Voc pode tambm pode corrigir alterando o fonte do kernel alterando a linha 63 ou assim em include/linu/ip_fw.h
#define IP_FW_F_MASK 0x002F /* All possible flag bits mask */

Isto deve ser lido como 0x003F. Corrija isto e recompile o kernel.

5.6.5 TOS no funciona!


Isto foi meu erro: configurando o campo tipo do servio no configurava atualmente o tipo do servio nos kernels verses 2.1.102 entre 2.1.111. Este problema foi corrigido em 2.1.112.

5.6.6

ipautofw e ipportfw no funcionam!

Para o kernel 2.0.x, isto verdade: eu no tenho tempo para criar e manter um patch gigantesco para ipchains e ipautofw/ipportfw. Para o kernel 2.1.x, copie Juan Ciarlantes ipmasqadm de <http://juanjox.linuxhq.com/> e use-o exetamente como usaria como ipautofw ou ipportfw, exceto ao invs de ipportfw voc digita ipmasqadm portfw, e ao invs de ipautofw voc deve digitar ipmasqadm autofw.

5.6.7 xosview est quebrado!


Atualize para a verso 1.6.0 ou superior, que no requerem qualquer regra de firewall para kernels 2.1.x. Isto parece ter quebrado denovo no lanamento 1.6.1; por favor fale sobre o erro para o autor (este erro no meu).

5.6.8 Falta de Segmentao com -j REDIRECT!


Este foi um bug no ipchains verso 1.3.3. Por favor atualize.

5.6.9 Eu no posso configurar tempo limite no masquerade!


Verdadeiro (para kernels 2.1.x) at 2.1.123. Em 2.1.124, tentando configurar o tempo limite no masquerading causava uma chamada no kernel (altere return para ret = na linha 1328 de net/ipv4/ip_fw.c). Em 2.1.125, funciona corretamente.

5.6.10

Eu desejo proteger IPX!

Assim como outros, eu vejo. Meu cdigo somente cobre IP, infelizmente. Do lado bom, todos os ganchos esto l para IPX! Voc apenas precisa reescrever o cdigo; Eu ficaria feliz em ajudar onde for possvel.

6 FIREWALL IPTABLES
Adaptado do -Guia Foca GNU/Linux Avanado Captulo 9 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>. 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.

6.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 administrador 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 a 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 (masquerading, source nat, destination nat), redirecionamento de pacotes, marcao de pacotes, modificar a prioridade de pacotes que chegam/saem do seu sistema, contagem de bytes, dividir 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 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.

6.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.

6.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.

6.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 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 IP's). Suporte a DNAT (modificao do endereo de destino das mquinas para um nico IP ou fixa de IP's) 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).

6.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.

6.1.5 Requerimentos
necessrio que o seu kernel tenha sido compilado com suporte ao

iptables (veja Habilitando o suporte ao iptables no kernel, Section 9.1.15 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>. 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.

6.1.6 Arquivos de logs criados pelo iptables


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

6.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.

6.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>.

6.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 suporte ao ipchains e ipfwadm ainda ser mantido no 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, Section 9.1.15 <http://focalinux.cipsga.org.br/guia/avancado/ch-fwiptables.htm>. 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.

6.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 contedo do trfego. Alguns firewalls a nvel de aplicao combinam recursos bsicos existentes em firewalls a 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. 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 parmetros 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 a nvel de pacotes o assunto explicado nesta seo do guia. Os dois tipos de firewalls podem ser usados em conjunto para fornecer uma camada dupla de segurana no acesso as suas mquinas/mquinas clientes.

6.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 autenticao 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 prevenir 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 bloquear 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), recomendado o uso de servios que utilizam criptografia para login e cpia de arquivos (veja Servidor ssh, Chapter 14 <http://focalinux.cipsga.org.br/guia/avancado/ch-s-ssh.htm>).

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 balancear 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 implementao, prazo de desenvolvimento e tempo de maturidade do cdigo para implementao. Existem 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 segurana de sua rede.

6.1.12

O que so regras?

As regras so como comandos passados ao iptables para que ele realize uma determinada 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.

6.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).

6.1.14

O que so tabelas?

Tabelas so os locais usados para armazenar os chains e conjunto de regras de um mesmo conjunto que cada um possui. 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:


o o o

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:
o

PREROUTING - Consultado quando os pacotes precisam ser modificados logo que chegam. o chain ideal para realizao de DNAT e redirecionamento de portas (Fazendo DNAT, Section 9.4.4 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>). OUTPUT - Consultado quando os pacotes gerados localmente precisam ser modificados antes de serem roteados. Este chain somente consultado para conexes que se originam de IPs de interfaces locais. POSTROUTING - Consultado quando os pacotes precisam ser modificados aps o tratamento de roteamento. o chain ideal para realizao de SNAT e IP Masquerading (Fazendo SNAT, Section 9.4.3 <http://focalinux.cipsga.org.br/guia/avancado/ch-fwiptables.htm>).

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:
o

PREROUTING - Consultado quando os pacotes precisam ser modificados logo que chegam. OUTPUT - Consultado quando pacotes gerados localmente precisam ser modificados antes de serem roteados.

Veja A tabela mangle, Section 9.5 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm> para mais detalhes sobre a tabela mangle.

6.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/m/n/?] 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/?] 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 cdigos 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 filtering/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 contrrio ser necessrio compilar todas as partes necessrias embutidas no kernel, carregar os mdulos necessrios manualmente ou pelo iptables (atravs da opo --modprobe=mdulo).

6.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), Section 9.4.2 <http://focalinux.cipsga.org.br/guia/avancado/ch-fwiptables.htm> ou Fazendo SNAT, Section 9.4.3 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>. Um exemplo prtico de configurao de Masquerading deste tipo encontrado em Conectando sua rede interna a Internet, Section 9.8.3 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>. 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.

6.2 Manipulando chains


As opes passadas ao iptables usadas para manipular os chains so SEMPRE em maisculas. As seguintes operaes podem ser realizadas com os chains:

6.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, Section 9.3.6 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>). 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. OBS2: - A tabela filter ser usada como padro caso nenhuma tabela seja especificada atravs da opo -t.

6.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?, Section 9.1.14 <http://focalinux.cipsga.org.br/guia/avancado/chfw-iptables.htm> para detalhes. chain

Um dos chains disponveis na tabela acima (veja O que so tabelas?, Section 9.1.14 <http://focalinux.cipsga.org.br/guia/avancado/chfw-iptables.htm>) ou criado pelo usurio (Criando um novo chain - N, Section 9.2.6 <http://focalinux.cipsga.org.br/guia/avancado/ch-fwiptables.htm>). 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 resoluo DNS e consulta ao /etc/services. A resoluo de nomes pode tomar muito tempo dependendo da quantidade de regras que suas tabelas possuem e velocidade 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 DROP all -- anywhere

destination 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 DROP all -- 0.0.0.0/0

destination 127.0.0.1

#iptables -L INPUT -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source 1 DROP all -- 0.0.0.0/0

destination 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 2 194 DROP icmp -- * * 0.0.0.0/0

destination 127.0.0.1

Os campos assim possuem o seguinte significado: Chain INPUT Nome do chain listado (policy ACCEPT 78 packets, 5820 bytes) Policiamento padro do chain (veja Especificando o policiamento padro de um chain P, Section 9.2.11 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>). pkts Quantidade de pacotes que atravessaram a regra (veja Zerando contador de bytes dos chains Z, Section 9.2.10 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>). bytes Quantidade de bytes que atravessaram a regra. 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, Section 9.3.6 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm> para detalhes sobre a especificao de um alvo. prot Protocolo especificado pela regra. Pode ser udp, tcp, icmp ou all. Veja Especificando um protocolo, Section 9.3.3 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm> para detalhes. opt Opes extras passadas a regra. Normalmente "!" (veja Especificando uma exceo, Section 9.3.5 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>) ou "f" (veja Especificando fragmentos, Section 9.3.4 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>). in Interface de entrada (de onde os dados chegam). Especificando a interface de origem/destino, Section <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>. Veja 9.3.2 Pode ser

out Interface de sada (para onde os dados vo). Veja Especificando a interface de origem/destino, Section 9.3.2 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>. source Endereo de origem. Veja Especificando um endereo de origem/destino, Section 9.3.1 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>. destination Endereo de destino. Veja Especificando um endereo de origem/destino, Section 9.3.1 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>. 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 REJECT naquela regra (veja Alvo REJECT, Section 9.3.6.1 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>).

6.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) podemos 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 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.

6.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.

6.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).

6.2.6 Criando um novo chain - N


Em firewalls organizados com um grande nmero de regras, interessante criar chains individuais 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 conseqentemente 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

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 consultar 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 confere | Regra4: -j DROP | com o endereo de origem 200.200.200.200 e \---------------------------/ o pacote bloqueado.

Se uma mquina com o endereo de origem 200.200.200.201 tentar acessar a mquina, ento as regra consultadas sero as seguintes:
O pacote tem o endereo de origem 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.

6.2.7 Listando os nomes de todos os chains 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 podem lhe ser interessantes.

6.2.8 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. 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

6.2.9 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 6.1.14 O que so tabelas?.
iptables -t filter -X internet iptables -X

6.2.10

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 pacotes. 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

6.2.11

Especificando o policiamento padro de um chain - P

O policiamento padro determina o que acontecer com um pacote quando ele chegar ao final das regras contidas em um chain. O policiamento padro do iptables "ACCEPT" mas isto pode ser alterado com o comando: iptables [-t tabela] [-P chain] [ACCEPT/DROP] Onde: tabela Tabela que contm o chain que desejamos modificar o policiamento padro. chain Define o chain que ter o policiamento modificado. 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 (usado em regras restritivas). O policiamento padro de um chain mostrado com o comando iptables -L:
# iptables -L INPUT

Chain INPUT (policy ACCEPT) target prot opt source DROP icmp -- anywhere

destination localhost

No exemplo acima, o policiamento padro de INPUT ACCEPT (policy ACCEPT), o que significa que qualquer pacote que no seja rejeitado pela regra do chain, ser aceito. Para alterar o policiamento padro deste chain usamos o comando:
iptables -t filter -P INPUT DROP

OBS: Note que policiamentos PERMISSIVOS (ACCEPT) normalmente so usados em conjunto com regras restritivas no chain correspondentes (tudo bloqueado e o que sobrar liberado) e policiamentos RESTRITIVOS (DROP) so usados em conjunto com regras permissivas no chain correspondente (tudo liberado e o que sobrar bloqueado pelo policiamento padro).

6.3 Outras opes do iptables


6.3.1 Especificando um endereo de origem/destino
As opes -s (ou --src/--source)e -d (ou --dst/--destination) servem para especificar endereos de origem e destino respectivamente. permitido usar um endereo IP completo (como 192.168.1.1), um hostname (debian), um endereo rede/mscara fqdn (www.debian.org) ou um par (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 IP's 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.
# 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

6.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 OUTPUT 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 | +---------+---------------------+----------------+---------------+

A definio de qual interface permitida em qual chain determinada pela posio dos chains nas etapas de roteamento do pacote. 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):
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

6.3.3 Especificando um protocolo


A opo -p (ou --protocol) usada para especificar protocolos no iptables. Podem ser especificados 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. 6.3.3.1 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 destino. pode ser especificada atravs de

Uma faixa de portas 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

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 especificar diversas regras que envolvam o tratamento de portas diferentes, recomendo da uma olhada em 6.6.6 Especificando mltiplas portas de origem/destino, antes de criar um grande nmero de regras.

6.3.3.2 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+ -j DROP

A regra acima rejeitar mensagens ICMP do tipo "time-exceeded" (tempo de requisio excedido) 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-zeroduring-reassembly") conferiro na regra especificada.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 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" seno ter srios problemas no controle de suas conexes. 6.3.3.3 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 configurao, 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.

6.3.4 Especificando fragmentos


A opo "-f" (ou --fragment) permite especificar regras que confiram com fragmentos. Fragmentos 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 que cheguem 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 remontados 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.

6.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 na 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.

6.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), redirecionar 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 mais 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 no policiamento padro das regras do firewall (veja 6.2.11 Especificando o policiamento padro de um chain - P). 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 no policiamento padro das regras do firewall (veja 6.2.11 Especificando o policiamento padro de um chain - P). REJECT: Este um mdulo opcional que faz a mesma funo do alvo DROP com a diferena de que uma mensagem ICMP do tipo "icmp-portunreachable" retornada para a mquina de origem. Pode ser usado como alvo somente nos chains da tabela filter. 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). Retorna o processamento do chain anterior sem RETURN: processar o resto do chain atual. QUEUE: Passa o processamento para um programa a nvel de usurio.

6.3.6.1 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" 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. OBS: REJECT pode ser usado somente como alvo na tabela filter e no possvel especifica-lo como policiamento 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 atingir o policiamento 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

6.3.6.2 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 ppp0 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 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 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:00:00:08:00 SRC=200.200.200.1 DST=200.210.10.10 LEN=61 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=1031 DPT=53 LEN=41

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. LEN=61 Tamanho do pacote. TOS=0x00 Prioridade do cabealho TOS (prioridade normal neste caso). Veja a seo Especificando o tipo de servio, Section 9.5.1 <http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm> para mais detalhes. 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. 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.
# Complementando o exemplo anterior: # Para registrar o bloqueio de pacotes vindos de 200.200.200.1 pela interface ppp0 iptables -A INPUT -s 200.200.200.1 -i ppp+ -j LOG --log-prefix "FIREWALL: Rejeitado " # 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: Rejeitado IN=ppp0 OUT= MAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00 SRC=200.200.200.1 DST=200.210.10.10 LEN=61 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=1031 DPT=53 LEN=41

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 relao 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. Infelizmente o iptables no aceita variveis, seno esta limitao seria facilmente contornada. 6.3.6.3 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:

iptables iptables iptables iptables iptables iptables iptables iptables

-t -t -t -t -t -t -t -t

filter filter filter filter filter filter filter filter

-A -j -N -A -A -A -A -A

INPUT -i ACCEPT internet internet internet internet internet internet

ppp0 -j internet

-s -p -p -p -p

www.debian.org tcp --dport 21 tcp --dport 23 tcp --dport 25 tcp --dport 80

-p -j -j -j -j

tcp --dport 80 -j RETURN DROP DROP DROP DROP

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 ter notado, o alvo RETURN pode facilitar 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 determinadas mquinas.

6.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 6.1.14 O que so tabelas? para maiores detalhes). 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, exemplos 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 6.4.2 Fazendo IP masquerading (para os apressados) ou 6.4.3.1 Fazendo IP Masquerading). Voc tem uma conexo que lhe oferece um endereo IP permanente (ADSL, por exemplo) ento o SNAT o que precisa (veja 6.4.3 Fazendo SNAT).

6.4.1 Criando um novo chain na tabela NAT


O procedimento para criao de um novo chain nesta tabela o mesmo descrito em 6.2.6 Criando um novo chain - N 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".

6.4.2 Fazendo IP masquerading (para os apressados)


Voc precisar de um kernel com suporte ao iptables (veja 6.1.15 Habilitando o suporte ao iptables no kernel e ip_forwarding 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_forwarding

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 requisies/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 6.5.1 Especificando o tipo de servio).

6.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 fragmentos 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 Internet 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 expor 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 intermitentes como PPP, veja 6.4.3.1 Fazendo IP Masquerading). 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 operao de SNAT realizada atravs do chain POSTROUTING:
# Modifica o endereo IP dos pacotes vindos da mquina 192.168.1.2 da rede interna # que tem como destino a interface eth1 para 200.200.217.40 (que o nosso endereo # IP da interface ligada a Internet). iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth1 -j SNAT --to 200.200.217.40

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 operao 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 comando echo "1" >/proc/sys/net/ipv4/ip_forward para habilitar o suporte a redirecionamento 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.217.40-200.200.217.50

Modifica o endereo IP de origem de todas as mquinas da rede 192.168.1.0/24 que tem o destino 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. # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 \ -j SNAT --to 1.2.3.0-1.2.3.4 --to 1.2.3.6-1.2.3.254
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 200.200.217.40-200.200.217.50:1-1023

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.217.40-200.200.217.50 --to 200.200.217.70-200.200.217.73

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). OBS2: Como notou acima, o SNAT usado quando temos uma conexo externa com um ou mais IP's fixos. O Masquerading uma forma especial de SNAT usada para funcionar em conexes que recebem endereos IP aleatrios (PPP). OBS3: 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. 6.4.3.1 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 6.4.3 Fazendo SNAT. 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 pacotes no kernel.

6.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 192.168.1.2 vindo da interface eth0 # para 200.200.217.40. iptables -t nat -A PREROUTING -s 192.168.1.2 -i eth0 -j DNAT --to 200.200.217.40

Tambm possvel especificar faixas de endereos e portas que sero substitudas no DNAT:
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 200.200.217.40-200.200.217.50

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 -j DNAT --to 200.200.217.40200.200.217.50:1024:5000

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. OBS: Se por algum motivo no for possvel mapear uma conexo NAT, ela ser derrubada. 6.4.4.1 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 especfico para se para fazer proxy transparente (para redirecionamento de endereos/portas, veja 6.4.4 Fazendo DNAT). Todas as operaes de redirecionamento de portas realizada no chain PREROUTING.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 81

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.

6.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.

6.5 A tabela mangle


A tabela mangle serve para especificar aes especiais para o tratamento do trfego que atravessa os chains. Nesta tabela existem dois chains: PREROUTING e OUTPUT (veja 6.1.14 O que so tabelas? para maiores detalhes). Opes com o Tipo de Servio (TOS) especificada nesta tabela para classificar e aumentar consideravelmente a velocidade de trfego considerados em tempo real.

6.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. 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 dos servios em sua mquina. Em testes realizados em minha conexo de 56K, o uso de regras TOS aumentou bastante o desempenho em trfego interativo (em torno de 300%), durante o uso total da banda da interface ppp em um grande download. 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. Os pacotes vem por padro com o valor TOS ajustado como prioridade

normal (bits tos ajustados para 0x00). O tipo Mnima Espera o mais usado, pois prioriza o trfego em servios interativos. 6.5.1.1 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. 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 16

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 udp --dport 4000 -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. 6.5.1.2 Especificando o TOS para o trfego de entrada Este prioriza o trfego que entra da mquina. Sua operao realizada no chain PREROUTING. No faz muito sentido o uso deste chain dentro de uma rede pequena/mdia, pois o trfego que recebermos ser priorizado pelo sada de outras mquinas da internet/outras redes antes de chegar a nossa. 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-tos 0x10

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.

6.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).

6.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 mensagens 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.

6.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
o o

s - Segundo m - Minuto

o o

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.

6.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 --limit 1/s -j ACCEPT 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 limit -limit 1/s -j RETURN 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: 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 for colocada no chain INPUT sem modificaes obviamente colocar em risco a segurana de seu sistema.

6.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. 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 for colocada no chain INPUT sem modificaes obviamente colocar em risco a segurana de seu sistema.

6.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 6.3.5 Especificando uma exceo). 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 assimtrico):
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.

6.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:

--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 destino esteja presente no parmetro.

Este mdulo pode eliminar muitas regras de firewall que fazem o mesmo tratamento de pacotes para diversas portas diferentes.
iptables -A INPUT -p tcp -i ppp0 -m multiport --destination-port 21,23,25,80,110,113,6667 -j DROP

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

6.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 00:80:AD:B2:60:0B.

mquina

com

endereo

ethernet

igual

6.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 especificado. 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 especificado. --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 conferiro!
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.

6.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.

6.7.1

ping 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 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-nat | +-------------+ +----------+ +-------------+ +----------------+

ENTRADA DOS PACOTES (Retorno da resposta ping acima): +-----------------+ +------------+ |PREROUTING-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). 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.

6.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): +-------------+ +----------+ +-------------+ +---------------+ |OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat| +-------------+ +----------+ +-------------+ +---------------+ ENTRADA DE PACOTES (respostas da requisio vindas de 192.168.1.1): +-----------------+ +------------+ |PREROUTING-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| +-------------+ +-------------+

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). 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.

6.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-nat| +-------------+ +----------+ +-------------+ +---------------+ ENTRADA DE PACOTES (respostas da requisio de 192.168.1.4): +-----------------+ +------------+ |PREROUTING-mangle| => |INPUT-filter| +-----------------+ +------------+

A requisio ftp passa atravs dos chains especificados em SADA DOS PACOTES com o destino 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| +-------------+ +-------------+

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.

6.7.4 Conexo FTP de 200.217.29.67 para 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-nat| +-------------+ +----------+ +-------------+ +---------------+ ENTRADA DE PACOTES (respostas da requisio vindas de 200.198.129.162): +-----------------+ +--------------+ +------------+ |PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter| +-----------------+ +--------------+ +------------+

A requisio ftp passa atravs dos chains especificados em SADA DOS PACOTES com o destino 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 estabelecida, o caminho de sada de pacotes :
+-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+

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-filter | +-----------------+ +-------------+

pois os dados no precisam de tratamento DNAT (o chain PREROUTINGnat 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.

6.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-filter| +-----------------+ +--------------+ +------------+ SADA DE PACOTES (envio da resposta a 192.168.1.4) +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+

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 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.

6.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-filter| +-----------------+ +--------------+ +------------+ SADA DE PACOTES (respostas da requisio acima para 192.168.1.4): +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+

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-filter| +-----------------+ +------------+

pois os dados no precisam de tratamento DNAT (o chain PREROUTINGnat 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.

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


Endereo de Origem: 192.168.1.4 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-filter| => |POSTROUTING-nat| +-----------------+ +--------------+ +--------------+ +---------------+ ENTRADA DE PACOTES (respostas da requisio acima, enviadas para 192.168.1.4): +-----------------+ +--------------+ |PREROUTING-mangle| => |FORWARD-filter| +-----------------+ +--------------+

A requisio ftp passa atravs dos chains especificados em SADA DOS PACOTES com o destino 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 :
+-----------------+ +--------------+ |PREROUTING-mangle| => |FORWARD-filter| +-----------------+ +--------------+

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. 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 substituindo o endereo de destino para 192.168.1.4. Caso uma operao de Masquerading falhe, os pacotes sero Bloqueados.

6.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 (envio da requisio vindas de 200.198.129.162): +-----------------+ +--------------+ +------------+ |PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter| +-----------------+ +--------------+ +------------+ SADA DE PACOTES (respostas da requisio de 200.198.129.162): +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+

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 estabelecida, o caminho de entrada de pacotes :
+-----------------+ +------------+ |PREROUTING-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.

6.7.9 Grfico geral da passagem dos pacotes


Este grfico foi retirado do documento netfilter-hacking-HOWTO.txt e mostra a estrutura geral de passagem dos pacotes nas tabelas/chains. Os exemplos de passagem de pacotes acima podero ser facilmente comparados com as etapas abaixo para compreender a estrutura do iptables.
E ---> PREROUTING ------> (ROTEAM.) ---> FORWARD ----------> POSTROUTING --> S Mangle e | Filter ^ NAT (Src) NAT (DNAT)) | | | (ROTEAM.) V | IN Filter OUT - Mangle, | ^ NAT (DNAT) | | Filter V | +----------------------------------------+ | Processo Local | +----------------------------------------+

6.8 Exemplos de configuraes do iptables


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

6.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 6.6.1 Conferindo de acordo com o estado da conexo para detalhes.
iptables -A INPUT -i ppp0 --syn -j DROP

Este acima mais simples e possui o mesmo efeito: Pacotes SYN so usados para iniciar 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.

6.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 6.6.6 Especificando mltiplas portas de origem/destino para detalhes).

6.8.3 Conectando sua rede interna a Internet


O seguinte exemplo permite ligar sua rede interna com a faixa de IP's 192.168.1.* a internet (usando uma conexo discada do tipo ppp):
iptables -A nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -j MASQUERADE echo "1" >/proc/sys/net/ipv4/ip_forward

6.8.4 Um exemplo de firewall simples


Esta seo possui um exemplo mais elaborado de firewall que servir para mquinas conectadas 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 potenciais 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 registradas conhecimento do administrador.

nos

logs

do

sistema

para

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://focalinux.cipsga.org.br # # # # # # # # # # assumido um sistema usando kmod para carga automtica dos mdulos usados por 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 # Tabela filter iptables -t filter iptables -t filter iptables -t filter # Tabela nat iptables -t nat -P iptables -t nat -P iptables -t nat -P # Tabela mangle iptables -t mangle iptables -t mangle Polticas ##### -P INPUT DROP -P OUTPUT ACCEPT -P FORWARD DROP PREROUTING ACCEPT OUTPUT ACCEPT POSTROUTING DROP -P PREROUTING ACCEPT -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 " 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 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: samba " iptables -A ppp-input -p udp --dport 137:139 -j LOG --log-prefix "FIREWALL: samba " # Bloqueia qualquer tentativa de nova conexo de fora para esta mquina iptables -A ppp-input -m state --state ! ESTABLISHED,RELATED -j LOG --log-prefix "FIREWALL: ppp-in " 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 # ####################################################### ##### 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, o # squid e smtpd do firewall devem ser obrigatoriamente usados. Tambm registramos # as tentativas para monitorarmos qual mquina est tentando conectar-se diretamente. iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -p tcp --dport 80 -j LOG -log-prefix "FIREWALL: SNAT-www "

iptables -t nat -A POSTROUTING -s log-prefix "FIREWALL: SNAT-smtp " iptables -t nat -A POSTROUTING -s iptables -t nat -A POSTROUTING -s # feito masquerading dos outros # ppp0 iptables -t nat -A POSTROUTING -s

192.168.1.0/24 -o ppp+ -p tcp --dport 25 -j LOG -192.168.1.0/24 -o ppp+ -p tcp --dport 25 -j DROP 192.168.1.0/24 -o ppp+ -p tcp --dport 80 -j DROP servios da rede interna indo para a interface 192.168.1.0/24 -o ppp+ -j MASQUERADE

# Qualquer outra origem de trfego desconhecida indo para eth0 (conexes vindas # de ppp+) so bloqueadas aqui iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.0/24 -j LOG --log-prefix "FIREWALL: SNAT unknown" 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 aps # 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 0x10 iptables -t mangle -A OUTPUT -o ppp+ -p udp --dport 53 -j TOS --set-tos 0x10

7 O PROXY SQUID
Adaptado de O Squidnomicon, por <arfreitas@ig.com.br <mailto:arfreitas@ig.com.br>>,Verso 1.21 <http://www.alceujun.hpg.ig.com.br/linux/squidnomicon.html> O Squid amplamente utilizado como servidor cache e servidor de proxy transparente http. O Squid como PROXY HTTP aberto uma porta em TCP, onde o cliente ir configurar o seu navegador para requisitar pacotes da mquina servidora. O Proxy http est configurado com algumas protees de segurana de acesso pginas. Algumas pginas sero bloqueadas por conterem em seu link palavras que esto catalogadas no arquivo blacklist. As pginas que o administrador quiser liberar o acesso basta colocar a palavra no arquivo whitelist. O Squid como CACHE utilizado para armazenar contedos de pginas para que os clientes da rede interna no precisem buscar os dados na internet, mas primeiro vo buscar as pginas no servidor cache. O Squid faz uma verificao do contedo do cache com o contedo da pgina real e executa uma atualizao automtica.

7.1 Introduo
Resolvi escrever esse manual principalmente porque ningum o havia feito antes. Dentre todos os inmeros documentos sobre Linux e software livre em <http://www.linuxdoc.org> no h nenhum que fale sobre Squid, mesmo em ingls, quem diria em portugus. Voc poder encontrar maiores informaes sobre o Squid no seu website (<http://www.squid-cache.org>) e ainda poder recorrer a FAQS e a lista de discusso para dvidas. Squidnomicon significa manual do Squid. Eu achei divertido fazer uma relao com o Necronomicon (Livro dos Mortos). Mas no espere encontrar nenhuma outra semelhana alm desta. Talvez eu use um desenho do grande Cthullu como logo do manual, mas tenho receio dos direitos autorais. Este manual livre e est sobre a licena Free GNU Documentation. Qualquer ajuda (dicas, comentrios) e/ou modificaes so muito bem-vindas.

7.2 Requisitos bsicos


Voc ter que ter: um UNIX: o tutorial tem seu foque em Linux, mas com algum esforo

voc pode utilizar o mesmo tutorial em FreeBSD, SUN Solaris, etc.; o pacote/fonte do Squid; um computador: para testes qualquer um serve, mas para entrar em operao voc ter que ter pelo menos um Pentium 2 com 128MB e um HD de 4 Gb. Isto aproximado, e pode variar muito conforme o nmero de usurios X requisies. Basta saber que os requisitos de hardware de um servidor proxy so muito maiores em relao quantidade de memria e velocidade do disco do que para um firewall, principalmente devido ao cache; velocidade de processamento tambm influir na performance do proxy. conhecimento bsico sobre protocolo TCP-IP e Internet; conhecer o UNIX no qual voc quer instalar o Squid!

7.3 O feijo com arroz


O Squid um webproxy que suporta proxying para DNS e FTP, alem do tradicional HTTP. Ele permite tambm a criao de rvores de cache via HTCP, load balance para servidores HTTP (vide http_accelerator) e diversos modos de autentificao de usurio, o que tambm inclui a possibilidade de criao de listas de sites e/ou palavras proibidas para acesso. Neste capitulo irei mostrar apenas o bsico para voc ter o Squid rodando. Com essas configuraes, voc ir ter o Squid como proxy e efetuando cache das pginas visitadas.

7.3.1 Instalao
A instalao poder depender de qual distribuio voc estiver usando. Normalmente voc encontrara o Squid nos CDROM de distribuio em formatos RPM, DEB ou TGZ. Voc tambm pode usar o fonte do Squid e compilar os binrios usando somente as funes que voc precisar. Para distribuies que trabalham com pacotes a instalao muito simples:
rpm -ivh squid-versao.rpm (para distribuies baseadas em RPM)

ou
apt-get install squid (para o Debian)

O Conectiva (verso 6 e posteriores) tambm podem usar as mesmas facilidades do apt-get. Para instalar a partir do fonte, faca o download do Squid em <http://www.squid-cache.org> na seo de downloads. Depois execute:
tar -xzvf squid-versao.tar.gz <http://squid-versao.tar.gz>/ cd /diretorio_criado ./configure

make make install

Ler o arquivo README que acompanha o arquivo fonte tambm e essencial para obter os detalhes. A verso termina em nmeros pares (para verses estveis) e impares (para verses de teste) ento escolha a ultima de acordo com seus interesses. Procure sempre pelos arquivos com o RELEASE incluso.

7.3.2 Configurao
Depois de instalado voc provavelmente (espero!) ter os binrios e arquivos de configurao, muitos deles comentados e precedidos de comentrios sobre as funes que exercem. O arquivo de configurao do Squid fica em /etc/squid.conf. Inicialmente voc deve configurar apenas 3 parmetros para que tenha o Squid ao menos respondendo a requisies e criando cache das pginas requisitadas:
http_port 3128 cache_mem 8Mb http_access allow all

Com exceo do ultimo parmetro (que deve ser inserido) esses parmetros esto apenas comentados (com um sinal "#"). Depois disso voc pode iniciar o Squid usando o script de inicializao que fica dentro do diretrio /etc/rc.d/init.d (ou /etc/init.d para o Debian):
# cd /etc/rc.d/init.d #./squid start

Na maioria das distribuies o cache criado quando o Squid iniciado pela primeira vez (pelo menos para sistemas Linux). Voc ainda pode forar a criao de cache digitando:
# squid -z

Ainda possvel fazer com que o Squid interprete novos parmetros no arquivo de configurao sem interromper os processos atuais:
# squid -k reconfigure

O Squid j est rodando e aceitando conexes. Agora vamos explicar melhor os parmetros utilizados: http_port 3128: Este parmetro indica em que porta o Squid estar aceitando requisies de pginas Web. Vrias portas diferentes podem ser listadas simultaneamente, desde que estejam livres. cache_mem 8Mb: Este parmetro especifica a quantidade ideal de memria a ser usada pelo Squid, mas isso no significa um limite. O Squid ir ultrapassar o valor estipulado se assim for necessrio. http_access allow all: Inicialmente o Squid estar recusando o servio de proxy para qualquer requisio que no tenha sido feita a partir do localhost (127.0.0.1). Essa diretriz, pelo contrrio, esta

permitindo que qualquer um requisite qualquer pgina. O Squid permite uma grande flexibilidade sobre o que permitido ou no que o cliente requisite (conforme voc poder acompanhar mais frente). Agora voc pode fazer um teste com um navegador qualquer, como o Netscape ou o Internet Explorer. Para isso, configure (na parte referente a servidor proxy) o endereo IP do proxy Squid sem esquecer de indicar a porta 3128. As solicitaes agora sero atendidas pelo Squid, que ir fazer cache das requisies, como pginas html e figuras, o que aumenta consideravelmente a rapidez de navegao e diminui a ocupao de banda do link.

7.4 Controlando os usurios


Usurios costumam dar dores de cabea horrveis a um administrador de redes, mas tambm sem eles como voc justificaria seu salrio? O Squid fornece meios de evitar que voc tenha (muitos) problemas com seus usurios acessando a Internet para fins no muito ortodoxos. Voc pode bloquear acesso a algum tipo de recurso ou a um site inteiro. No arquivo /etc/squid.conf existem definies de listas de controle (ACL em ingls) e como feito o acesso a recursos definidos nestas listas. Antes de mostrar como a lista feita, procure ter antes em mente a seguinte idia: 1 - As regras so interpretadas na ordem que aparecem: quando voc define regras, a primeira interpretada. Se a regra descrita no combinar com a requisio a mesma ser comparada com a prxima regra, e assim por diante. 2 - Sempre, SEMPRE coloque como ltima regra uma ACL que bloqueie tudo. Se voc no fizer isso, seu controle vai para o espao. 3 - No crie regras demais e desnecessrias! Procure evitar redundncias e regras de controle que exijam resoluo de nomes. Isso pode atrasar muita a resposta do Squid para requisies. Existem diversos critrios/tipos de listas. Acompanhe abaixo: SCR A lista baseada no endereo IP do cliente (requisitante). DST A lista baseada no endereo IP do servidor (que ser requisitado). SCRDOMAIN O domnio da mquina cliente. O domnio sero obtido por resoluo reversa de IP o que pode causar atrasos para a requisio ter resposta. DSTDOMAIN Mtodo de controle sobre um domnio especifico.

SRCDOM_REGEX Expresso regular que e avaliada para tentar marcar um domnio requisitante; esse parmetro pode causar atrasos por usar resoluo reversa de endereo IP. DSTDOM_REGEX domnio de destino. TIME O mesmo que srcdom_regex s que para o

Dia da semana e hora da semana.

URL_REGEX Essa ACL ir procura em na URL uma expressa regular que voc especificar. URLPATH_REGEX Semelhante ao url_regex s que ira procurar a expresso na url toda exceto no nome do protocolo e domnio. Isso ira tentar combinar com o nome do diretrio ao longo da url. PORT O acesso pode ser controlado pela porta do endereo do servidor requisitado. PROTO Especifica o protocolo de transferncia. METHOD Especifica o tipo de mtodo da requisio. BROWSER expresso regular cujo padro tentara combinar com o contido no caberio HTTP de requisio do cliente. IDENT Seqncia de caracteres que combinam com o nome do usurio. Requer um servidor Ident rodando na mquina do cliente. IDENT_REGEX O mesmo que ident, mas utilizando-se de uma expresso regular. PROXY_AUTH Permite a autentificao de usurios atravs do envio de usurio/senha. Requer um programa externo para realizar essa autentificao. PROXY_AUTH_REGEX O mesmo que proxy_auth, s que ira tentar combinar o nome do usurio fornecido pelo programa de autentificao atravs de uma expresso regular. SNMP_COMMUNITY Seqncia de caracteres que tentaro combinar com o nome da comunidade SNMP. REQ_MIME_TYPE Expresso regular que tentara combinar com o tipo de contedo contido no caberio de requisio. ARP Tenta combinar o MAC ADDRESS.

Como voc pode ter notado, existe uma quantidade bem grande de facilidades com as quais voc pode construir uma ACL, ate mais do que voc provavelmente ira precisar (eu me pergunto se algum usa ident). Depois de definir as listas de controle voc precisa definir para cada linha da acl o que ela poder ter como permitido (ou negado). A lista de regras j um pouco menor.

HTTP_ACCESS sintaxe: http_access allow | deny [!] acl descrio: permite ou nega acesso ao servio http baseado na lista de acesso (acl) definida. O uso de "!" indica inverso (diferente de). Eu coloquei uma observao um pouco acima de que voc sempre tem de ter como ltima regra uma regra de bloqueie tudo, a fim de evitar brechas no conjunto de acl's que voc tenha criado. Voc pode usar o http_access para bloquear acesso a http dessa forma: acl all src 0.0.0.0/0 http_access deny all Isso diz ao Squid "qualquer requisitante". No final das contas, se um requisitante no tiver seu pedido encaixado em alguma acl anterior, ele ter seu pedido negado. ICP_ACCESS sintaxe: icp_access allow | deny [!] acl descrio: use para forar seus vizinhos a usarem voc como um <sibling> ao invs de pai. Isso e utilizado quando se trabalha com arvores de cache. MISS_ACCESS sintaxe: miss_access allow | deny [!] acl descrio: limita os domnios que podem fazer requisies ao cache do servidor utilizando os recursos acl. PROXY_AUTH_REALM sintaxe: proxy_auth_realm seqncia de caracteres descrio: na realidade esse comando no exerce nenhum tipo de controle, apenas informa ao cliente (atravs da seqncia de caracteres) aonde ele esta realizando o logon. No essencial, mas o padro aparece como "Squid proxy"? e voc pode mudar isso sem problemas. IDENT_LOOKUP_ACCESS sintaxe: ident_lookup_access allow | deny acl descrio: se a acl combinar com a requisio do cliente, este cliente ser autentificado por uma procura ident.

7.5 Exemplos de configurao


Agora que todos os itens foram discutidos vou mostrar alguns exemplos prticos de configurao para controle de acesso.

7.5.1 Permitir http_access para apenas uma mquina com MAC address igual a 00:08:c7:9f:34:41 :
acl all src 0.0.0.0 acl pl800_arp arp 00:08:c7:9f:34:41 http_access allow pl800_arp

http_access deny all

7.5.2 Para restringir acesso nas horas de trabalho (9 horas - 17 horas, de segunda sexta) da faixa de IP 192.168.2.0 mscara 255.255.255.0 :
acl all src 0.0.0.0 acl ip_acl src 192.168.2.0/24 acl time_acl time M T W H F 9:00-17:00 http_access allow ip_acl time_acl http_access deny all

7.5.3 Posso usar uma lista de controle com multiplos horrios para diferentes usurios?
Se voc pensou em algo assim:
acl carlos src 192.168.10.1 acl davi src 192.168.10.2 acl cleusa src 192.168.10.3 acl manh time 06:00-11:00 acl tarde time 14:00-14:30 acl noite time 16:25-23:59 http_access allow carlos manh almoo http_access allow davi manh almoo http_access allow cleusa noite

voc errou ! O Squid interpreta regras desta forma:


http_access REGRA definio1 E definio 2 E definio3

OU
http_access AO definio1 E definio 2 E definio3

Ateno porque esses E e OU so operadores lgicos! Portanto a acl:


http_access allow carlos manh almoo

nunca ir funcionar porque manh E almoo sero sempre falsos, uma vez que nunca sero verdadeiros na mesma hora. Como falso (de acordo com a lgica booleana):
0/1 E 1 = 0 (falso) http_access allow carlos E manh OU http_access allow carlos almoo

7.5.4 Quero criar uma acl para bloquear sites com a palavra sexo pois meus funcionrios ficam baixando filmes em Divx de pornografia:
acl porno url_regex sexo http_access deny porno

Isso tem algumas conseqncias. Primeiro que essa regra deve encabear a lista para voc no correr o risco de liberar o acesso antes de bloque-lo. Segundo que um site <http://www.sexoesaude.com.br> estaria encaixado na lista de bloqueio, apesar do contedo no ser o mesmo.

7.5.5 A idia acima e tima, mas eu tenho uma lista de palavras para fazer o mesmo. Terei que repetir esse comando vrias vezes?
De forma alguma:
acl porno url_regex "/etc/squid/porno.txt" http_access deny porno

No arquivo texto, inclua uma palavra sobre a outra, como uma coluna.

7.5.6 Ainda existem sites que escapam a esse controle. Gostaria de bloque-los diretamente.
acl porno2amissao dstdomain playboy.com

ou
acl porno2amissao dstdomain "/etc/squid/pornosites.txt" http_access deny porno2

7.5.7 Meu diretor reclama que agora no consegue mais ler as entrevistas no site da Playboy.
Chefe chefe. Antes que ele deixe de pagar seu salrio, inclua no arquivo /etc/squid.conf :
acl entrevistas urlpath_regex entrevistas http_access allow entrevistas

Essa regra deve vir ANTES do bloqueio do site da Playboy.

7.5.8 E uma lista de diretrios?


Insira esse contedo dentro de um arquivo texto:
batepapo$ batepapo/$ sexo/$ fofoca/$ chat/$

O smbolo de $ indica que a o Squid deve combinar as ocorrncias quando estas palavras aparecerem no final da URL. O smbolo usado em expresses regulares e pode ajudar a marcar casos bem especficos. A essa altura voc j sabe como proceder em seguida.

7.6 Recursos na Internet


O site do Squid possui muito mais documentao que esse pequeno tutorial e ponto obrigatrio de passagem se voc entende ingls: <http://www.squidcache.org> Outro site interessante e o ORSO (<http://web.onda.com.br/orso/index.html>) pois contem contedo interessante sobre o Squid, incluindo o SARG, script para gerar pginas html dos arquivos de log do Squid. No site voc tambm encontrara listas de palavras para bloqueios de sites pornogrficos. Voc poder encontrar verses novas desse manual no website <http://www.imortais.cjb.net/linux/>

APNDICE A. LICENA DE PUBLICAO LIVRE


Esta uma traduo no-oficial da Open Publication License verso 1.0, de 8 de junho de 1999, e no substituto legal para a Licena original, disponvel em <http://www.opencontent.org/openpub>. Entretanto, esta traduo poder auxiliar pessoas que falem Portugus a entender melhor a licena. permitido a qualquer pessoa copiar e distribuir cpias desse documento de licena, desde que sem a implementao de qualquer mudana.

OPEN PUBLIC LICENSE


Draft v1.0, 8 june 1999

I. Requisitos comuns s verses modificadas e no modificadas


Os trabalhos protegidos pela Licena de Livre Publicao (Open Publication License) podem ser reproduzidos e distribudos no todo ou em parte, em qualquer meio fsico ou eletrnico, desde que os termos desta licena estejam includos, e que esta licena ou uma incorporao dela por referncia (com quaisquer das opes escolhidas pelo autor ou editor) estejam presentes na reproduo. A forma apropriada para uma incorporao por referncia deste livro : Copyright 2002 Alfamdia Ltda. Este material somente poder ser distribudo se sujeito aos termos e condies firmados na Licena de Livre Publicao (Open Publication License), verso 1.0 ou superior (a verso mais atual encontra-se disponvel em <http://www.opencontent.org/openpub/>). Esta referncia, devidamente preenchida com os dados da publicao, deve ser seguida imediatamente com quaisquer opes escolhidas pelos autores ou editor do documento (consultar a seo Termos opcionais). permitida a redistribuio comercial de material licenciado pela Licena de Livre Publicao (Open Publication License). Qualquer publicao no formato livro padro (papel) requer obrigatoriamente a citao dos autores e editor originais. Os nomes dos autores e do editor devem aparecer em todas as superfcies externas do livro. Em todas as faces externas do livro, o nome do editor original deve estar impresso em tamanho to grande quanto o ttulo do trabalho, e citado como proprietrio em relao quele ttulo.

II. Copyright

O copyright de todo trabalho protegido pela Licena de Livre Publicao (Open Publication License) pertence aos autores ou proprietrios.

III. Escopo da licena


Os termos de licena a seguir aplicam-se a todos os trabalhos protegidos pela Licena de Livre Publicao (Open Publication License), a no ser que explicitamente indicado no trabalho. A mera adio de trabalhos protegidos pela Licena de Livre Publicao (Open Publication License) ou partes de trabalhos protegidos pela Licena de Livre Publicao (Open Publication License) em uma mesma mdia que contenha outros trabalhos ou programas no protegidos por essa licena no decorre em aplicao da Licena de Livre Publicao (Open Publication License) para esses outros trabalhos. O trabalho resultante deve explicitamente conter uma nota especificando a incluso do material protegido pela Licena de Livre Publicao (Open Publication License) e o aviso de copyright apropriado. APLICABILIDADE. Se alguma parte desta licena no puder ser aplicada em alguma jurisdio, as partes restantes deste documento continuam sendo aplicadas. AUSNCIA DE GARANTIA. Os trabalhos protegidos pela Licena de Livre Publicao (Open Publication License) so fornecidos "como esto", sem garantias de qualquer tipo, explcita ou implcita, incluindo, mas no limitado a, as garantias implcitas de comercializao e convenincia para um propsito particular, ou garantia de no-infrao.

IV. Requisitos para trabalhos modificados


Todas as verses modificadas de documentos cobertos por esta licena, incluindo tradues, antologias, compilaes e documentao parcial, deve seguir os requisitos abaixo: A verso modificada deve ser indicada como tal. As pessoas que fizerem as modificaes e as datas de modificao devem ser identificadas. O reconhecimento dos autores e editor originais (se aplicvel) deve ser mantido de acordo com as prticas acadmicas usuais de citao. O local da verso no-modificada do documento deve ser indicado. Os nomes originais dos autores no devem ser utilizados para indicar ou garantir seu endosso ao documento resultante sem a autorizao expressa dos autores.

V. Prticas recomendadas
Em adio aos requisitos desta licena, solicitado e extremamente recomendado aos redistribuidores que: Se os trabalhos protegidos pela Licena de Livre Publicao (Open

Publication License) estiverem sendo distribudos em impressos ou CD-ROM, os autores sejam informados por email, ao menos trinta dias antes, para que os autores tenham tempo de providenciar documentao atualizada. Esta notificao deve descrever as modificaoes introduzidas no documento, se existirem. Todas as modificaes substanciais (incluindo excluses) devem ser marcadas claramente no documento, ou ento descritas em um anexo ao documento. Finalmente, mesmo no sendo obrigatrio sob esta licena, considerado de bom tom oferecer uma cpia sem nus de todo o material modificado (impresso e CD-ROM) para os autores originais.

VI. Termos opcionais


Os autores e editores de documentos protegidos pela Licena de Livre Publicao (Open Publication License) podem escolher certas opes de licena simplesmente incluindo alguns pargrafos aps a cpia da licena ou sua referncia. Estas opes so consideradas parte da licena e devem ser includas com ela (ou com a referncia a ela) nos trabalhos derivados. As opes que se aplicam a este trabalho so: A: vedada a distribuio de verses com modificaes substanciais deste documento sem a expressa permisso dos proprietrios do direito autoral. B: vedada a distribuio deste trabalho ou qualquer derivado seu em qualquer formato de livro padro (papel) sem a prvia autorizao dos proprietrios do direito autoral.

Polticas de Publicao Livre


(O texto a seguir no considerado parte da licena.) Os trabalhos protegidos pela Licena de Livre Publicao (Open Publication License) esto disponveis e podem ser acessados na home page da Open Publication <http://works.opencontent.org/> . Os autores de trabalhos protegidos pela Licena de Livre Publicao (Open Publication License) podem incluir suas prprias licenas nesses trabalhos, desde que os termos dessa licena no sejam mais restritrivos que os da Licena de Livre Publicao (Open Publication License). Em caso de dvidas sobre a Licena de Livre Publicao (Open Publication License), contactar David Wiley <dw2@opencontent.org> ou a lista de autores de publicaes <opal@opencontent.org <mailto:opal@opencontent.org>> via email. Para se inscrever na lista de autores de publicaes livres (Open Publication Author's List), mande um email para <opal-request@opencontent.org <mailto:opal-request@opencontent.org>> com a palavra subscribe no corpo da mensagem.

Para enviar mensagens para a lista de autores de publicaes livres (Open Publication Author's List), mande um email para opal@opencontent.org ou simplesmente responda a uma mensagem postada. Para se desinscrever na lista de autores de publicaes livres (Open Publication Author's List), mande um email para opal-request@opencontent.org com a palavra unsubscribe no corpo da mensagem.

Potrebbero piacerti anche