Firewall: Segurança de redes Linux

Paul Russell Gleydson Mazioli da Silva Alexandre Folle de Menezes

Tradução Oficial Alfamídia
Alexandre Folle de Menezes

Versão 1.1, agosto/2002.

As marcas registradas utilizadas no decorrer deste livro são usadas unicamente para fins didáticos, sendo estas propriedade de suas respectivas companhias. A Alfamídia não assume qualquer responsabilidade por erros ou omissões, ou por danos resultantes do uso das informações contidas neste livro. O capítulo 5 é uma adaptação do texto: Linux IPCHAINS-HOWTO Copyright © 1999 – Paul Russell, <ipchains@rustcorp.com> Tradução para o português por Gleydson Mazioli da Silva, <gleydson@linuxbr.com.br> O capítulo 6 é uma adaptação do texto: Guia Foca GNU/Linux Copyleft © 1999-2002 - Gleydson Mazioli da Silva. Fonte: http://focalinux.cipsga.org.br Os capítulos 1, 2 e 4 foram escritos por: Copyright © 2002 por Alexandre Folle de Menezes Tradução para português - Brasil, 2002: Alfamídia Ltda Rua Félix 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 coletânea de textos com licença GNU ou livres encontrados na Internet, conforme referências acima. Este material foi totalmente montado com fins didáticos, sem objetivo comercial. Foram acrescentados exemplos e exercícios desenvolvidos pela Alfamídia Ltda.

.

...................................................1..........................3 O endereço de Loopback ..........................2 GATEWAY................................2..................6..................................................................1 ROTAS ESTÁTICAS E DINÂMICAS .......................... 15 1..2................................. 18 1...................................................................................... 16 1........................................................... 14 1...........5 MONTAGEM DOS PACOTES ............................................................................................................................3...............2......................................................................3 ENDEREÇAMENTO DE SESSÃO (PORTAS) ........................CONTEÚDO CONTEÚDO ....................5.......................................... 16 1...................................4 ENDEREÇOS ESPECIAIS ...........1 ENDEREÇAMENTO DE ENLACE (MAC) .....................................................................................................1..............2...........................................................................2.....1 Máscaras de Sub-Rede ................................ 29 3.......................................4 CAMADA DE TRANSPORTE .................................................................................. 24 2................................................. 24 2......................................................................1 O pacote TCP ..................... 12 1....3 ICMP ................... 21 2 ENDEREÇAMENTO.................................3..................................................... 5 1 TCP/IP ........ 28 3 CONECTANDO REDES ......3 A CAMADA DE REDE ...............2..............6 ROTEAMENTO ....................................................................................................... 11 1............................... 20 EXERCÍCIOS..............4....2 O endereço de Broadcast.................................................. 27 EXERCÍCIOS.....1 O endereço de Rede........ 17 1..........6 SUPER-REDES E CDIR.........................2...................................2 ENDEREÇAMENTO DE REDE (IP) ......4..............4.....................7 REFERÊNCIA RÁPIDA DE MÁSCARA DE REDES ................................2.................................................................................................................................... 25 2......................................................... 25 2....................2 A CAMADA DE ENLACE DE DADOS ................................................................................ 29 3......................... 22 2................................................................................................................................................................... 23 2.......................................5 DIVISÃO EM SUB-REDES ...............................................................2......... 30 ...................................... 26 2................1.......................... 13 1.................................................................................................................................................2 CLASSES DE REDE IP ............. 14 1. 25 2..............4...................................................2............................... 22 2.......... 26 2.... 22 2........................................................... 14 1..1 MULTIHOMING ............. 24 2...................................................... 25 2.......................................1 ROTEAMENTO ...................................1 REEMPACOTAMENTO ...3 ENDEREÇOS RESERVADOS PARA USO EM REDES PRIVADAS ....2 UDP .......................................................2.............1 TCP...................... 23 2...................1 O DATAGRAMA IP...............4................. 12 1.....................................1 A CAMADA FÍSICA ........................4......................2 FRAGMENTAÇÃO DOS DATAGRAMAS ................................................................................................................................4..... 11 1....... 29 3.....

.......................................................2......4................................................................. 33 4.1...................... 37 4............................2 NETFILTER ............... 35 4............................... 41 5..........................................................2 LAND ....... 32 4 VULNERABILIDADES NO PROTOCOLO TCP/IP ......................... 39 5....2...................................................................................................................................................................1 ANATOMIA DO NETFILTER ........ 40 5............3 COMO? ............ 47 6 ....................2.......................................................................4 Rede Privada: Proxies Tradicionais.................... 45 5................4............................................................................. 34 4.......3 Rede Privada: Proxies Transparentes .......3 COMO? ....................................... PORTFORWARDING....... 46 5......................................... 39 5........................................................ 40 5.............................................3.................1....................2......................................1 SERVIÇOS VULNERÁVEIS AO IP SPOOFING:.... 37 5 FIREWALL IPCHAINS.........4...............................3..2...............................................4................................ 40 5..................................................... MASQUERADING.........................8 SMURF ..............................................................................2 NAT .................2..........................1 Rede Pública ...........................................2 POR QUE? ..................2 BÁSICO SOBRE A FILTRAGEM DE PACOTES......................2 MEDIDAS PARA SE PREVENIR DE ATAQUES IP SPOOFING: .................6 BONK/BOINK ..5 NEWTEAR............................................................ 33 4.......................3 Fazendo regras permanentes..................1...............2 SOBRE O PROTOCOLO TCP/IP ................. 35 4...........................................................3.......................... 35 4....... 43 5................................................1 Tipos de NAT ...................... 32 3.....................3.................4.............................................................2 Rede Privada: Masquerading..............................7 SSPING ..3 WINNUKE ........................1 O QUE É? ........ 36 4.....................................3 ROTEAMENTO....................... 36 4...................... 31 3....3 IMPLEMENTAÇÃO DE UM SERVIÇO NAT .........................................................3...1..............1 SYN FLOODING....... 41 5.........3...4.... 30 3........................................................................................ 31 3.. 39 5...............3................................3 IP SPOOFING ........3......................................................................................................... 42 5.............................. 40 5..................................................................... 37 4......................3................2.........3............ 42 5...........................................................................................3.............1 INTRODUÇÃO ...................... 44 5.............2 POR QUE? ...1 Um kernel com filtragem de pacotes......... 39 5...........................2.........2 O ipchains ............................................................................ 37 4................................................... 44 5....... 33 4..............................2..................................... 35 4.......................................... 43 5....4 SOBRE OS ATAQUES ..............1 O QUE? ...........................2...............................................................................2........2....................................................................2...............1 DISPONIBILIDADE DOS DADOS. 34 4....4.........................................................................2 CONFIGURAÇÕES DE FIREWALL SIMPLES ..............................................................................4 TEARDROP .............4 ONDE? ................................................................................................................................................................. IPAUTOFW...3......2...........................2........................................................4......... 39 5............................1 GUIA RÁPIDO DE TRÊS LINHAS PARA MASQUERADING ...................

.............................................................5...1 COMO OS PACOTES ATRAVESSAM OS FILTROS ................. 72 5...3 FILTRANDO O PING OF DEATH (PING DA MORTE) ...............4.........................................................2 MASQUERADING/FORWARDING NÃO FUNCIONA!.......5............................................. 53 5..........................2................7 XOSVIEW ESTÁ QUEBRADO! ....1.........................6..5 TOS NÃO FUNCIONA! .......................................7 Multiplas Regras at Once and Watching What Happens .... 68 5.....................6........4.....................8 FALTA DE SEGMENTAÇÃO COM “-J REDIRECT”! ..................................................................................................................................................4.............. 68 5............................. 73 5.........................1.......5 Operações em Masquerading ...................................... 73 5...6 IPAUTOFW E IPPORTFW NÃO FUNCIONAM! ..3........6........................................... 74 5.......6..............1.................................................. 74 5............................1.........................................2 Usando ipchains-restore..1 COMO ORGANIZAR SUAS REGRAS DE FIREWALL ............................5 FILTRANDO BOMBAS DE FRAGMENTO .......................2......................................3 -J REDIR NÃO FUNCIONA!.................5.....................................................................1.....4.......................................2....................... 77 6.... 65 5...........................5....................5................................ 64 5.......................................5 DIVERSOS .........6 Checando um Pacote ................7 COMO EU CONFIGURO A PROTEÇÃO IP SPOOF?....... 51 5..................2 O QUE NÃO FILTRAR ..............................................4..........3 Pesadelos FTP ... 76 6........6..........................................................6................................................................................ 75 6 FIREWALL IPTABLES........4.....4 Efeitos do Lado da Filtragem ......5....................................................................5 Serviços Internos Limitados ................................................ 69 5...........5...... 76 6.4..........................1................. 69 5.........6 PROBLEMAS COMUNS .......................4 FILTRANDO O TEARDROP E BONK.......... 77 7 .............................................................................1 Usando ipchains................. 69 5.......2 EXEMPLOS ÚTEIS ................................................4..... 50 5..........1 Pacotes ICMP .............1................................ 74 5.......4.5.................................... 70 5........ 57 5.........5.........3............ 74 5........................................................... 73 5....... 49 5........6.............................2 Conexões TCP para DNS (servidores de nomes)...........................................................................4........ 69 5..................................................1 IPCHAINS -L TRAVA! ................ 71 5...............4 IP FIREWALLING CHAINS ...6..................1 Usando ipchains-save............................ 74 5.............................................................. 70 5.....................................6 MODIFICANDO REGRAS DO FIREWALL ..........3 Especificações de Filtragem ........................1 VERSÃO ............................2..........9 EU NÃO POSSO CONFIGURAR TEMPO LIMITE NO MASQUERADE! .. 48 5...2..............................................3 MAIS DETALHES SOBRE MASQUERADING .............................................................................5.2 Operações em uma regra Simples ......1..............................4 CORINGAS NAS INTERFACES NÃO FUNCINAM! ........................................................1 INTRODUÇÃO .. 65 5... 66 5.... 71 5........ 71 5......... 71 5.............2 UM RESUMO DA HISTÓRIA DO IPTABLES............................6....................5........ 49 5.............................10 EU DESEJO PROTEGER IPX! ......................................................6..2... 73 5......................................................................... 48 5........................ 74 5.........................4..............1.....

..................3................... 81 6..15 HABILITANDO O SUPORTE AO IPTABLES NO KERNEL ....................................D .....................................................2.............................. 84 6...3.........1..... 94 6.....2 Especificando mensagens do protocolo ICMP.......Z ......................6........N.. 82 6............... 90 6............................. 78 6..................................2.......2... 96 6........................................2 MANIPULANDO CHAINS .................1...........................3 CARACTERÍSTICAS DO FIREWALL IPTABLES ...........1.......3........................................12 O QUE SÃO REGRAS?................................ 84 6.............................................2.......3 ESPECIFICANDO UM PROTOCOLO .............2.....1 Alvo REJECT ........ 79 6..................................I........P.2........3 Especificando RETURN como alvo.........................................................7 LISTANDO OS NOMES DE TODOS OS CHAINS ATUAIS ................................... 88 6..5 REQUERIMENTOS ..........................7 INSTALAÇÃO ......................................................3..............1 ADICIONANDO REGRAS ..........................2........................3 Especificando pacotes syn ..F.........................3............. 79 6....................................................................................................................6................................................. 87 6............................................3...... 101 6.......... 85 6.............................................................. 92 6...................................9 O QUE ACONTECEU COM O IPCHAINS E IPFWADM? ... 77 6................3...................................11 O QUE PROTEGER?..............10 ZERANDO CONTADOR DE BYTES DOS CHAINS .................. 88 6.... 102 8 .. 81 6....16 LIGANDO SUA REDE INTERNA A INTERNET .............. 80 6....4 FICHA TÉCNICA ..........3.3.........3.......5 SUBSTITUINDO UMA REGRA ....1................................R ...................................14 O QUE SÃO TABELAS?...... 101 6............... 79 6............................................... 92 6.................A...........................................................6 ARQUIVOS DE LOGS CRIADOS PELO IPTABLES ..............13 O QUE SÃO CHAINS? .......... 95 6.......................................................................2 LISTANDO REGRAS .10 TIPOS DE FIREWALLS ....... 88 6.........2 Especificando LOG como alvo......................................2.................. 81 6..................2 ESPECIFICANDO A INTERFACE DE ORIGEM/DESTINO .... 98 6....................................... 79 6........3............................................ 90 6......1..4 A TABELA NAT (NETWORK ADDRESS TRANSLATION) ................6..................................................1..............1....................................4 ESPECIFICANDO FRAGMENTOS ...........2...5 ESPECIFICANDO UMA EXCEÇÃO .......2......................... 97 6.............. 90 6..................................... 92 6.....FAZENDO NAT ............................................ 79 6................3..........................................................................1................6 ESPECIFICANDO UM ALVO. 91 6....................L ...........................4.............................................3.................................1 ESPECIFICANDO UM ENDEREÇO DE ORIGEM/DESTINO...........1..X..........11 ESPECIFICANDO O POLICIAMENTO PADRÃO DE UM CHAIN ........................8 LIMPANDO AS REGRAS DE UM CHAIN ............3........................................ 94 6.................4 INSERINDO UMA REGRA ....3 OUTRAS OPÇÕES DO IPTABLES............................... 84 6................9 APAGANDO UM CHAIN CRIADO PELO USUÁRIO .................1....................1....................1...................1 CRIANDO UM NOVO CHAIN NA TABELA NAT....................... 90 6..................................1....1..8 ENVIANDO CORREÇÕES/CONTRIBUINDO COM O PROJETO .6 CRIANDO UM NOVO CHAIN ............3...................................................................................6......................... 78 6........................ 96 6.................. 98 6............... 94 6...................................3 APAGANDO UMA REGRA ....2.........1 Especificando portas de origem/destino .......................

....6.......168...1.......... 105 6......4................... 126 7....1 PING DE 192............ORG.........BR ......................4 PARA 192........7...........4 PARA FTP............................................... 119 6.........8....1 BLOQUEANDO CONEXÕES DE FORA PARA SUA MÁQUINA ........1 Fazendo IP Masquerading ..168..........6..DEBIAN........ 116 6...........5............5 A TABELA MANGLE .........3 O FEIJÃO COM ARROZ ...........6 CONEXÃO FTP DE 192........217........................................................ 125 7..ORG........................ 110 6.......... 108 6. 113 6.....................4 CONTROLANDO OS USUÁRIOS ............... 106 6.1 INSTALAÇÃO ..3 PROTEÇÃO CONTRA PING DA MORTE ..........1 Especificando o TOS para tráfego de saída..........29....... 107 6....................................................................6..........6...1 PARA 192...7......................67 PARA FTP........ 118 6......................6 ESPECIFICANDO MÚLTIPLAS PORTAS DE ORIGEM/DESTINO................29..................................6 OUTROS MÓDULOS DO IPTABLES .....................................6.8 CONEXÃO FTP DE 200.................................................................................7.............1.....................5...................1..................1.............3 FAZENDO SNAT...........8...................3............4 UM EXEMPLO DE FIREWALL SIMPLES ...... 127 7..............................168........... 125 7.........162 PARA 200..........................1 CONFERINDO DE ACORDO COM O ESTADO DA CONEXÃO ..8 EXEMPLOS DE CONFIGURAÇÕES DO IPTABLES ....BR ... 105 6.................................1 PARA 192......5 PROTEÇÃO CONTRA IP SPOOFING ..............................167 ...........................................1.......................4 PARA 192................. 102 6.........7 CAMINHO PERCORRIDO PELOS PACOTES NAS TABELAS E CHAINS ............................1 .......6............... 120 7 O PROXY SQUID ......2 Especificando o TOS para o tráfego de entrada .7 CONEXÃO FTP DE 192...............................2 LIMITANDO O NÚMERO DE VEZES QUE A REGRA CONFERE .......1 PARA 192....7....3......4.....5......168.7. 106 6..1 Redirecionamento de portas ................. 120 6....................3......4 FAZENDO DNAT ......2 CONEXÃO FTP DE 192.......... 112 6..................198...............1.................................................................7 ESPECIFICANDO O ENDEREÇO MAC DA INTERFACE..168..................... 109 6........................3 CONEXÃO FTP DE 192.......... 119 6...................4...8.................................... 110 6................ 115 6... 112 6...........................................4 CONEXÃO FTP DE 200.. 128 9 ...6....... 125 7.................7........................2 REQUISITOS BÁSICOS ...................................5 PING DE 192.. 104 6..DEBIAN......6................................... 109 6.............168.......1.7.... 117 6... 106 6.................5 MONITORANDO CONEXÕES FEITAS NA TABELA NAT .........................................................1...7............................................. 114 6...................9 GRÁFICO GERAL DA PASSAGEM DOS PACOTES .........4.................................................217.............1...... 107 6.2 FAZENDO IP MASQUERADING (PARA OS APRESSADOS) ............. 118 6..........8.4..............4 PROTEÇÃO CONTRA SYN FLOOD ... 102 6....1.....1...........................4 ..........................................1 ............168...................6.4.......................1............ 119 6............... 111 6...............8 CONFERINDO COM QUEM CRIOU O PACOTE ............................2 CONFIGURAÇÃO .......................................................................168..............7..............1 .1 ESPECIFICANDO O TIPO DE SERVIÇO ......................4...................168..........168..............................................2 MONITORANDO TENTATIVA DE CONEXÃO DE TROJANS EM SUA MÁQUINA .................168.................................................1 INTRODUÇÃO ......... 107 6.....129............................ 109 6........................1.. 111 6...3 CONECTANDO SUA REDE INTERNA A INTERNET ...... 126 7...... 108 6..1 ....

.. 132 7........................5.......... 131 7......... 132 APÊNDICE A.................... 130 7.................2 PARA RESTRINGIR ACESSO NAS HORAS DE TRABALHO (9 HORAS .....................................5............................ 133 10 ..2. 130 7......6 RECURSOS NA INTERNET ............................................................... TEREI QUE REPETIR ESSE COMANDO VÁRIAS VEZES?......5 EXEMPLOS DE CONFIGURAÇÃO . 132 7...........................................0 MÁSCARA 255........5..................................3 POSSO USAR UMA LISTA DE CONTROLE COM MULTIPLOS HORÁRIOS PARA DIFERENTES USUÁRIOS?..................................... 131 7................5 A IDÉIA ACIMA E ÓTIMA... 131 7......5.......7 MEU DIRETOR RECLAMA QUE AGORA NÃO CONSEGUE MAIS LER AS ENTREVISTAS NO SITE DA PLAYBOY.............5........... 130 7................................5...........5..............6 AINDA EXISTEM SITES QUE ESCAPAM A ESSE CONTROLE............0 :.......................................... 130 7.........................255.........255......1 PERMITIR HTTP_ACCESS PARA APENAS UMA MÁQUINA COM MAC ADDRESS IGUAL A 00:08:C7:9F:34:41 :..................................... DE SEGUNDA SEXTA) DA FAIXA DE IP 192....5.................. LICENÇA DE PUBLICAÇÃO LIVRE.........................................4 QUERO CRIAR UMA ACL PARA BLOQUEAR SITES COM A PALAVRA SEXO POIS MEUS FUNCIONÁRIOS FICAM BAIXANDO FILMES EM DIVX DE PORNOGRAFIA:...........7......................................................... MAS EU TENHO UMA LISTA DE PALAVRAS PARA FAZER O MESMO... GOSTARIA DE BLOQUEÁLOS DIRETAMENTE.17 HORAS......................8 E UMA LISTA DE DIRETÓRIOS? ..................................168.......

determinação do caminho a ser seguido pelos pacotes. agrupando as tarefas relacionadas em camadas distintas. pode se usar uma implementação modular. homogêneas ou heterogêneas. 1. adaptação da taxa de transmissão de acordo com a capacidade do destino de receber dados. são necessários vários procedimentos: empacotamento dos dados. 11 . Ele pode fazer tanto a comunicação entre hosts ponto-aponto.90 Ethernet Aplicação Apresentação Sessão Transporte Rede Enlace Físico Cada camada acrescenta informações de controle ao pacote de dados e transmite seu pacote para a camada inferior. Existem dois tipos de interação entre aplicações. geralmente com quantidades pequenas de dados. Por exemplo.1 TCP/IP O TCP/IP é um protocolo que conecta redes LAN ou WAN.92 implementam as funções da camada física. Isso resulta em uma implementação complicada. Comunicação Orientada à Conexão é apropriada quando as aplicações precisam de uma troca contínua de dados. e os sinais que representam 0 e 1. Para facilitar essa tarefa. um modem padrão V. Para o TCP/IP foi adotado um modelo de comunicação dividido em camadas. como a comunicação entre cliente e servidor. que depois viria a influenciar o modelo OSI que hoje é considerado padrão. a Comunicação Não Orientada à Conexão é apropriada quando as aplicações trocam mensagens isoladas. Em contraste. gerenciamento de erros e retransmissão de dados. Para conseguir uma troca de dados confiável entre os nós. conectores.90 ou V.1 A camada Física A camada física trabalha com a mídia física. Aplicações e Serviços TCP UDP IP PPP V. que também adiciona seus dados. transmissão dos dados.

Um cabeçalho de quadro de LAN contém a os endereços “físicos” de origem e destino. 1. 12 . Header Dados Trailer Cada quadro tem um cabeçalho que inclui o endereço e controla a informação e um trailer que é usado para detecção de erros. Os roteadores examinam o endereço de destino no cabeçalho IP para direcionar os datagramas para seu destino. Note que o Enlace pode ser uma rede local ou uma conexão Ponto-aPonto.3 A camada de Rede O IP (Internet Protocol) executa as funções da camada de rede. Os dados podem atravessar um único enlace ou podem ser retransmitidos por vários enlaces pela internet. os dados são organizados em quadros. O IP roteia os dados entre sistemas. O protocolo PPP é um exemplo de camada de enlace de dados. A camada IP é dita Não-Orientada à Conexão porque cada datagrama é roteado independentemente e o IP não garante a entrega confiável ou em seqüência dos datagramas. Cabeçalho IP Endereço IP Origem Endereço IP Destino Informação Os datagramas têm um cabeçalho IP que contém endereçamento de rede. As unidades de dados são chamadas datagramas.1. que identificam as placas de rede. Na camada de Enlace de Dados.2 A camada de Enlace de Dados A camada de enlace de dados usa a capacidade de transmissão de dados brutos da camada física e transforma-a em uma linha que pareça à camada de rede ser livre de erros de transmissão.

FLAGS e FRAGMENTS: estes três campos controlam a fragmentação e a união dos datagramas. medido em palavras de 32 bits (4 bits) TOTAL-LENGTH: este campo proporciona o comprimento do datagrama medido em bytes.1 O Datagrama IP O cabeçalho de um datagrama IP pode ser visto na figura abaixo: 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 Versão Header Precedência Flags Length of Datagram Offset do Fragmento Checksum do Cabeçalho Identificação TTL Protocolo Endereço IP Origem Endereço IP Destino Opções Dados Os campos do cabeçalho têm o seguinte significado: • • • • • VERS: versão do protocolo IP que foi usada para criar o datagrama (4bits) HLEN: comprimento do cabeçalho. PROTOCOL: especifica qual protocolo de alto nível foi usado para criar a mensagem que está sendo transportada na área de dados do datagrama. IDENTIFICATION. HEADER-CHECKSUM: cabeçalho. O campo de 13 . 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.1.3. assegura integridade dos valores do • • • • SOURCE AND DESTINATION IP ADDRESS: especifica o endereço IP de 32 bits do remetente e receptor. 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. incluindo cabeçalho e dados.

a estação destino então reagrupará as instruções baseado nas identificações do gateway. os aplicativos da Internet se deparam com um problema: A diferença do tamanho das mensagens nas diversas redes.O header contém os endereços iniciais das redes e uma identificação referente à mensagem a qual faz parte. Na identificação dos fragmentos o gateway cria um header para cada fragmento. Cada fragmento tem o mesmo formato que um datagrama completo. Se uma margem de tempo padrão for ultrapassada e a mensagem não estiver completamente recontituida.4 Camada de Transporte 1. onde os datagramas são divididos em unidades menores.identificação contém um único inteiro que identifica o datagrama. com o propósito de que o destino saiba quais fragmentos pertencem a quais datagramas. 1. aciona um timer. É medido em unidades de 8 bytes. O procedimento de fragmentação é realizado por um gateway. o protocolo IP suporta o processo de fragmentação. O TCP conta com mecanismos que garantem que os dados são entregues às suas aplicações locais: • • • • • 14 Íntegros Em seqüência Completos Sem duplicatas Numeração dos segmentos Os mecanismos básicos que o TCP usa para conseguir isso são: . ao receber o primeiro fragmento.1 TCP O TCP (Transmission Control Protocol) proporciona conexões de dados confiáveis para as aplicações. é um campo muito importante porque quando um gateway fragmenta um datagrama. ele copia a maioria dos campos do cabeçalho do datagrama em cada fragmento. então a identificação também deve ser copiada. a estação destino. 1. independentemente de estar na ordem correta. Já na fase de reagrupamento.4. Nesse caso.2 Fragmentação dos Datagramas Ao realizar trocas de pacotes. • FRAGMENT OFFSET: especifica o início do datagrama original dos dados que estão sendo transportados no fragmento. a estação destino descarta os fragmentos recebidos e retorna à origem uma mensagem de erro.3. onde as mensagens são partidas em unidades menores e adequadamente identificadas.

ambos os lados podem enviar dados ao mesmo tempo. formando um segmento. O TCP aceita segmentos do IP. O TCP é um protocolo fullduplex. e passa os dados para a aplicação apropriada. que então roteia os mesmos até seu destino.1 O pacote TCP 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 Porta Origem Número de Seqüência Porta Destino Número de Reconhecimento Offset Reservado Checksum Opções Dados Flags Window Urgent Pointer Os campos do cabeçalho têm o seguinte significado: • Porta Origem e Destino: estes campos no cabeçalho TCP contêm os números de portas TCP que identificam os programas de aplicação dos extremos de uma conexão.1. 1. Número de sequência (32 bits): identifica a posição no fluxo de bytes do segmento enviado pelo transmissor. determina qual aplicação é o destino. ou seja. • • 15 . descartando duplicatas e confirmando o recebimento dos mesmos.4. O TCP adiciona um cabeçalho ao pacote de dados da aplicação. O TCP passa os segmentos ao IP.• • Estabelecimento de Timeout Retransmissão dos segmentos O lado que recebe os dados deve colocá-los em na seqüência correta. O TCP é implementado apenas nos hosts. Número de Reconhecimento (32 bits): este campo identifica a posição do byte mais alto (ou último byte) que o fonte recebeu.

O UDP adiciona um cabeçalho. O UDP passa os segmentos ao IP. e além disso um datagrama viaja de um gateway a outro até alcançar um gateway que possa expedí-lo diretamente à estação destino. Este campo é necessário já que o campo Options varia em comprimento dependendo de quais opções tenham sido incluídas. Com o UDP (User Datagram Protocol).4. Flags (6 bits): determina o propósito e conteúdo do segmento. é 16 .• Offset: contém um inteiro que especifica o início da porção de dados do segmento. Como IP provê um serviço de expedição de datagramas sem conexão e não confiável.4. o IP faz um uso muito eficiente da memória e recursos de transmissão. URGENT POINTER: TCP através deste campo permite que o transmissor especifique que alguns dados são urgentes. 1. • • • • WINDOW: através deste campo o software TCP indica quantos dados ele tem capacidade de receber em seu buffer.2 UDP O UDP não faz nenhuma garantia quanto à entrega dos dados. e é dever da aplicação trocar informações que confirmem a chegada dos dados.3 ICMP O IP tem um projeto simples e elegante.Este segmento solicita um PUSH o RST . formando um datagrama UDP.Campo de ponteiro Urgente é válido o ACK . e passa os dados para a aplicação apropriada. Em condições normais. Reserv: reservado para uso futuro. codificado assim: o URG .Campo de Reconhecimento é válido o PSH . O UDP é implementado apenas nos hosts. OPTIONS: o software TCP usa este campo para se comunicar com o software do outro extremo da conexão. isto significa que os dados serão expedidos tão rápido quanto seja possível. CHECKSUM: é usado para verificar a integridade tanto do cabeçalho como dos dados do segmento TCP. uma aplicação manda uma mensagem isolada para outra aplicação.Sincroniza numeros de sequências o FIN . que então roteia os mesmos até seu destino. determina qual aplicação é o destino. O UDP aceita segmentos do IP.O transmissor chega ao fim do fluxo de bytes. • • 1.Reset da conexão o SYN .

5 Montagem dos pacotes Na maioria das redes. 17 . Um gateway detecta congestionamento. Uma das mensagens que o ICMP pode enviar é: Destination Unreachable. ICMP provê comunicação entre o software de IP numa máquina e o software de IP numa outra máquina. tal como O mecanismo de controle que emite mensagens quando acontece algum erro é a função principal do protocolo ICMP. Tabela 1-1 Mensagens ICMP Tipo 0 3 4 5 8 11 12 13 14 Mensagem Echo Reply Destination Unreachable Source Quench Redirect Echo Time Exceeded Parameter Problem Time Stamp Time Stamp Reply ICMP somente reporta condições de erros à fonte original. uma condição não usual. o qual.necessário um mecanismo que emita informações de controle e de erros quando acontecerem problemas na rede. por sua vez pode ser dos seguintes tipos: • • • • • Network Unreachable (rede não alcançável) Host Unreachable (máquina não alcançável) Port Unreachable (porta não alcançável) Destination Host Unknown (máquina destino desconhecido) Destination Network Unknown (rede destino desconhecida) 1. chamadas de pacotes. Alguns dos problemas típicos que podem acontecer são: • • Um gateway não pode expedir ou rotear um datagrama. a informação é dividida em várias partes. por duas razões: compartilhamento de recursos e detecção/correção de erros. A fonte deve relatar os erros aos programas de aplicação individuais e tomar ação para corrigir o problema. O ICMP permite aos gateways enviar mensagens de erros ou de controle a outros gateways ou hosts.

6 Roteamento O TCP/IP pode ser usado em redes locais e para interligação de redes. permitindo assim que outros pacotes possam trafegar pela rede. o reenvio vai tomar muito tempo. basta retransmitir apenas os pacotes corrompidos. Aplicaçao Dados Dados Transporte Segmento TCP Transporte Datagrama UDP { IP Header Frame Header IP Header TCP Header UDP Header Dados Dados Rede Datagrama TCP/UDP Header Dados Enlace Quadro TCP/UDP Header Dados Frame Trailer 1. As diversas redes locais conversam através dos roteadores. Com a divisão da informação em pacotes. Em alguns casos. usa-se ondas de rádio ou mesmo luz infravermelha. degradando a performance da rede. Se houver diferença. esse número é comparado com a soma dos dados recebidos. é anexado em seu final um número indicando a soma de todos os bytes da mesma. Na recepção. Ambas as formas de conexão física estão sujeitas a interferências. Grande parte do trabalho complexo em redes é detectar e solucionar os erros no tráfego dos dados. Quando a informação é enviada. Se houver algum erro. Na maioria dos casos. cada um dos pacotes pode ser enviado/recebido individualmente. Pode haver mais de um caminho entre dois pontos. a informação está corrompida e deve ser retransmitida. que podem corromper os dados que trafegam na rede. Isso possibilita um compartilhamento justo dos recursos. Caso o bloco de dados seja muito grande. divide-se a informação em pacotes.Obviamente não é justo que um único usuário da domine os recursos da rede por muito tempo. Para minimizar este problema. 18 . A maioria das técnicas de detecção e correção de erros é baseada no uso de checksums. os dispositivos são conectados através de cabos.

Um é a interface loopback (explicada acima). Este processo continua até que o destino seja atingido. Esta tabela contém colunas que tipicamente contém no mínimo três campos. o mecanismo que usa determina qual a Roteador Nó Nó Roteador Nó Nó Roteador Nó Rede Local Internet Nó Nó Nó Nó próxima interface deve enviar o datagrama. Cada computador mantém uma lista de regras especiais de roteamento. Computadores simples também precisam rotear. manda-se o pacote para o roteador local. Se o destino não está no mesmo enlace. PPP. talvez uma interface Ethernet. chamada tabela de roteamento. Imagine um simples roteador de escritório. este irá repassá-lo ao próximo roteador. o outro é usado para falar com o resto da rede. Roteadores modernos são equipados com vários slots que podem receber diferentes tipos de adaptadores de rede: Ethernet. Quando o roteador recebe um datagrama de qualquer de suas conexões de rede. um número de segmentos Ethernet alimentando as estações de trabalho e outro link PPP intermitente fora de outro escritório. o segundo é o nome da interface que o datagrama deve ser roteado e o terceiro é opcionalmente o endereço IP da outra máquina que levará o datagrama em 19 . O software de IP roda nos hosts e nos roteadores. ele pode ter um link intermitente com a Internet.As redes isoladas são conectadas por meio de Roteadores IP. talvez uma interface serial PPP ou SLIP. todos os computadores na Internet têm dois dispositivos de rede. o primeiro é o endereço de destino. manda-se o datagrama diretamente para ele. etc. FDDI. Token-Ring. • • • Se o destino está no mesmo enlace. Pode ser útil ilustrar isto com um exemplo. Se o destino não estiver no mesmo enlace do roteador.

o endereço de destino (para quem ele é) é examinado e comparado com cada item da tabela de roteamento. Em uma LAN pequena. O IP funciona da mesma maneira.seu próximo passo através da rede. ele é empacotado em um quadro apropriado para o enlace. 1. Antes de um datagrama ser transmitido por um enlace.6. os roteadores mantém suas tabelas atualizadas trocando informações entre si. Os protocolos de roteamento mais usados são o RIP e o OSPF. A liberdade de escolha do protocolo estimulou a competição e levou a grandes melhorias nos protocolos. Em redes maiores. Se o campo gateway estiver preenchido. caso contrário o endereço de destino é assumido sendo uma rede suportada pela interface. Quando um roteador recebe o quadro: • • • O roteador desempacota o quadro e extrai o datagrama O roteador analisa o endereço de destino e descobre a mídia do próximo trecho O roteador reempacota o datagrama em um novo quadro. pega uma bicicleta e pedala outra parte. Uma nova rota foi estabelecida para um destino. e corre uma terceira etapa. O item que mais corresponder com o endereço é selecionado e o datagrama é direcionado a interface especificada. então o datagrama é direcionado para aquele computador pela interface especificada. e um destino não pode ser atingido.1 Reempacotamento Existe um evento olímpico onde um competidor nada uma parte do percurso. as tabelas de roteamento podem ser feitas manualmente. O datagrama foi projetado para poder ser mudado de uma mídia para outra até chegar ao seu destino. Um caminho foi interrompido. apropriado para o próximo laço 20 . 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. Não existe um padrão único para troca de informação entre roteadores. Roteadores podem descobrir eventos como: • • • Uma nova rede adicionada a internet.

Exercícios 1. Em que nível de TCP/IP rodam o telnet e o ftp? a) Físico b) Sessão c) Aplicação d) Transporte e) Enlace 2. Qual das seguintes aplicações não usa o protocolo UDP? a) TFTP b) DNS c) RPC d) FTP e) SNMP 21 .

cada interface (placa usada p/ rede) do computador ou roteador tem um endereço IP. os demais contêm o modelo e número serial do adaptador de rede. Se dois dispositivos possuírem endereços com o mesmo número de rede.2 Endereçamento de Rede (IP) O protocolo IP usa Endereços IP para identificar estações e para rotear os dados para elas. Cada octeto do endereço é convertido para um número decimal. Um endereço IP é um número de 32 bits.med. Inicialmente você pode imaginar o IP como um número de telefone. O número que irá diferencia-los dentro desta rede é o número do nó. À cada estação deve ser atribuído um endereço IP exclusivo.yale.294. Do contrário. Este tamanho foi escolhido para caber convenientemente em um registrador de 32 bits. O espaço de endereçamento resultante possui 232 (ou 4.edu é 130. O IP é composto por quatro bytes e a convenção de escrita dos números é chamada de "notação decimal pontuada".Em redes roteadas. sendo que cada adaptador tem um endereço que o identifica como único.31. Os endereços IP são números que identificam seu computador em uma rede TCP/IP. mas unidas através de um roteador. Também é permitido que o mesmo endereço IP seja usado em mais de uma interface de uma mesma máquina. então eles estão localizados na mesma rede. estão em redes distintas.132. Normalmente. Por convenção.296) números possíveis. os endereços de rede possuem um formato padronizado e bem definido. o endereço é composto de pelo menos dois números: o da rede e o do nó. Cada fabricante tem um código que o diferencia dos demais. 2.2 ENDEREÇAMENTO Em uma rede. mas normalmente cada interface tem seu próprio endereço IP. Todos os endereços dentro da rede têm um número de dígitos dentro dos 22 . Os endereços MAC são escritos no seguinte formato: 00-c0-49-3f-c6-0c Os primeiros bytes contêm o código do fabricante. e os números são separados por pontos.1 Endereçamento de Enlace (MAC) Os endereços MAC (Media Access Control) são atribuídos aos adaptadores de rede durante sua fabricação. Por exemplo. 2. As Redes do Protocolo Internet são seqüências contínuas de endereços IP. o endereço de um dispositivo é uma forma de identificar esse dispositivo como sendo único. A notação de ponto foi inventada para facilitar a leitura e escrita dos números IP.967.19. o endereço da estação blintz.

110. Por exemplo.Classes de Rede IP Por razões administrativas após pouco tempo no desenvolvimento do protocolo IP alguns grupos arbitrários de endereços foram formados em redes e estas redes foram agrupadas no que foram chamadas de classes.1 Multihoming Os sistemas não tem endereços IP. O mais amplamente aceito é para usar o endereço mais alto da rede como endereço broadcast. Na prática não importa muito se usar este endereço. as suas interfaces é que os têm.23 255.255.110.168. 2.2. mas você deve ter certeza que todo computador na rede esteja configurado para escutar o mesmo endereço broadcast. são transmitidos para o endereço broadcast.0 192. . Existem dois padrões normalmente usados para especificar o endereço de broadcast.255. Um roteador com quatro interfaces de rede precisa de quatro endereços IP. O endereço de broadcast é um endereço especial que cada computador em uma rede "escuta" em adição a seu próprio endereço. A porção dos endereços que são comuns entre todos os endereços de uma rede é chamada de porção da rede.110. assim todo computador na rede pode recebê-las simultaneamente. As faixas alocadas são: 23 .255 Qualquer endereço que é finalizado em zero em sua netmask revelará o endereço da rede a que pertence.168.168.endereços em comum. Certos tipos de dados. Estas classes armazenam um tamanho padrão de redes que podem ser usadas.110. Um sistema que está ligado a mais de uma sub-rede é chamado de multihomed. O conjunto dos dígitos restantes é chamado de porção dos hosts.110. No exemplo acima este seria 192.168. Por algumas razões outros sites têm adotado a convenção de usar o endereço de rede como o endereço broadcast. considere o seguinte: Tabela 2-1 Formação de Endereços IP Endereço do Host Máscara da Rede Porção da Rede Porção do Host Endereço da Rede Endereço Broadcast 192. O número de bits que são compartilhados por todos os endereços dentro da rede é chamado de netmask (máscara da rede) e o papel da netmask é determinar quais endereços pertencem ou não a rede. como informações de roteamento e mensagens de alerta.255. O endereço de rede é então sempre o menor endereço numérico dentro da escalas de endereços da rede e sempre possui a porção host dos endereços codificada como zeros.168. Este é um endereço onde os datagramas enviados são recebidos por todos os computadores da rede.0 192.23 192.

0 255.0 Endereços Possíveis na Rede 10. se os bits da sub-rede fossem todos 0.2.0.0.Tabela 2-2 Classes de Endereçamento Bits Mais Classe Significativos A B C D E 00000 10000 11000 11100 11110 Máscara de Rede 255.31. Por outro lado. e não à uma estação específica.168.255.0 – 255.255.0 Endereços Possíveis na Rede 0.255 192.1 O endereço de Rede Se um número IP tiver todos os bits da estação em 0.0. No entanto. por isso essa combinação é inválida.0.0.0.0 255. Pode-se obter um software de Proxy que repassa a informação entre os computadores internos e o mundo exterior através do endereço de Classe C registrado.255. ele se refere à rede.3 Endereços reservados para uso em Redes Privadas Se você estiver construindo uma rede privada que nunca será conectada a Internet. Eles estão especificados no RFC1597 e são os seguintes: Tabela 2-3 Endereços IP Reservados Para Redes Privadas Classe A B C Máscara de Rede 255.0.255.0.255.255.0.0.255.255.4 Endereços Especiais Nem todos os números podem ser atribuídos a uma sub-rede ou estação.0 .0.0 240.255. Por exemplo.10.0.0.16.255 224.255.0.239.0.255.0.0.192.0.255 128. existem alguns endereços IP's que foram reservados especificamente para este propósito.0. então você pode escolher qualquer endereço que quiser. 2.0 172.255.4. para sua segurança e padronização.255.0 .168.0. alguns endereços são reservados para broadcast.0 255.255.0.255 240.223.255 .0 – 127. outros são reservados para tabelas de roteamento. 2.0 .255.0 255.255. a identificação seria ambígua.255 Você deve decidir primeiro qual será a largura de sua rede e então escolher a classe de rede que será usada.191.255 2.0 . 24 .0.255.2.255.0 .172.255 192.255.255.2.

É uma seqüência de 32 bits.0. a máscara seria: 11111111 11111111 11111111 00000000 As máscaras geralmente são expressas usando a notação decimal.2. Por outro lado. Para fazer isso. como as estações e roteadores reconhecem o campo? A resposta é que os sistemas tem que ser configurados para conhecer o tamanho da parte de sub-rede do endereço. Por exemplo. se quisermos usar o terceiro byte de um endereço classe C para indicar a sub-rede. Pode ser feito então a divisão de 4 bits para o endereço de sub-rede e 4 bits para o endereço do sistemaMáscaras de Sub-Rede O tráfego é roteado para uma estação olhando para as partes de rede e sub-rede do seu endereço IP. Mas em organizações que escolhem os seus campos de sub-rede. então a máscara acima seria escrita como 255.255.18.255 é reservado para broadcast para todos os sistemas no link local.2 O endereço de Broadcast O endereço IP 255.0.4. onde os bits correspondentes à rede e subrede são setados em 1. apenas o endereço 127. Na prática. 2.255 significa um broadcast para a rede 192. Existem muitas estações que contém processos clientes e servidores.777.18. é feito um broadcast para a subrede correspondente. é feito um broadcast para todas as estações da rede indicada.1 é usado. o Endereço 192.4. Já no caso de querermos dividir um endereço Classe C usando 4 bits para o campo da sub-rede.255.0. eles geralmente usam um endereço especial chamado Endereço de Loopback.0.3 O endereço de Loopback No extremo oposto do broadcast. e os bits do sistema são setados em 0. Daí pode-se deduzir que um campo nunca pode ter menos do que 2 bits.7. a máscara ficaria assim: 25 . existem mensagens que nunca deixam a estação local.2. ou Subnet Mask. A grande diferença entre esses números levam à uma alocação muito ineficiente dos blocos e contribui para o esgotamento dos endereços IP.255.7.2.Divisão em sub-redes Uma rede de Classe A tem 16.536 e uma de Classe C apenas 256. Por convenção. O tamanho do campo da sub-rede é armazenado em um parâmetro chamado Máscara de Sub-rede.216 endereços. Os clientes locais comunicam-se com o servidor por IP. uma rede de Classe B suporta 65. qualquer endereço começando com 127 é reservado para esse propósito. Se os bits da estação e sub-rede forem todos 1. Um boa regra é nunca usar endereços de rede ou estação cujos bits sejam todos iguais (0 ou 1). Por exemplo. Se os bits da estação forem todos 1. Um endereço de Classe A.255. uma organização com um endereço de classe C só tem um espaço de endereçamento de 1 byte. B ou C tem a parte de rede com tamanho fixo.

11111111 11111111 11111111 11110000

Ou, na forma decimal, 255.255.255.240. Bits de Números de Sub-Rede Sub-Rede 0 1 2 3 4 5 6 7 0 2 4 8 16 32 64 Bits da Estação 8 7 6 5 4 3 2 1 Número de Máquinas 254 128 62 30 14 6 2 Máscara 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 Inválido

A tabela acima mostra as várias maneiras em que um endereço local de classe C pode ser dividido. Ele também mostra o número de sub-redes e estações para cada partição. O número de sub-redes e estações é menor do que o que se espera porque alguns endereços são reservados para propósitos específicos.Super-Redes e CDIR O método de atribuir blocos de endereços de classe A, B e C era muito ineficiente. Um bloco de Classe C proporciona 254 endereços, que pode ser muito ou pouco, dependendo do tamanho da organização. Pode haver escassez ou desperdício de endereços. Faria mais sentido atribuir às organizações o número de bits que elas realmente precisam. Isso é feito facilmente. Se uma organização precisa de 4000 endereços, ela ganha 12 bits para usar como parte local de seu endereçamento. Os 20 bits restantes são o prefixo, usado como endereço de super-rede ou prefixo. A maneira de nomear esse endereço “sem classe” é “/20”. Obter um prefixo de 20 bits é equivalente a obter 16 blocos contínuos de classe C. Para rotear para uma organização, o roteador precisa saber o número de bits no prefixo e o padrão de bits designado para o prefixo da organização. O roteador pode então enviar tráfego para a organização com uma única entrada na tabela de roteamento. Isto é chamado Classless Internet-Domain Routing (CDIR).Referência rápida de máscara de redes A tabela abaixo faz referência às máscaras de rede mais comuns e a quantidade de máquinas máximas que ela atinge. Note que a especificação da máscara tem influência direta na classe de rede usada: Máscara (octal)
Classe A:

Máscara (32 bits) /255.0.0.0 /255.128.0.0 /255.192.0.0

Número de Máquinas 16,777,214 8,388,606 4,194,302

/8 /9 /10 26

/11 /12 /13 /14 /15
Classe B:

/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

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

/16 /17 /18 /19 /20 /21 /22 /23
Classe C:

/24 /255.255.255.0 254 /25 /255.255.255.128 126 /26 /255.255.255.192 62 /27 /255.255.255.224 30 /28 /255.255.255.240 14 /29 /255.255.255.248 6 /30 /255.255.255.252 2 /32 /255.255.255.255 1 Qualquer outra máscara fora desta tabela (principalmente para a classe A), deverá ser redimensionada com uma calculadora de IP para chegar a um número aproximado de redes/máquinas aproximados que deseja.

2.3

Endereçamento de Sessão (Portas)

Todo processo que deseje estabelecer comunicação com outro processo deve se identificar de alguma forma. O TCP/IP implementa essa comunicação através do uso do conceito de portas (ou ports). A porta é um número de 16 bits que identifica processos (ou serviços de rede). O número da porta de origem e o número da porta de destino estão Ap. 23 Ap. 80 Ap. 53 Ap. 161

Portas TCP UDP 27

incluídos no cabeçalho de cada segmento TCP ou pacote UDP. Um socket é uma combinação de um endereço IP com um número de porta, e identifica um processo como único na rede.

Exercícios
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 endereço de rede não é 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. São máscaras padrão 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

28

ligada a duas ou mais redes e que encaminhará os datagramas para o destino. ele deve enviar seus datagramas para uma máquina especial. A idéia básica do roteamento é a criação de regras que estabeleçam que caminho um datagrama deve tomar baseado no endereço de destino dele.1. principalmente se essa máquina está conectada a um grande número de redes. a sua central telefônica verifica se o número está conectado a ela. ou seja. etc. No entanto. Serão estudados a seguir os conceitos básicos sobre roteamento. hubs.html#CONECTANDOREDES A criação de grandes redes de computadores é possível graças à interligação de pequenas redes de computadores.1 Roteamento Para entender melhor como funciona o processo de transmissão de um pacote de dados dentro de uma rede. Já em uma máquina gateway podem ser necessárias muito mais regras. Além dos meios físicos (cabos. pode ser feita uma analogia com o processo de uma ligação telefônica.) são necessários também os meios lógicos que permitam essa troca de informação.0/servidor/conectividade. Os códigos de país. Em uma máquina cliente essa regra é bastante simples: tudo que não for para a rede local deve ser enviado para a máquina gateway (essa regra é chamada rota padrão). e em seguida será visto um tipo particular de roteamento chamado NAT (Network Address Translation).1 Rotas estáticas e dinâmicas Existem dois tipos de rotas que podem ser utilizadas por um roteador: rotas estáticas e dinâmicas. roteadores. área e o prefixo do telefone são utilizados para determinar para qual central sua ligação deve ser encaminhada.com/doc/livros/online/8. quando um computador tenta se comunicar com outro que não esteja diretamente ligado a ele (ou em sua sub-rede). Um processo bastante semelhante acontece em uma rede de computadores. e ao processo de decidir para onde repassar os datagramas chamamos de roteamento. Ao se discar o número do telefone com quem se deseja falar.3 CONECTANDO REDES Adaptado de http://www. além de decidir para onde encaminhar a ligação. essa divisão de redes em pequenas unidades gera a necessidade de se criar meios que permitam que essas unidades sejam capazes de se conectar e trocar informações. Essa máquina especial recebe o nome de gateway ou roteador. funciona também como uma espécie de retransmissora ao receber sua ligação de uma central e repassá-la para outra. se não estiver ela "encaminha" a sua ligação para outra central que por sua vez faz o mesmo teste. 3. até chegar a central onde se localiza o número de destino. As rotas estáticas são explicitamente configuradas 29 . Cada central por onde a ligação passa. 3.conectiva.

2 Gateway Um gateway ou roteador funciona como uma porta de saída de uma rede. por exemplo. 30 . podem ser configurados com o auxílio do comando iptables. As rotas dinâmicas utilizam protocolos especiais como o RIP (Routing Information Protocol). OSPF (Open Shortest Path First) e BGP (Border Gateway Protocol) para divulgar e aprender rotas. 3. Será visto aqui apenas a configuração de rotas estáticas. 3. Essa máquina possui diferentes números IPs associados a cada interface. ele é um máquina 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. Existem alguns casos nos quais é necessário informar ao seu gateway como alcançar uma determinada rede. e não necessitam de nenhum serviço adicional. O Linux possui o serviço routed que é capaz de utilizar estes protocolos. As rotas estáticas podem ser configuradas com o auxílio do Linuxconf. O site oficial do netfilter é http://netfilter. O Linux é capaz de decidir automaticamente por qual interface de rede ele deve enviar datagramas baseado nos IPs de cada interface e na definição da rota padrão. • Serão estudados aqui os conceitos básicos do netfilter e como utilizar o recurso de NAT.pelo administrador. Para esses casos especiais é necessário inserir uma rota estática para esta rede (caso não se esteja usando um serviço de rotas dinâmicas). enquanto que as rotas dinâmicas podem ser "aprendidas" através da utilização de um serviço especial para esse fim. Esses recursos.gnumonks. agrupados sob o nome de netfilter. O netfilter permite a construção de firewalls e de gateways com NAT (Network Address Translation).2 Netfilter O kernel do Linux possui recursos bastante sofisticados para filtrar e transformar pacotes IP.1.org/. já que a utilização de rotas dinâmicas normalmente só é necessária em grandes redes e Sistemas Autonômos (AS). no caso dessa rede estar por trás de um outro gateway.

de acordo com suas necessidades (isto é. o netfilter possui estruturas chamadas tabelas. como por exemplo. Cada regra especifica um padrão ou critério a ser comparado com pacotes IPs e um alvo. um firewall. Essas tabelas são implementadas através de módulos do kernel.2. O crescimento explosivo da Internet tem transformado estes números em um 31 . POST-ROUTING e OUTPUT.). que. etc. ou ainda uma outra regra. Cada gancho é um ponto no caminho que um pacote IP percorre ao entrar ou sair de uma máquina. respectivamente. conforme a figura abaixo: Figura 3-1Estrutura do Netfilter O gancho PRE-ROUTING está ligado à entrada de pacotes na máquina. Por padrão o kernel possui três tabelas: filter. Cada tabela possui regras ligadas a cada um dos ganchos usados por ela.1 Anatomia do netfilter O netfilter possui um conjunto de ganchos (também chamados de cadeias ou chain) em vários pontos da pilha de um protocolo (será considerado aqui somente o protocolo IPv4). 3. nat e mangle.3. Para filtrar ou transformar pacotes IP. que será utilizada a seguir. está ligada aos ganchos PREROUTING. Os alvos podem ser ações pré-definidas de cada tabela.2. descartam ou mascaram um pacote. O gancho INPUT é atravessado pelos pacotes que chegam com destino à máquina local enquanto que o gancho OUTPUT é utilizado pelos pacotes originados na máquina local.2 NAT Os números IPs da Internet são finitos e cada número deve ser único. Estas regras podem ser criadas pelo administrador. NAT. após a decisão de roteamento os pacotes que não são destinados à máquina local atravessam o gancho FORWARD e finalmente saem da máquina passando pelo gancho POST-ROUTING. ou o que fazer com cada pacote que casa com o padrão especificado. que se ligam a conjuntos de ganchos. DROP ou MASQUERADE. A tabela nat.

isto é. que por sua vez altera os cabeçalhos destes pacotes inserindo o número IP que ela recebeu do provedor e os envia através de sua conexão. O NAT de origem é quando você altera o endereço de origem de um pacote. Quando uma máquina da intranet precisa se conectar a um site (por exemplo).2.3 Implementação de um serviço NAT Um serviço de NAT é necessário em soluções de Conexão Discada. em muitos casos não se justifica construir redes locais utilizando-se números IPs válidos. 3. a conexão passa a ter um outro endereço de origem. Esse tipo de NAT é sempre criado utilizando-se o gancho POSTROUTING.2. a máquina gateway recebe um número IP válido do provedor de acesso. e para se obter um número ou conjunto de IPs válidos é necessário requisitá-los a um órgão regulador e pagar por eles.2. várias intranets podem utilizá-los desde que não estejam diretamente conectadas umas às outras. Ao se conectar na Internet. Logo. logo antes do pacote sair da máquina. 3. uma vez que ele "esconde" as máquinas da rede mostrando para o resto do mundo apenas a máquina gateway. Este tipo de NAT é sempre criado utilizando-se o gancho PREROUTING.1 Tipos de NAT É possível dividir o NAT em dois tipos: o NAT de origem (SNAT) e o NAT de destino (DNAT). cada máquina da intranet se comporta como se estivesse ligada diretamente à Internet. Balanceamento de carga. isto é. ou seja. alterando o destino de uma conexão que passa pela máquina. não são utilizados na Internet. mas pode ser utilizado também como uma forma de aumentar a segurança de uma intranet. Dessa forma. O site responde à requisição enviando a resposta para a máquina gateway que altera novamente os cabeçalhos dos pacotes e os envia à máquina que originalmente os requisitou. ela envia seus pacotes IPs com a requisição à máquina gateway. enquanto que as várias máquinas na Internet "enxergam" apenas a sua máquina gateway. O mascaramento (como é também conhecido) é uma forma de SNAT. Para entender melhor o que isso significa considere o seguinte cenário: uma rede local ligada à Internet através de um roteador com conexão discada. isto é. Como alternativa certos intervalos de números IPs são considerados inválidos.recurso escasso. O NAT de destino se caracteriza pela alteração do endereço de destino do pacote. No entanto. 32 . isso cria um dilema: como conectar uma intranet que utiliza números IPs inválidos à Internet? A resposta a essa pergunta é através da utilização de um roteador que possua um número IP válido e que seja capaz de fazer uma tradução de endereços de rede (NAT). permitindo assim que eles possam ser utilizados em intranets sem problemas. proxys transparentes e repasse de portas são tipos de DNAT.

O intuito de todos. temos experimentado muitas instâncias. Land.é onde os ataques aqui discutidos pertencem. 33 . A disponibilidade dos dados é importante no decorrer dos negócios e grandes perdas podem ocorrer se a informação importante não estiver disponível devido a um ataque contra um computador. A razão 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). Ela poderá também distribuir a informação. a integridade é comprometida.etc). é o mesmo: impedir computadores desabilitando seu uso como pretendido.disponibilidade . e é a irmã mais nova da Internet. recomendo que você leia a seção sobre TCP/IP. gerencia e muda seus dados. Tais ataques são frequentemente chamados de "Denial-of-Service" (DoS). TCP/IP é uma abreviação de Transmission Control Protocol/Internet Protocol e é um dos vários protocolos desenvolvidos pelo Departamento de Defesa dos Estados Unidos no final da década de 70. contudo. Você não poderá mais acreditar que o valor dessa informação é verdadeiro. A última categoria . Bonk. Se puder conhecer uma informação a qual não se pretendia que essa pessoa conhecesse.O fenômeno é conhecido por diferentes nomes (Smurph. Para entender os ataques é necessário um conhecimento básico de como o protocolo foi projetado para funcionar. que não é autorizado.1 Disponibilidade dos dados Podemos dividir a segurança dos dados em três partes diferentes: integridade.4 VULNERABILIDADES NO PROTOCOLO TCP/IP Ultimamente temos presenciado um novo fenômeno no underground digital. Esse capítulo tenta explicar esses ataques. Essa rede chamou-se ARPANET (Advanced Research Project Agency Internetwork). 4. mas tornou-se muito fácil acessar as ferramentas necessárias para fazer más ações. Se alguém. 4. confidencialiade e disponibilidade.2 Sobre o protocolo TCP/IP Todos os ataques discutidos aqui se beneficiam de vulnerabilidades na implementação do protocolo TCP/IP visando a interrupção da atividade do computador atacado. A confidencialidade da sua informação é comprometida se uma pessoa for capaz de entrar no seu computador. O fenômeno em si não é novo. Antes de ler sobre os ataques.

explica o sistema de números seqüenciais como sendo o seguinte: "Os números seqüenciais são usados para confirmar a recepção de dados. A maioria das aplicações e ferramentas no UNIX baseam-se na autenticação do IP de origem. e os dados específicos do serviço podem ser trocado entre o cliente e o servidor. Muitos programadores têm usado controle de acesso baseado na máquina para segurança das suas redes. o TCP designa para cada pacote um número com um índice identificador. o agressor deve responder corretamente. no seu artigo "Sequence Number Attacks". a sequência de número inicial do servidor mais um. O endereço IP de origem é um identificador único mas não é fiável. pode então sincronizar com o destino e estabelecer uma sessão válida.4. Cliente e servidor podem agora enviar dados específicos do serviço. O sistema cliente começa por enviar uma mensagem SYN para o servidor. O servidor então confirma a mensagem SYN enviando uma mensagem de SYN-ACK para o cliente." Desta forma um atacante tem dois problemas: 1) Ele deve falsificar o endereço origem.3. Quando o sistema cliente recebe este pacote. É o ato de usar uma máquina para representar o papel de outra. Rik Farrow. No início de uma ligação TCP. ele deve enviar de volta o seu próprio reconhecimento. Amboa as máquinas usam este número para verificarem erros e fazerem relatórios. 2) Ele deve manter um número seqüencial com o destino. Assim que o agressor adivinhe o número seqüencial correcto. Se existir um servidor de aplicação a correr na outra ponta da ligação. mas nenhum reconhecimento. o cliente envia um pacote TCP com uma número seqüencial inicial. A segunda tarefa é a mais complicada porque quando o destino ajusta o número seqüencial inicial. Para entender o processo de spoofing.3 IP Spoofing Um ataque spoofing envolve a falsificação do endereço de origem. o servidor envia de volta um pacote TCP com o seu próprio número seqüencial. A conexão entre o cliente e o servidor é então aberta. Quando um circuito virtual é estabelecido entre duas máquinas. 4.1 Serviços vulneráveis ao IP Spoofing: Configurações e serviços que são vulneráveis ao IP spoofing : • RPC (Serviços de Invocação Remota de Funções) 34 . O TCP usa números seqüenciais. e o reconhecimento. o número inicial do pacote do cliente mais um. O cliente então completa estabelecendo a conexão respondendo com uma mensagem de ACK. Ele pode facilmente ser forjado (spoofed). Primeiro vou explicar o o processo de autenticação do TCP e do IP e depois como um atacante pode enganar a sua rede.

e. Se você permitir ligações externas de máquinas seguras. 4.1 SYN Flooding Esta é a família dos ataques DoS (Denial-of-Service) que usa variações da mesma técnica.) 4. recursos são alocados mas nenhuma conexão é efetivada.com que descreve vários ataques.com para uma lista completa de ataques que funcionam em diferentes sistemas operacionais. Isto é geralmente feito com um router. A cada vez que o computador alvo recebe tal requisição.rootshell.2 Medidas para se prevenir de ataques IP Spoofing: • Evite usar autenticação de endereço de origem.4.3. Configure a sua rede para rejeitar pacotes de redes externas que declaram ser de um endereço local. etc.4 Sobre os ataques Os ataques descritos nesse documento são apenas alguns dos que estão disponíveis na Internet.4. • • 4. Podem também funcionar para outros sistemas operacionais. rsh. Qualquer um mais interessado pode dar uma olhada no site www. Windows 95 ou Windows NT . Uma vez mais indico www.• • • Qualquer serviço que use autenticação de endereço IP O sistema X Window O conjunto de serviços R (rlogin. 4. O ataque é realizado enviando uma stream de pacotes para o computador alvo requisitando uma conexão (a flag SYN é setada). Quando muitas requisições são recebidas o computador alvo não pode mais alocar recursos para o tráfego da rede como resultado o computador pode parar. Implemente criptografia na autenticação em todo o sistema. Seu denominador comum é que todos usam vulnerabilidades ou implementações errôneas do protocolo TCP/IP ou ainda. requisitando a abertura de uma conexão) para qualquer porta da máquina 35 . Todos os ataques descritos abaixo funcionam em computadores com Windows for Workgroups. possibilite encriptação da sessão no router.rootshell. vulnerabilidades na especificação do TCP/IP em si. Esse site também tem links para download de programas que protegem contra esses ataques.2 Land Aqui o ataque acontece enviando-se um pacote com a flag SYN setada (i.

O efeito principal é o congelamento do computador. Um simples JavaScript pode automatizar essa tarefa. o ataque é direcionado contra a porta 139 (Serviço NetBIOS Session) do computador. A razão pela qual o ataque acontece deve-se a um erro em parte do protocolo TCP/IP que toma conta de pacotes fragmentados. O computador irá esperar por uma stream (cadeia de dados) da chamada Out-of-Band (OOB) banda de tráfego do computador que envia.10.133.4. Felizmente. Por exemplo: suponhamos que um computador com IP 200.126 esteja com a porta 139 aceitando conexões. Quando esse patches são instalados. O problema surge quando tais mensagens não são enviadas: o computador para.3 WinNuke O nuke tem sido uma atividade popular. consistindo em partes do pacote original.4. A Microsoft desenvolveu patches para download. 4. o pacote é dividido em pacotes menores.133. que precisa ser reiniciado. Esse tipo de ataque é voltado principalmente para computadores rodando Windows. O pacote é modificado de tal maneira que os endereços de envio e de recebimento do pacote são idênticos (spoofing). normalmente o computador trava e precisa ser reiniciado. Parece que se trata de resultado de uma má implementação do protocolo TCP/IP da Microsoft. estaremos atacando essa máquina.o computador pára.10. é fácil proteger um computador contra esse tipo de ataque.alvo. A razão pela qual o computador trava é que a Microsoft não manipula um flag especial de status no protocolo TCP . você está protegido contra esse tipo de ataque. Esse flag é setado em um pacote enviado para um computador rodando um sistema operacional Windows. mas.4 TearDrop Esse ataque utiliza outra vulnerabilidade na implementação do protocolo TCP/IP. principalmente em escolas. onde essa situação não é tratada satisfatoriamente. podemos digitar: http://200. Na barra de endereços do Browser. Caso positivo. A fragmentação do pacote pode ocorrer se o pacote que está sendo recebido for maior do que o tamanho permitido pela rede. 4. O resultado desse ataque pode variar.126:139 e se ficarmos atualizando a página. Esse ataque é muito simples de ser realizado (utiliza um canal legítimo)tem sido até mesmo implementado com uma linha de código na linguagem Perl.a flag URG(para urgente). Esse tipo de tráfego tem prioridade mais alta que o tráfego ordinário da rede. Quando os pacotes 36 . Normalmente. Esse ataque é direcionado à porta 139 de máquinas rodando o sistema operacional Windows. Os sistemas operacionais mais vulneráveis são Windows(95/98/NT) e Linux. Essa situação não é corretamente manipulada por algumas implementações do TCP/IP .

o computador pára. além da 55.menores chegam ao computador recipiente.7 Ssping Uma variação do ataque chamado "Ping da Morte". 4.4.5 NewTear Esse ataque é parecido com o TearDrop. o que demonstra que a Microsoft não levou as variações do ataque em conta quando o patch foi programado. Uma pessoa manda um pacote ICMP (ECHO_REQUEST) com um tamanho anormal para a máquina alvo. Uma implementação errônea do TCP/IP interpreta o fim do pacote antes do seu começo e o computador pára. Esse ataque funciona contra máquinas rodando Windows95/98 e NT mesmo que o patch TearDrop esteja instalado. Se sua máquina parar você é vulnerável a esse tipo de ataque. enquanto o TearDrop usa 28) e a manipulação do tamanho do UDP. Um teste simples para testar se você é vulnerável é pingar seu próprio computador. O Bonk ataca a porta 55 das máquinas. a flag MF (mais fragmentos) setada para 1 e tamanho N. Semelhante aos outros ataques.8 Smurf Smurfing é outro tipo de ataque semelhante aos que foram discutidos aqui. o ataque é conduzido mandando uma combinação especial de dois pacotes UDP/IP. 37 . O primeiro tem deslocamento 0.4. é possível mandar datagramas maiores do que o tamanho máximo definido. flag MF resetada para 0 e tamanho menor que N. A diferença é o tamanho da sobreposição dos pacotes (20 bytes. 4. Mais uma vez.4. ele tenta colocá-los juntos -aqui ocorre o erro e o computador pára. Quando a máquina alvo recebe tal pacote pode parar.a diferença é que esse último permite ataques em outras portas. O segundo tem deslocamento menor que N. O segundo pacote sobrepões-se ao primeiro.6 Bonk/Boink Outra variação do ataque TearDrop. O Boink é uma variação do Bonk . Use o comando ping -s 65510 seu_ip. Contudo. 4. 4.4. o erro deve-se a má implementação na secção do TCP/IP que manipula pacotes fragmentados. O tamanho máximo para datagramas TCP/IP é 65536 octetos (1 octeto = 8 bits). O deslocamento do fragmento do segundo pacote é ajustado para ser maior do que o comprimento do cabeçalho IP. Esse tipo de ataque Smurf pode ser considerado mais perigoso que os outros. Não se sabe porquê esse ataque funciona. Tecnicamente.

O ataque Smurf não tem intenção de parar um computador. Os computadores dessa rede irão responder enviando uma mensagem de ICMP ECHO_RESPONSE para o computador que eles assumem ter enviado a mensagem ( o computador alvo da rede). mas sim uma rede inteira. é difícil se proteger desse tipo de ataque. 38 . A rede irá parar até que o atacante pare de enviar os pacotes ou o tráfego seja bloqueado. Os pacotes são modificados de modo que o endereço da máquina que envia os dados é idêntico ao endereço do alvo (spoofing).Se o atacante tiver uma conexão rápida. É realizado enviando contínuas stream (cadeias) de pacote ICMP modificados para a rede alvo. o que resulta em os pacotes modificados serem enviados para todos os computadores de uma rede. Efetivamente. Além disso. os pacotes são enviados para os chamados endereços broadcast.não é preciso ser um grande matemático para saber que a quantidade de dados gerados pode parar a rede atacada. Esse tipo de ataque tem sido usado para parar vários Provedores de Acesso à Internet e todos os seus usuários.

1. 12 March 1999 Tradução para o português por Gleydson Mazioli da Silva.1. não especificava regras contrárias. v1.2 Por que? O antigo codigo do firewall do Linux não negociava com fragmentos.1. que foi uma regravação do ipfw dos BSD’s. possuia alguns truques. 5. Seção “Como?”. não faziam grandes alterações dinâmicamente. É requerido para administrar os filtros de pacotes IP nos kernels do linux 2. <gleydson@linuxbr. Seção “Como?” e verifique os títulos na seção “IP Firewalling Chains”. 39 . <ipchains@rustcorp. o PPP-HOWTO.1. esta parte dos kernels 2.0. que contém a última cópia.0.0. o Ethernet-HOWTO e o Firewall HOWTO que podem ser uma leitura interessante. eu não recomendo aplica-los a não ser que você ralmente necessita da funcionalidade que o ipchains oferece.0 é razoavelmente estável (eg. Veja “Onde?” para o ver site principal.com. eu acho. tinha contadores de 32 bits (no Intel no mínimo). e é dificil de gerenciar ( podendo causar erros do usuário).fan.3 Como? Atualmente o código está no kernel em desenvolvimento do 2.0. Paul Russell.34 funciona perfeitamente com o kernel 2.5 FIREWALL IPCHAINS Adaptado do Linux IPCHAINS-HOWTO. (Então denovo a FAQ alt. UDP ou ICMP. Se você esta convertendo através do ipfwadm.1 Introdução Este é o Linux IPCHAINS-HOWTO.br> 5. leia a seção “Porque?”.192.7. Para as séries do kernel 2. não permitia especificação de outros protocolos senão TCP.0 é mais recente que o patch fornecido.bigfoot).35).1. e os Apêndices da seção “Diferenças entre ipchains e ipfwadm” e a seção “Usando o script ipfwadm-wrapper”. Se a filtragem de pacotes é passado para você. o patch do kernel 2. 5. O IP-Masquerading HOWTO. 5. você precisará fazer o download de um patch da página Internet. leia a secao “Introdução”.0 é incompatível com patches do ipportfw e ipautofw.102 e superiores. Desde então o patch 2. Você também deve ler o Linux NET-3HOWTO.1 O que? O ipchains do Linux é uma regravação do codigo de firewall IPv4 do linux (que foi originalmente roubado do BSD) e uma regravação do ipfwadm.com>. o patch antigo ser OK. Se seu kernel 2.

“OK” e “Obrigado”. de onde vem.como negar.5. mas avisa a origem do pacote sobre o acontecido).1. usam o conceito de “conexão”—antes de qualquer pacote com os dados atuais serem enviados.ie. Isto inicia o pacote e é chamado de cabeçalho (head).2. copiando este pacote (digamos de 50k) pode fazer você receber 36 ou assim pacotes de 1460 bytes em cada um. a Internet) você tem a oportunidade de permitir certos tipos de tráfego. e o Netscape desperdiça partes do meu tempo 40 . e outros detalhes administrativos. 5. Alguns protocolos. No Linux. Lá estão anúncios da página doubleclick. mas o principio geral é de olhar o cabeçalho dos pacotes e decidindo seu destino. (puxando números ao acaso). O inicio de cada pacote diz onde ele esta indo. descartar o pacote como se ele nunca tivesse o recebido).4 Onde? A página oficial é The Linux http://www. assim você pode prevenir pacote de irem para certas partes de fora da rede.com>. vários pacotes de configuração (com cabeçalhos especiais) são trocados dizendo “Eu desejo conectar”. como TCP. 5. Como outro exemplo. ou rejeitar o pacote (REJECT . e decide o destino de todo o pacote. eu uso o Netscape para acessar os arquivos Dilbert. Entre na lista de discussão enviando uma mensagem contendo a palavra “subscribe” para <ipchains-request@rustcorp. Então os pacotes normais são trocados.net.2 Básico sobre a filtragem de pacotes 5. mail. desenvolvimento e uso. e aqui estão algumas coisas que nós podemos fazer com os pacotes. deixar o pacote seguir adiante). e logins remotos.rustcorp.2.1 O que é? Todo o tráfego da rede é enviado em forma de pacotes. Por exemplo. aceita o pacote (ACCEPT .com/linux/ipchains IP Firewall Chains Page Lá existe uma lista de discussão para relatar bugs. Ele pode decidir negar o pacote (DENY .ie. Por exemplo. a filtragem de pacotes é embutida no kernel. discussões. o tipo do pacote. que é usado para o trafego na web. o cabeçalho do pacote contém o endereço de destino do pacote.2 Por que? • Controle: quando você está usando um computador linux para conectar sua rede interna a outra rede (digo. Para enviar E-Mails para a lista use “ipchains” ao invés de “ipchains-request”. e desativar outros. Uma filtragem de pacotes é uma peça de software que olha no cabeçalho do pacote quando eles passam. O resto do pacote que contém o dado atual sendo transmitido. é usualmente chamado de corpo (body).

1 Um kernel com filtragem de pacotes Você precisará de um kernel que tem o novo IP firewall chains nele. • 5. tendo filtros de pacotes rejeitando pacotes de entrada usado para iniciar conexões. Você pode ver ser o kernel que está executando tem isto instalado verificando pelo arquivo “/proc/net/ip_FWchains”. você precisará compilar um kernel com o IP firewall chains. Caso contrário.1. talvez você deseja (como muitas pessoas) ser um observador na Internet. e ajuste a configuração como detalhado abaixo. você pode não desejar que pessoas de fora TELNETiando seu computador linux.copiando-a.1 ou 2.102 ou maior. seu kernel tem o suporte. Vigilância: muitas vezes uma máquina mal configurada na rede local pode decidir enviar pacotes para fora da rede.2. Primeiro copie o código fonte do kernel que deseja. Caso contrário.simplesmente não deixe ninguém conectar em seu computador. ou talvez você está simplesmente curioso por natureza.3. é maravilhoso conhecer como você pode restringir o que vem batendo em sua porta.net resolve este problema (lá estão meios melhores de se fazer isto).3 Como? 5. É bom dizer ao filtro de pacotes para avisa-lo se alguma coisa de anormal ocorre. e não um servidor (legando ou caso contrário) -. Como outro exemplo. Dizendo para o filtro de pacotes não permitir qualquer pacotes para ou de o endereço conhecido por doubleclick. As opções de configuração que precisa configurar para os kernels da série 2.2. aplique o patch da página web listada acima. sem pânico— leia o Kernel-HOWTO. talvez você pode fazer alguma coisa sobre isto.0 são: CONFIG_EXPERIMENTAL=y CONFIG_FIREWALL=y CONFIG_IP_FIREWALL=y CONFIG_IP_FIREWALL_CHAINS=y Para os kernels da série 2. você pode permitir ir para fora de sua rede. • Segurança: quando um computador linux é a única coisa entre o caos da Internet e sua bonita e organizada rede. embora mesmo que todas suas contas tenham senhas. você não precisará aplicar o patch (está na versão principal do kernel agora). mas você pode estar preocupado com os conhecidos “Ping of Death” (ping da morte) que vem de computadores maliciosos de fora. Se você não sabe como fazer isto.2: 41 . Se ele existe. Por exemplo. Se possui um kernel númerado 2.

Você provavelmente não deve usar este script a não ser se deseje fazer um método rápido de upgrade em um sistema que usa o ipfwadm (ele é lento. Veja Apêndice “Diferenças entre ipchains e ipfwadm” e Apêndice “Usando o script ipfwadm-wrapper” para um assunto mais detalhado sobre ipfwadm. stop) 42 . que foi usado pelo antigo código de firewall de IP.rules Crie um script parecido com o seguinte: #! /bin/sh # Script para controlar a filtragem de pacotes.3. O ipchains substitui o ipfwadm.” ..tar. A não ser que você seja um programador. Para fazer isto.CONFIG_FIREWALL=y CONFIG_IP_FIREWALL=y A ferramenta ipchains fala com o kernel e diz a ele quais pacotes filtrar. Eu recomendo usar os scripts “ipchains-save” e “ipchains-restore” para fazer estas regras permanentes. veja “Fazendo Regras Permanentes” para como fazer as regras serem restauradas quando o Linux é iniciado.rules ] || exit 0 case “$1” in start) echo -n “Ativando a filtragem de pacotes:” /sbin/ipchains-restore < /etc/ipchains. [ -f /etc/ipchains.2. e assim será perdida na reinicialziação. configure suas regras.2 O ipchains A ferramenta ipchains insere ou deleta regras da seção de filtragem de pacotes do kernel. Isto quer dizer que qualquer coisa que você configurar. Neste caso. etc). então execute (como root): # ipchains-save > /etc/ipchains. será perdida na reinicialização. 5. Há um conjunto de scripts úteis disponíveis no site ftp do ipchains: ftp://ftp.rules || exit 1 echo 1 > /proc/sys/net/ipv4/ip_forward echo “. # Se não existir regras.3 Fazendo regras permanentes Sua configuração atual do firewall é armazenada no kernel. 5.gz Este contém um script shell chamado ipfwadm-wrapper que permite fazer a filtragem de pacotes como fez antes.3.rustcorp.com/ipchains/ipchains-scripts-1.2. não checa argumentos.1. assim você controlará a filtragem de pacotes. ou curioso demais. não faz nada.2. você não precisa muito deste HOWTO.

Os méritos de segurança de cada configuração não serão discutidos aqui. Masquerading e proxying são discutidos em HOWTOs separados. *) echo “Use: /etc/init. Um problema é que a mesma ferramenta (“ipchains”) é usada para controlar tanto o masquerading e transparent proxy. você provavelmente desejará mais do que isso. embora estejam nacionalmente separados da filtragem de pacotes (a implementação atual do Linux obscurece estes junto não naturalmente.d/packetfilter {start|stop}” exit 1 . ipautofw. No meu caso (Debian 2. portforwarding. o Linux está sendo um parque de diversões para hackers.. No entanto.. Isto quer dizer decidindo que pacote terá permissão de passar ou não. 5.” .3.3 Roteamento. mas mesmo assim muitas pessoas me perguntam sobre elas.d” (isto ser executado antes de S40network). 5. esac exit 0 Tenha certeza que isto está antes no processo de inicialização. Use ifconfig para acha-la. eu também vou incluir diversos cenários comuns e indicar quando cada um deve ser aplicado. e as características auto forwarding e port forwarding são controladas por ferramentas separadas. deixando a impressão que eles foram descontinuados)..1 Guia rápido de três linhas para Masquerading Isto assume que sua interface externa é chamada “ppp0”. masquerading. eu fiz um link simbólico chamado ‘S39packetfilter’ em meu diretório “/etc/rcS. Este HOWTO é sobre filtragem de pacotes.1).. # ipchains -P forward DENY # ipchains -A forward -i ppp0 -j MASQ # echo 1 > /proc/sys/net/ipv4/ip_forward 43 . e ajuste ao guia.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 “.

Sua rede interna é configurada de acordo com os blocos de endereços IP que possui registrados.152. 3. 5. Aqui existe somente uma conexão: de 1.3. 44 . e obtém 207. Pacotes passam através do firewall.2 Configurações de firewall simples Você trabalha na littlecorp.4).2. usando a porta local 1050.com que é 1. O firewall está configurado para permitir qualquer tráfego.2.littlecorp.org. Ele então abre uma conexão para aquele endereço IP. Leia com atenção porque cada um é sutilmente diferente.1 Rede Pública Neste cenário. DNS deve estar configurado corretamente em sua rede. eg.3. Netscape está configurado para conectar diretamente. Você tem uma rede interna. e uma conexão dialup (PPP) simples com a Internet (firewall.218. a filtragem de pacotes é usada para que pacotes podem ser direcionados entre sua rede e o resto da internet. 4.3. Exemplo: Permitindo acesso web de sua rede privada para a Internet. e sua máquina pessoal é chamada “myhost”. O firewall deve ser a rota padrão (gateway) para sua rede privada.3. assim o resto da rede conhecerá como obter pacotes para você. Netscape desenha a página. Netscape procura o nome “slashdot.131 (slashdot.2. O endereço IP da rede interna deve ser escolhido aplicando por um bloco de endereços IP. (digamos 1. 2. Você usa Ethernet em sua rede local.com. Neste cenário. 1.2. Netscape em myhost lê http://slashdot.org.*). Isto implica em uma conexão permanente. 3. sua rede pessoal é uma parte da Internet: pacotes pode seguir sem alterações através de ambas as redes. para restringir o resto da internet para somente acessar seus servidores web internos. ie. 1.5.131. Esta seção ilustrará os diferentes arranjos no qual são comuns. e pergunta do servidor web (porta 80) pela página web.org”.org) porta 80. 2.3.152.218. simplesmente como passam através de diversos firewalls entre você e slashdot.100 (myhost) porta 1050. para 207. 5.

Ao invés de usar um proxy. Masquerading possui módulos separados para manipular protocolos “enganados”. porta 1050.16. DNS deve ser configurado corretamente na rede privada.2.littlecorp.com (port 65000) vem. Exemplo: Permitindo acesso web da rede privada com a Internet. porta 65000.5. 1.* or 192.0) ou “ipmasqadm” (kernels 2. com myhost sendo 192.1. e obtém 207. RealAudio. (Mas veja “Serviços Internos Limitados” abaixo).org”. 2. Para procolos realmente difíceis de manipular. 2. e vice versa. 10. como FTP. Netscape está configurado para conectar diretamente. eles são regravados para virem da interface PPP do firewall. O firewall é configurado para masquerade (mascarar) qualquer pacotes vindo da rede privada e indo para a porta 80 de um host da internet.3.1. Esta é a mágica real do masquerading: ele relembra 45 .4) assim responde pacote de slashdot.1. Como os pacotes de myhost (porta 1050) para slashdot.168.*. assim eles sempre parecem vir do próprio firewall. 1.152. a facilidade “auto forwarding” pode manipular muitos destes configurando automáticamente o forward de portas para configurações de portas relacionadas: procure por “ipportfw” (kernels 2.*. O endereço Ip da rede privada devem ser escolhidos de acordo com o RFC1597 Private Network Allocations (ie. Masquerading regravam pacotes quando passam através do firewall. Ele então re-escreve as respostas assim eles pareceram estar indo para o recipiente original. 172.org.*.168.1.218. Netscape em myhost lê http://slashdot.*.1). O firewall possui um endereço Internet válido (1.168. Netscape procura o nome “slashdot.100. e pergunta ao servidor web (porta 80) pela página web.131. Quake.org (porta 80) passam através do firewall. nós usamos facilidades especiais do kernel chamadas “masquerading”. Ele então abre uma conexão para aquele endereço IP.3. O firewall deve ser a rota default (gateway) para a rede privada.2 Rede Privada: Masquerading Neste cenário. Como pacotes de slashdot.168. usando a porta local 1050. pacotes da rede privada nunca atravessam a Internet sem um tratamento especial.2. 4.org. Quaisquer serviços que você deseja acessar na Internet deve estar no firewall. e a interface Ethernet do firewall sendo 192. 3. eles são regravados para irem para myhost. 5.org (porta 80) para firewall.*).*.*. 3. etc. A rede privada possui endereços 192.

1.quando ele regravou pacotes enviados para regrar as respostas quando retornarem.152. usando ipchains.131 (slashdot. 3. e a interface Ethernet do firewall sendo 192. DNS precisa estar configurado na rede privada (ie. Qualquer serviço que desejar acessar na Internet deve estar no firewall.168.218.*.16. pacotes da rede privada nunca atravessam a Internet e vice versa.100 (myhost) porta 1050. 10. Você executa um programa (no firewall) chamando um proxy transparente para fazer isto.1.168.*. O endereço IP da rede privada deve ser escolhido de acordo com o RFC1597 Private Network Allocations (ie. O kernel esta configurado para redirecionar conexão para a porta 80 do proxy. para enviar pacotes para o firewall. 5.*. 4. Do ponto de vista de myhost.131 (slashdot.2.168. para 207. você precisa executar um servidor DNS como um proxy no firewall).168.1. ele abastarda o roteamento). 1. Netscape 207.org) porta 80.org. Um proxy web transparente (eu acredito que existem patches para squid para permitir ele operar desta maneira.org) porta 80.1.*.* or 192. 1. e obtem . A rede privada usa endereços 192.4 (interface PPP do firewall) porta 65000 para 207.*.2. a conexão é feita de 1.*).168.1.100.*. Exemplo: Permitindo acesso web da rede privada para a Internet. 5. 2. o kernel envia pacotes de saída para o transparent proxy ao invés de envia-los adiante (ie.131.218. digo executando na porta 8080.3. ie.152. que é a única máquina entre as duas redes e que conectam ambas. Netscape em myhost lê http://slashdot. Netscape na rede privada está configurado para conectar diretamente.152.org”. 6. 172. Netscape desenha a página. Proxyes transparentes querem dizer que o cliente não precisa saber que há um proxy envolvido.org.3. a conexão é feita de 192. A rota default (gateway) precisa estar configurado na rede privada. (Mas veja “Serviços Internos Limitados” abaixo). Do ponto de vista de slashdot. ou tente “transproxy”) ‘ instalado e configurado no firewall. O Único meio de conectar com a internet é conectando com o firewall.3 Rede Privada: Proxies Transparentes Neste cenário.218. 46 localiza o nome “slashdot. com myhost sendo 192. 4.

3.218.2. que é a única máquina na rede que conectam ambas. mas ele está atualmente falando com o proxy transparente. com myhost sendo 192. Netscape na rede privada está configurado para usar a porta 8080 do firewall como um proxy.org (porta 80) passam pelo firewall. O proxy transparente abre uma conexão usando (usando a porta local 1025) com 207. usando a porta local 1050.org. DNS não precisa ser configurado na rede privada.*. 3.218. a conexão é feita de 192. ele copia os dados para a conexão com o Netscape.168. 6.1. Do ponto de vista de myhost.100 (myhost) porta 1050. Como os pacotes de myhost (porta 1050) para slashdot.4 Rede Privada: Proxies Tradicionais Neste cenário. RealAudio. eles são direcionados para proxy transparente aguardando na porta 8080. Exemplo: Permitindo acesso web da rede privada para a Internet. Do ponto de vista de slashdot.168.100. a conexão é feita de 1.16. 4.*.*.168.168.* or 192. digo executando na porta 8080.*.168.org) porta 80. Qualquer serviço que você deseja acessar na Internet deve estar no firewall (mas veja “Serviços Internos Limitados” abaixo). Como o proxy recebe a página web de sua conexão com o servidor web.2.1.*. privada.218.4 (interface PPP do firewall) porta 1025 para 207. acesso Web. 3. Usenet News e outros serviços). para 207. O endereço IP da rede privada usam os endereços de acordo com o RFC1597 Private Network Allocations (ie. DNS não precisa estar configurado no firewall. e pergunta ao servidor web (porta 80) pela página web. Veja o Firewall HOWTO.152.*). e a interface do firewall firewall sendo designada 192. 172.org) porta 80.*. telnet. 5.1. pacotes vindo da rede privada nunca atravessam para a Internet.131 (slashdot. 4. Você executa um programa (no firewall) chamado proxy para fazer isto (há proxies para FTP. Um proxy web (eg. 5. e vice versa. O Único meio de se conectar com a Internet é conectando com o firewall.152. “squid”) está instalado e configurado no firewall. Netscape desenha a página. 1.Ele abre uma conexão para aquele endereço IP.152. A rede privada usa endereços 192. 2.1.131 porta 80 (que é aqui onde os pacotes originais estão indo).3.131 (slashdot. 10.1. 2. ie. Sem rota padrão (gateway) necessitando ser configurado na rede 47 .

O proxy procura o nome “slashdot. alterando seus endereços de destino e portas para apontarem para hosts e portas internas.4 (interface PPP do firewall) porta 1025 para 207. 5.1 ou superior) é usar um port forwarding no kernel.ecst. Isto faz o mesmo trabalho que o redir em um método diferente: o kernel regrava os pacotes enquanto passam. Netscape conecta-se com o firewall na porta 8080.5 Serviços Internos Limitados Existem alguns truques que você pode usar para permitir a Internet acessar seus serviços internos. Netscape desenha a página. ele copia os dados para a conexão do Netscape.168.152.218. a coneão é feita da interface interna do firewall para o servidor. 1. a conexão é feita para seu firewall.0 com patch para ipportfw. Do ponto de vista de seu servidor interno.131 (slashdot. Você pode atualmente encontrar ete HOWTO em http://www. 3.Netscape em myhost lê http://slashdot.unc. Uma simples aproximação é executar um “redirector”.metalab.100 (myhost) porta 1050. Um exemplo disto é o programa “redir”.edu/~dranch/LINUX/index-LINUX.csuchico. em lugar de executar serviços no firewall. Do ponto de vista da da internet. Do ponto de vista da Internet. em http://www. Do ponto de vista de slashdot.org. Outra aproximação (que requer um kernel 2. e então abre uma conexão em um porta e host fixo.org”. ou um kernel 2.org”. Ele abre uma conexão com aquele endereço IP (usando a porta 1025 na interface externa do firewall). a conexão é feita de 1. que é um poorman’s proxy que aguarda por uma conexão em uma determinada porta. Como ele recebe a página web de sua própria conexão com o servidor web.2. Ele pergunta pela página internet “http://slashdot.131. ie. que tem uma larga quantidade de materiais com este HOWTO.1 (interface Ethernet do firewall) porta 8080.1. Estes funcionarão com aproximação baseada em proxy ou masquerading para conexões externas. a conexão é feita para seu firewall. Do ponto de vista de myhost.168. uma conexão é feita do host Internet para o servidor.org) porta 80.3 Mais detalhes sobre Masquerading David Ranch escreveu um excelente novo HOWTO em Masquerading. 2.3. e copia os dados entre as duas conexões.3. e obtém 207.152. usando a porta 1050 em myhost.1. para 192.218.edu/LDP 48 .3. a conexão é feita de 192.html#ipmasq Logo eu iria esperar que isto fosse encontrado em algum lugar do Projeto de documentação do Linux. e pergunta ao servidor web (porta 80) pela página web. 4.2. Do ponto de vista de seu servidor interno. 5.org.

Quando um pacote entra (digo. Se ele sobrevive a este passo. isto mostra o caminho completo do pacote entrando em uma máquina. Finalmente. então o kernel procura no policiamento do chains para decidir o que fazer.cjb. ele consultará o chain forward. através da placa Ethernet) o kernel usa o chain de entrada e decide seu destino.| e ----------------------------- > C h e c k s u m | | v NEGAR Aqui está uma descrição passo a passo de cada estágio: • • Checksum: Este é um teste para verificar se o pacote não está corrompido de alguma forma. Em um sistema consciente em segurança. Para fans da arte em ASCII. | 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 --------------------. Se a regra não confere com o pacote.1 Como os pacotes atravessam os filtros O kernel inicia com três listas de regras.net.A página oficial http://ipmasq. então o próximo passo do kernel é decidir onde enviar o pacote (isto é chamado roteamento). ele é negado. estas listas são chamadas firewall chains ou simplesmente chains. mas o chain input é o mais importante. este policiamento normalmente diz ao kernel para rejeitar ou negar o pacote. o kernel consulta o chain output. Se estiver.4 IP Firewalling Chains Esta seção descreve tudo o que você realmente precisa saber para construir um filtro de pacotes que se encaixe em suas necessidades. então a próxima regra no chain é consultada. 5. antes de simplesmente o pacote ir para fora da rede. então aqui esta o que fazer com o pacote”. Um chain é uma lista de checagem de regras. Se o seu destino for outra máquina. Muitos 49 . Finalmente. Os três chains são chamados input output e forward. se não existem mais regras a consultar. Sanity: Esta é atualmente um destas checagens de sanidade antes de cada chain firewall. Cada regra diz “se o cabeçalho do pacote parece com isto.4. do Masquerading está disponível em 5.

17-Mar-1999 Note que eu recomendo 1.3.9. local: Se o pacote não foi criado por um processo local. verifique se você tem a versão do ipchains que este documento se refere: $ ipchains—version ipchains 1. (mascaramento) ele é desmascarado. você deve 50 . • input chain: Este é o primeiro chain firewall que será testado contra o pacote. interface lo: Se pacotes de um processo locai são desinados a um processo local. estes são muito estáveis. Demasquerade: Se o pacote é uma resposta de um pacote anterior do masquerade.3. ou 1. e se você precisa de mais detalhes em particularidades. ipchains tem uma página de manual razoavelmente detalhada (man ipchains). como “— sport”).1. para decidir se o pacote deve ir para um processo local (veja processos locais abaixo) ou direcionado (forward) para uma máquina remota (veja forward chains abaixo). você pode ignorar esta parte no diagrama. Routing decision (decisão do roteamento): O campo de destino é examinado pelo código de roteamento.8 ou superior. • • • • • • • 5. Local process (processo local): Um processo sendo executado em uma máquina pode receber pacotes após o passo de decisão do roteamento. então o chain forward é checado.1 Usando ipchains Primeiro. caso contrário o pacote vai através do chain output. então retorna pelo chain input também com a interface “lo”.pacotes malformados podem deixar o código de checagem de regras confuso. e estes são negados aqui (uma mensagem é mostrada no syslog se isto acontecer). Se a decisão do chain não for NEGAR ou REJEITAR. Se você não usa o IP masquerading. e pode enviar pacotes (que vão pelo passo de decisão do reteamento. e pula para o chain output. o pacote passa. forward chain: Este chain é usado para qualquer pacote que está tentando passar entre esta máquina para outra. quando atravessam o chain output).4. A interface lo é normalmente chamada de interface loopback.3. output chain: Este chain é usado para todos os pacotes antes de serem enviados para fora. eles vão através do chain output com a interface configurada para “lo”.4 (que não possui opões longas.

que estão no ipchains que é um bom lugar para coloca-las: 1. Adiciona uma nova regra no chain (-A). Listar as regras em um chain (-L). 4. (-Z). 4.x. 5. 2. Deletar um chain vazio (-X). 6. 5. Substitui uma regra na mesma posição no chain (-R). 2.c no código fonte do kernel 2. Criar um novo chain (-N). Alterar a política de um chain interno (-P). manipulando regras. output e forward que voce não pode apagar. Existem diversos meios de manipular regras dentro do chain: 1. Lista de conexões atuais do masquerade (-M -L). 2.2 Operações em uma regra Simples Este é o pão-e-manteiga do ipchains.checar a interface de programação (man 4 ipfw).1. 3. Deleta uma regra na mesma posição no chain (-D). Configura os valores de tempo máximo (timeout) do masquerade (Mas veja “Eu não posso configurar tempo máximo no masquerade”) O função final (e talvez a mais útil) permite a você checar o que aconteceu com o dado pacote se ele atravessou o chain. Insere uma nova na mesma posição no chain (-I). (-M -S). Mas especificamente você ira provavelmene usar os comandos append (-A) e delete 51 .4. em ambas A4 e US Letter PosScript™. Existem diferentes outras coisas que você pode fazer com ipchains. Zerar os contadores de pacote e byte em todas as regras no chain Existem poucas operações para masquerading. que é (obviamente) autoritativo. 3. Esvaziar as regras do chain (-F). ou o arquivo net/ipv4/ip_fw.1. 5. Você inicia com três chains input. Também existem um excelente guia de referência rápida por Scott Bronson no pacote fonte. Deleta a primeira regra que confere no chain (-D). 1. Primeiro operações para gerenciar chains completos.

1: icmp_seq=0 ttl=64 time=0. 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 serviçalmente responder com o pacote ICMP tipo 0 (echo reply).2 ms # ipchains -A input -s 127.1 ping statistics --1 packets transmitted. Isto é útil para testes.0.2 ms --.0.0.0.127.0. uma regra especificando que para pacotes vindo de 127.0.1 PING 127.0.0.1 PING 127.1 -p icmp -j DENY # ping -c 1 127.0.1 (127.0. usando o segundo ping. Por exemplo.1. Primeiro nós conhecemos que esta é a única regra no chain input.0. 1 packets received. 0 packets received.2/0.0.0. 127. Assim neste caso nossas condições são que o protocolo deve ser ICMP e que o endereço de origem deve ser 127. nós podemos usar um número para apagar.0. Nosso alvo é “NEGAR”. você pode desejar negar todos os pacotes ICMP vindo do endereço IP 127.0. Cada regra especifica uma cofiguração de condições em que o pacote se encontra.127.0. que você tem’ mesmo se não possuir uma conexão real da rede.1.0.1): 56 data bytes --. Existe uma pausa antes do programa aguardar a resposta que nunca vem.0. os outros (-I para inserir e -R para substituir) são simples extensões nestes conceitos.0.0.0.1): 56 data bytes 64 bytes from 127.0. 0% packet loss round-trip min/avg/max = 0.1 (“-s 127. 100% packet loss Você pode ver aqui que o primeiro ping se sucede( o “-c 1”que dizer para o ping enviar somente um pacote simples) Então nós adicionamos (-A) um chain “input”.0.0.0.0. e o que fazer quando a encontra (um “alvo”). como em: # ipchains -D input 1 Para apagar a regra número 1 no chain input.1 ping statistics --1 packets transmitted.0.0.1 ‘ a interface “loopback”.1 (127. Nós podemos apagar uma regra em um dos dois meios.2/0.0. Quando nós testamos nossa regra.(-D).0.1”) com o protocolo ICMP (“-p ICMP”) devem ser negados (“-j DENY”). 52 . # ping -c 1 127.

95. O meio mais comum ‘ usar o nome completo. para inverter a regra.0/24” ou “199.0.4.207.1 Especificando o endereço IP de origem e Destino Endereços IPs de origem (-s) e destino (-d) podem ser especificados em quatro meios.207. 5.2 Especificando Inversão Muitas opções. como “p ! TCP”. 5.255.1.4. Isto é útil quando voce tem um complexo conjunto de regras e você não deseja conta-las para retirar a regra 37.linuxhq. os digitos depois da “/” dizem dizem que a parte do endereço IP é significante. Se existem múltiplas regras idênticas no mesmo chain. Estes dois especificam qualquer endereços IP de 192. “-s ! localhost” atinge qualquer pacote menos de localhost. incluindo a “-s” e “-d” podem ter seus argumentos seguidos de “!” (que significa não) para atingirem endereços NÃO iguais ao especificado.95.207.3 Especificando o Protocolo O protocolo pode ser especificado com a opção “-p”. como o efeito acima é o mesmo como não especificar a opção “-s”.O segundo meio é espelhar o comando -A.255.0. mas trocando o -A com -D. Por exemplo.com”.255. “/32” ou “/255. 5.3 Especificações de Filtragem Você deve sempre usar “-p” para especificar um protocolo. Neste caso.255” é o padrão (abrange todos os endereços IPs).95.0. como no exemplo: # ipchains -A input -s 0/0 -j DENY Isto é raramente usado.255. O nome do protcolo pode usar o prefixo “!”. 53 . O que segue é um compêndio exaustivo. somente a primeira ser apagada. Para especificar qualquer endereço IP. O segundo método é especificar o endereço IP como “127.255 inclusive. mas existem outras opções que nós podemos usar para especificar características do pacote.0.1.1”. O protocolo pode ser um número (se conhecer os valores numéricos dos protocolos para IP) ou um nome para casos especiais de “TCP”. como “199.95. O terceiro e quarto meio permite especificar um grupo de endereços IPs.0/255.0 para 192. como “localhost” ou “www.3.1 -p icmp -j DENY A sintaxe de -D deve ter exatamente as mesmas opções que os comandos -A (ou -I ou -R).1. “UDP” ou “ICMP”.0”. nós podemos usar: # ipchains -D input -s 127.3.207.4. e “-s” para especificar um endereço de origem. deve ser usado “/0”. 5. Caso especificar “tcp” também funcinará como “TCP”.1.4.3.

3. O segundo especifica qualquer conexão TCP para qualquer porta em 192. existem argumentos extras indicando a porta TCP ou UDP.1. Se o maior número for omitido.1 ! www A primeira especifica qualquer pacote TCP para a porta WWW em qualquer máquina menos 192.1.1 ! www 5.0.1.1. mas como ICMP não possui portas. Note que a especificação de portas devem ser precedidas por uma “!”.4.1 Especificando portas UDP e TCP Para casos especiais onde um protocolo TCP ou UDP é especificado.1.1.168. onde os tipos seguem a opcão “-s” e o código segue a opção “-d”.168.2 Especificando tipo do ICMP Type e Code ICMP também permite um argumento opcional. você deve especificar p TCP -d 0.1 www é muito diferente de p TCP -d 192. eg. Você pode especifica-los como nomes ICMP (use ipchains -h icmp para listar os nomes) após a opão “-s”. o padrão será 0.0. Finalmente.168. Assim para especificar qualquer pacote TCP menos uma pacote WWW. Se o menor número é omitido. “www”.168. como “6000:6010”.0.1: p TCP -d ! 192. este caso significa não para a porta WWW e não para 192.1. o padrão será 65535. que abrange 11 números de portas. que inverte a regra. Números de portas podem ser especificadas por nomes. de 6000 para 6010.168. Aqui está um pequena tabela de alguns dos pacotes ICMP mais comuns: Número 0 3 54 Nome echo-reply destination-unreachable Requerido por pong Qualquer tráfego TCP/UDP. Assim para especificar conexões TCP vindo de portas abaixo de 1024. (ICMP possui tipo e código) eles possuem diferentes significados.3.3.168. ou um (exclusivo) faixa de portas (mas veja “Dirigindo Fragmentos” abaixo).3.1. a sintaxe deve ser como “-p TCP -s 0.0/0 :1023”.4.1. Uma faixa é representada pelo caracter “:”. ou como um tipo e código ICMP numérico.5.0.1 menos a porta WWW.0/0 ! www É importante realizar aquela especificação p TCP -d ! 192. . Os nomes ICMP são razoavelmente logos: você somente precisa usar bastante letras para fazer um nome se distinguir de outros.

A interface para pacotes de entrada (ie. Desativando somente estes pacotes.4.168. mas não conexões daquele servidor. a opção “-i ppp+” pode ser usada.1: p TCP -s 192. me parece uma decisão bastante arbitrária. para especificar tentativas de conexão TCP de 192. Por exemplo. Por exemplo.1.1 -y 55 .1.5 Especificando somente pacotes TCP SYN É muitas vezes útil permitir conexões TCP em uma direção. 5.4. pacotes atravessando as regras de entrada) é considerada sendo uma interface onde eles vem. A interface para pacotes atravessando os chains forward é também a interface onde eles serão enviados para fora.3. você pode desejar permitir conexões para uma servidor WWW externo. Uma interface é o dispositivo físico onde o pacote vem.4 Especificando a Interface A opção “-i” especifica o nome de uma interface para atingir. O nome da interface pode ser precedida por uma “!” para não atingir pacotes que NÃO conferem com a interface especificada.168. Estes pacotes são chamados SYN (ok. Logicamente. É perfeitamente legal especificar uma interface que atualmente não existe. A flag “-y” é usada para isto: é somente válida para regras que especificam TCP como seu protocolo. e as flags FIN e ACK limpas. bloqueie as mensagems ICMP do tipo 3! (Veja “Pacotes ICMP” abaixo) 5. ou onde vai. Por exemplo. Uma aproximação ingênua pode ser bloquear pacotes TCP vindo do servidor. mas não em outra. A solução é bloquear somente os pacotes usados para requisitar uma conexão. Infelizmente.1. nós podemos parar tentativas de conexões em seus rastros. Você pode usar o comando ifconfig para listas as interfaces que estão em “up” (ie.5 8 11 redirect echo-request time-exceeded se não estiver executando um daemon de roteamento ping traceroute Note que os nomes ICMP não podem ser precedidos de “!” no momento.1. um nome de interface finalizando com um “+” atinge todas as interfaces (até mesmo se existem atualmente ou não) que começam com aquele string. Atenção: NÃO. técnicamente eles são pacotes com a flag SYN configurada. a interface para pacotes enviados (pacotes atravessando as regras de saída) é a interface onde eles vão.3. conexões TCP requerem pacotes indo em ambas direções para funcionarem corretamente. Como um caso especial. a regra não atingirá nada até que a interface seja iniciada. trabalhando no momento). para especificar uma regra que atinge todas as interfaces PPP. mas nós os chamamos de pacotes SYN). Isto é extremamente útil para conexões PPP dialup (normalmente a interface ppp0).

Sometne fragmentos TCP iniciando na posição 8 são explicitamente derrubados pelo código do firewall (uma mensagem aparecerá no syslog se isto ocorrer).168. O outro lado remonta os fragmentos para reconstruir o pacote inteiro.168. No entanto.Mais uma vez. porém. ou opção TCP SYN) requerem que o kernel verifique no inicio do pacote. Nota para cabeças de rede: pacotes mal formados (TCP. Normalmente é considerado como seguro deixar o segundo e outros fragmentos atravessarem.1 www (especificando uma porta de origem de “www”) nunca atingirá um fragmento (do segundo em diante). É também permitido especificar que uma regra que não se aplica ao segundo e fragmentos seguintes. Nem será o oposto a regra -p TCP -s 192. Como um exemplo. porta de origem. que diz que cada pacote sem ser a inicialização da conexão.1. tipo ICMP. tipo ICMP. O problema com fragmentos é que muitas das especificaçõess listadas acima (em particular. O primeiro fragmento é tratado como qualquer outro pacote. Caso contrário. que é o único que contém o primeiro fragmento. UDP e pacotes ICMP muitos curtos para o c¢digo de firewall ler as portas ou código e tipo ICMP) são tratados como fragmentos também. usando a opção “-f”.3.168. código ICMP. desde que a filtragem afetará o primeiro fragmento.1 -j DENY 56 . Isto nítidamente evita isto. a seguinte regra derrubará quaisquer fragmentos indo para 192. é importante entender como os fragmentos são tratados pelas regras de filtragem. código ICMP ou a opção TCP SYN em tal regra de fragmento.1. você pode especificar uma regra especificamente para o segundo e outros fragmentos. Obviamente. esta opção pode ser invertida se for precedida de um “!”. porta de destino. é ilegal especificar uma porta TCP ou UDP. tem sido conhecido bugs para permitir o travamento de máquinas simplesmente enviando fragmentos. o pacote é dividido em framentos. O segundo e os fragmentos seguintes não são.4. e enviado como múltiplos pacotes.1: # ipchains -A output -f -d 192. 5. Se sua máquina é a única conectada a uma rede externa. então você pode dizer para o kernel do linux para remontar todos os fragmentos dos pacotes que passam através dele. e assim previne a remontagem no computador de destino. Assim uma regra -p TCP -s 192. procedendo “-f” com “!”.1.168.6 Dirigindo Fragmentos As vezes um pacote é muito grande para passar de uma só vez.1 ! www.1. Quando isto acontece.1. compilando o kernel com IP: always defragment (sempre desfragmentar) configurado para “Y”.

1 (Usando “ipchains -L -v” nós podemos ver os contadores e bytes associados com cada regra).1. O nome do alvo deve ser menor que 8 letras. para contar o número de pacotes de 192. as seguintes coisas podem acontecer: 1.168. Este alvo é somente válido para pacotes atravessando o chain forward. e case sensitive: “RETURN” e “return” são completamente diferentes. Se a regra o requisitar.4.pular para) para a especificação do alvo. série 2. O alvo da regra é examinado para decidir o que fazer com o próximo pacote. Este tipo de regra (muitas vezes chamado de uma regra de “contagem”) é útil para uma contagem simples de certos tipos de pacotes.168.1 Especificando um alvo Um alvo diz ao kernel o que fazer com um pacote que confere cum uma regra. 4.4 Efeitos do Lado da Filtragem OK. O alvo mais especial é REDIRECT que diz ao kernel para enviar um pacote para uma porta local em vez de onde tivesse vindo. 5. A próxima. o kernel simplesmente examina a próxima regra no chain. 2. Se esta regra confere ou não. ACCEPT aceita o pacote. Se a regra o requisitar. O contador de byte para aquela regra é aumentado pelo tamando do pacote (cabeçalho e tudo).1. MASQ diz ao kernel mascarar (masquerade) o pacote. O caso mais simples é quando não há um alvo especificado. agora nós conhecemos todos os métodos que podemos atingir um pacote usando uma regra. REJECT rejeita o pacote. Para detalhes sobre isto.1. Para isto funcionar. nós podemos fazer isto: # ipchains -A input -s 192. Por exemplo. DENY bloqueia o pacote. 57 . ACCEPT. mas (se ele não é um pacote ICMP) gera uma resposta ICMP para a origem para dizer que o destino está inalcançavel. Se um pacote confere com a regra.4. 3. alterado. seu kernel precisa estar compilado com IP Masquerading ativado. Para variedade.1.1. ipchains usa “-j” (pense como “jump-to” . é como se nunca o tivesse recebido. Existem seis alvos especiais. O contador de pacotes para aquela regra é incrementado. o pacote é registrado.0). todos estas regras estão em ordem de importância. 5. REJECT e DENY são muito simples. veja Masquerading_HOWTO e o apêndice “Diferenças ente ipchains e ipfwadm”. Os primeiros três.4.5. o campo do pacote Type Of Service é Se a regra o requisitar. o pacote é marcado (não em kernels da 6.

1. onde nós simplesmente examinamos a Regra 2. assim nós atingimos o final do chain.4.1 | |--------------------------| | Rule2: -d 192.168.1. assim a próxima regra examinada é o inicio do teste. mas não especifica um alvo. e seu alvo é Test. Você 58 .1. A regra 2 bate.4. assim nós agora examinamos Regra3. ‘input’ ---------------------------| Rule1: -p ICMP -j REJECT | |--------------------------| | Rule2: -p TCP -j Test | |--------------------------| | Rule3: -p UDP -j DENY | ‘Test’ ---------------------------| Rule1: -s 192. Hora de mais arte ASCII.3. Nós retornamos ao chain de entrada. Ele entra no chain input. até mesmo se for endereçado para outra porta. Regra 2. passar se resume na próxima regra no chain atual. Opcionalmente. Qualquer outro alvo indica uma regra definida pelo usuário (como descrita em “Operações em todo o Chain” abaixo).1.2. Regra 1 em test confere.1. Assim o caminho do pacote é: V __________________________ ‘input’ | / ‘Test’ V ------------------------|--/ -----------------------|---| Rule1 | /| | Rule1 | | |-----------------------|/-| |----------------------|---| | Rule2 / | | Rule2 | | |--------------------------| -----------------------V---| Rule3 /--+___________________________/ ------------------------|--V Veja a seção “Como organizar suas regras de Firewall” para meios para usar regras definidas pelo usuários efetivamente.168.1 | ---------------------------- Considerando um pacote TCP vindo de 192. uma porta (nome ou número) podem ser especificadas seguidas de “-j REDIRECT” que causar o redirecionamento do pacote para uma porta particular. assim a próxima regra é examinada.168.sem bater com a regra. e é testado na regra 1 .4. então uma vez passam por aquele chain como finalizado. 5. O alvo final especial é RETURN que é idêntico a cair fora do final da regra imediatamente. Isto não confere. Considere dois (tolos) chains: input (o chain embutido) e Test (um chain definido pelo usuário). que não confere. você pode ter o pacote que bateu com a regra registrado com a opção “-l”. indo para 1.Isto pode ser somente especificado por regras especificando TCP ou UDP como seus protocolos. O pacote começará atravessando as regras naquele chain.2 Registrando pacotes Este é o lado do efeito que confere com uma regra que possui. Se aquele chain não decide o destino do pacote. (Veja “Configurando o Policiamento” abaixo). Este alvo é somente válido para pacotes atravessando a regra de entrada.

esta é provavelmente a resposta do DNS). ele é o tipo ICMP.1:1025 L=34 S=0x00 I=18 F=0x0000 T=254 Esta mensagem de registro é designada para ser concisa. 12.1” significa que o endereço IP de origem do pacote foi “192.168. 6(TCP) e 17(UDP). causando a mensagem de registro. Para ICMP. 9. Um é subtraído deste valor para cada ciclo.2. “(#5)” este pode ser um número final em parênteses em kernels mais recentes (talvez após 2. e normalmente iniciam em 15 ou 255. “192. 3.9). 2. 10. Para UDP e TCP. 6. Para ICMP. “F=0x0000” é os fragmentos 16-bits offset plus flags. “S=0x00” campo que significa o tipo do serviço (dividido por 4 para obter o tipo do serviço com usado pelo ipchains). mas ela é uma característica útil se você deseja verificar por eventos excepcionais. ela significa que o pacote veio de “eth0”.normalmente não precisará disto para pacotes rotineiros. e contém informações técnicas úteis somente para gurus de rede.0.1”. este número é a porta de origem. ele será 65535. 14. Os mais comuns são 1 (ICMP).1:53 192. “0x2” ou “0x3” significa que o bit “mais fragmentos” esta configurado. Este é um número de regra que causa o registro do pacotes. 11. Cada uma que dizer o seguinte: 1. dividido por 8. “DENY” é o que a regra disse fazer com o pacote.2. Um valor iniciando com “0x4” ou “0x5” significa que o bit de fragmento não esta configurado. 59 . Para outros. 8. ‘I=18’ é a identificação do IP. “PROTO=17” significa que o pacote foi protocolo 17. Olhando em “/etc/services” é verificado que esta é uma porta “domínio” (ie. 4. Para outros.168.2. “:53” significa que a porta de origem foi 53. espere mais fragmentos após isto. “192. 7. Se isto é “-“ então a regra não afetou o pacote (uma regra de registro).168.1. mas ela pode ser útil para o resto de nós.2. 13. ele é o código ICMP. “T=254” é o tempo de vida do pacote. “eth0” é o nome da interface.1” é o IP de destino. “:1025” significa que a porta de destino foi 1025. ele será 65535. Porque isto foi o chain de entrada. O kernel registra esta informação parecida como: Packet log: input DENY eth0 PROTO=17 192.168. Para UDP e TCP. Uma lista de números de protocolos esta disponível em “etc/prococols”. este némero é a porta de destino.168. “L=34” significa que o pacote teve um total de 34 bytes. “input” este é o chain que contém a regra que confere com o pacote. 5. O resto dos números são o offset deste fragmento.

Somente um destes bits é permitido ser configurado.0. Deste meio eu tenho performance interativa aceitável enquando faço downloads grandes ao mesmo tempo.em nosso caso.none.news.=info. Rob van Nieuwkerk.\ mail.log” e “/var/log/messages”. (Ele pode até mesmo ser melhor se lá não tiver tal bit no driver serial. Eu uso um modem de 33k6.0.0. não me pergunte sobre isto) deve ser usado. Nota: Obviamente. Por exemplo.0.none -/var/log/messages Estas significam que as mensagem são duplicadas em “/var/log/kern.0.\ cron.0/0 ftp -t 0x01 0x10 ipchains -A output -p tcp -s 0. colocou o que segue: Especialmente o “Minimo de Espera” é importante para mim.conf contém duas linhas que conferem “kern. esta saída do kernel é capturada por klogd (o daemon de registro do kernel) que o envia para o syslogd (o daemon de registro do sistema). veja “man syslog. O uso mais comum é configurar telnet e conexões de controle FTP para o “Minima Espera” e dados FTP para “Máximo Processamento”. apenas use a seguinte tabela: 60 .Em sistemas linux padrões. especificando um destino para cada facilidade (facility .0/0 telnet -t 0x01 0x10 ipchains -A output -p tcp -d 0.0.info”: kern.daemon. O linux inicializa pacotes em 3 meios. o nível usado é “info”).conf”. ambos em hexadecimal.none.* -/var/log/kern.log . Eles afetam o método como os pacotes são tratados.0/0 ftp-data -t 0x01 0x08 A opção “-t” pede dois parâmetros extras..5 segundos). chamaos de bits de tipo do serviço (TOS).authpriv. mas a latencia é mantida agora por 1.=warn. os quatros bits são “Minima Espera”. Isto pode ser feito como segue: ipchains -A output -p tcp -d 0. O arquivo “/etc/syslog.=notice. o autor do TOS-mangling code. 5.3 Manipulando o tipo do Serviço Existem quatro bits raramente usados no cabeçalho IP.1. “Máxima Confiabilidade” e “Mínimo Custo”. um protocolo como RSVP (que não conheço nada sobre ele.\ auth. e então a segunda máscara é XORed com ele.4.*. você tem o controle através de pacotes de entrada: você pode somente controlar a prioridade dos pacotes deixando seu computador.conf” controla o funcionamento de syslogd. Para mais detalhes. a facilidade é “kernel”) e nível (para ipchains. Eu deixo ele ligado para pacotes “interativos” em meu roteador (Linux). “Máximo processamento”. Se isto é muito confuso. meu (Debian) /etc/syslog. Para negociar prioridades com o outro computador. Estes permitem giros complexos dos bitos TOS: o primeira mascara é ANDed com o pacote atual TOS.4.

enquanto em 2.4.4. Este é uma problema 2.4. O nome do chain pode ser maior que 8 caracteres. Eu sugiro evitar totalmente identificações em maiúsculas. também como forwarding baseado em marcas em kernels da série 2. O tamanho do dispositivo padrão é afinado para placas ethernet. faça “ifconfig $1 txqueuelen” em seu /etc/ppp/ip-up script. desde que não sejam nomes utilizados pelos chains embutidos (input. output e forward) ou os alvos (MASQ. É uma boa idéia configura-lo para um valor entre 4-10 no modem ou simples canal b para links ISDN: em dispositivos empacotados é necessário um grande canal. 5. REJECT ou RETURN). 61 .0. ACCEPT.4. Se os canais são muito pequenos em um roteador então os pacotes serão derrubados. Porque eu sou como um imaginador da mesma categoria. em modems ele é muito grande e faz os 3 agendamentos das bandas (que possui canais baseados no TOS) funcionarem subótimamente. Assim.4. Também é claro que um obtém o benefício até mesmo sem regravação TOS.1. porque que eu posso usar estas para futura extensão.4. para ver máximos beneficios da manipulação TOS para links de modems PPP.0 ele requer patches fontes nos controladores de dispositivos para alterar.5 Operações em todo o chain Uma característica muito útil do ipchains é a abilidade de agrupar regras relacionadas em chains. apenas aquela regravação TOS ajuda obter benefícios para programas não coperativos (mas todos os programas padrões do linux são coperativos). Esta opção é no entanto ignorada em kernels da série 2. O número usado depende da velocidade do modem e da quantidade de buffer no modem. aqui configurações que Andi me passou denovo: O melhor valor para dadas configurações precisam ser testadas. REDIRECT.0 e não 2. Você pode chamar chains do que quiser.1. eu chamarei isto de test. mas em 2. telnet ftp-data snmp nntp Andi Klenn foi ao ponto fora dos seguintes (também editado para postaridade): Talvez ele possa ser útil para incluir uma referência para de ifconfig para a discussão sobre bits TOS.1.1 ele é um opção do ifconfig (com nettools recentes). 5.1.6 Criando um novo chain Vou criar um novo chain.1.TOS Name Minimum Maximum Maximum Minimum Delay Throughput Reliability Cost Value 0x01 0x01 0x01 0x01 0x10 0x08 0x04 0x02 Typical Uses ftp. 5. DENY.4 Marcando um Pacote Isto permite complexas e poderosas interações com Alexey Kuznetsov’s nova Qualidade de implementações de Serviço.

9 Listando um chain Você pode listar todas as regras em um chain usando o comando “-L”.8 Limpando um Chain Existe um método simples de esvaziar todas as regras fora do chain.7 Apagando um chain Apagar um chain também é simples. 5. # ipchains -L input Chain input (refcnt = 1): (policy ACCEPT) target prot opt source ACCEPT icmp ----.1. Se o nome do chain é omitido. # ipchains -F forward Se você não especificar um chain. Existem um par de restrições para apagar chains: elas devem ser vazias (veja “Limpando um Chain” abaixo) e eles não devem ser o alvo de qualquer regra. ou se você filtrará suas requisições DNS. Ele faz as portas serem listadas como números ao invés de nomes. Existem três opções que podem acompanhar “-L”.localnet/24 # destination anywhere ports any destination anywhere ports any O “refcnt” listado para test é o número de regras que tem test como seu alvo.4.4. A “-n” (numérica) opção é muito útil porque ela previne ipchains de tentar localizar endereços IP.1.4. então todos os chains serão limpos. todos os chains são listados. # ipchains -X test Porque “-X”? Bem.4.4. Este pode ser zero (e o chain ser vazio) antes deste chain ser apagado. Você não pode deletar qualquer destes três chains embutidos.1. que (se você esta usando DNS como muitas pessoas) causa larga espera se seu DNS se não estiver configurado corretamente. 5.# ipchains -N test É muito simples. 62 . 5. usando o comando “-F”. todas as boas letras foram usadas.4.anywhere # ipchains -L test Chain test (refcnt = 0): target prot opt source DENY icmp ----. Agora você pode colocar regras nele como detalhado acima.

Por exemplo: # ipchains -v -L input Chain input (refcnt = 1): (policy ACCEPT) pkts bytes target prot opt tosa tosx 10 840 ACCEPT icmp ----. não discutirei como eles são grandes. se você fizer isto.0xFF 0x00 lo Chain forward (refcnt = 1): (policy ACCEPT) Chain output (refcnt = 1): (policy ACCEPT) Chain test (refcnt = 0): 0 0 DENY icmp ----. Isto pode ser feito com a opção “-Z” (zero counters). muitos pacotes pode passar entre os comandos “-L” e “-Z”. Usando a opção “-x” (números expandidos) são mostrados números completos.A opção “-v” mostra os detalhes das regras. a interface.0xFF 0x00 lo anywhere any mark source anywhere Note que o pacote e o contador do byte são mostrados usando os sufixos “K”.000 e 1. você pode usar “-L” e “-Z” juntos.000.0xFF 0x00 lo mark source destination ports anywhere anywhere any localnet/24 anywhere any mark source destination ports anywhere anywhere any 63 . Por esta razão.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.0xFF 0x00 ppp0 # ipchains -L -v Chain input (policy ACCEPT): pkts bytes target prot opt tosa tosx ifname 10 840 ACCEPT icmp ----.10 Resetando (Zerando) Contadores Isto é útil para permitir resetar os contadores. Infelizmene.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 ----. você não poderá operar em um chain simples: você terá que listar e zerar todos os chains imediatamente. 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 ----. # ipchains -L -v -Z Chain input (policy ACCEPT): pkts bytes target prot opt tosa tosx ifname 10 840 ACCEPT icmp ----. “M” ou “G” para 100. No exemplo acima.1.000 respectivamente. 5.000.000.4. 1. Caso contrário estes valores são omitidos.4. para resetar os contadores enquando os lê. as máscaras TOS. como o pacote e contadores de byes. e a marca do pacote.

O comando “-S” deve ser seguido de três valores de timeout.h’. cada um em segundos: para seções TCP.4. 64 . para FTP (veja “Pesadelos FTP” abaixo). MASQ. MASQ é somente válido para o É também 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.1. e para pacotes UDP. 2 minutos e 5 minutes respectivamente. REJECT. simplesmente passe um valor “0”.5 Operações em Masquerading Existem diversos parâmetros que você pode usar para IP Masquerading. apenas em caso de preocupação).4.Chain forward (refcnt = 1): (policy ACCEPT) Chain output (refcnt = 1): (policy ACCEPT) Chain test (refcnt = 0): 0 0 DENY icmp ----.11 Configurando a Política Nós mostramos o que acontece quando um pacote atinge o final do chain de entrada embutido quando nós discutimos como um pacote anda através dos chains em “Especificando um Alvo” acima. O comando “-L” pode ser acompanhado por “-n” (mostar números ao invés de nomes dos hosts e nomes das portas) ou “-v” (mostra deltas em números sequenciais para conexão masquerade. ou “-S” para configurar parâmetros masquerade. Somente chains embutidos (input output e forward) tem policiamento. Neste caso. Eles estão empacotados com ipchains porque não compensa fazer uma ferramenta separada para eles (no entanto isto pode mudar). DENY. Se você não desejar alterar um destes valores. O policiamento pode ser qualquer dos primeiros quatro alvos especiais: ACCEPT. O valor mais comum para ser alterado é o primeiro.4. chain “forward”. Note os problemas com as configurações de timeout listados em “Eu não posso configurar timeouts em masquerade!”. e ele pode ser combinado com “-L” para listar conexões Masquerade atuais. atualmente 15 minutos.1. Os valores padrões estão listados em ‘/usr/src/linux/include/net/ip_masq. o policiamento do chain determina o destino do pacote. porque se um pacote cai no final de um chain definido pelo usuário. O comando IP Masquerading é “-M”. para seções TCP após um pacote FIN. 5. a passagem é resumida no chain anterior.0xFF 0x00 ppp0 localnet/24 anywhere any 5.

4. Primeiro. # ipchains -C input -p tcp -y -i eth0 -s 192.168. se você especificar um hostname que resolve (usando DNS) múltiplos endereços IPs.com” resolve três endereços IPs. ipchains tem o comando “-C” para permitir isto.1.2 porta www. ipchains pode atuar como se você tivesse digitado m£ltiplos comandos com cada combinação de endereços. endereço de origem (“-s”). Isto é uma clássica inicialização de conexão WWW. Assim se o hostname “www.1. Se o protoclo é TCP ou UDP. entrando no chain “input”.1. em tal caso estas opções são ilegais). então uma porta simples de origem e destino devem ser especificadas. para evitar forwarding para ou de 192. você está permitido o inicio da travessia em qualquer chain para fins de testes.7 Multiplas Regras at Once and Watching What Happens Muitas vezes uma simples linha de comando pode resultar em múltiplas regras sendo afetadas. Assim. para indicar que o pacote test deve ter o bit SYN ajustado. a opção “-y” deve ser especificada. e o hostname “www. Isto é feito em duas maneiras. tal como para verificar seus chains de entrada.com” acumula seis regras para o chain de entrada. usando exatamente as mesmas rotinas que o kernel usa para diagnosticar pacotes reais.1 60000 -d 192. a segunda vez com os argumentos “-s” e “-d” invertidos. output e forward.168.1. então o comando “ipchains -A input -j reject -s www.bar.foo.1 65 .1. Os detalhes do “pacote” são especificados usando a mesma sintaxe usada para expecificar regras do firewall. O outro meio de ter o ipchains fazendo múltiplas ações é usar a opção bidirecional (“-b”).168.1. Em particular.168.5.1.168. Esta opção faz o ipchains se comportar como se você tivesse digitado o comando duas vezes. e um tipo ICMP e um código devem ser especificados para o protocolo ICMP (a não ser que a opção “-f” é espeficada para indicar uma regra de fragmento. Considerando que o kernel sempre inicia atravessando os chains input.bar.1. um protocolo (“-p”).4.foo. Aqui está um exemplo de teste de um pacote TCP SYN de 192. vindo na interface eth0.168. você deve fazer o seguinte: # ipchains -b -A forward -j reject -s 192.1 porta 60000 para 192.com” resolve dois endereços IPs.2 www packet accepted 5.com -d www.1.6 Checando um Pacote Muitas vezes você deseja ver o que esta acontecendo quando um certo pacote entra em sua máquina. Se o protocolo é TCP (e a opção “-f” não é especificada). Você especifica que chain testará o pacote seguido do argumento “-C” com seu nome. endereço de destino (“-d”) e interface (“-i”) são compulsórios.

Pessoalmente, eu não gosto muito da opção “-b”; se você deseja conveniência, veja “Usando ipchains-save” abaixo. A opção -b pode ser usada com insert (“-I”), delete (“-D”) (mas não com variações que pegam regras numúricas), comando append (“-A”) e comando check (“-C”). Outra opção ú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 nós checamos a ação 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 conexão 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 método FTP da Debian para atualizar minha máquina regularmente (-p TCP -y -s ftp.debian.org.au ftp-data). Eu surfo na WEB através do meu proxy ISP enquando isto está sendo feito (-p TCP -d proxy.virtual.net.au 8080), mas odeio os anúncios 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 não noto pessoas tentando entrar pelo ftp em minha máquina enquando eu estou online (-p TCP -d $LOCALIP ftp), mas não desejo qualquer um de fora pretendendo ter um endereço 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 proteção IP spoof?”. A configuração é razoavelmente simples, porque não existe atualmente nenhuma outra máquina na minha rede interna. Eu não 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 saída (não existe muitos motivos de se fazer isto em pacotes que entram). Desde que eu

66

tenho diversos números 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 tráfego 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 restrições 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 endereço de origem de 192.168.1.*, assim nós 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 requisições para 203.29.16.1, assim eu espero respostas DNS somente dele), entrada FTP, e somente retorno de dados ftp(ftp-data) (que deve somente estar indo para uma porta acima de 1023, e não 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 estão OK:
# ipchains -A input -i lo -j ACCEPT

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

67

NOTA: Eu não configurei meus chains nesta ordem, como os pacotes podem ir através da minha configuração. Seguramente é normalmente feito o DENY (bloqueio) primeiro, então 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 então tente se lembrar dos comandos que usou assim você pode estar na próxima hora em pane. Assim ipchains-save é um script que lê sua configuração 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 opção atualmente permitida é “-v” que mostra as regras (para stderr) quando são salvas. O policiamento do chain é também 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 opções “-v” que descreve cada resgra sendo incluída, e “-f” que força a limpeza de regras definidas pelo usuário se elas existem, como descrito abaixo. Se uma regra definida pelo usuário é encontrada em input, ipchainsrestore checa se aquele chain realmente existe. Se existir, então você será perguntado se os chains devem ser limpos (limpeza de todas as regras) ou se a restauração deste chain deve ser ignorada. Se você especificar “-f” na linha de comando, você não 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’.

68

especialmente quando fragmentos ocasionais são perdidos).Chain ‘ppp-out’ already exists. ipchains-restore -f < ppp-in. Você pode tentar organiza-las para melhorar a velocidade (minimizar o números de checagem de regras para os pacotes mais comuns) ou para diminuir o gerenciamento. 5.5.2 O que não filtrar Existem muitas coisa que você deve estar atento antes de iniciar a filtragem de tudo o que não desejar. digamos PPP. você pode desejar configurar a primeira regra do chain de entrada para “-i ppp0 -j DENY” na inicialização. Skip or flush? [S/f]? f Flushing ‘ppp-out’. 5. 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.firewall # Replace DENY rule with jump to ppp-handling chain. Todas as boas implementações TCP (incluindo o Linux) usa a descoberta MTU para tentar entender qual pacote grande que pode ir para um destino sem ser fragmentado (fragmentação diminui a performance.5.5. Bloqueando estes pacotes significa que você nunca obterá erros “Host unreachable” ou “No route to host”. Um problema pior é o papel de pacotes ICMP em na descoberta MTU. Se você tiver um link intermitente. qualquer conexão simplesmente aguardará por uma resposta que nunca virá.1 Pacotes ICMP Pacotes ICMP são usados (entre outras coisas) para indicar falhas de outros protocolos (tal como TCP e UDP). Pacotes “destination-unreachable” em particular. Descoberta MTU funciona enviando 69 . então tendo qualquer coisa como esta em seu script ip-up: # Re-create the ‘ppp-in’ chain. mas raramente fatal.5 Diversos Esta seção contém todas as informações e FAQs que eu pude colocar dentro da estrutura do arquivo abaixo. 5.2.1 Como organizar suas regras de firewall Esta questão requer muita concentração. Isto é irritante.

2. 5.5. Isto significa que você não pode filtrar estas conexões TCP sem bloquear o FTP ativo. se lembre que DNS nem sempre usa UDP. um é o tradicional que é chamado modo ativo e o mais recente é chamado de modo passivo. e então enviando pacotes pequenos se ele obter um pacote ICMP indicando “Fragmentação necessária mas DF ajustado” (“fragmentação necessária”). até mesmo para dados de entrada. 70 . se a resposta do servidor excede.pacotes com o bit “Don’t Fragment” ajustado.2 Conexões TCP para DNS (servidores de nomes) Se estiver tentando bloquear conexões TCP de saída. Note que é comum ele bloquear todas as mensagens de redirecionamento ICMP (tipo 5). Se você tem a opção de usar o modo passivo. e a performance será abismal ou não existente. estas podem ser usados para manipular roteamento (embora boas stacks IP tem proteções). Caso contrário.2. então bem. e assim são frequentemente vistas como ligeiramente ariscadas.conf ou usando um servidor de nomes cache no modo forward). então você precisará somente permitir conexões TCP para a porta domínio naquele servidor de nomes da porta de domínio local (se usando um servidor de nomes cache) ou de uma porta alta (>1023) se estiver usando /etc/resolv. é recomendado que você somente permita conexões TCP para portas acima de 1024 e não entre 6000 e 6010 (6000 é usada pelo X-Window). e se ele nunca é recebido. Isto pode ser uma armadilha porque DNS sempre “trabalha mais ou menos” se você bloquear tais transferências TCP. modo passivo faz as conexäes de dados de cliente para servidor.3 Pesadelos FTP O problema clássico de filtragem de pacotes é o FTP. Se suas requisições DNS sempre são direcionadas para a mesma origem externa (ou diretamente usando a linha nameserver em /etc/resolv. Este é um tipo de pacote “destination-unreachable”. quando o computador remoto tenta enviar um arquivo (ou até mesmo o resultado de um comando ls ou dir) ele tenta abrir uma conexão TCP com a máquina local. No modo ativo. você pode experimentar esperas longas e estranhas ou outros problemas DNS ocasionais se você o fizer. mas programas FTP de linha de comando normalmente usam o modo ativo.5.conf. 512 bytes. o host local não reduzirá o MTU. Navegadores Web normalmente usam o modo passivo. 5. o cliente usa uma conexão TCP (ainda indo para o número de porta 53) para obter a resposta. FTP tem dois modos.

5. que envolve o envio de grandes pacotes ICMP ilegais que sobrecarrega os buffers na pilha TCP no receptor e causa destruição. Uma solução simplíssima é fazer o seguinte: # ipchains -I input 1 -j DENY # ipchains -I output 1 -j DENY # ipchains -I forward 1 -j DENY . Linux não tem este problema.5 Filtrando Bombas de Fragmento Algumas pilhas TCP são comentadas por ter problemas negociando com grandes números de fragmentos de pacotes quando eles não recebem todos os fragmentos. Pacotes normais ICMP não são grandes o bastante para requerer fragmentação. você pode deixar pacotes passarem enquanto estiver fazendo suas alterações. Sobre os programas exploit e tenho sempre visto que todos usam ICMP.5. assim bloqueando fragmentos ICMP é somente uma solução temporária. Se você não é cuidadoso. 5...4 Filtrando o Teardrop e Bonk Teardrop e Bonk são dois ataques (principalmente sobre máquinas Microsoft Windows NT) que confiam em fragmentos sobrepostos. Se você está protegendo computadores que podem ser vulneráveis. assim bloquear somente o primeiro fragmento não é recomendado. assim você não deve bloquear nada exceto grandes pings. faz alterações .5.. você deve simplesmente bloquear fragmentos ICMP. 5. Tendo seu roteador Linux fazendo desfragmentação. não existem razões que fragmentos TCP ou UDP (ou um protocolo desconhecido) possa ser usado neste ataque.5.5. Você pode filtrar fora fragmentos (que podem interromper legitimos usuários) ou compilar seu kernel com “IP: always defragment” ajustado para “Y” (somente se seu computador linux é o roteador para estes pacotes).6 Modificando regras do firewall Existem alguns assuntos cronometrados envolvidos em alterar regras do firewall. # ipchains -D input 1 71 . Eu tenho ouvido (não confirmados) relatos que muitos sistemas requerem somente o último fragmento de um pacote ICMP acima de seu tamanho para o corromper..3 Filtrando o Ping of Death (ping da morte) Computadores Linux são agora imunes aos famosos Ping of Death.5. ou não permitindo todos os fragmentos para suas máquinas vulneráveis são as outras opções.

. e então trocar (“-R”) a regra que aponta para o antigo chain para a nova que aponta para o novo chain: então você pode apagar o antigo chain. Teardrop. Procure por um arquivo chamado /proc/sys/net/ipv4/conf/all/rp_filter.” else echo PROBLEMS SETTING UP IP SPOOFING PROTECTION.0. O melhor meio para proteger de IP spoofing é chamado Verificação do endereço de Origem. then echo -n “Setting up IP spoofing protection. e não o firewall completamente. Ping of Death e outros (não se preocupe se não sabe o que eles fazem).255. Ele é também usado para ocultar a identidade de atacantes usando ataques SYN. você deve criar um novo chain com novas regras.168.0. Os kernels 2. Digamos eth0 foi ligada a rede 192. Isto requer conhecimento de cada interface. você pode inserir manualmente regras para proteger cada interface. lo).# ipchains -D output 1 # ipchains -D forward 1 Isto bloqueia todos os pacotes durante as alterações. if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ].* (reservados para a interfaceloopback local.0. Por exemplo. e é feito pelo código de roteamento. Desde que a filtragem de pacotes faz decisões baseadas no endereço de origem.7 Como eu configuro a proteção IP Spoof? IP spoofing é uma técnica onde um host envia pacotes que parecem ser de outro host.1.0. Nós podemos usar ifconfig para nos dizer o endereço e netmask das interfaces. 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.0 com a netmasq 255.255.0 com a netmask 255.0. eth1 foi ligada a rede 10. 5. Se suas alterações são restritas para um chain simples.” for f in /proc/sys/net/ipv4/conf/*/rp_filter. do echo 1 > $f done echo “done. então ligando a Verificação do Endereço de Origem (Source Address Verification) em cada inicialização é a solução certa para você.. insira as seguintes linhas em qualquer lugar de seus scripts init. Para fazer isto. eth0. eth1 e ppp0. digamos que temos três interfaces. e ppp0 conectado com a 72 .5.1 automáticamente rejeitam pacotes dizendo vir de endereços 127. echo “CONTROL-D will exit from this shell and continue system startup.0. Se ele existe. IP spoofing ‘ usado para filtros de pacotes bobos.” echo # Start a single user shell on the console /sbin/sulogin $CONSOLE fi Se você não puder fazer isto. Esta substituição ocorrerá atomicamente. BE WORRIED.

0 -j DENY 192.168. você pode desejar proteger a interface loopback também.0.internet (onde qualquer endereço exceto endere‡os IP privados são permitodos).0/255.0/255.255. nós 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. Assim se você está simplesmente usando o redirecionamento.0.0 -j DENY 10. porque se sua rede muda.0 -j DENY Esta idéia não é tão boa como a Verificação do endereço de origem.0.0. você deve mudar suas regras de firewall para prevenila.0.2 Masquerading/Forwarding não funciona! Certifique-se que o forward de pacotes está ativado (em kernels recentes é desativado por padrão.0/255.255. Tente usar a opção “-n” (númerico) com ipchains.0/255.0. e não tem qualquer forward. Se você está executando um kernel da série 2.6. você deverá estar atento a isto.255. dizendo que pacotes nunca tentam atravessar o chain “forward”).1.0. você deve configurar seu firewall antes de executar este comando.0.6. usando uma regra como esta: # ipchains -A input -i ! lo -s 127.0/255.0 -j DENY 5.0.6. 73 . que não mostra nomes.0.0.255.0 -j DENY 10.6 Problemas comuns 5.0. 5. e eventualmente o time out.3 -j REDIR não funciona! Você deve permitir pacotes forward (veja acima) para o redirecionamento funcionar.0. 5. Você pode alterar isto (como root) digitando: # echo 1 > /proc/sys/net/ipv4/ip_forward Se isto funciona para você.1 ipchains -L Trava! Você está provavelmente bloqueando chamada DNS.168. caso contrário existe uma oportunidade de pacotes escaparem. caso contrário o código de roteamento bloqueia o pacote. coloque isto em algum lugar em seus scripts de inicialização assim ele será ativado toda hora.1.

6.0. por favor fale sobre o erro para o autor (este erro não é meu). isto é verdade: eu não tenho tempo para criar e manter um patch gigantesco para ipchains e ipautofw/ipportfw.x.34 do web site.1.5 TOS não funciona! Isto foi meu erro: configurando o campo tipo do serviço não configurava atualmente o tipo do serviço nos kernels versões 2.6. Isto está corrigido nos kernels mais recentes.102 e 2.6. Em 2.h #define IP_FW_F_MASK 0x002F /* All possible flag bits mask */ Isto deve ser lido como “0x003F”.3.linuxhq.6.6.x.3.103 do kernel (e alguns patches antigos que produzi) que fazem comandos ipchains falharem ao especificar uma inteface com coringas (tal como -i ppp+).4 Coringas nas Interfaces não funcinam! Existe um bug nas versões 2.1. 5.Note que REDIR (sendo no chain input) não afeta conexões de um processo local.1.111. Este problema foi corrigido em 2.124.6. Você pode também pode corrigir alterando o fonte do kernel alterando a linha 63 ou assim em include/linu/ip_fw.x. Isto parece ter quebrado denovo no lançamento 1.7 xosview está quebrado! Atualize para a versão 1. 5. 5.112.1.0. que não requerem qualquer regra de firewall para kernels 2.0 ou superior.1. 5.1.9 Eu não posso configurar tempo limite no masquerade! Verdadeiro (para kernels 2.6. 5. e no patch 2.1.6 ipautofw e ipportfw não funcionam! Para o kernel 2.1.102 entre 2.6. copie Juan Ciarlante’s ipmasqadm de http://juanjox.x) até 2. tentando configurar o tempo limite no masquerading causava uma chamada no kernel 74 . Corrija isto e recompile o kernel. exceto ao invés de ipportfw você digita ipmasqadm portfw. Para o kernel 2.1.1.com/ e use-o exetamente como usaria como ipautofw ou ipportfw.123. e ao invés de ipautofw você deve digitar ipmasqadm autofw. 5.1.8 Falta de Segmentação com “-j REDIRECT”! Este foi um bug no ipchains versão 1. Por favor atualize.

Meu código somente cobre IP. 5. Do lado bom. todos os ganchos estão lá para IPX! Você apenas precisa re-escrever o código.10 Eu desejo proteger IPX! Assim como outros.c).1. Eu ficaria feliz em ajudar onde for possível.6. Em 2. 75 .(altere return para ret = na linha 1328 de net/ipv4/ip_fw. eu vejo. infelizmente.125. funciona corretamente.

DoS. 6. o pacote é bloqueado e registrado para que o administrador do sistema tenha conhecimento sobre o que está acontecendo em seu sistema. funções podem ser adicionadas ao firewall ampliando as possibilidades oferecidas. o que deseja bloquear. Ele funciona através da comparação de regras para saber se um pacote tem ou não permissão para passar. contra syn flood. criar proteções anti-spoofing.6 FIREWALL IPTABLES Adaptado do Guia Foca GNU/Linux Avançado – Capítulo 9. foi introduzido o firewall iptables (também chamado de netfilter) que substitui o ipchains dos kernels da série 2. modificar a prioridade de pacotes que chegam/saem do seu sistema.1 Introdução O Firewall é um programa que como objetivo proteger a máquina contra acessos indesejados. etc. o que tem acesso garantido. contagem de bytes. pois ele garante uma grande flexibilidade na manipulação das regras de acesso ao sistema. Usei por 2 anos o ipchains e afirmo que este é um firewall que tem possibilidades de gerenciar tanto a segurança em máquinas isoladas como roteamento em 76 . prioridade. Em firewalls mais restritivos. fazer NAT (masquerading. Este capítulo documenta o funcionamento do firewall iptables que acompanha a série do kernel 2. tráfego indesejado. precisando apenas conhecer quais interfaces o sistema possui. redirecionamento de pacotes.4. opções usadas. e aponta alguns pontos fundamentais para iniciar a configuração e construção de bons sistemas de firewall. source nat. evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais).2. controle independente do tráfego da rede local/entre redes/interfaces devido a nova organização das etapas de roteamento de pacotes. O tráfego vindo de máquinas desconhecidas da rede pode também ser bloqueado/registrado através do uso de simples regras. mais opções disponíveis ao administrador para controle de tráfego. O iptables ainda tem a vantagem de ser modularizável. No kernel do Linux 2. confiável. etc. As possibilidades oferecidas pelos recursos de filtragem iptables como todas as ferramentas UNIX maduras dependem de sua imaginação. dividir tráfego entre máquinas.4. quais serviços devem estar acessíveis para cada rede. e iniciar a construção de seu firewall. O iptables é um firewall a nível de pacotes e funciona baseado no endereço/porta de origem/destino do pacote. marcação de pacotes. Este novo firewall tem como vantagem ser muito estável (assim como o ipchains e ipfwadm). destination nat). Ele também pode ser usado para modificar e monitorar o tráfego da rede. permitir muita flexibilidade na programação de regras pelo administrador do sistema. proteger serviços que estejam rodando na máquina e bloquear a passagem de coisas que você não deseja receber (como conexões vindas da Internet para sua segura rede local.

6.1.1 Versão É assumido que esteja usando a versão 1. Enfim o iptables é um firewall que agradará tanto a pessoas que desejam uma segurança básica em seu sistema. é necessário pelo menos conhecimentos básicos de rede tcp/ip. A segurança do sistema depende do controle das regras que serão criadas por você. roteamento e portas para criar as regras que farão a segurança de seu sistema. as falhas humanas são garantia de mais de 95% de sucesso nas invasões.4 do kernel.1.4. Um firewall não funciona de forma automática (instalando e esperar que ele faça as coisas por você).2 do kernel). que substituiu o ipchains (presente nas séries 2.4 em meados de Junho/Julho de 1999. monitoração.grandes organizações. quando administradores de grandes redes que querem ter um controle minucioso sobre o tráfego que passam entre suas interfaces de rede (controlando tudo o que pode passar de uma rede a outra). Ele foi incluído no kernel da série 2.2 Um resumo da história do iptables O iptables é um código de firewall das versões 2.1. onde a passagem de tráfego entre redes deve ser minuciosamente controlada. etc. A história do desenvolvimento (desde o porte do ipfw do BSD para o Linux até o iptables (que é a quarta geração de firewalls do kernel) está disponível no documento. controlar o uso de tráfego.3 do iptables e baseadas nas opções do kernel 2. mas é recomendável que leia a documentação sobre modificações no programa (changelog) em busca de mudanças que alterem o sentido das explicações fornecidas aqui. 6.2. As explicações contidas aqui podem funcionar para versões posteriores.3 Características do firewall iptables • • Especificação de portas/endereço de origem/destino Suporte a protocolos TCP/UDP/ICMP (incluindo tipos de mensagens icmp) Suporte a interfaces de origem/destino de pacotes Manipula serviços de proxy na rede Tratamento de tráfego dividido em chains (para melhor controle do tráfego que entra/sai da máquina e tráfego redirecionado. Permite um número ilimitado de regras por chain Muito rápido. Netfilter-howto.16 (sem o uso de módulos experimentais). estável e seguro Possui mecanismos internos para rejeitar automaticamente pacotes duvidosos ou mal formados. 6. 77 • • • • • • .

• • • • • • • • • • • 6. Redirecionamento de portas Masquerading Suporte a SNAT (modificação do endereço de origem das máquinas para um único IP ou faixa de IP's).Sistema de controle principal para protocolos ipv6 iptables-save . Section 9. syn flood.Restaura regras salvas pelo utilitário iptables-save.4 Ficha técnica Pacote: iptables • • • iptables .1. Suporte a DNAT (modificação do endereço de destino das máquinas para um único IP ou fixa de IP's) Contagem de pacotes que atravessaram uma interface/regra Limitação de passagem de pacotes/conferência de regra (muito útil para criar proteções contra. iptables-restore .Salva as regras atuais em um arquivo especificado como argumento.15. • 6.1. O requerimento mínimo de memória necessária para a execução do iptables é o mesmo do kernel 2. etc). 78 .• Suporte a módulos externos para expansão das funcionalidades padrões oferecidas pelo código de firewall Suporte completo a roteamento de pacotes. Permite especificar exceções para as regras ou parte das regras Suporte a detecção de fragmentos Permite enviar alertas personalizados ao syslog sobre o tráfego aceito/bloqueado. tratadas em uma área diferente de tráfegos padrões.5 Requerimentos É necessário que o seu kernel tenha sido compilado com suporte ao iptables (veja Habilitando o suporte ao iptables no kernel. Dependendo do tráfego que será manipulado pela(s) interface(s) do firewall ele poderá ser executado com folga em uma máquina 386 SX com 4MB de RAM. Suporte a especificação de tipo de serviço para priorizar o tráfego de determinados tipos de pacotes. Este utilitário pode ser dispensado por um shell script contendo as regras executado na inicialização da máquina.1.Sistema de controle principal para protocolos ipv4 ip6tables . ping flood.4 (4MB). DoS.

1.1.1. 6. 6.org. acredito que criarão patches "externos" para futuros kernels que não trarão mais este suporte).7 Instalação apt-get install iptables O pacote iptables contém o utilitário iptables (e ip6tables para redes ipv6) necessários para inserir suas regras no kernel. 6. usa todos os recursos que ele oferece ou mantém uma complexa rede corporativa. tenho certeza que gostará do iptables. Se você é um administrador que gosta de explorar todos os recursos de um firewall. são um exemplo deste tipo de firewall. 6. mas o suporte ao ipchains e ipfwadm ainda será mantido no kernel até 2004. Alguns firewalls a nível de aplicação combinam recursos básicos existentes em firewalls a nível de pacotes combinando as funcionalidade de controle de tráfego/controle de acesso em uma só ferramenta.8 Enviando Correções/Contribuindo com o projeto A página principal do projeto é http://netfilter. Se você não sabe o que é ipv6. não precisará se preocupar com o utilitário ip6tables por enquanto.9 O que aconteceu com o ipchains e ipfwadm? O iptables faz parte da nova geração de firewalls que acompanha o kernel 2.samba.Como as configurações residem no kernel não é necessário espaço extra em disco rígido para a execução deste utilitário.4. Sugestões podem ser enviadas para a lista de desenvolvimento oficial do iptables: http://lists. Section 9. como o squid.1.10 • Tipos de firewalls Existem basicamente dois tipos de firewalls: nível de aplicação . Firewalls deste tipo são mais intrusivos (pois analisam o conteúdo de tudo que passa por ele) e permitem um controle relacionado com o conteúdo do tráfego.Este tipo de firewall analisam o conteúdo do pacote para tomar suas decisões de filtragem.filewatcher.6 Arquivos de logs criados pelo iptables Todo tráfego que for registrado pelo iptables é registrado por padrão no arquivo /var/log/kern. Seria uma grande falta de consideração retirar o suporte a estes firewalls do kernel como forma de obrigar a "aprenderem" o iptables (mesmo o suporte sendo removido após este período. Servidores proxy.log. 79 . Se precisa do suporte a estes firewalls antes de passar em definitivo para o iptables leia Habilitando o suporte ao iptables no kernel.15.org.1.1. 6.

11 O que proteger? Antes de iniciar a construção do firewall é bom pensar nos seguintes pontos: • Quais serviços precisa proteger. SMTP RCP. • • • • Que máquinas terão acesso livre e quais serão restritas. X-Window são serviços que devem ser ter acesso garantido somente para máquinas/redes que você confia. configurar proteções contra DoS. • 80 . syn flood. Firewall a nível de pacotes é o assunto explicado nesta seção do guia. DNS. mesmo se um serviço estiver mal configurado e tentando enviar seus pacotes para fora. O firewall então pode negar o pacote (DROP) ou deixar o pacote passar (ACCEPT). como porta/endereço de origem/destino.1. Da mesma forma se uma máquina Windows de sua rede for infectada por um trojan não haverá pânico: o firewall poderá estar configurado para bloquear qualquer tentativa de conexão vinda da internet (cracker) para as máquinas de sua rede. Que tipo de conexões eu posso deixar passar e quais bloquear. mas também como forma de atacar outras pessoas aproveitando-se de problemas de configuração. LDAP. telnet. Chapter 14). O volume de tráfego que o servidor manipulará.Este tipo de firewall toma as decisões baseadas nos parâmetros do pacote.• nível de pacotes . é recomendado o uso de serviços que utilizam criptografia para login e cópia de arquivos (veja Servidor ssh. É recomendável bloquear o acesso a todas portas menores que 1024 por executarem serviços que rodam com privilégio de usuário root. e autorizar somente o acesso as portas que realmente deseja (configuração restritiva nesta faixa de portas). NFS. O iptables é um excelente firewall que se encaixa nesta categoria. Que máquinas/redes NUNCA deverão ter acesso a certas/todas máquinas. etc. Serviços com autenticação em texto plano e potencialmente inseguros como rlogin. e outros parâmetros do pacote. Para cópia de arquivos via rede insegura (como através da Internet). ftp. Estes serviços podem não ser só usados para tentativa de acesso ao seu sistema. Através disso você pode ter que balancear o tráfego entre outras máquinas. Serviços que devem ter acesso garantido a usuários externos e quais serão bloqueados a todas/determinadas máquinas. Que serviços deverão ter prioridade no processamento. será impedido. Os dois tipos de firewalls podem ser usados em conjunto para fornecer uma camada dupla de segurança no acesso as suas máquinas/máquinas clientes. 6. A configuração do firewall ajuda a prevenir isso. estado da conexão.

o que significa que quando o computador for reiniciado tudo o que fez será perdido. eles dependem do tipo de firewall que está desenvolvendo e das políticas de segurança de sua rede. contém 3 chains padrões: o o o INPUT . As tabelas podem ser referenciadas com a opção -t tabela e existem 3 tabelas disponíveis no iptables: • filter . 6. OUTPUT e FORWARD) e os criados pelo usuário. Existem muitos outros pontos que podem entrar na questão de desenvolvimento de um sistema de firewall. Um exemplo de regra: iptables -A INPUT -s 123.12 O que são regras? As regras são como comandos passados ao iptables para que ele realize uma determinada ação (como bloquear ou deixar passar um pacote) de acordo com o endereço/porta de origem/destino. ou seja. 81 . interface de origem/destino.• O que tem permissão de passar de uma rede para outra (em máquinas que atuam como roteadores/gateways de uma rede interna). Por este motivo elas deverão ser gravadas em um arquivo para serem carregadas a cada inicialização.123. • A análise destes pontos pode determinar a complexidade do firewall.Consultado para dados que são redirecionados para outra interface de rede ou outra máquina.Esta é a tabela padrão. As regras são armazenadas dentro dos chains e processadas na ordem que são inseridas.14 O que são tabelas? Tabelas são os locais usados para armazenar os chains e conjunto de regras de um mesmo conjunto que cada um possui. o chain input é completamente diferente de INPUT).Consultado para dados que saem da máquina FORWARD .1 -j DROP. Existem dois tipos de chains: os embutidos (como os chains INPUT. Etc. Os nomes dos chains embutidos devem ser especificados sempre em maiúsculas (note que os nomes dos chains são case-sensitive.Consultado para dados que chegam a máquina OUTPUT . 6.13 O que são chains? Os Chains são locais onde as regras do firewall definidas pelo usuário são armazenadas para operação do firewall.123.1. etc. As regras são armazenadas no kernel. prazo de desenvolvimento e tempo de maturidade do código para implementação. custos de implementação. 6.1.1.

4. Section 9. • nat . destination nat.Consultado quando os pacotes precisam ser modificados logo que chegam. OUTPUT . OUTPUT . POSTROUTING . 6. Possui 3 chains padrões: o PREROUTING .3).1. OBS: Para conexões locais. Section 9.4). Section 9.Usada para dados que gera outra conexão (masquerading. source nat. permitindo fazer o controle do que tem ou não permissão de acessar sua máquina.Os chains INPUT e OUTPUT somente são atravessados por conexões indo/se originando de localhost. É o chain ideal para realização de DNAT e redirecionamento de portas (Fazendo DNAT. É o chain ideal para realização de SNAT e IP Masquerading (Fazendo SNAT. o Veja A tabela mangle. Possui 2 chains padrões: o PREROUTING .15 Habilitando o suporte ao iptables no kernel Para usar toda a funcionalidade do firewall iptables.Utilizada para alterações especiais de pacotes (como modificar o tipo de serviço (TOS) ou outros detalhes que serão explicados no decorrer do capítulo.Consultado quando pacotes gerados localmente precisam ser modificados antes de serem roteados. você precisará dos seguintes componentes compilados em seu kernel (os módulos experimentais fora ignorados intencionalmente): * * Network Options: * Network packet filtering (replaces ipchains) [Y/m/n/?] Network packet filtering debugging [Y/m/n/?] e na Subseção: 82 . fazer Masquerading/NAT em sua rede. etc.Consultado quando os pacotes precisam ser modificados após o tratamento de roteamento. proxy transparente são alguns exemplos). port forwarding.Consultado quando os pacotes precisam ser modificados logo que chegam.Consultado quando os pacotes gerados localmente precisam ser modificados antes de serem roteados. o o • mangle .4. somente os chains INPUT e OUTPUT são consultados na tabela filter.. Este chain somente é consultado para conexões que se originam de IPs de interfaces locais.5 para mais detalhes sobre a tabela mangle.

Não execute mais de um tipo de firewall ao mesmo tempo!!! OBS2: É recomendável ativar o daemon kmod para carga automática de módulos. você poderá eliminar muitas das opções desnecessárias para seu estilo de firewall ou continuar fazendo uso de todas . 83 .o no caso do iptables). ela ativa os módulos necessários para utilização de todos os recursos do firewall iptables. Quando conhecer a função de cada um dos parâmetros acima (durante o decorrer do texto). caso contrário será necessário compilar todas as partes necessárias embutidas no kernel. Caso deseje utilizar o ipchains ou o ipfwadm. será preciso responder com "M" a questão "IP tables support (required for filtering/masq/NAT) (CONFIG_IP_NF_IPTABLES)". Será necessário carregar manualmente o módulo correspondente ao firewall que deseja utilizar (modprobe iptables_filter.-) OBS1: A configuração acima leva em consideração que você NÃO executará os códigos antigos de firewall ipfwadm e ipchains.* * 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 configuração permite que você não tenha problemas para iniciar o uso e configuração do seu firewall iptables. carregar os módulos necessários manualmente ou pelo iptables (através da opção --modprobe=módulo).

pois todos os pacotes com o destino 127.0.0.0.5 ms --.2.0.0.2 ou Fazendo SNAT.0.0.0.0.1): iptables -t filter -A INPUT -d 127.0.3.16 Ligando sua rede interna a Internet Se a sua intenção (como da maioria dos usuários) é conectar sua rede interna a Internet de forma rápida e simples.0. No Linux pode ser feito com route add default gw IP_do_Servidor.1.0. No Windows 9x/NT/2000 isto é feito no Painel de Controle/Rede/Propriedades de Tcp/IP. Um exemplo prático de configuração de Masquerading deste tipo é encontrado em Conectando sua rede interna a Internet. Primeiro daremos um ping para verificar seu funcionamento: #ping 127.0.0.0.6 ms Ok.1 Adicionando regras . 0% packet loss round-trip min/avg/max = 0. leia Fazendo IP masquerading (para os apressados). Após configurar o masquerading.4.6 ms 64 bytes from 127.0.127. agora vamos incluir uma regra no chain INPUT (-A INPUT) que bloqueie (-j DROP) qualquer acesso indo ao endereço 127. 2 packets received.1 -j DROP Agora verificamos um novo ping: #ping 127.1 (-d 127.1 PING 127.1): 56 data bytes 64 bytes from 127.1 .5/0.127.0. 6.0.0. Além de -j DROP que serve para rejeitar os pacotes.0. A opção -A é usada para adicionar novas regras no final do chain.0.0.0.0.4. Section 9.0. Section 9.1 ping statistics --2 packets transmitted.1 (127.A Como exemplo vamos criar uma regra que bloqueia o acesso a nosso própria máquina (127.0. As seguintes operações podem ser realizadas com os chains: 6.0. a máquina responde. 100% packet loss Desta vez a máquina 127.8.5/0.3.1 ping statistics --2 packets transmitted.1: icmp_seq=0 ttl=255 time=0.0. podemos também usar -j ACCEPT para aceitar 84 .1 PING 127.loopback).0.0.1 (-d 127.0.1): 56 data bytes --.1: icmp_seq=1 ttl=255 time=0.6.2 Manipulando chains As opções passadas ao iptables usadas para manipular os chains são SEMPRE em maiúsculas. você só precisará especificar o endereço IP da máquina masquerading (servidor) como Gateway da rede. Section 9.1 não respondeu.1 (127.1) são rejeitados (-j DROP).0.0. 0 packets received.0.

pacotes. Caso o chain não seja especificado. A resolução de nomes pode tomar muito tempo dependendo da quantidade de regras que suas tabelas possuem e velocidade de sua conexão. chain Um dos chains disponíveis na tabela acima (veja O que são tabelas?. todos os chains da tabela serão mostrados. A opção -j é chamada de alvo da regra ou somente alvo pois define o destino do pacote que atravessa a regra (veja Especificando um alvo.2 Listando regras .2. --line-numbers . opções As seguintes opções podem ser usadas para listar o conteúdo de chains: • • -v . Bem vindo a base de um sistema de firewall :-) OBS1: .1. Também mostra a faixa de portas de uma regra de firewall.Exibe endereços de máquinas/portas como números ao invés de tentar a resolução DNS e consulta ao /etc/services.2.Exibe mais detalhes sobre as regras criadas nos chains.A tabela filter será usada como padrão caso nenhuma tabela seja especificada através da opção -t.6). pois muitos aplicativos utilizam soquetes tcp para realizarem conexões. 6.anywhere destination localhost 85 . Section 9.6).Exibe números exatos ao invés de números redondos. Veja O que são tabelas?.Exibe o número da posição da regra na primeira coluna da listagem.3. mesmo que você não possua uma rede interna.O acesso a interface loopback não deve ser de forma alguma bloqueado. a tabela filter será usada como padrão.N.14) ou criado pelo usuário (Criando um novo chain . Section 9. -x . Se a tabela não for especificada.14 para detalhes. • • Para listar a regra criada anteriormente usamos o comando: #iptables -t filter -L INPUT Chain INPUT (policy ACCEPT) target prot opt source DROP all -. Section 9. Section 9.L A seguinte sintaxe é usada para listar as regras criadas: iptables [-t tabela] -L [chain] [opções] Onde: tabela É uma das tabelas usadas pelo iptables.1. -n . OBS2: .

a diferença é que são mostrados números ao invés de nomes: #iptables -L INPUT -n Chain INPUT (policy ACCEPT) target prot opt source DROP all -.0. Veja Especificando um alvo.10). Veja Especificando um protocolo.3 para detalhes.2. Pode ser ACCEPT.0. opt 86 . G (Gigabytes).0.0/0 destination 127.11). icmp ou all. target O alvo da regra.* * 0.0. pkts Quantidade de pacotes que atravessaram a regra (veja Zerando contador de bytes dos chains .1 #iptables -L INPUT -n -v Chain INPUT (policy ACCEPT 78 packets. DROP ou outro chain. Section 9.2.0.0/0 destination 127. M (Megabytes).0. Pode ser referenciado com K (Kilobytes).0. 5820 bytes) pkts bytes target prot opt in out source destination 2 194 DROP icmp -.1 Os campos assim possuem o seguinte significado: Chain INPUT Nome do chain listado (policy ACCEPT 78 packets.0. Section 9. o destino do pacote.0. Section 9.3.0.0.P. Section 9. tcp.0. prot Protocolo especificado pela regra.0/0 127.O comando iptables -L INPUT -n tem o mesmo efeito.1 #iptables -L INPUT -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source 1 DROP all -. Pode ser udp. 5820 bytes) Policiamento padrão do chain (veja Especificando o policiamento padrão de um chain .6 para detalhes sobre a especificação de um alvo.3.0. bytes Quantidade de bytes que atravessaram a regra.0.Z.

0. outras opções Estas opções normalmente aparecem quando são usadas a opção -x: • • Veja Veja Especificando um endereço de Veja Especificando um endereço de dpt ou dpts . para apagar a regra criada acima: iptables -t filter -D INPUT 1 Esta opção não é boa quando temos um firewall complexo com um grande número de regras por chains. Section 9.1). Section 9. mas trocamos -A por -D: iptables -t filter -D INPUT -d 127.4). Usamos a mesma sintaxe para criar a regra no chain. Por exemplo.1 -j DROP Então a regra correspondentes no chain INPUT será automaticamente apagada (confira listando o chain com a opção "-L"). Section 9.6.3. destination Endereço de destino. source Endereço de origem.Opções extras passadas a regra. Section 9.2. 87 . origem/destino.3. Veja Especificando a interface de origem/destino. somente a primeira será apagada. Especificando a interface de origem/destino.D Para apagar um chain.Significa que foi usado o alvo REJECT naquela regra (veja Alvo REJECT. 2. Caso o chain possua várias regras semelhantes. out Interface de saída (para onde os dados vão).Especifica a porta ou faixa de portas de destino.1. reject-with icmp-port-unreachable .3. existem duas alternativas: 1. Normalmente "!" (veja Especificando uma exceção.2.3. Section 9. Section 9. Section 9. neste caso a segunda opção é a mais apropriada.5) ou "f" (veja Especificando fragmentos.3.3.2. 6. in Interface de entrada (de onde os dados chegam).3 Apagando uma regra .3.1.0. origem/destino. Quando sabemos qual é o número da regra no chain (listado com a opção -L) podemos referenciar o número diretamente.

Não podemos adicionar uma nova regra (-A) pois esta seria incluída no final do chain e o tráfego seria rejeitado pela primeira regra (nunca atingindo a segunda). 6. O tamanho máximo de um nome de chain é de 31 caracteres e podem conter tanto letras maiúsculas quanto minúsculas. 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 após a opção -A: iptables -t filter -A internet -s 200.0.1. endereço de origem.0.15 não seja rejeitado pelo nosso firewall.168.1 será bloqueado na regra seguinte.2.4 Inserindo uma regra .0.1.1 (-d 127.0.6 Criando um novo chain .0. 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).200. é interessante criar chains individuais para organizar regras de um mesmo tipo ou que tenha por objetivo analisar um tráfego de uma mesma categoria (interface. destino.6.I Precisamos que o tráfego vindo de 192. e deve ser especificado. 6.0. protocolo. Desta forma a regra acima será consultada. A solução é inserir a nova regra antes da regra que bloqueia todo o tráfego ao endereço 127.0.5 Substituindo uma regra .2.168.1.0. percebemos que a nossa intenção era somente bloquear os pings com o destino 127.N Em firewalls organizados com um grande número de regras.200. se a máquina de origem for 192.1 -j ACCEPT Após este comando.1).0.168.0. caso contrário o tráfego com o destino 127.0.R Após criar nossa regra.1 -p icmp -j DROP O número 2 é o número da regra que será substituída no chain INPUT.1 na posição 1: iptables -t filter -I INPUT 1 -s 192.0. Use o seguinte comando: iptables -R INPUT 2 -d 127.0.15 então o tráfego estará garantido. temos a regra inserida na primeira posição do chain (repare no número 1 após INPUT) e a antiga regra número 1 passa a ser a número 2.1 (pacotes ICMP) e não havia necessidade de bloquear todo o tráfego da máquina.0. etc) pois podem consumir muitas linhas e tornar o gerenciamento do firewall confuso (e conseqüentemente causar sérios riscos de segurança). 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.15 -d 127.2.200 -j DROP E então criamos um pulo (-j) do chain INPUT para o chain internet: 88 .

1. a terceira regra direciona para o chain internet ______________________________________ v / v /-------------------------|-\ / /-------------------------------------|-\ | Regra1: -s 192. então as regra consultadas serão as seguintes: O pacote tem o endereço de origem 200.200 e \---------------------------/ o pacote é bloqueado.15 | | / | Regra1: -s 200.200.168. a terceira regra direciona para o chain internet _______________________________________ v / v /-------------------------|-\ / /-------------------------------------|-\ | Regra1: -s 192.iptables -t filter -A INPUT -j internet OBS: O chain criando pelo usuário pode ter seu nome tanto em maiúsculas como minúsculas.200.1 | |--------------------------| ----------------------------| Regra3: -j DROP | ---------------------------O pacote tem o endereço de origem 200.200.200.200.202 -j DROP | | |-------------------------|-|/ \-------------------------------------|-/ | Regra3: -j internet /| v |---------------------------| / | Regra4: -j DROP --+------------------------------------------\------------------------/-/ O pacote passa pelas regras 1 e 2 do chain | internet.1.1.200. como ele não confere com nenhuma v das 2 regras ele retorna ao chain INPUT e é Esta regra é a número 4 analisado pela regra seguinte.168.200 -j DROP \_____\ |-------------------------|-| / |---------------------------------------| / | Regra2: -s 192. a primeira regra confere | Regra4: -j DROP | com o endereço de origem 200.200 -j DROP | | |-------------------------|-| / |-------------------------------------|-| | Regra2: -s 192.202 -j DROP | |-------------------------|-|/ \---------------------------------------/ | Regra3: -j internet /| |---------------------------| No chain internet.200.168.200.200 tentar acessar sua máquina. ele passa pela primeira e segunda regras do chain INPUT.200| |--------------------------| |---------------------------| | Regra2: -s 192.200.201.200.1.200. Se uma máquina do endereço 200.168.1.200.1.15 | | / | Regra1: -s 200. ele passa pela primeira e segunda regras do chain INPUT.200.200.200. o iptables consultará as seguintes regras: `INPUT' `internet' -------------------------------------------------------| Regra1: -s 192.1.200.201 tentar acessar a máquina.168.1 | | Regra2: -d 192.1 | | / | Regra2: -d 200. Se uma máquina com o endereço de origem 200.200.168.1 | | / | Regra2: -s 200. que diz para rejeitar o pacote. 89 .168.200.15 | | Regra1: -s 200.200.200.200.

É interessante dar uma olhada nos arquivos dentro do diretório /proc/net. iptables -t filter -F INPUT iptables -t filter -F 6. 6. Estes campos podem ser visualizados com o comando iptables -L -v. Veja os nomes destes chains em “6.Z Este comando zera o campo pkts e bytes de uma regra do iptables.F Para limpar todas as regras de um chain. use a seguinte sintaxe: iptables [-t tabela] [-F chain] Onde: tabela Tabela que contém o chain que desejamos zerar. iptables -t filter -X internet iptables -X 6.9 Apagando um chain criado pelo usuário . chain Nome do chain que desejamos apagar. pois podem lhe ser interessantes. chain Chain que desejamos limpar. usamos a seguinte sintaxe: iptables [-t tabela] [-X chain] Onde: tabela Nome da tabela que contém o chain que desejamos excluir. A seguinte sintaxe é usada: iptables [-t tabela] [-Z chain] [-L Onde: tabela 90 .7 Listando os nomes de todos os chains atuais Use o comando cat /proc/net/ip_tables_names para fazer isto.X Para apagarmos um chain criado pelo usuário.Chains embutidos nas tabelas não podem ser apagados pelo usuário.2.2.2.6.8 Limpando as regras de um chain . Caso não seja especificado.2.14 O que são tabelas?”. OBS: . todos os chains da tabela serão limpos. Caso um chain não seja especificado. todos os chains definidos pelo usuário na tabela especificada serão excluídos.1.10 Zerando contador de bytes dos chains .

DROP rejeita os pacotes caso nenhuma regra do chain conferir (usado em regras restritivas). Note que as opções -Z e -L podem ser usadas juntas. O chain deve ser especificado.P O policiamento padrão determina o que acontecerá com um pacote quando ele chegar ao final das regras contidas em um chain. chain Define o chain que terá o policiamento modificado. Caso não seja especificado. iptables -t filter -Z INPUT 6. chain Chain que deve ter os contadores zerados. Para alterar o policiamento padrão deste chain usamos o comando: iptables -t filter -P INPUT DROP 91 . Isto evita a passagem de pacotes durante a listagem de um chain.11 Especificando o policiamento padrão de um chain . ACCEPT/DROP ACCEPT aceita os pacotes caso nenhuma regra do chain conferir (usado em regras permissivas). O policiamento padrão do iptables é "ACCEPT" mas isto pode ser alterado com o comando: iptables [-t tabela] [-P chain] [ACCEPT/DROP] Onde: tabela Tabela que contém o chain que desejamos modificar o policiamento padrão. todos os chains da tabela terão os contadores zerados. o que significa que qualquer pacote que não seja rejeitado pela regra do chain. assim o chain será listado e imediatamente zerado.Nome da tabela que contém o chain que queremos zerar os contadores de bytes e pacotes. O policiamento padrão de um chain é mostrado com o comando iptables -L: # iptables -L INPUT Chain INPUT (policy ACCEPT) target prot opt source DROP icmp -.2.anywhere destination localhost No exemplo acima. o policiamento padrão de INPUT é ACCEPT (policy ACCEPT). será aceito.

3 iptables -A INPUT -s www.debian. 6. # Bloqueia o tráfego vindo da rede 200.1.3 -j DROP 6. é assumido 0/0 como padrão (todos as máquinas de todas as redes).200.1 Especificando um endereço de origem/destino As opções -s (ou --src/--source)e -d (ou --dst/--destination) servem para especificar endereços de origem e destino respectivamente.0 ou 200.0/24 -j DROP # Bloqueia conexões com o destino 10. pois além de serem muito rápidos (pois não precisar de resolução DNS) são mais seguros para evitar que nosso firewall seja enganado por um ataque de IP spoofing. serão criadas várias regras.1.3.org -d 210.*: iptables -A INPUT -s 200.dominio.200.168.2 Especificando a interface de origem/destino As opções -i (ou --in-interface) e -o (ou --out-interface) especificam as interfaces de origem/destino de pacotes.3.3: iptables -A OUTPUT -d 10.21.3 # nossa máquina possui o endereço 210.org a rede 210.200. A interpretação dos endereços de origem/destino dependem do chain que está sendo especificado (como INPUT e OUTPUT por exemplo). um endereço fqdn (www.OBS: Note que policiamentos PERMISSIVOS (ACCEPT) normalmente são usados em conjunto com regras restritivas no chain correspondentes (tudo é bloqueado e o que sobrar é liberado) e policiamentos RESTRITIVOS (DROP) são usados em conjunto com regras permissivas no chain correspondente (tudo é liberado e o que sobrar é bloqueado pelo policiamento padrão).1.200.255.1. É permitido usar um endereço IP completo (como 192.21.255. Caso um endereço/máscara não sejam especificados.3 -j DROP # Bloqueia o tráfego da máquina www. cada uma se aplicando a este endereço IP específico. Nem todos as chains aceitam as interfaces de origem/destino simultaneamente. OBS: Caso seja especificado um endereço fqdn e este resolver mais de um endereço IP.200. a interface de entrada (-i) nunca poderá ser especificada em um chain OUTPUT e a interface de saída (-o) nunca poderá ser especificada em um chain INPUT.2.org) ou um par rede/máscara (como 200.teste.0/255.1.1.dominio.200.0/24).200.1). Abaixo uma rápida referência: +---------------------+--------------------------------+ TABELA | CHAIN | INTERFACE | | +----------------+---------------+ 92 .21.200. um hostname (debian).2.teste.3 Outras opções do iptables 6. É recomendável sempre que possível a especificação de endereços IP's nas regras.

10 -i ppp+ -j DROP O sinal de "+" funciona como um coringa.123. assim a regra terá efeito em qualquer interface de ppp0 a ppp9. este é um ótimo chain para controlar o tráfego que passa entre interfaces do firewall.123.123. isto é interessante para conexões intermitentes como o PPP. Por exemplo para bloquear o acesso do tráfego de qualquer máquina com o endereço 200.123.123. Para bloquear qualquer tráfego local para a Internet: iptables -A OUTPUT -o ppp+ -j DROP Para bloquear a passagem de tráfego da interface ppp0 para a interface eth1 (de uma de nossas redes internas): iptables -A FORWARD -i ppp0 -o eth1 -j DROP 93 . O chain OUTPUT da tabela filter somente poderá conter a interface de saída (veja a tabela acima).123. As interfaces ativas no momento podem ser listadas com o comando ifconfig.10 -i ppp0 -j DROP A mesma regra pode ser especificada como iptables -A INPUT -s 200. mas é permitido especificar uma regra que faz referência a uma interface que ainda não existe. O chain FORWARD da tabela filter é o único que aceita a especificação de ambas as interfaces.| | ENTRADA (-i) | SAÍDA (-o) | +---------+---------------------+----------------+---------------+ | | INPUT | SIM | NÃO | | filter | OUTPUT | NÃO | SIM | | | FORWARD | SIM | SIM | +---------+---------------------+----------------+---------------+ | | PREROUTING | SIM | NÃO | | nat | OUTPUT | NÃO | SIM | | | POSTROUTING | NÃO | SIM | +---------+---------------------+----------------+---------------+ | | PREROUTING | SIM | NÃO | | mangle | | | | | | OUTPUT | NÃO | SIM | +---------+---------------------+----------------+---------------+ A definição de qual interface é permitida em qual chain é determinada pela posição dos chains nas etapas de roteamento do pacote.10 vinda da interface ppp0 (uma placa de faxmodem): iptables -A INPUT -s 200.

200. Alguns tipos de mensagens ICMP são classificados por categoria (como o próprio "time-exceeded").3 Especificando um protocolo A opção -p (ou --protocol) é usada para especificar protocolos no iptables.200 na faixa de # portas 0 a 1023 iptables -A OUTPUT -d 200.123.200.200.200 -p tcp --dport :1023 -j DROP Caso a PortaOrigem de uma faixa de portas não seja especificada. Os tipos de mensagens devem ser especificados com a opção "--icmp-type CódigoICMP" logo após a especificação do protocolo icmp: iptables -A INPUT -s 200.1 Especificando portas de origem/destino As portas de origem/destino devem ser especificadas após o protocolo e podem ser precedidas por uma das seguintes opções: • --source-port ou --sport .10 através da interface ppp+.123. Caso precise especificar diversas regras que envolvam o tratamento de portas diferentes.Especifica uma porta ou faixa de portas de origem.Especifica uma porta ou faixa de portas de destino.3.200.123.200: iptables -A INPUT -s 200.123.200.200 -p udp -j DROP OBS1: Tanto faz especificar os nomes de protocolos em maiúsculas ou minúsculas.3. mas é possível fazer um controle maior sobre o tráfego ICMP que entra/sai da rede através da especificação dos tipos de mensagens ICMP. recomendo da uma olhada em “6. udp e icmp. --destination-port ou --dport .3.200. 0 é assumida como padrão. pode ser especificada através de • Uma faixa de portas PortaOrigem:PortaDestino: # Bloqueia qualquer pacote indo para 200. 65535 é assumida como padrão. 6.6.6. antes de criar um grande número de regras. 6. todas as mensagens daquela categoria (como "ttl-zero-during94 . Por exemplo. caso a Porta Destino não seja especificada.2 Especificando mensagens do protocolo ICMP O protocolo ICMP não possui portas. para rejeitar todos os pacotes UDP vindos de 200.3.200.6 Especificando múltiplas portas de origem/destino”. Podem ser especificados os protocolos tcp. caso a categoria "time-exceeded" seja especificada.10 -p icmp --icmp-type time-exceeded -i ppp+ -j DROP A regra acima rejeitará mensagens ICMP do tipo "time-exceeded" (tempo de requisição excedido) que venham do endereço 200.3.200.

3 Especificando pacotes syn Pacotes syn são usados para iniciarem uma conexão.transit".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: Não bloqueie mensagens do tipo "host-unreachable" senão terá sérios problemas no controle de suas conexões. o uso da opção -syn serve para especificar estes tipos de pacotes. sem afetar os pacotes restantes. Para que uma conexão ocorra é necessário que a máquina obtenha 95 . "ttl-zero-during-reassembly") conferirão na regra especificada.3. 6. Desta maneira é possível bloquear somente os pacotes que iniciam uma conexão.3.

200. fragmentos.1 -f -j DROP derrubará os fragmentos de 200.a resposta a pacotes syn enviados. pode ser uma solução eficiente. Fragmentos são simplesmente um pacote maior dividido em pedaços para poder ser transmitido via rede TCP/IP para remontagem do pacote pela máquina de destino.3. dependendo da intensidade. conexões já efetuadas ão são afetadas por esta regra.4 Especificando fragmentos A opção "-f" (ou --fragment) permite especificar regras que confiram com fragmentos. Uma regra como iptables -A INPUT -s 200. etc) podem ser precedidos pelo sinal "!" que significa exceção. OBS3: A opção "-f" também pode ser usada para evitar o flood por fragmentos (bomba de fragmentos) que.1 que cheguem até nós. Outra alternativa segura é configurar as regras de firewall antes das interfaces de rede se tornarem ativas (usando a opção "pre-up comando_firewall" no arquivo de configuração /etc/network/interfaces em sistemas Debian.A situação de passagem de pacotes durante deve ser levada em conta durante a inicialização do firewall. OBS1: Note que se o cabeçalho do pacote não tiver detalhes suficientes para checagem de regras no iptables.10 -j DROP 96 .5 Especificando uma exceção Muitos parâmetros como o endereço de origem/destino. porta.200. pois os pacotes são remontados antes de entrarem no código de filtragem.3. bloqueando a passagem de pacotes durante o processo de configuração. iptables -A INPUT -p tcp --syn --dport 23 -i ppp+ -j DROP A regra acima bloqueia (-j DROP) qualquer tentativa de conexão (--syn) vindas da interface ppp+ ao telnet (--dport 23) da máquina local.200. OBS2: Não é preciso especificar a opção "-f" para conexões NAT. a regra simplesmente não ira conferir. ATENÇÃO: .200. Somente o primeiro fragmento possui detalhes de cabeçalho para ser processado. podem até travar a máquina. 6. criando regras que bloqueiam a passagem de pacotes (exceto para a interface loopback) até que a configuração do firewall esteja completa. A opção --syn somente pode ser especificada para o protocolo tcp. 6. Por exemplo: iptables -t filter -A INPUT ! -s 200. mensagens ICMP.200. protocolo. caso ele seja bloqueado a resposta nunca será retornada e a conexão não será estabelecida. os segundos e seguintes somente possuem alguns cabeçalhos necessários para dar continuidade ao processo de remontagem do pacote no destino.200.

passar para processamento de programas externos (-j QUEUE). RETURN: Retorna o processamento do chain anterior sem processar o resto do chain atual.10 ! -i eth0 -j DROP Diz para bloquear todos os pacotes EXCETO os que iniciam conexões (! --syn). 6.200. destination nat (-j DNAT). REJECT: Este é um módulo opcional que faz a mesma função do alvo DROP com a diferença de que uma mensagem ICMP do tipo "icmp-port-unreachable" é retornada para a máquina de origem. Pode ser usado como alvo em todos os chains de todas as tabelas do iptables e também pode ser especificado no policiamento padrão das regras do firewall (veja “6. registrar o pacote no sistema de log (-j LOG). etc. EXCETO os do protocolo tcp.10 ! -p tcp -j DROP Bloqueia todos os pacotes vindos de 200. • DROP: Rejeita o pacote e o processamento das regras daquele chain é concluído. LOG: Este módulo envia uma mensagem ao syslog caso a regra confira. 97 • • • . iptables -A INPUT -s 200.200. Pode ser usado como alvo em todos os chains de todas as tabelas do iptables e também pode ser especificado no policiamento padrão das regras do firewall (veja “6.200.P”). pois o iptables é modularizável.6 Especificando um alvo O alvo (-j) é o destino que um pacote terá quando conferir com as condições de uma regra. aceitar a passagem do pacote (-j ACCEPT). Os alvos REDIRECT. iptables -A INPUT -p tcp ! --syn -s 200.11 Especificando o policiamento padrão de um chain . Podem existir mais alvos. e módulos que acrescentam mais funções podem ser carregados em adição aos já existentes no kernel. rejeitar o pacote (-j REJECT). retornar ao chain anterior sem completar o processamento no chain atual (-j RETURN). Pode ser usado como alvo somente nos chains da tabela filter. EXCETO para pacotes vindos na interface eth0 (! -i eth0).10. o processamento continua normalmente para a próxima regra (o pacote não é nem considerado ACEITO ou REJEITADO).Diz para rejeitar todos os pacotes EXCETO os que vem do endereço 200. Apenas farei uma breve referência sobre os alvos mais usados em operações mais comuns dos chains. um alvo pode dizer para bloquear a passagem do pacote (-j DROP).11 Especificando o policiamento padrão de um chain .P”). Nos exemplos anteriores vimos o uso de diversos alvos como o DROP e o ACCEPT.200. SNAT e DNAT serão explicados em uma seção seguinte: • ACCEPT: O pacote é ACEITO e o processamento das regras daquele chains é concluído.2.200.200. fazer source nat (-j SNAT).200.2.3.10. redirecionar um pacote -j REDIRECT.200.

• QUEUE: Passa o processamento para um programa a nível de usuário.6.1 Alvo REJECT Para ser usado. isto facilita a implementação de grandes conjuntos de regras de firewall.200. revelando imediatamente o uso de um sistema de firewall pela máquina).200. A regra acima mostrará a seguinte saída 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.2 Especificando LOG como alvo Este alvo é usado para registrar a passagem de pacotes no syslog do sistema.200.10 LEN=61 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=1031 DPT=53 LEN=41 98 .1 -i ppp+ -j REJECT Note que a regra que registra o pacote (-j LOG) deve aparecer antes da regra que REJEITA (-j REJECT).200.1 DST=200.200.1 pela interface ppp0: iptables -A INPUT -s 200.200. caso contrário a regra de LOG nunca funcionará.6.210. # Para registrar o bloqueio de pacotes vindos de 200. é possível especificar outro tipo de mensagem ICMP com a opção --reject-with tipo_icmp. 6. desta forma ele nunca atingirá o policiamento padrão do chain. ele é rejeitado com a mensagem ICMP do tipo "port unreachable".200.200. OBS: REJECT pode ser usado somente como alvo na tabela filter e não é possível especifica-lo como policiamento padrão do chain filter (como acontecia no ipchains.200. Este alvo rejeita o pacote (como o DROP) e envia uma mensagem ICMP do tipo "icmp-port-unreachable" para a máquina de origem. para regras de fim de chain (quando você tem um grande conjunto de regras em um firewall restritivo e não sabe onde suas regras estão sendo bloqueadas). etc.200. 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). A única coisa que muda nas regras de log é o alvo da regra.10. O alvo REJECT vem dos tempos do ipchains e somente pode ser usado na tabela filter. pois em alguns casos da a impressão que a máquina não dispõe de um sistema de firewall (o alvo DROP causa uma parada de muito tempo em alguns portscanners e tentativas de conexão de serviços. # Rejeita pacotes vindos de 200. É um alvo interessante para bloqueio de portas TCP. para satisfazer sua curiosidade. Quando um pacote confere.1 pela interface ppp0 iptables -A INPUT -s 200.1 -i ppp+ -j REJECT 6.200.3.200. o módulo ipt_REJECT deve ser compilado no kernel ou como módulo. É um alvo muito interessante para ser usado para regras que bloqueiam determinados tráfegos no sistema (para que o administrador tome conhecimento sobre tais tentativas).1 -i ppp+ -j LOG # Para efetuar o bloqueio iptables -A INPUT -s 200.3.

LEN=61 Tamanho do pacote. SRC=200. TOS=0x00 Prioridade do cabeçalho TOS (prioridade normal neste caso).10. DST=200. MAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00 Endereço mac da interface de rede (pode ser obtido com arp interface).10. O log acima mostra uma consulta DNS (porta destino 53) para nossa máquina (INPUT) de 200. DPT=53 Porta de destino da requisição.210. Pode ser TCP. dia e hora do registro do pacote. UDP ou ICMP SPT=1031 Porta de origem da requisição.Os campos possuem o seguinte significado: Aug 25 10:08:01 Mês. PROTO=UDP Nome do protocolo. OUT= Especifica a interface de saída (para onde o pacote foi).200. IN=ppp0 Especifica a interface de entrada (de onde o pacote veio). LEN=41 Tamanho do pacote.5. no caso o iptables faz parte do próprio kernel.1 para 200. debian Nome do computador que registrou o pacote.200. O problema é que em um grande número de regras será difícil saber qual regra conferiu (pois teríamos que analisar o endereço/porta 99 .200.200.10. Veja a seção Especificando o tipo de serviço.1 para mais detalhes.10 Endereço de destino do pacote. Section 9.1 Endereço de origem do pacote. kernel: Daemon que registrou a mensagem.210.

200.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 padronização de mensagens de firewall é também importante para a criação de scripts de análise que poderão fazer a análise dos logs do seu firewall (para criação de estatísticas que podem servir como base para a criação de novas regras de firewall ou eliminação de outras).210.200. devem ser usadas "aspas".1 DST=200. caso contrário você terá um pouco de trabalho para analisar e consertar erros em suas regras do firewall.1 -i ppp+ -j LOG --log-prefix "FIREWALL: Rejeitado " # Para efetuar o bloqueio iptables -A INPUT -s 200.200.10.200. pois a seqüencia de números TCP pode ser a chave para um seqüestro de seção ou IP spoofing em seu sistema caso algum usuário tenha acesso a estes logs. Caso tiver espaços. e devem ser usadas após este. --log-tcp-options Registra campos do cabeçalho TCP nos logs do sistema.200.origem/destino) e o destino do pacote (se ele foi ACEITO ou BLOQUEADO) pois você pode ter regras para ambas as situações. --log-level nível Especifica o nível da mensagem no syslog.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. Por este motivo existem algumas opções úteis que podemos usar com o alvo LOG: --log-prefix "descrição" Permite especificar uma descrição para a regra do firewall de até 29 caracteres.200. Lembre-se que estas opções são referentes ao alvo LOG.200.200.1 pela interface ppp0 iptables -A INPUT -s 200. --log-ip-options Registra campos do cabeçalho IP nos logs do sistema --log-tcp-sequence Registra os números de seqüencia TCP. Evite ao máximo o uso desta opção. # Complementando o exemplo anterior: # Para registrar o bloqueio de pacotes vindos de 200. OBS: Se você sente falta da função "-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 100 .

senão esta limitação seria facilmente contornada. uma delas é o Masquerading. Se ela não existisse.debian. por exemplo bloquear conexões vindas da internet para portas baixas. Infelizmente o iptables não aceita variáveis. que não confere. o chain número 1 confere. seria necessário especificar diversas opções -s.org tentando acessar a porta www (80) de nossa máquina através da internet (via interface ppp0). Ele é útil quando criamos um chain que faz um determinado tratamento de pacotes. então o processamento continua no chain número 4. então o acesso é bloqueado. o chain número 1 confere. então o processamento continua no chain número 4. proxy transparente. Existem 3 chains na tabela nat: PREROUTING. A tradução de endereços tem inúmeras utilidades. onde máquinas de uma rede interna podem acessar a Internet através de uma máquina Linux.4 A tabela nat (Network Address Translation) . assim é necessário a especificação da opção --log-prefix para as mensagens se tornarem mais compreensíveis. o alvo RETURN pode facilitar bastante a construção das regras do seu firewall. Agora se um pacote vem com o endereço www.dominio.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 endereço www.fazendo nat A tabela nat serve para controlar a tradução dos endereços que atravessam o código de roteamento da máquina Linux.1.E usar "log-drop" como alvo em suas regras.14 O que são tabelas?” para maiores detalhes). o chain número 4 confere então o processamento volta para a regra número 2.6. que diz para aceitar o pacote. O chain número 8 confere. -d. 6. caso existam máquinas/redes que sejam exceções as suas regras. 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. Mesmo assim esta solução é "limitada" em relação a "-l" do ipchains porque o iptables não inclui detalhes de qual chain bloqueou o pacote/qual pacote foi bloqueado. O mesmo acontece com os chains 5. etc para poder garantir o acesso livre a determinadas máquinas. Como pode ter notado.br tentando acessar a porta www *80) de nossa máquina através da internet (via interface ppp0).debian. exceto para um endereço IP específico.com.3. OUTPUT e POSTROUTING (veja “6. 101 . redirecionamento de porta. 6 e 7. 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.

A máquina roteadora é inteligente o bastante para lembrar dos pacotes 102 .1.etc.4.2 Fazendo IP masquerading (para os apressados) Você precisará de um kernel com suporte ao iptables (veja “6. agora os clientes da rede precisarão ser configurados para usar o endereço IP do servidor Linux como gateway.168.4.2. exemplos de como criar rapidamente uma conexão IP masquerading e entender como a tradução de endereços funciona no iptables.1.nat no endereço de origem) consiste em modificar o endereço de origem das máquinas clientes antes dos pacotes serem enviados.*: iptables -t nat -A POSTROUTING -s 192. Para inserir regras neste chain será necessário especificar a opção "-t nat". por exemplo) então o SNAT é o que precisa (veja “6.1 Especificando o tipo de serviço”).3 Fazendo SNAT”).4. Esta seção abordará os tipos de NAT.4.como uma conexão PPP) então o IP masquerading é o que precisa (veja “6. Você tem uma conexão que lhe oferece um endereço IP permanente (ADSL. Se sua intenção é ligar sua rede a Internet existem duas opções: • Você possui uma conexão que lhe oferece um endereço IP dinâmico (a cada conexão é dado um endereço IP .5. A utilização de bits TOS também pode trazer um grande aumento de velocidade para os diferentes serviços da rede (veja “6.6 Criando um novo chain . iptables -t nat -N intra-inter Que criará o chain chamado intra-inter na tabela nat.15 Habilitando o suporte ao iptables no kernel” e ip_forwarding e então digitar os dois comandos abaixo para habilitar o masquerading para todas as máquinas da rede 192. 6.4.1 Criando um novo chain na tabela NAT O procedimento para criação de um novo chain nesta tabela é o mesmo descrito em “6. É recomendável instalar um servidor proxy e DNS na máquina Linux para acelerar o desempenho das requisições/resolução de nomes das máquinas em rede. • 6.4.N” será necessário somente especificar a tabela nat (-t nat) para que o novo chain não seja criado na tabela padrão (-t filter).2 Fazendo IP masquerading (para os apressados)” ou “6.1 Fazendo IP Masquerading”).1. 6.3.0/24 -j MASQUERADE echo "1" >/proc/sys/net/ipv4/ip_forwarding A configuração do servidor Linux está completa.3 Fazendo SNAT SNAT (source nat .168.

2.241.200.0-1.1. Quando a resposta a requisição é retornada.241.2. O SNAT é a solução quando você tem acesso a internet através de um único IP e deseja fazer que sua rede tenha acesso a Internet através da máquina Linux.200.4.254 iptables -t nat -A POSTROUTING -s 192.4 --to 1.40 e enviados para fora. portas de origem/destino.2.0/24 -o eth0 -j SNAT --to 200. Toda a operação de SNAT é realizada através do chain POSTROUTING: # Modifica o endereço IP dos pacotes vindos da máquina 192.168.3. modificando o endereço 200. É necessário especificar SNAT como alvo (-j SNAT) quando desejar que as máquinas de sua rede interna tenha acesso a Internet através do IP fixo da máquina Linux (para conexões intermitentes como PPP.3.40 Os pacotes indo para a Internet (nossa conexão é feita via eth1.modificados e reescrever os endereços assim que obter a resposta da máquina de destino.168. direcionando os pacotes ao destino correto. Ele serve para especificar um endereço IP. a máquina com iptables recebe os pacotes e faz a operação inversa.40-200.200. # iptables -t nat -A POSTROUTING -s 192. O parâmetro --to IP:portas deve ser usado após o alvo SNAT.200.168. execute o comando echo "1" >/proc/sys/net/ipv4/ip_forward para habilitar o suporte a redirecionamento de pacotes no kernel.1.50 Modifica o endereço IP de origem de todas as máquinas da rede 192.40 a 200.168.217. faixa de endereços e opcionalmente uma porta ou faixa de portas que será substituída.217.2 da rede interna # que tem como destino a interface eth1 para 200.200. É permitido especificar endereços de origem/destino. Nenhuma máquina da Internet poderá ter acesso direto as máquinas de sua rede interna via SNAT.2.3.168.3.0/24 -o eth1 \ -j SNAT --to 1.200.217.200.200.50. alvos.168. É desnecessário especificar fragmentos na tabela nat.1.2 e enviando a resposta a máquina de nossa rede interna. iptables -t nat -A POSTROUTING -s 192. etc.217.1.0/24 que tem o destino a interface eth0 para 200. protocolos.168. veja “6. nossa interface externa) vindo do endereço 192.1.1. uma configuração mau realizada pode expor sua máquina a acessos externos indesejados e comprometer sua rede interna caso alguém consiga acesso direto ao servidor. são substituídos por 200.2 -o eth1 -j SNAT --to 200. O endereço IP selecionado é escolhido de acordo com o último IP alocado.6-1.1.2.168. Também é possível especificar faixas de endereços e portas que serão substituídas: iptables -t nat -A POSTROUTING -s 192.0/24 -o eth0 -j SNAT --to 200. OBS: A observação acima não leva em conta o controle de acesso externo configurado na máquina que estiver configurando o iptables.217.1.3. Após definir suas regras de NAT. pois eles serão remontados antes de entrar no código de roteamento.1 Fazendo IP Masquerading”). Toda operação de SNAT é feita no chain POSTROUTING.200. interface de entrada/saída (dependendo do chain).241.241.40 (que é o nosso endereço # IP da interface ligada a Internet).217.40 novamente para 192.200.50:1-1023 103 .40-200.

168.1.217.Idêntico ao anterior. iptables -t nat -A POSTROUTING -s 192.168.50 e de 200. OBS1: Se por algum motivo não for possível mapear uma conexão NAT. O comando acima faz IP Masquerading de todo o tráfego de 192. OBS3: Não se esqueça de habilitar o redirecionamento de pacotes após fazer suas regra de NAT com o comando: echo "1" >/proc/sys/net/ipv4/ip_forward.200. OBS2: Como notou acima.200.70-200.1.1.217.70 a 200. mas faz somente substituições na faixa de portas de origem de 1 a 1023.168. 6.73).3 Fazendo SNAT”.1. use o comando: iptables -t nat -A POSTROUTING -s 192.217. deve ler “6.4.0/24 -o ppp0 -j MASQUERADE Após definir a regra para fazer Masquerading (SNAT).40-200.217.200.168. o SNAT é usado quando temos uma conexão externa com um ou mais IP's fixos. caso contrário o redirecionamento de pacotes não funcionará.73.*: iptables -t nat -A POSTROUTING -s 192.200.73 Faz o mapeamento para a faixa de portas 200. Para fazer o IP Masquerading de todas as máquinas da rede 192.1.200. 104 .4.168.2/32 -o ppp0 -j MASQUERADE A diferença é que o alvo é -j MASQUERADE.3.168.200. Todas as operações de IP Masquerading são realizadas no chain POSTROUTING.2 são substituídos pelo IP oferecido pelo seu provedor de acesso no momento da conexão.217.217.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 dinâmico de seu provedor (como em conexões ppp). execute o comando echo "1" >/proc/sys/net/ipv4/ip_forward para habilitar o suporte a redirecionamento de pacotes no kernel.217.2 para ter acesso a Internet. quando a resposta é retornada a operação inversa é realizada para garantir que a resposta chegue ao destino.200.40 a 200. O Masquerading é uma forma especial de SNAT usada para funcionar em conexões que recebem endereços IP aleatórios (PPP).217.50 --to 200.200.200.217. Se você tem um IP fixo.2 indo para a interface ppp0: O endereço IP dos pacotes vindos de 192. OBS2: Tenha certeza que as respostas podem chegar até a máquina que fez o NAT. Para fazer IP Masquerading de uma máquina com o IP 192. Se estiver fazendo SNAT em um endereço livre em sua rede (como 200. Nenhuma máquina da internet poderá ter acesso direto a sua máquina conectava via Masquerading.1.0/24 -o eth0 -j SNAT --to 200. ela será derrubada.1.168.

200.2 -i eth0 -j DNAT --to 200.217. proxyes transparentes e balanceamento de carga. Toda operação de DNAT é feita no chain PREROUTING.50.4.4.4.200.241.nat no endereço de destino) consiste em modificar o endereço de destino das máquinas clientes.168. veja “6. iptables -t nat -A PREROUTING -s 192. junto com o argumento --to-port especificando a porta que será redirecionada.0/24 para um IP de 200.4 Fazendo DNAT”). ATENÇÃO: O squid possui suporte a proxy transparente. 105 . O destination nat é muito usado para fazer redirecionamento de pacotes.1. Este é o método DNAT específico para se para fazer proxy transparente (para redirecionamento de endereços/portas.168. A operação acima é a mesma realizada pelo ipmasqadm dos kernels da série 2.200. O endereço IP selecionado é escolhido de acordo com o último IP alocado.40 Também é possível especificar faixas de endereços e portas que serão substituídas no DNAT: iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 200.50:1024:5000 Idêntico ao anterior.4. O alvo REDIRECT é usado para fazer esta operação.217. 6.217.1. OBS: Se por algum motivo não for possível mapear uma conexão NAT.241.168.217. mas faz somente substituições na faixa de portas de destino de 1024 a 5000.200.2.40200. As demais opções e observações do SNAT são também válidas para DNAT (com exceção que somente é permitido especificar a interface de origem no chain PREROUTING).2 vindo da interface eth0 # para 200.200.1.6. iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 81 Redireciona as conexões indo para a porta 80 para a porta 81 (rodando squid) no firewall.4 Fazendo DNAT DNAT (Destination nat . # Modifica o endereço IP destino dos pacotes de 192. ela será derrubada. e poderá atender as requisições acima da regra acima.40 a 200.1 Redirecionamento de portas O redirecionamento de portas permite a você repassar conexões com destino a uma porta para outra porta na mesma máquina.200.217. Este é um excelente método para fazer o balanceamento de carga entre servidores. iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 200.40.50 Modifica o endereço IP de destino do tráfego vindos da interface 192.200. Todas as operações de redirecionamento de portas é realizada no chain PREROUTING.40-200.217.200.

5 Monitorando conexões feitas na tabela nat Use o comando cat /proc/net/ip_conntrack para listar todas as conexões atuais tratadas pelo módulo nat. 6. etc. 2 ou 0x02. 16 ou 0x10 Máximo Processamento É especificado através de Maximize-Throughput. Com o TOS especificado.4. Máxima Confiança É especificado através de Maximize-Reliability. mesmo que esteja fazendo um download consumindo toda a banda de sua interface de rede.5 A tabela mangle A tabela mangle serve para especificar ações especiais para o tratamento do tráfego que atravessa os chains. 4 ou 0x04.1 Especificando o tipo de serviço O tipo de serviço é um campo existente no cabeçalho de pacotes do protocolo ipv4 que tem a função especificar qual é a prioridade daquele pacote. servidores de chat). O tipo Mínima Espera é o mais usado. 8. Os pacotes vem por padrão com o valor TOS ajustado como prioridade normal (bits tos ajustados para 0x00). o uso de regras TOS aumentou bastante o desempenho em tráfego interativo (em torno de 300%). pois prioriza o tráfego em serviços interativos. durante o uso total da banda da interface ppp em um grande download.6. Prioridade Normal Especificado através de Normal-Service. ou 0x08. Uma das vantagens da utilização do tipo de serviço é dar prioridade ao tráfego de pacotes interativos (como os do ICQ.14 O que são tabelas?” para maiores detalhes). Em testes realizados em minha conexão de 56K. Custo mínimo Especificado através de Minimize-Cost. 106 .5.1. Nesta tabela existem dois chains: PREROUTING e OUTPUT (veja “6. acompanhada do argumento --set-tos TOS que define a nova prioridade dos pacotes. Usamos o alvo TOS (-j TOS) para especificar a modificação do tipo de serviço nos pacotes que atravessam as regras do firewall. Os valores aceitos são os seguintes: Espera Mínima É especificado através de Minimize-Delay. Opções com o Tipo de Serviço (TOS) é especificada nesta tabela para classificar e aumentar consideravelmente a velocidade de tráfego considerados em tempo real. 6. 0 ou 0x00. aumentando a eficiência dos serviços em sua máquina. o tráfego com prioridade interativa será enviado antes. IRC.

6 Outros módulos do iptables Os módulos do iptables são especificados com a opção -m módulo ou -match módulo e permitem expandir a funcionalidade do firewall através de novas conferências e recursos de filtragem adicionais.2 Especificando o TOS para o tráfego de entrada Este prioriza o tráfego que entra da máquina.1. 6. Sua operação é realizada no chain PREROUTING. Não faz muito sentido o uso deste chain dentro de uma rede pequena/média.5. pois o tráfego que recebermos será priorizado pelo saída de outras máquinas da internet/outras redes antes de chegar a nossa. como limitar a conferência de regras do firewall (um método útil de limitar ping floods.1 Especificando o TOS para tráfego de saída Este é o mais usado. só depende dos requerimentos e análise de cada serviço da rede pelo administrador. Para priorizar o processamento do tráfego 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 serviço para mínima espera de todo o tráfego enviado por servidores de IRC vindo da interface eth0.1. pois prioriza o tráfego que sai da máquina (com destino a Internet. por exemplo). etc). OBS: . 6.6. 107 . Para priorizar todo o tráfego 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 mínima e será enviado antes dos pacotes com prioridade normal para fora. eles não serão de qualquer forma rejeitados.Os pacotes que atravessam o alvo TOS somente tem os bits tipo do serviço modificados. Sua operação é realizada através do chain OUTPUT.Os pacotes que atravessam o alvo TOS somente tem os bits tipo do serviço modificados.5. Para priorizar a transmissão 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 tráfego de ICQ da rede: iptables -t mangle -A OUTPUT -o ppp0 -p udp --dport 4000 -j TOS --set-tos 16 Existem muitas outras otimizações que podem ser feitas. syn floods. eles não serão de qualquer forma rejeitados. OBS: .

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). • --limit-burst num . 108 . As opções permitidas são as seguintes: • • • NEW . O valor padrão é 3/h.6. a não ser que seja modificado através dos argumentos aceitos pelo limit: • --limit num/tempo .INVALID -i ppp0 -j LOG Permite registrar novas conexões e pacotes inválidos vindos da interface ppp0.2 Limitando o número de vezes que a regra confere A opção -m limit permite especificar o número de vezes que uma regra conferirá quando todas as outras condições forem satisfeitas. iptables -A INPUT -m state --state NEW -i ppp0 -j DROP Bloqueia qualquer tentativa de nova conexão vindo da interface ppp0.Hora d . etc.6.Confere com pacotes que não puderam ser identificados por algum motivo. O parâmetro num especifica um número e tempo pode ser o o o o s .Confere com conexões já estabelecidas RELATED .Segundo m .Confere com pacotes relacionados indiretamente a uma conexão. isto é feito através da interpretação da saída do módulo ip_conntrack. Como respostas de conexões desconhecidas. este número é aumentado por 1 a cada vez que o parâmetro --limit acima não for atingido. INVALID .6. 6. O parâmetro --state OPÇÕES deve acompanhar este módulo. • Caso seja necessário especificar mais de uma opções estas devem ser separadas por vírgulas.Confere com pacotes que criam novas conexões ESTABLISHED . iptables -A INPUT -m state --state NEW. como mensagens de erro icmp. O valor padrão é 5.Permite especificar a taxa de conferências do limit. Este limite pode ser facilmente adaptado para uma regra de log que confere constantemente não causar uma avalanche em seus logs.Especifica o número inicial máximo de pacotes que irão conferir. O número padrão de conferência é de 3 por hora.Minuto h .1 Conferindo de acordo com o estado da conexão Este módulo permite especificar regras de acordo com o estado da conexão do pacote.

6.6.0/24 -i eth0 -j DROP A primeira regra diz para bloquear todos os endereços da faixa de rede 192.1.1. As regras abaixo são colocadas no inicio do chain INPUT para detectar tais ataques: iptables -A INPUT -s 192.168.168.0/24 -i ! eth0 -j DROP iptables -A INPUT ! -s 192. ATENÇÃO: Os exemplos acima devem são somente exemplos para criação de suas próprias regras com limitações.4 Proteção contra syn flood A regra abaixo é uma boa proteção 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 requisições de conexões a 2 por segundo. caso um pacote não confira com a regra ele será bloqueado pela próxima regra.168. Se uma regra como for colocada no chain INPUT sem modificações obviamente colocará em risco a segurança de seu sistema. 6.3 Proteção contra ping da morte A regra abaixo pode tomada como base para proteção 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 máquina Linux.5 Proteção contra IP spoofing A especificação de endereços de origem/destino junto com a interface de rede pode ser usado como um detector de ataques spoofing.* que NÃO vem da interface eth0. A lógica é que todos os endereços que NUNCA devem vir da interface X devem ser negados imediatamente. Se uma regra como for colocada no chain INPUT sem modificações obviamente colocará em risco a segurança de seu sistema. ATENÇÃO: Os exemplos acima devem são somente exemplos para criação de suas próprias regras com limitações. 6.6.1. caso um pacote não confira com a regra ele será bloqueado pela próxima regra. 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. a segunda regra diz para bloquear 109 .6.

--destination-port [porta1.6667 -j DROP Bloqueia todos os pacotes vindo de ppp0 para as portas 21 (ftp).23. porta2. 25 (smtp).1. O símbolo "!" pode ser usado para especificar uma exceção.110. 110 (pop3).6. O método preferido para controlar o ip spoofing é através do código de roteamento do kernel (a não ser que esteja usando algum tipo de roteamento assimétrico): for i in /proc/sys/net/ipv4/conf/*/rp_filter.Faz a regra conferir caso a porta de origem ou destino esteja presente no parâmetro.5 Especificando uma exceção”).] ..Faz a regra conferir se a porta de origem estiver presente entre as portas especificadas. iptables -A INPUT -p tcp -i ppp0 -m multiport --destination-port 21...6 Especificando múltiplas portas de origem/destino O módulo multiport permite que seja especificado múltiplas portas para um alvo.. 6667 (irc). 6. pois a comparação é feita usando condições "or".0. O símbolo "!" serve para especificar exceções (veja “6.conf.] .168.5 vindo de ppp0 será imediatamente rejeitado. Aceita como argumento a opção --macsource endereço. iptables -t filter -A INPUT -m mac --mac-source 00:80:AD:B2:60:0B -j DROP 110 . Podem ser especificadas até 15 portas em um único parâmetro e basta que uma porta confira para que a regra entre em ação.3.7 Especificando o endereço MAC da interface O módulo mac serve para conferir com o endereço Ethernet dos pacotes de origem.168. O kernel do Linux automaticamente bloqueia a passagem de pacotes que dizem ser de 127. --port [porta1. Uma checagem adicional contra IP spoofing pode ser feita no arquivo /etc/host.80. 6. O parâmetro multiport deve ser acompanhado de um dos argumentos abaixo: • --source-port [porta1.* vindos da interface eth0. porta2. • • Este módulo pode eliminar muitas regras de firewall que fazem o mesmo tratamento de pacotes para diversas portas diferentes. Somente faz sentido se usado nos chains de PREROUTING (da tabela nat) ou INPUT (da tabela filter)..6.] .25.1.1 e não está vindo da interface loopback.. 113 (ident). 80 (www). 23 (telnet).Faz a regra conferir se a porta de destino estiver presente entre as portas especificadas.todos os endereços que não sejam 192.113.0. porta2. do echo 1 >$i done Desta forma qualquer endereço dizendo ser 192.

6.1 e conecta a rede interna ligada via interface eth0 a internet via a interface ppp0.Lembre-se que pacotes que não possuem detalhes suficientes de cabeçalho nunca conferirão! iptables -A OUTPUT -m owner --gid-owner 100 -p udp -j DROP Rejeita um conexões indo para portas UDP de pacotes criados pelo usuários pertencentes ao grupo 100.0 conectada ao firewall via interface eth0 Interface ppp0 fazendo conexão com a Internet com o endereço IP 200.67. isso lhe permitirá planejar a distribuição das regras nos chains. É somente válido no chain OUTPUT da tabela filter. Os seguintes argumentos são válidas para este módulo: • --uid-owner UID .Confere se o pacote foi criado por um processo no grupo de seção especificado. • • • OBS: . 6. Rede interna com a faixa de endereços 192.Confere se o pacote foi criado por um processo com o UID especificado. --gid-owner GID .Confere se o pacote foi criado por um usuário pertencente ao grupo GID. Até o momento somente UID numéricos são aceitos.168.8 Conferindo com quem criou o pacote Este módulo confere com o usuário que iniciou a conexão. ou um sistema de firewall totalmente confuso e sem lógica. máquina com endereço ethernet igual a 6.7 Caminho percorrido pelos pacotes nas tabelas e chains É MUITO importante entender a função de cada filtro e a ordem de acesso dos chains de acordo com o tipo de conexão e interface de origem/destino.168.217.1. • • • 111 . --pid-owner PID . A conexão das máquinas da rede interna (eth0) com a rede externa (ppp0) é feita via Masquerading.Confere se o pacote foi criado por um processo com o PID especificado.29. e evitar erros de localização de regras que poderia deixar seu firewall com sérios problemas de segurança. Esta seção explica a ordem que as regra são atravessadas. Até o momento somente GID numéricos são aceitos. Nos exemplos abaixo assumirei a seguinte configuração: • A máquina do firewall com iptables possui o endereço IP 192.Confere com a 00:80:AD:B2:60:0B.1. --sid-owner ID .

1.168.chain INPUT da tabela filter.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 SAÍDA DE PACOTES percorrendo os chains na ordem especificada e retornam via ENTRADA DOS PACOTES (echo reply).7.1 ping de 192.1 para 192. a interface será ajustada sempre para lo (loopback).Também utilizarei a sintaxe CHAIN-tabela para fazer referência aos chains e tabelas dos blocos ASCII: INPUT-filter .1 Interface de Origem: lo Interface de Destino: lo 112 .168.1 • • • • Endereço de Origem: 192.1 • • • • • • Endereço de Origem: 192.1. OBS3: O chain OUTPUT da tabela filter é consultado sempre quando existem conexões se originando em endereços de interfaces locais.1 Endereço de Destino: 192.168.168. OBS2: Em qualquer operação de entrada/saída de pacotes.7.168.1 Interface de Entrada: lo Interface de Saída: lo Protocolo: ICMP Descrição: Ping para o próprio firewall SAÍDA DE PACOTES (envio do ping para 192.1. 6.1.1 Endereço de Destino: 192.1. é diferente do ipchains devido a inclusão do novo sistema de nat e da tabela mangle.1. os dois chains da tabela mangle são sempre os primeiros a serem acessados.168.1.168.1 para 192.2 Conexão FTP de 192. 6. Isto é necessário para definir a prioridade e controlar outros aspectos especiais dos pacotes que atravessam os filtros. ATENÇÃO: A ordem de processamento das regras do iptables. OBS1: Para conexões com destinos na própria máquina usando um endereço IP das interfaces locais.168.168.1.1.

168. o caminho de SAÍDA DE PACOTES será: +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+ pois os dados de entrada que vem da interface externa.4 Interface de Origem: eth0 Interface de Destino: eth0 Porta Origem: 1405 Porta Destino: 21 Protocolo: TCP 113 .1.1.1. Após a conexão ser estabelecida.4 • • • • • • • Endereço de Origem: 192. não necessitando de tratamento SNAT (os chains OUTPUT-nat e POSTROUTING-nat são processado somente uma vez a procura de regras que conferem.1. os dois chains da tabela mangle são sempre os primeiros a serem acessados. SAÍDA DOS PACOTES (envio da requisição para 192.3 Conexão FTP de 192.168. Isto é necessário para definir a prioridade e controlar outros aspectos especiais dos pacotes que atravessam os filtros. sem transferência de arquivos).1.168.7. são passados diretamente a máquina do firewall.1 Endereço de Destino: 192.1): +-------------+ +----------+ +-------------+ +---------------+ |OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat| +-------------+ +----------+ +-------------+ +---------------+ ENTRADA DE PACOTES (respostas da requisição vindas de 192.168.• • • • Porta Origem: 1404 Porta Destino: 21 Protocolo: TCP Descrição: Conexão ftp (até o prompt de login. 6.168.168.1 para 192.1): +-----------------+ +------------+ |PREROUTING-mangle| => |INPUT-filter| +-----------------+ +------------+ A requisição ftp passa através dos chains especificados em SAÍDA DOS PACOTES e retorna por ENTRADA DE PACOTES.1. principalmente para fazer SNAT). OBS1: Para conexões com destinos na própria máquina usando um endereço IP das interfaces locais. OBS2: Em qualquer operação de entrada/saída de pacotes. a interface será ajustada sempre para lo (loopback).

6.1.1. SAÍDA DOS PACOTES (envio da requisição para 192. o caminho de SAÍDA DE PACOTES será: +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+ pois os dados não precisam de tratamento SNAT (os chains OUTPUTnat e POSTROUTING-nat são processado somente uma vez a procura de regras que conferem.1 porta 1405.1. os dois chains da tabela mangle são sempre os primeiros a serem acessados.• Descrição: Conexão ftp (até o prompt de login. 114 .7.129. OBS: Em qualquer operação de entrada/saída de pacotes.4 porta 21 e retorna por ENTRADA DE PACOTES para 192. principalmente para fazer SNAT).4): +-----------------+ +------------+ |PREROUTING-mangle| => |INPUT-filter| +-----------------+ +------------+ A requisição ftp passa através dos chains especificados em SAÍDA DOS PACOTES com o destino 192. Após a conexão ser estabelecida.4): +-------------+ +----------+ +-------------+ +---------------+ |OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat| +-------------+ +----------+ +-------------+ +---------------+ ENTRADA DE PACOTES (respostas da requisição de 192.org.debian.29.67 para ftp.162 Interface de Origem: ppp0 Interface de Destino: ppp0 Porta Origem: 1407 Porta Destino: 21 Protocolo: TCP Descrição: Conexão ftp (até o prompt de login.67 Endereço de Destino: 200. sem transferência de arquivos).168.4 Conexão FTP de 200. sem transferência de arquivos). Isto é necessário para definir a prioridade e controlar outros aspectos especiais dos pacotes que atravessam os filtros.168.198.168.br • • • • • • • • Endereço de Origem: 200.1.29.168.217.217.

162): +-----------------+ +--------------+ +------------+ |PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter| +-----------------+ +--------------+ +------------+ A requisição ftp passa através dos chains especificados em SAÍDA DOS PACOTES com o destino 200.162): +-------------+ +----------+ +-------------+ +---------------+ |OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat| +-------------+ +----------+ +-------------+ +---------------+ ENTRADA DE PACOTES (respostas da requisição vindas de 200.29. 6.129.br) e retorna por ENTRADA DE PACOTES para 200.4 Endereço de Destino: 192.1 Interface de Entrada: eth0 Interface de Saída: eth0 Protocolo: ICMP Descrição: Ping de 192.1.129.debian.67 porta 1407.4 para 192.198.168.1 • • • • • • Endereço de Origem: 192.1.5 Ping de 192.129.7. Isto é necessário para definir a prioridade e controlar outros aspectos especiais dos pacotes que atravessam os filtros. principalmente para fazer SNAT). principalmente para fazer DNAT).4 para a máquina do firewall.SAÍDA DOS PACOTES (envio da requisição para 200. 115 .1.168.162 porta 21 (após a resolução DNS de www. Após a conexão ser estabelecida.168. os dois chains da tabela mangle são sempre os primeiros a serem acessados. o caminho de saída de pacotes é: +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+ pois os dados não precisam de tratamento SNAT (os chains OUTPUTnat e POSTROUTING-nat são processado somente uma vez a procura de regras que conferem.198.168.168.217. E após a conexão estabelecida. o caminho de entrada de pacotes passa a ser: +-----------------+ +-------------+ |PREROUTING-mangle| => |INPUT-filter | +-----------------+ +-------------+ pois os dados não precisam de tratamento DNAT (o chain PREROUTING-nat é processado somente uma vez a procura de regras que conferem. OBS: Para qualquer operação de entrada/saída de pacotes.1.org.198.1.

1 Interface de Origem: eth0 Interface de Destino: eth0 Porta Origem: 1030 Porta Destino: 21 Protocolo: TCP Descrição: Conexão ftp (até o prompt de login.168.7. OBS1: Para qualquer operação de entrada/saída de pacotes.4): +-----------------+ +--------------+ +------------+ |PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter| +-----------------+ +--------------+ +------------+ SAÍDA DE PACOTES (envio da resposta a 192.1. ENTRADA DOS PACOTES (envio da requisição vindas de 192.1. 6.1.1.1.168.4): +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+ A requisição ftp passa através dos chains especificados em ENTRADA DOS PACOTES com o destino 192.168.1.6 Conexão FTP de 192.1 • • • • • • • • Endereço de Origem: 192.ENTRADA DE PACOTES (recebimento da requisição.1.1.4): +-----------------+ +--------------+ +------------+ |PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter| +-----------------+ +--------------+ +------------+ SAÍDA DE PACOTES (respostas da requisição acima para 192.4 para 192. sem transferência de dados).1 porta 21 e retorna por SAÍDA DE PACOTES para 192.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 SAÍDA DOS PACOTES (echo reply).4 Endereço de Destino: 192.168.168. o caminho de entrada de pacotes é: +-----------------+ +------------+ |PREROUTING-mangle| => |INPUT-filter| +-----------------+ +------------+ 116 . Isto é necessário para definir a prioridade e controlar outros aspectos especiais dos pacotes que atravessam os filtros.168. vinda de 192.1.168.1.4 porta 1030. Após a conexão ser estabelecida.168.168. os dois chains da tabela mangle são sempre os primeiros a serem acessados.168.

6.129.198.162 porta 21 (após a resolução DNS de ftp.debian.129.4.129. reescrevendo todos os pacotes que chegam de www.org.4 e enviadas para a máquina correspondente.168.debian.br para 192. principalmente para fazer DNAT).168. OBS: As conexões Masquerading feitas através da rede interna.7.4): +-----------------+ +--------------+ +--------------+ +---------------+ |PREROUTING-mangle| => |PREROUTING-nat| => |FORWARD-filter| => |POSTROUTING-nat| +-----------------+ +--------------+ +--------------+ +---------------+ ENTRADA DE PACOTES (respostas da requisição acima.1. SAÍDA DOS PACOTES (requisição vindas de 192.162 Interface de Origem: eth0 Interface de Destino: ppp0 Porta Origem: 1032 Porta Destino: 21 Protocolo: TCP Descrição: Conexão ftp (até o prompt de login.1.168.pois os dados não precisam de tratamento DNAT (o chain PREROUTING-nat é processado somente uma vez a procura de regras que conferem. OBS: O roteamento é sempre realizado após o processamento do chain PREROUTING da tabela nat. para a máquina 200.168.br) e retorna por ENTRADA DE PACOTES para 192.7 Conexão FTP de 192.1.debian.198. As respostas de conexões vindas de 200.29.4 para ftp.198. o firewall já sabe como reescrever os pacotes para realizar a operação de Masquerading.168.29.org. são enviadas para 200. Após a conexão ser estabelecida.1.1.168.4 porta 1032.1.1.129.217.4 Endereço de Destino: 200.162 tem o endereço de origem ajustado para 117 . Note que o Masquerading regrava os pacotes.br • • • • • • • • Endereço de Origem: 192.168.67.129. sem transferência de dados).4): +-----------------+ +--------------+ |PREROUTING-mangle| => |FORWARD-filter| +-----------------+ +--------------+ A requisição ftp passa através dos chains especificados em SAÍDA DOS PACOTES com o destino 200.198.162 e indo para 200. enviadas para 192.67 são regravadas no firewall com o destino 192.217. o caminho de saída de pacotes é: +-----------------+ +--------------+ |PREROUTING-mangle| => |FORWARD-filter| +-----------------+ +--------------+ Isto acontece porque após feita a conexão Masquerading (via PREROUTING-nat).162 a conexão está sendo feita para 200.198.org.

129.217.162 para 200.162): +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+ A requisição ftp passa através dos chains especificados em ENTRADA DOS PACOTES com o destino 200.129.67 que é o IP de nossa interface ppp0.198.7. o caminho de entrada de pacotes é: +-----------------+ +------------+ |PREROUTING-mangle| => |INPUT-filter| +-----------------+ +------------+ Isto acontece porque após feita a análise do chain PREROUTING (para necessidade de DNAT).67 Interface de Origem: ppp0 Interface de Destino: ppp0 Porta Origem: 3716 Porta Destino: 21 Protocolo: TCP Descrição: Conexão ao serviço ftp do firewall ENTRADA DOS PACOTES (envio da requisição vindas de 200.29. Após a conexão ser estabelecida.9 Gráfico geral da passagem dos pacotes Este gráfico foi retirado do documento netfilter-hacking-HOWTO. Caso uma operação de Masquerading falhe.4.168.8 Conexão FTP de 200.162 porta 3716 (também via ppp0). os pacotes são checados pra saber se são uma resposta a uma conexão masquerading e fará a regravação dos pacotes substituindo o endereço de destino para 192.198.129.7.217.162): +-----------------+ +--------------+ +------------+ |PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter| +-----------------+ +--------------+ +------------+ SAÍDA DE PACOTES (respostas da requisição de 200.200.217. Quando as respostas atravessam o firewall. Os exemplos de passagem de pacotes acima poderão ser facilmente comparados com as etapas abaixo para compreender a estrutura do iptables.67 (nossa interface ppp0 local) porta 21 e retorna por SAÍDA DE PACOTES para 200. os pacotes serão Bloqueados.162 Endereço de Destino: 200.29.129. 6.198.1.198. a máquina já saberá tomar a decisão apropriada para gerenciar aquela conexão.129. 6. 118 .198.txt e mostra a estrutura geral de passagem dos pacotes nas tabelas/chains.217.29.29.167 • • • • • • • • Endereço de Origem: 200.

6. Coloquei isto aqui por curiosidade de algumas pessoas.E ---> PREROUTING ------> (ROTEAM.2 Monitorando tentativa de conexão de trojans em sua máquina As regras abaixo alertam sobre a tentativa de conexão dos trojans "For Win" mais conhecidos. este tipo de configuração é muito usada caso precise fornecer algum tipo de serviço que seja acessível externamente e protegendo outros.) ---> FORWARD ----------> POSTROUTING --> S Mangle e | Filter ^ NAT (Src) NAT (DNAT)) | | | (ROTEAM.6. O tráfego de outras interfaces não é afetado com as regras a seguir: iptables -A INPUT -i ppp0 -m state --state ! ESTABLISHED. 6.8. Existem outras formas de bloquear conexões de modo mais seletivo usando chains específicos.1 Bloqueando conexões de fora para sua máquina As regras a seguir servem para bloquear tentativas de conexões da interface de Internet (ppp0) a sua rede sem bloquear o tráfego de conexões já iniciadas.8 Exemplos de configurações do iptables Em construção. pois máquinas Linux são imunes a este tipo de coisa: #!/bin/sh 119 .8. Pacotes de conexões já estabelecidas ainda são permitidos.. Estas regras acima servem para quem não deseja NENHUM acesso indevido a sua máquina.) V | IN Filter OUT . derrubando pacotes deste tipo significa bloquear novas conexões. endereços de origem/destino. Exemplo de como bloquear todas as conexões para a máquina do firewall permitindo somente conexões da máquina Linux para fora. Veja “6. | ^ NAT (DNAT) | | Filter V | +----------------------------------------+ | Processo Local | +----------------------------------------+ 6. etc.1 Conferindo de acordo com o estado da conexão” para detalhes. portas.RELATED -j DROP Todas as conexões vindas de ppp0 de estado diferente de ESTABLISHED e RELATED (NEW e INVALID) serão derrubadas.Mangle. iptables -A INPUT -i ppp0 --syn -j DROP Este acima é mais simples e possui o mesmo efeito: Pacotes SYN são usados para iniciar conexões.

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}.6. a terceira rejeita o acesso. NetBus (quem nunca passou pela fase de ter uma lista com mais de 100 netmasks e conseguir encontrar centenas de máquinas por dia infectadas pelo BO? :-).8.-).3 Conectando sua rede interna a Internet O seguinte exemplo permite ligar sua rede interna com a faixa de IP's 192. Dependendo do número de portas alvo. A segunda (dentro do laço for) faz uma regra de LOG para registrar as tentativas de acesso de trojans em nosso sistema. 6.* a internet (usando uma conexão discada do tipo ppp): iptables -A nat -A POSTROUTING -s 192. O laço do for executará as 2 regras para cada porta processada (economizando linhas e linhas de regras.1.8. No código acima a única coisa que precisa fazer para adicionar mais portas é inseri-las na variável TROJAN_PORTS e executar o programa. Win Crack.1. Ele poderá ser facilmente adaptado para atender outro tipo de necessidade. Muitas das portas especificadas na variável TROJAN_PORTS são antigas conhecidas de quem já brincou ou sofreram com o Back Orifice.0/24 -o ppp+ -j MASQUERADE echo "1" >/proc/sys/net/ipv4/ip_forward 6. A quarta regra do iptables cria de todo o tráfego vindo da interface ppp0 pra o chain trojans-in (queremos que só o tráfego vindo da internet seja analisado pelo chain trojansin).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. Este exemplo não é tão complexo e cobre as expectativas mais comuns de pessoas que gostam de explorar os potenciais de rede no Linux ou satisfazer sua curiosidade.168.6 Especificando múltiplas portas de origem/destino” para detalhes).4 Um exemplo de firewall simples Esta seção possui um exemplo mais elaborado de firewall que servirá para máquinas conectadas via ppp com uma rede interna conectada via Masquerading.168. A configuração assumida é a seguinte: 120 . este código pode ser muito simplificado usando o recurso multiport do iptables (veja “6. me livrando de uma LER e poupando muitos bytes neste guia .

1.org. Prioridades serão estabelecidas para os serviços de telnet.168.1 que serve de ligação a sua rede Interna. 3. 4. Silva # Data: 05/09/2001 # Descrição: Produzido para ser distribuído livremente. uma é eth0 com o IP 192. exceto conexões para o serviço Apache (httpd). Máquina do firewall com 2 interfaces de rede.1. insmod ou iptables --modprobe=modulo ##### Definição 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 Políticas ##### -P INPUT DROP -P OUTPUT ACCEPT -P FORWARD DROP PREROUTING ACCEPT OUTPUT ACCEPT POSTROUTING DROP 121 . a outra é ppp0 que é a interface Internet. IRC. Os usuários da rede local tem acesso livre ao servidor Linux. 5. http://focalinux. Qualquer acesso externo a máquina do firewall é bloqueado. acompanha o guia # Foca GNU/Linux. Qualquer acesso externo a máquinas da rede interna é bloqueado. Todos os usuários possuem acesso livre a Internet via Masquerading. exceto que o acesso para o serviço www deve ser obrigatoriamente feito via squid. Outras tentativas de conexões devem ser explicitamente registradas nos logs do sistema para conhecimento do administrador. será necessário # carregar estes módulos via modprobe. #!/bin/sh # Modelo de configuração de firewall # Autor: Gleydson M.br # # # # # # # # # # É assumido um sistema usando kmod para carga automática dos módulos usados por esta configuração do firewall: ipt_filter ipt_nat ipt_conntrack ipt_mangle ipt_TOS ipt_MASQUERADE ipt_LOG # Se você tem um kernel modularizado que não utiliza o kmod.talk e DNS. 6.cipsga. 2. e o servidor smtp a ser usado deverá ser o do firewall Linux.

Para 32MB = 2048.168. 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 número máximo de conexões simultâneas # com base na memória do sistema.1. 128MB = 8192. vamos abaixar este limite. Por outro lado isto # criará uma certa limitação de tráfego para evitar a sobrecarga do servidor.# Tabela mangle iptables -t mangle -P PREROUTING ACCEPT iptables -t mangle -P OUTPUT ACCEPT ##### Proteção contra IP Spoofing ##### for i in /proc/sys/net/ipv4/conf/*/rp_filter.0/24 -i eth0 -j ACCEPT # Conexões vindas da interface ppp0 são tratadas pelo chain ppp-input iptables -A INPUT -i ppp+ -j ppp-input # Qualquer outra conexão desconhecida é imediatamente registrada e derrubada iptables -A INPUT -j LOG --log-prefix "FIREWALL: INPUT " iptables -A INPUT -j DROP ##### Chain FORWARD #### # Permite redirecionamento de conexões entre as interfaces locais # especificadas abaixo. Qualquer tráfego vindo/indo para outras 122 . echo "2048" > /proc/sys/net/ipv4/ip_conntrack_max ############################################################### # Tabela filter # ############################################################### ##### Chain INPUT ##### # Criamos um chain que será usado para tratar o tráfego vindo da Internet e iptables -N ppp-input # Aceita todo o tráfego vindo do loopback e indo pro loopback iptables -A INPUT -i lo -j ACCEPT # Todo tráfego vindo da rede interna também é aceito iptables -A INPUT -s 192. # Quando este limite é excedido a seguinte mensagem é mostrada: # "ip_conntrack: maximum limit of XXX entries exceed" # # Como temos uma rede simples. # sendo que são usados 350 bytes de memória residente para controlar # cada conexão. 64MB = 4096.

168. 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 conexão de fora para esta máquina iptables -A ppp-input -m state --state ! ESTABLISHED. o # squid e smtpd do firewall devem ser obrigatoriamente usados.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 limitação iptables -A ppp-input -p icmp -m limit --limit 2/s -j ACCEPT # Primeiro aceitamos o tráfego vindo da Internet para o serviço www (porta 80) iptables -A ppp-input -p tcp --dport 80 -j ACCEPT # A tentativa de acesso externo a estes serviços serão registrados no syslog # do sistema e serão bloqueados pela última regra abaixo.1.# interfaces será bloqueado neste passo iptables -A FORWARD -d 192. Também registramos # as tentativas para monitorarmos qual máquina está tentando conectar-se diretamente. 123 .168.RELATED -j DROP # Qualquer outro tipo de tráfego é aceito iptables -A ppp-input -j ACCEPT ####################################################### # Tabela nat # ####################################################### ##### Chain POSTROUTING ##### # Permite qualquer conexão 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.RELATED -j LOG --log-prefix "FIREWALL: ppp-in " iptables -A ppp-input -m state --state ! ESTABLISHED.168.1.1.0/24 -i ppp+ -o eth0 -j ACCEPT iptables -A FORWARD -s 192.0/24 -o eth0 -j ACCEPT # Não queremos que usuários tenham acesso direto a www e smtp da rede externa.

0/24 -j DROP # Quando iniciamos uma conexão ppp.x.1.0/24 -o ppp+ -p tcp --dport 80 -j LOG --log-prefix "FIREWALL: SNAT-www " iptables -t nat -A POSTROUTING -s 192. este endereço é modificado.168.0/24 -o ppp+ -p tcp --dport 25 -j LOG --log-prefix "FIREWALL: SNAT-smtp " iptables -t nat -A POSTROUTING -s 192.1. telnet. O tráfego indo para # a interface ppp não deverá ser bloqueado.168. Os bloqueios serão feitos no # chain INPUT da tabela filter iptables -t nat -A POSTROUTING -o ppp+ -j ACCEPT # Registra e bloqueia qualquer outro tipo de tráfego desconhecido iptables -t nat -A POSTROUTING -j LOG --log-prefix "FIREWALL: SNAT " iptables -t nat -A POSTROUTING -j DROP ############################################### # Tabela mangle # ############################################### ##### Chain OUTPUT ##### # Define mínimo de espera para os serviços ftp.0/24 -o ppp+ -j MASQUERADE # Qualquer outra origem de tráfego desconhecida indo para eth0 (conexões vindas # de ppp+) são bloqueadas aqui iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1. irc e DNS.iptables -t nat -A POSTROUTING -s 192.1.x) e após # estabelecida a conexão real.1.0/24 -j LOG --log-prefix "FIREWALL: SNAT unknown" iptables -t nat -A POSTROUTING -o eth0 -d 192.1. 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 124 . isto # dará uma melhor sensação de conexão em tempo real e diminuirá o tempo # de espera para conexões que requerem resolução de nomes. obtermos um endereço classe A (10.168.168.168.1.x.0/24 -o ppp+ -p tcp --dport 80 -j DROP # É feito masquerading dos outros serviços da rede interna indo para a interface # ppp0 iptables -t nat -A POSTROUTING -s 192.0/24 -o ppp+ -p tcp --dport 25 -j DROP iptables -t nat -A POSTROUTING -s 192.168.

hpg. Eu achei divertido fazer uma relação com o Necronomicon (Livro dos Mortos). onde o cliente irá configurar o seu navegador para requisitar pacotes da máquina servidora. 125 . O Proxy http está configurado com algumas proteções de segurança de acesso à páginas. mesmo em inglês.html O Squid é amplamente utilizado como servidor cache e servidor de proxy transparente http.com. O Squid como PROXY HTTP é aberto uma porta em TCP. 7.Versão 1.2 Requisitos básicos Você terá que ter: • • um UNIX: o tutorial tem seu foque em Linux.squid-cache. por <arfreitas@ig. mas primeiro vão buscar as páginas no servidor cache. quem diria em português.com..7 O PROXY SQUID Adaptado de “O Squidnomicon”. Mas não espere encontrar nenhuma outra semelhança além desta. 7. Você poderá encontrar maiores informações sobre o Squid no seu website (http://www.br/linux/squidnomicon. Talvez eu use um desenho do grande Cthullu como logo do manual.21 http://www.ig. Qualquer ajuda (dicas.linuxdoc.br>. O Squid faz uma verificação do conteúdo do cache com o conteúdo da página real e executa uma atualização automática. Este manual é livre e está sobre a licença Free GNU Documentation.1 Introdução Resolvi escrever esse manual principalmente porque ninguém o havia feito antes.org) e ainda poderá recorrer a FAQS e a lista de discussão para dúvidas. o pacote/fonte do Squid.org não há nenhum que fale sobre Squid. etc. SUN Solaris. mas tenho receio dos direitos autorais. comentários) e/ou modificações são muito bem-vindas. mas com algum esforço você pode utilizar o mesmo tutorial em FreeBSD.alceujun. Algumas páginas serão bloqueadas por conterem em seu link palavras que estão catalogadas no arquivo blacklist. Squidnomicon significa manual do Squid. Dentre todos os inúmeros documentos sobre Linux e software livre em http://www. As páginas que o administrador quiser liberar o acesso basta colocar a palavra no arquivo whitelist. O Squid como CACHE é utilizado para armazenar conteúdos de páginas para que os clientes da rede interna não precisem buscar os dados na internet.

1 Instalação A instalação poderá depender de qual distribuição você estiver usando. DEB ou TGZ. Com essas configurações. conhecimento básico sobre protocolo TCP-IP e Internet. Normalmente você encontrara o Squid nos CDROM de distribuição em formatos RPM.3. mas para entrar em operação você terá que ter pelo menos um Pentium 2 com 128MB e um HD de 4 Gb. A versão termina em números pares (para versões estáveis) e impares (para 126 . você irá ter o Squid como proxy e efetuando cache das páginas visitadas.org na seção de downloads. Ele permite também a criação de árvores de cache via HTCP. o que também inclui a possibilidade de criação de listas de sites e/ou palavras proibidas para acesso. Para instalar a partir do fonte. Depois execute: tar -xzvf squid-versao. 7. Neste capitulo irei mostrar apenas o básico para você ter o Squid rodando. Basta saber que os requisitos de hardware de um servidor proxy são muito maiores em relação à quantidade de memória e velocidade do disco do que para um firewall. load balance para servidores HTTP (vide http_accelerator) e diversos modos de autentificação de usuário. velocidade de processamento também influirá na performance do proxy.tar. faca o download do Squid em http://www./configure make make install Ler o arquivo README que acompanha o arquivo fonte também e essencial para obter os detalhes. e pode variar muito conforme o número de usuários X requisições.gz/ cd /diretorio_criado . conhecer o UNIX no qual você quer instalar o Squid! • • 7. Isto é aproximado.rpm (para distribuições baseadas em RPM) ou apt-get install squid (para o Debian) O Conectiva (versão 6 e posteriores) também podem usar as mesmas facilidades do apt-get.• um computador: para testes qualquer um serve. Para distribuições que trabalham com pacotes a instalação é muito simples: rpm -ivh squid-versao.3 O feijão com arroz O Squid é um webproxy que suporta proxying para DNS e FTP. Você também pode usar o fonte do Squid e compilar os binários usando somente as funções que você precisar. principalmente devido ao cache. alem do tradicional HTTP.squid-cache.

Depois disso você pode iniciar o Squid usando o script de inicialização que fica dentro do diretório /etc/rc. Agora vamos explicar melhor os parâmetros utilizados: • http_port 3128: Este parâmetro indica em que porta o Squid estará aceitando requisições de páginas Web.conf.d para o Debian): # cd /etc/rc. cache_mem 8Mb: Este parâmetro especifica a quantidade ideal de memória a ser usada pelo Squid. muitos deles comentados e precedidos de comentários sobre as funções que exercem. como o Netscape ou o Internet Explorer.0. Para isso.3. configure (na parte referente a servidor proxy) o endereço IP do proxy Squid sem esquecer de indicar a porta 3128. pelo contrário.d #. Inicialmente você deve configurar apenas 3 parâmetros para que tenha o Squid ao menos respondendo a requisições e criando cache das páginas requisitadas: http_port 3128 cache_mem 8Mb http_access allow all Com exceção do ultimo parâmetro (que deve ser inserido) esses parâmetros estão apenas comentados (com um sinal "#"). • • O Squid permite uma grande flexibilidade sobre o que é permitido ou não que o cliente requisite (conforme você poderá acompanhar mais à frente). O arquivo de configuração do Squid fica em /etc/squid. 127 . esta permitindo que qualquer um requisite qualquer página.d (ou /etc/init./squid start Na maioria das distribuições o cache é criado quando o Squid é iniciado pela primeira vez (pelo menos para sistemas Linux).0. Várias portas diferentes podem ser listadas simultaneamente. http_access allow all: Inicialmente o Squid estará recusando o serviço de proxy para qualquer requisição que não tenha sido feita a partir do localhost (127.d/init.2 Configuração Depois de instalado você provavelmente (espero!) terá os binários e arquivos de configuração. desde que estejam livres. O Squid irá ultrapassar o valor estipulado se assim for necessário.d/init. Você ainda pode forçar a criação de cache digitando: # squid -z Ainda é possível fazer com que o Squid interprete novos parâmetros no arquivo de configuração sem interromper os processos atuais: # squid -k reconfigure O Squid já está rodando e aceitando conexões. mas isso não significa um limite.1). Essa diretriz. 7. Agora você pode fazer um teste com um navegador qualquer. Procure sempre pelos arquivos com o RELEASE incluso.versões de teste) então escolha a ultima de acordo com seus interesses.

As solicitações agora serão atendidas pelo Squid, que irá fazer cache das requisições, como páginas html e figuras, o que aumenta consideravelmente a rapidez de navegação e diminui a ocupação de banda do link.

7.4 Controlando os usuários
Usuários costumam dar dores de cabeça horríveis a um administrador de redes, mas também sem eles como você justificaria seu salário? O Squid fornece meios de evitar que você tenha (muitos) problemas com seus usuários acessando a Internet para fins não muito ortodoxos. Você pode bloquear acesso a algum tipo de recurso ou a um site inteiro. No arquivo /etc/squid.conf existem definições de listas de controle (ACL em inglês) e como é feito o acesso a recursos definidos nestas listas. Antes de mostrar como a lista é feita, procure ter antes em mente a seguinte idéia: 1 - As regras são interpretadas na ordem que aparecem: quando você define regras, a primeira é interpretada. Se a regra descrita não combinar com a requisição a mesma será comparada com a próxima regra, e assim por diante. 2 - Sempre, SEMPRE coloque como última regra uma ACL que bloqueie tudo. Se você não fizer isso, seu controle vai para o espaço. 3 - Não crie regras demais e desnecessárias! Procure evitar redundâncias e regras de controle que exijam resolução de nomes. Isso pode atrasar muita a resposta do Squid para requisições. Existem diversos critérios/tipos de listas. Acompanhe abaixo: • • • SCR A lista é baseada no endereço IP do cliente (requisitante). DST A lista é baseada no endereço IP do servidor (que será requisitado). SCRDOMAIN O domínio da máquina cliente. O domínio serão obtido por resolução reversa de IP o que pode causar atrasos para a requisição ter resposta. DSTDOMAIN Método de controle sobre um domínio especifico. SRCDOM_REGEX Expressão regular que e avaliada para tentar marcar um domínio requisitante; esse parâmetro pode causar atrasos por usar resolução reversa de endereço IP. DSTDOM_REGEX domínio 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.

128

URLPATH_REGEX Semelhante ao url_regex só que ira procurar a expressão na url toda exceto no nome do protocolo e domínio. Isso ira tentar combinar com o nome do diretório ao longo da url. PORT O acesso pode ser controlado pela porta do endereço do servidor requisitado. PROTO Especifica o protocolo de transferência. METHOD Especifica o tipo de método da requisição. BROWSER expressão regular cujo padrão tentara combinar com o contido no cabeçário HTTP de requisição do cliente. IDENT Seqüência de caracteres que combinam com o nome do usuário. Requer um servidor Ident rodando na máquina do cliente. IDENT_REGEX O mesmo que ident, mas utilizando-se de uma expressão regular. PROXY_AUTH Permite a autentificação de usuários através do envio de usuário/senha. Requer um programa externo para realizar essa autentificação. PROXY_AUTH_REGEX O mesmo que proxy_auth, só que ira tentar combinar o nome do usuário fornecido pelo programa de autentificação através de uma expressão regular. SNMP_COMMUNITY Seqüência de caracteres combinar com o nome da comunidade SNMP. que tentarão

• • • • • • •

• • •

REQ_MIME_TYPE Expressão regular que tentara combinar com o tipo de conteúdo contido no cabeçário de requisição. 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 alguém 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 descrição: permite ou nega acesso ao serviço http baseado na lista de acesso (acl) definida. O uso de "!" indica inversão (diferente de). Eu coloquei uma observação 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 não tiver seu pedido encaixado em alguma acl anterior, ele terá seu pedido negado. 129

ICP_ACCESS sintaxe: icp_access allow | deny [!] acl descrição: use para forçar seus vizinhos a usarem você como um <sibling> ao invés de pai. Isso e utilizado quando se trabalha com arvores de cache. MISS_ACCESS sintaxe: miss_access allow | deny [!] acl descrição: limita os domínios que podem fazer requisições ao cache do servidor utilizando os recursos acl. PROXY_AUTH_REALM sintaxe: proxy_auth_realm seqüência de caracteres descrição: na realidade esse comando não exerce nenhum tipo de controle, apenas informa ao cliente (através da seqüência de caracteres) aonde ele esta realizando o logon. Não é essencial, mas o padrão aparece como "Squid proxy"? e você pode mudar isso sem problemas. IDENT_LOOKUP_ACCESS sintaxe: ident_lookup_access allow | deny acl descrição: se a acl combinar com a requisição do cliente, este cliente será autentificado por uma procura ident.

7.5 Exemplos de configuração
Agora que todos os itens foram discutidos vou mostrar alguns exemplos práticos de configuração para controle de acesso.

7.5.1 Permitir http_access para apenas uma máquina 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 máscara 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 horários para diferentes usuários?
Se você pensou em algo assim:

130

10.5.10. como uma coluna. 7.4 Quero criar uma acl para bloquear sites com a palavra sexo pois meus funcionários ficam baixando filmes em Divx de pornografia: acl porno url_regex sexo http_access deny porno Isso tem algumas conseqüências.5. Segundo que um site http://www.com 131 .1 acl davi src 192. Gostaria de bloqueá-los diretamente.168. mas eu tenho uma lista de palavras para fazer o mesmo.10.168. uma vez que nunca serão verdadeiros na mesma hora.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ã almoço http_access allow davi manhã almoço http_access allow cleusa noite você errou ! O Squid interpreta regras desta forma: http_access REGRA definição1 E definição 2 E definição3 OU http_access AÇÃO definição1 E definição 2 E definição3 Atenção porque esses E e OU são operadores lógicos! Portanto a acl: http_access allow carlos manhã almoço nunca irá funcionar porque manhã E almoço serão sempre falsos.br estaria encaixado na lista de bloqueio. inclua uma palavra sobre a outra. Terei que repetir esse comando várias vezes? De forma alguma: acl porno url_regex "/etc/squid/porno. acl porno2amissao dstdomain playboy.sexoesaude.2 acl cleusa src 192.6 Ainda existem sites que escapam a esse controle. 7.168. Como é falso (de acordo com a lógica booleana): 0/1 E 1 = 0 (falso) http_access allow carlos E manhã OU http_access allow carlos almoço 7.txt" http_access deny porno No arquivo texto. Primeiro que essa regra deve encabeçar a lista para você não correr o risco de liberar o acesso antes de bloqueá-lo.com.5.5 A idéia acima e ótima.acl carlos src 192. apesar do conteúdo não ser o mesmo.

br/orso/index.cjb. No site você também encontrara listas de palavras para bloqueios de sites pornográficos.net/linux/ 132 .ou acl porno2amissao dstdomain "/etc/squid/pornosites.html) pois contem conteúdo interessante sobre o Squid.imortais.txt" http_access deny porno2 7. 7.com.6 Recursos na Internet O site do Squid possui muito mais documentação que esse pequeno tutorial e é ponto obrigatório de passagem se você entende inglês: http://www.squid-cache.7 Meu diretor reclama que agora não consegue mais ler as entrevistas no site da Playboy. 7. A essa altura você já sabe como proceder em seguida. O símbolo é usado em expressões regulares e pode ajudar a marcar casos bem específicos.onda.conf : acl entrevistas urlpath_regex entrevistas http_access allow entrevistas Essa regra deve vir ANTES do bloqueio do site da Playboy. Chefe é chefe. Você poderá encontrar versões novas desse manual no website http://www.5. inclua no arquivo /etc/squid. Antes que ele deixe de pagar seu salário.org Outro site interessante e o ORSO (http://web.5. incluindo o SARG.8 E uma lista de diretórios? Insira esse conteúdo dentro de um arquivo texto: batepapo$ batepapo/$ sexo/$ fofoca/$ chat/$ O símbolo de $ indica que a o Squid deve combinar as ocorrências quando estas palavras aparecerem no final da URL. script para gerar páginas html dos arquivos de log do Squid.

É permitido a qualquer pessoa copiar e distribuir cópias desse documento de licença. Em todas as faces externas do livro. Os nomes dos autores e do editor devem aparecer em todas as superfícies externas do livro. o nome do editor original deve estar impresso em tamanho tão grande quanto o título do trabalho. 133 . Copyright O copyright de todo trabalho protegido pela Licença de Livre Publicação (Open Publication License) pertence aos autores ou proprietários. OPEN PUBLIC LICENSE Draft v1. Qualquer publicação no formato livro padrão (papel) requer obrigatoriamente a citação dos autores e editor originais. Este material somente poderá ser distribuído se sujeito aos termos e condições firmados na Licença de Livre Publicação (Open Publication License). e que esta licença ou uma incorporação dela por referência (com quaisquer das opções escolhidas pelo autor ou editor) estejam presentes na reprodução.0. esta tradução poderá auxiliar pessoas que falem Português a entender melhor a licença. Entretanto.opencontent. de 8 de junho de 1999. e citado como proprietário em relação àquele título.org/openpub/).APÊNDICE A. Requisitos comuns às versões modificadas e não modificadas Os trabalhos protegidos pela Licença de Livre Publicação (Open Publication License) podem ser reproduzidos e distribuídos no todo ou em parte. deve ser seguida imediatamente com quaisquer opções escolhidas pelos autores ou editor do documento (consultar a seção Termos opcionais).0. versão 1.opencontent. desde que os termos desta licença estejam incluídos. 8 june 1999 I. É permitida a redistribuição comercial de material licenciado pela Licença de Livre Publicação (Open Publication License).0 ou superior (a versão mais atual encontra-se disponível em http://www. em qualquer meio físico ou eletrônico. disponível em http://www. e não é substituto legal para a Licença original. II. desde que sem a implementação de qualquer mudança. Esta referência.org/openpub. A forma apropriada para uma incorporação por referência deste livro é: Copyright© 2002 Alfamídia Ltda. devidamente preenchida com os dados da publicação. LICENÇA DE PUBLICAÇÃO LIVRE Esta é uma tradução não-oficial da Open Publication License versão 1.

134 . Requisitos para trabalhos modificados Todas as versões modificadas de documentos cobertos por esta licença. antologias. é solicitado e extremamente recomendado aos redistribuidores que: Se os trabalhos protegidos pela Licença de Livre Publicação (Open Publication License) estiverem sendo distribuídos em impressos ou CD-ROM. as partes restantes deste documento continuam sendo aplicadas. incluindo. Práticas recomendadas Em adição aos requisitos desta licença. As pessoas que fizerem as modificações e as datas de modificação devem ser identificadas.III. para que os autores tenham tempo de providenciar documentação atualizada. mas não limitado a. O reconhecimento dos autores e editor originais (se aplicável) deve ser mantido de acordo com as práticas acadêmicas usuais de citação. os autores sejam informados por email. ou garantia de não-infração. deve seguir os requisitos abaixo: A versão modificada deve ser indicada como tal. ao menos trinta dias antes. IV. APLICABILIDADE. Os nomes originais dos autores não devem ser utilizados para indicar ou garantir seu endosso ao documento resultante sem a autorização expressa dos autores. explícita ou implícita. incluindo traduções. a não ser que explicitamente indicado no trabalho. A mera adição de trabalhos protegidos pela Licença de Livre Publicação (Open Publication License) ou partes de trabalhos protegidos pela Licença de Livre Publicação (Open Publication License) em uma mesma mídia que contenha outros trabalhos ou programas não protegidos por essa licença não decorre em aplicação da Licença de Livre Publicação (Open Publication License) para esses outros trabalhos. sem garantias de qualquer tipo. Escopo da licença Os termos de licença a seguir aplicam-se a todos os trabalhos protegidos pela Licença de Livre Publicação (Open Publication License). se existirem. Os trabalhos protegidos pela Licença de Livre Publicação (Open Publication License) são fornecidos "como estão". Esta notificação deve descrever as modificaçoes introduzidas no documento. compilações e documentação parcial. AUSÊNCIA DE GARANTIA. Se alguma parte desta licença não puder ser aplicada em alguma jurisdição. as garantias implícitas de comercialização e conveniência para um propósito particular. O local da versão não-modificada do documento deve ser indicado. V. O trabalho resultante deve explicitamente conter uma nota especificando a inclusão do material protegido pela Licença de Livre Publicação (Open Publication License) e o aviso de copyright apropriado.

mesmo não sendo obrigatório sob esta licença. mande um email para opalrequest@opencontent. VI. mande um email para <opal-request@opencontent. Para se inscrever na lista de autores de publicações livres (Open Publication Author's List). é considerado de bom tom oferecer uma cópia sem ônus de todo o material modificado (impresso e CD-ROM) para os autores originais. Para se desinscrever na lista de autores de publicações livres (Open Publication Author's List). Em caso de dúvidas sobre a Licença de Livre Publicação (Open Publication License). Os autores de trabalhos protegidos pela Licença de Livre Publicação (Open Publication License) podem incluir suas próprias licenças nesses trabalhos.org> ou a lista de autores de publicações <opal@opencontent.org> via email. Estas opções são consideradas parte da licença e devem ser incluídas com ela (ou com a referência a ela) nos trabalhos derivados.org> com a palavra subscribe no corpo da mensagem. Políticas de Publicação Livre (O texto a seguir não é considerado parte da licença. B:É vedada a distribuição deste trabalho ou qualquer derivado seu em qualquer formato de livro padrão (papel) sem a prévia autorização dos proprietários do direito autoral.org com a palavra unsubscribe no corpo da mensagem. ou então descritas em um anexo ao documento. 135 . desde que os termos dessa licença não sejam mais restritrivos que os da Licença de Livre Publicação (Open Publication License).org ou simplesmente responda a uma mensagem postada. Termos opcionais Os autores e editores de documentos protegidos pela Licença de Livre Publicação (Open Publication License) podem escolher certas opções de licença simplesmente incluindo alguns parágrafos após a cópia da licença ou sua referência. mande um email para opal@opencontent.Todas as modificações substanciais (incluindo exclusões) devem ser marcadas claramente no documento.) Os trabalhos protegidos pela Licença de Livre Publicação (Open Publication License) estão disponíveis e podem ser acessados na home page da Open Publication http://works. As opções que se aplicam a este trabalho são: A:É vedada a distribuição de versões com modificações substanciais deste documento sem a expressa permissão dos proprietários do direito autoral.org/ . contactar David Wiley <dw2@opencontent. Finalmente. Para enviar mensagens para a lista de autores de publicações livres (Open Publication Author's List).opencontent.

Sign up to vote on this title
UsefulNot useful