firewall: segurança de redes linuxcurso_tecnico/redes- prof. raul... · 2009. 6. 16. · firewall:...

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

Upload: others

Post on 29-Aug-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

Firewall:Segurança de redes Linux

Paul RussellGleydson Mazioli da Silva

Alexandre Folle de Menezes

Tradução Oficial AlfamídiaAlexandre Folle de Menezes

Versão 1.1, agosto/2002.

Page 2: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle
Page 3: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

As marcas registradas utilizadas no decorrer deste livro são usadasunicamente para fins didáticos, sendo estas propriedade de suas respectivascompanhias.

A Alfamídia não assume qualquer responsabilidade por erros ou omissões, oupor danos resultantes do uso das informações contidas neste livro.

O capítulo 5 é uma adaptação do texto:

Linux IPCHAINS-HOWTOCopyright © 1999 – Paul Russell, <[email protected]>Tradução para o português por Gleydson Mazioli da Silva, <[email protected]>

O capítulo 6 é uma adaptação do texto:

Guia Foca GNU/LinuxCopyleft © 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 LtdaRua Félix da Cunha, 818Porto Alegre - RS - BrasilFone/Fax: +55 (51) 3346-7300E-mail: [email protected]: http://www.alfamidia.com.br

Esta apostila é uma coletânea de textos com licença GNU ou livresencontrados na Internet, conforme referências acima.

Este material foi totalmente montado com fins didáticos, sem objetivocomercial. Foram acrescentados exemplos e exercícios desenvolvidospela Alfamídia Ltda.

Page 4: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle
Page 5: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

CONTEÚDO

CONTEÚDO ................................................................................................................... 5

1 TCP/IP ..................................................................................................................... 11

1.1 A CAMADA FÍSICA................................................................................................. 111.2 A CAMADA DE ENLACE DE DADOS ....................................................................... 121.3 A CAMADA DE REDE ............................................................................................. 121.3.1 O DATAGRAMA IP............................................................................................... 131.3.2 FRAGMENTAÇÃO DOS DATAGRAMAS .................................................................. 141.4 CAMADA DE TRANSPORTE .................................................................................... 141.4.1 TCP..................................................................................................................... 141.4.1.1 O pacote TCP .................................................................................................. 151.4.2 UDP .................................................................................................................... 161.4.3 ICMP .................................................................................................................. 161.5 MONTAGEM DOS PACOTES.................................................................................... 171.6 ROTEAMENTO ....................................................................................................... 181.6.1 REEMPACOTAMENTO........................................................................................... 20EXERCÍCIOS.................................................................................................................... 21

2 ENDEREÇAMENTO............................................................................................. 22

2.1 ENDEREÇAMENTO DE ENLACE (MAC) ................................................................ 222.2 ENDEREÇAMENTO DE REDE (IP) .......................................................................... 222.2.1 MULTIHOMING .................................................................................................... 232.2.2 CLASSES DE REDE IP ........................................................................................... 232.2.3 ENDEREÇOS RESERVADOS PARA USO EM REDES PRIVADAS ................................. 242.2.4 ENDEREÇOS ESPECIAIS ........................................................................................ 242.2.4.1 O endereço de Rede......................................................................................... 242.2.4.2 O endereço de Broadcast................................................................................. 252.2.4.3 O endereço de Loopback ................................................................................. 252.2.5 DIVISÃO EM SUB-REDES....................................................................................... 252.2.5.1 Máscaras de Sub-Rede .................................................................................... 252.2.6 SUPER-REDES E CDIR......................................................................................... 262.2.7 REFERÊNCIA RÁPIDA DE MÁSCARA DE REDES ...................................................... 262.3 ENDEREÇAMENTO DE SESSÃO (PORTAS) ............................................................. 27EXERCÍCIOS.................................................................................................................... 28

3 CONECTANDO REDES....................................................................................... 29

3.1 ROTEAMENTO ....................................................................................................... 293.1.1 ROTAS ESTÁTICAS E DINÂMICAS.......................................................................... 293.1.2 GATEWAY............................................................................................................ 30

Page 6: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

6

3.2 NETFILTER ............................................................................................................ 303.2.1 ANATOMIA DO NETFILTER ................................................................................... 313.2.2 NAT.................................................................................................................... 313.2.2.1 Tipos de NAT .................................................................................................. 323.2.3 IMPLEMENTAÇÃO DE UM SERVIÇO NAT .............................................................. 32

4 VULNERABILIDADES NO PROTOCOLO TCP/IP ........................................ 33

4.1 DISPONIBILIDADE DOS DADOS............................................................................... 334.2 SOBRE O PROTOCOLO TCP/IP ............................................................................. 334.3 IP SPOOFING ......................................................................................................... 344.3.1 SERVIÇOS VULNERÁVEIS AO IP SPOOFING:.......................................................... 344.3.2 MEDIDAS PARA SE PREVENIR DE ATAQUES IP SPOOFING: .................................... 354.4 SOBRE OS ATAQUES............................................................................................... 354.4.1 SYN FLOODING................................................................................................... 354.4.2 LAND................................................................................................................... 354.4.3 WINNUKE............................................................................................................ 364.4.4 TEARDROP .......................................................................................................... 364.4.5 NEWTEAR............................................................................................................ 374.4.6 BONK/BOINK....................................................................................................... 374.4.7 SSPING................................................................................................................. 374.4.8 SMURF ................................................................................................................. 37

5 FIREWALL IPCHAINS........................................................................................ 39

5.1 INTRODUÇÃO......................................................................................................... 395.1.1 O QUE? ................................................................................................................ 395.1.2 POR QUE? ............................................................................................................ 395.1.3 COMO? ................................................................................................................ 395.1.4 ONDE? ................................................................................................................. 405.2 BÁSICO SOBRE A FILTRAGEM DE PACOTES........................................................... 405.2.1 O QUE É? ............................................................................................................. 405.2.2 POR QUE? ............................................................................................................ 405.2.3 COMO? ................................................................................................................ 415.2.3.1 Um kernel com filtragem de pacotes............................................................... 415.2.3.2 O ipchains .................................................................................................. 425.2.3.3 Fazendo regras permanentes............................................................................ 425.3 ROTEAMENTO, MASQUERADING, PORTFORWARDING, IPAUTOFW...................... 435.3.1 GUIA RÁPIDO DE TRÊS LINHAS PARA MASQUERADING......................................... 435.3.2 CONFIGURAÇÕES DE FIREWALL SIMPLES ............................................................. 445.3.2.1 Rede Pública .................................................................................................... 445.3.2.2 Rede Privada: Masquerading........................................................................... 455.3.2.3 Rede Privada: Proxies Transparentes .............................................................. 465.3.2.4 Rede Privada: Proxies Tradicionais................................................................. 47

Page 7: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

7

5.3.2.5 Serviços Internos Limitados ............................................................................ 485.3.3 MAIS DETALHES SOBRE MASQUERADING ............................................................ 485.4 IP FIREWALLING CHAINS..................................................................................... 495.4.1 COMO OS PACOTES ATRAVESSAM OS FILTROS...................................................... 495.4.1.1 Usando ipchains......................................................................................... 505.4.1.2 Operações em uma regra Simples ................................................................... 515.4.1.3 Especificações de Filtragem ............................................................................ 535.4.1.4 Efeitos do Lado da Filtragem .......................................................................... 575.4.1.5 Operações em Masquerading .......................................................................... 645.4.1.6 Checando um Pacote ....................................................................................... 655.4.1.7 Multiplas Regras at Once and Watching What Happens ................................ 655.4.2 EXEMPLOS ÚTEIS ................................................................................................. 665.4.2.1 Usando ipchains-save............................................................................. 685.4.2.2 Usando ipchains-restore...................................................................... 685.5 DIVERSOS .............................................................................................................. 695.5.1 COMO ORGANIZAR SUAS REGRAS DE FIREWALL................................................... 695.5.2 O QUE NÃO FILTRAR ............................................................................................ 695.5.2.1 Pacotes ICMP .................................................................................................. 695.5.2.2 Conexões TCP para DNS (servidores de nomes)............................................ 705.5.2.3 Pesadelos FTP ................................................................................................. 705.5.3 FILTRANDO O PING OF DEATH (PING DA MORTE) ................................................. 715.5.4 FILTRANDO O TEARDROP E BONK........................................................................ 715.5.5 FILTRANDO BOMBAS DE FRAGMENTO ................................................................. 715.5.6 MODIFICANDO REGRAS DO FIREWALL ................................................................. 715.5.7 COMO EU CONFIGURO A PROTEÇÃO IP SPOOF?.................................................... 725.6 PROBLEMAS COMUNS............................................................................................ 735.6.1 IPCHAINS -L TRAVA! ........................................................................................... 735.6.2 MASQUERADING/FORWARDING NÃO FUNCIONA!................................................. 735.6.3 -J REDIR NÃO FUNCIONA!.............................................................................. 735.6.4 CORINGAS NAS INTERFACES NÃO FUNCINAM! ..................................................... 745.6.5 TOS NÃO FUNCIONA! .......................................................................................... 745.6.6 IPAUTOFW E IPPORTFW NÃO FUNCIONAM! ........................................................... 745.6.7 XOSVIEW ESTÁ QUEBRADO! ................................................................................. 745.6.8 FALTA DE SEGMENTAÇÃO COM “-J REDIRECT”! ............................................ 745.6.9 EU NÃO POSSO CONFIGURAR TEMPO LIMITE NO MASQUERADE! ........................... 745.6.10 EU DESEJO PROTEGER IPX! ............................................................................... 75

6 FIREWALL IPTABLES........................................................................................ 76

6.1 INTRODUÇÃO......................................................................................................... 766.1.1 VERSÃO............................................................................................................... 776.1.2 UM RESUMO DA HISTÓRIA DO IPTABLES............................................................... 77

Page 8: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

8

6.1.3 CARACTERÍSTICAS DO FIREWALL IPTABLES ......................................................... 776.1.4 FICHA TÉCNICA.................................................................................................... 786.1.5 REQUERIMENTOS................................................................................................. 786.1.6 ARQUIVOS DE LOGS CRIADOS PELO IPTABLES ...................................................... 796.1.7 INSTALAÇÃO........................................................................................................ 796.1.8 ENVIANDO CORREÇÕES/CONTRIBUINDO COM O PROJETO.................................... 796.1.9 O QUE ACONTECEU COM O IPCHAINS E IPFWADM? ............................................... 796.1.10 TIPOS DE FIREWALLS ......................................................................................... 796.1.11 O QUE PROTEGER?............................................................................................. 806.1.12 O QUE SÃO REGRAS?.......................................................................................... 816.1.13 O QUE SÃO CHAINS? .......................................................................................... 816.1.14 O QUE SÃO TABELAS?........................................................................................ 816.1.15 HABILITANDO O SUPORTE AO IPTABLES NO KERNEL .......................................... 826.1.16 LIGANDO SUA REDE INTERNA A INTERNET......................................................... 846.2 MANIPULANDO CHAINS......................................................................................... 846.2.1 ADICIONANDO REGRAS - A.................................................................................. 846.2.2 LISTANDO REGRAS - L ......................................................................................... 856.2.3 APAGANDO UMA REGRA - D ................................................................................ 876.2.4 INSERINDO UMA REGRA - I................................................................................... 886.2.5 SUBSTITUINDO UMA REGRA - R ........................................................................... 886.2.6 CRIANDO UM NOVO CHAIN - N............................................................................. 886.2.7 LISTANDO OS NOMES DE TODOS OS CHAINS ATUAIS............................................. 906.2.8 LIMPANDO AS REGRAS DE UM CHAIN - F.............................................................. 906.2.9 APAGANDO UM CHAIN CRIADO PELO USUÁRIO - X............................................... 906.2.10 ZERANDO CONTADOR DE BYTES DOS CHAINS - Z ............................................... 906.2.11 ESPECIFICANDO O POLICIAMENTO PADRÃO DE UM CHAIN - P............................. 916.3 OUTRAS OPÇÕES DO IPTABLES.............................................................................. 926.3.1 ESPECIFICANDO UM ENDEREÇO DE ORIGEM/DESTINO........................................... 926.3.2 ESPECIFICANDO A INTERFACE DE ORIGEM/DESTINO............................................. 926.3.3 ESPECIFICANDO UM PROTOCOLO ......................................................................... 946.3.3.1 Especificando portas de origem/destino.......................................................... 946.3.3.2 Especificando mensagens do protocolo ICMP................................................ 946.3.3.3 Especificando pacotes syn............................................................................... 956.3.4 ESPECIFICANDO FRAGMENTOS............................................................................. 966.3.5 ESPECIFICANDO UMA EXCEÇÃO ........................................................................... 966.3.6 ESPECIFICANDO UM ALVO.................................................................................... 976.3.6.1 Alvo REJECT.................................................................................................. 986.3.6.2 Especificando LOG como alvo........................................................................ 986.3.6.3 Especificando RETURN como alvo.............................................................. 1016.4 A TABELA NAT (NETWORK ADDRESS TRANSLATION) - FAZENDO NAT............. 1016.4.1 CRIANDO UM NOVO CHAIN NA TABELA NAT..................................................... 102

Page 9: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

9

6.4.2 FAZENDO IP MASQUERADING (PARA OS APRESSADOS) ...................................... 1026.4.3 FAZENDO SNAT................................................................................................ 1026.4.3.1 Fazendo IP Masquerading ............................................................................. 1046.4.4 FAZENDO DNAT ............................................................................................... 1056.4.4.1 Redirecionamento de portas .......................................................................... 1056.4.5 MONITORANDO CONEXÕES FEITAS NA TABELA NAT .......................................... 1066.5 A TABELA MANGLE ............................................................................................. 1066.5.1 ESPECIFICANDO O TIPO DE SERVIÇO................................................................... 1066.5.1.1 Especificando o TOS para tráfego de saída................................................... 1076.5.1.2 Especificando o TOS para o tráfego de entrada ............................................ 1076.6 OUTROS MÓDULOS DO IPTABLES ........................................................................ 1076.6.1 CONFERINDO DE ACORDO COM O ESTADO DA CONEXÃO .................................... 1086.6.2 LIMITANDO O NÚMERO DE VEZES QUE A REGRA CONFERE ................................. 1086.6.3 PROTEÇÃO CONTRA PING DA MORTE.................................................................. 1096.6.4 PROTEÇÃO CONTRA SYN FLOOD......................................................................... 1096.6.5 PROTEÇÃO CONTRA IP SPOOFING ...................................................................... 1096.6.6 ESPECIFICANDO MÚLTIPLAS PORTAS DE ORIGEM/DESTINO................................. 1106.6.7 ESPECIFICANDO O ENDEREÇO MAC DA INTERFACE........................................... 1106.6.8 CONFERINDO COM QUEM CRIOU O PACOTE ........................................................ 1116.7 CAMINHO PERCORRIDO PELOS PACOTES NAS TABELAS E CHAINS .................... 1116.7.1 PING DE 192.168.1.1 PARA 192.168.1.1 ............................................ 1126.7.2 CONEXÃO FTP DE 192.168.1.1 PARA 192.168.1.1 ............................................ 1126.7.3 CONEXÃO FTP DE 192.168.1.1 PARA 192.168.1.4 ............................................ 1136.7.4 CONEXÃO FTP DE 200.217.29.67 PARA FTP.DEBIAN.ORG.BR ................. 1146.7.5 PING DE 192.168.1.4 PARA 192.168.1.1 ............................................................ 1156.7.6 CONEXÃO FTP DE 192.168.1.4 PARA 192.168.1.1 ............................................ 1166.7.7 CONEXÃO FTP DE 192.168.1.4 PARA FTP.DEBIAN.ORG.BR................................ 1176.7.8 CONEXÃO FTP DE 200.198.129.162 PARA 200.217.29.167 .............................. 1186.7.9 GRÁFICO GERAL DA PASSAGEM DOS PACOTES ................................................... 1186.8 EXEMPLOS DE CONFIGURAÇÕES DO IPTABLES................................................... 1196.8.1 BLOQUEANDO CONEXÕES DE FORA PARA SUA MÁQUINA ................................... 1196.8.2 MONITORANDO TENTATIVA DE CONEXÃO DE TROJANS EM SUA MÁQUINA ......... 1196.8.3 CONECTANDO SUA REDE INTERNA A INTERNET ................................................. 1206.8.4 UM EXEMPLO DE FIREWALL SIMPLES ................................................................. 120

7 O PROXY SQUID ................................................................................................ 125

7.1 INTRODUÇÃO....................................................................................................... 1257.2 REQUISITOS BÁSICOS .......................................................................................... 1257.3 O FEIJÃO COM ARROZ......................................................................................... 1267.3.1 INSTALAÇÃO...................................................................................................... 1267.3.2 CONFIGURAÇÃO ................................................................................................ 1277.4 CONTROLANDO OS USUÁRIOS ............................................................................. 128

Page 10: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

10

7.5 EXEMPLOS DE CONFIGURAÇÃO .......................................................................... 1307.5.1 PERMITIR HTTP_ACCESS PARA APENAS UMA MÁQUINA COM MAC ADDRESS IGUALA 00:08:C7:9F:34:41 :.................................................................................................... 1307.5.2 PARA RESTRINGIR ACESSO NAS HORAS DE TRABALHO (9 HORAS - 17 HORAS, DESEGUNDA SEXTA) DA FAIXA DE IP 192.168.2.0 MÁSCARA 255.255.255.0 :................... 1307.5.3 POSSO USAR UMA LISTA DE CONTROLE COM MULTIPLOS HORÁRIOS PARADIFERENTES USUÁRIOS?................................................................................................. 1307.5.4 QUERO CRIAR UMA ACL PARA BLOQUEAR SITES COM A PALAVRA SEXO POIS MEUSFUNCIONÁRIOS FICAM BAIXANDO FILMES EM DIVX DE PORNOGRAFIA:.......................... 1317.5.5 A IDÉIA ACIMA E ÓTIMA, MAS EU TENHO UMA LISTA DE PALAVRAS PARA FAZER OMESMO. TEREI QUE REPETIR ESSE COMANDO VÁRIAS VEZES?........................................ 1317.5.6 AINDA EXISTEM SITES QUE ESCAPAM A ESSE CONTROLE. GOSTARIA DE BLOQUEÁ-LOS DIRETAMENTE......................................................................................................... 1317.5.7 MEU DIRETOR RECLAMA QUE AGORA NÃO CONSEGUE MAIS LER AS ENTREVISTASNO SITE DA PLAYBOY..................................................................................................... 1327.5.8 E UMA LISTA DE DIRETÓRIOS? ........................................................................... 1327.6 RECURSOS NA INTERNET .................................................................................... 132

APÊNDICE A. LICENÇA DE PUBLICAÇÃO LIVRE...................................... 133

Page 11: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

11

1 TCP/IP

O TCP/IP é um protocolo que conecta redes LAN ou WAN, homogêneasou heterogêneas. Ele pode fazer tanto a comunicação entre hosts ponto-a-ponto, como a comunicação entre cliente e servidor.

Existem dois tipos de interação entre aplicações.Comunicação Orientada à Conexão é apropriada quando as aplicações

precisam de uma troca contínua de dados.Em contraste, a Comunicação Não Orientada à Conexão é apropriada

quando as aplicações trocam mensagens isoladas, geralmente comquantidades pequenas de dados.

Para conseguir uma troca de dados confiável entre os nós, sãonecessários vários procedimentos: empacotamento dos dados, determinaçãodo caminho a ser seguido pelos pacotes, transmissão dos dados, adaptação dataxa de transmissão de acordo com a capacidade do destino de receber dados,gerenciamento de erros e retransmissão de dados.

Isso resulta em uma implementação complicada. Para facilitar essatarefa, pode se usar uma implementação modular, agrupando as tarefasrelacionadas em camadas distintas.

Para o TCP/IP foi adotado um modelo de comunicação dividido emcamadas, que depois viria a influenciar o modelo OSI que hoje é consideradopadrão.

Cada camada acrescenta informações de controle ao pacote de dados etransmite seu pacote para a camada inferior, que também adiciona seus dados.

1.1 A camada FísicaA camada física trabalha com a mídia física, conectores, e os sinais que

representam 0 e 1. Por exemplo, um modem padrão V.90 ou V.92implementam as funções da camada física.

Aplicações e

Serviços

UDP

IP

PPP

V.90

Transporte

Rede

Enlace

Físico

Sessão

Apresentação

Aplicação

TCP

Ethernet

Page 12: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

12

1.2 A camada de Enlace de DadosA 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. O protocolo PPP é umexemplo de camada de enlace de dados.

Na camada de Enlace de Dados, os dados são organizados em quadros.

Cada quadro tem um cabeçalho que inclui o endereço e controla ainformação e um trailer que é usado para detecção de erros.

Um cabeçalho de quadro de LAN contém a os endereços “físicos” deorigem e destino, que identificam as placas de rede.

Note que o Enlace pode ser uma rede local ou uma conexão Ponto-a-Ponto.

1.3 A camada de RedeO IP (Internet Protocol) executa as funções da camada de rede. O IP

roteia os dados entre sistemas. Os dados podem atravessar um único enlaceou podem ser retransmitidos por vários enlaces pela internet. As unidades dedados são chamadas datagramas.

Os datagramas têm um cabeçalho IP que contém endereçamento derede. Os roteadores examinam o endereço de destino no cabeçalho IP paradirecionar os datagramas para seu destino.

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 emseqüência dos datagramas.

DadosHeader Trailer

InformaçãoCabeçalho IP

Endereço IP OrigemEndereço IP Destino

Page 13: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

13

1.3.1 O Datagrama IPO cabeçalho de um datagrama IP pode ser visto na figura abaixo:

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, medido em palavras de 32 bits (4bits)

• TOTAL-LENGTH: este campo proporciona o comprimento dodatagrama medido em bytes, incluindo cabeçalho e dados.

• SERVICE-TYPE: este campo especifica como o datagrama poderiaser manejado

• TTL(Time To Live): especifica o tempo que o datagrama estápermitido a permanecer no sistema Internet. Gateways e hosts queprocessam o datagrama devem decrementar o campo TTL cada vezque um datagrama passa por eles e devem removê-lo quando seutempo expirar.

• PROTOCOL: especifica qual protocolo de alto nível foi usado paracriar a mensagem que está sendo transportada na área de dados dodatagrama.

• HEADER-CHECKSUM: assegura integridade dos valores docabeçalho.

• SOURCE AND DESTINATION IP ADDRESS: especifica o endereçoIP de 32 bits do remetente e receptor.

• IDENTIFICATION, FLAGS e FRAGMENTS: estes três camposcontrolam a fragmentação e a união dos datagramas. O campo de

Versão Header Precedência Length of Datagram

Identificação

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

Flags Offset do Fragmento

TTL Protocolo Checksum do Cabeçalho

Endereço IP Origem

Endereço IP Destino

Opções

Dados

Page 14: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

14

identificação contém um único inteiro que identifica o datagrama, éum campo muito importante porque quando um gateway fragmentaum datagrama, ele copia a maioria dos campos do cabeçalho dodatagrama em cada fragmento, então a identificação também deveser copiada, com o propósito de que o destino saiba quaisfragmentos pertencem a quais datagramas. Cada fragmento tem omesmo formato que um datagrama completo.

• FRAGMENT OFFSET: especifica o início do datagrama original dosdados que estão sendo transportados no fragmento. É medido emunidades de 8 bytes.

1.3.2 Fragmentação dos DatagramasAo realizar trocas de pacotes, os aplicativos da Internet se deparam com

um problema: A diferença do tamanho das mensagens nas diversas redes.Nesse caso, o protocolo IP suporta o processo de fragmentação, onde osdatagramas são divididos em unidades menores.

O procedimento de fragmentação é realizado por um gateway, onde asmensagens são partidas em unidades menores e adequadamenteidentificadas. a estação destino então reagrupará as instruções baseado nasidentificações do gateway.

Na identificação dos fragmentos o gateway cria um header para cadafragmento.O header contém os endereços iniciais das redes e umaidentificação referente à mensagem a qual faz parte.

Já na fase de reagrupamento, a estação destino, ao receber o primeirofragmento, independentemente de estar na ordem correta, aciona um timer. Seuma margem de tempo padrão for ultrapassada e a mensagem não estivercompletamente recontituida, a estação destino descarta os fragmentosrecebidos e retorna à origem uma mensagem de erro.

1.4 Camada de Transporte

1.4.1 TCPO TCP (Transmission Control Protocol) proporciona conexões de dados

confiáveis para as aplicações. O TCP conta com mecanismos que garantemque os dados são entregues às suas aplicações locais:

• Íntegros

• Em seqüência

• Completos

• Sem duplicatasOs mecanismos básicos que o TCP usa para conseguir isso são:

• Numeração dos segmentos

Page 15: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

15

• Estabelecimento de Timeout

• Retransmissão dos segmentosO lado que recebe os dados deve colocá-los em na seqüência correta,

descartando duplicatas e confirmando o recebimento dos mesmos.O TCP é implementado apenas nos hosts. O TCP é um protocolo full-

duplex, ou seja, ambos os lados podem enviar dados ao mesmo tempo.O TCP adiciona um cabeçalho ao pacote de dados da aplicação,

formando um segmento.O TCP passa os segmentos ao IP, que então roteia os mesmos até seu

destino. O TCP aceita segmentos do IP, determina qual aplicação é o destino,e passa os dados para a aplicação apropriada.

1.4.1.1 O pacote TCP

Os campos do cabeçalho têm o seguinte significado:

• Porta Origem e Destino: estes campos no cabeçalho TCP contêm osnúmeros de portas TCP que identificam os programas de aplicaçãodos extremos de uma conexão.

• Número de sequência (32 bits): identifica a posição no fluxo de bytesdo segmento enviado pelo transmissor.

• Número de Reconhecimento (32 bits): este campo identifica aposição do byte mais alto (ou último byte) que o fonte recebeu.

Porta Origem Porta Destino

Número de Seqüência

Número de Reconhecimento

Window

Urgent PointerChecksum

Opções

FlagsReservadoOffset

Dados

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

Page 16: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

16

• Offset: contém um inteiro que especifica o início da porção de dadosdo segmento. Este campo é necessário já que o campo Options variaem comprimento dependendo de quais opções tenham sidoincluídas.

• Reserv: reservado para uso futuro.

• Flags (6 bits): determina o propósito e conteúdo do segmento,codificado assim:

o URG - Campo de ponteiro Urgente é válidoo ACK - Campo de Reconhecimento é válidoo PSH - Este segmento solicita um PUSHo RST - Reset da conexãoo SYN - Sincroniza numeros de sequênciaso FIN - O transmissor chega ao fim do fluxo de bytes.

• WINDOW: através deste campo o software TCP indica quantosdados ele tem capacidade de receber em seu buffer.

• URGENT POINTER: TCP através deste campo permite que otransmissor especifique que alguns dados são urgentes, isto significaque os dados serão expedidos tão rápido quanto seja possível.

• OPTIONS: o software TCP usa este campo para se comunicar com osoftware do outro extremo da conexão.

• CHECKSUM: é usado para verificar a integridade tanto do cabeçalhocomo dos dados do segmento TCP.

1.4.2 UDPO UDP não faz nenhuma garantia quanto à entrega dos dados, e é

dever da aplicação trocar informações que confirmem a chegada dos dados. OUDP é implementado apenas nos hosts.

Com o UDP (User Datagram Protocol), uma aplicação manda umamensagem isolada para outra aplicação. O UDP adiciona um cabeçalho,formando um datagrama UDP.

O UDP passa os segmentos ao IP, que então roteia os mesmos até seudestino. O UDP aceita segmentos do IP, determina qual aplicação é o destino,e passa os dados para a aplicação apropriada.

1.4.3 ICMPO IP tem um projeto simples e elegante. Em condições normais, o IP faz

um uso muito eficiente da memória e recursos de transmissão.

Como IP provê um serviço de expedição de datagramas sem conexão enão confiável, 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; é

Page 17: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

17

necessário um mecanismo que emita informações de controle e de errosquando acontecerem problemas na rede. Alguns dos problemas típicos quepodem acontecer são:

• Um gateway não pode expedir ou rotear um datagrama;

• Um gateway detecta uma condição não usual, tal comocongestionamento.

O mecanismo de controle que emite mensagens quando acontece algumerro é a função principal do protocolo ICMP. O ICMP permite aos gatewaysenviar mensagens de erros ou de controle a outros gateways ou hosts. ICMPprovê comunicação entre o software de IP numa máquina e o software de IPnuma outra máquina.

Tabela 1-1 Mensagens ICMP

Tipo Mensagem0 Echo Reply3 Destination Unreachable4 Source Quench

5 Redirect8 Echo

11 Time Exceeded

12 Parameter Problem13 Time Stamp14 Time Stamp Reply

ICMP somente reporta condições de erros à fonte original. A fonte deverelatar os erros aos programas de aplicação individuais e tomar ação paracorrigir o problema. Uma das mensagens que o ICMP pode enviar é:Destination Unreachable, o qual, por sua vez pode ser dos seguintes tipos:

• Network Unreachable (rede 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.5 Montagem dos pacotesNa maioria das redes, a informação é dividida em várias partes,

chamadas de pacotes, por duas razões: compartilhamento de recursos edetecção/correção de erros.

Page 18: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

18

Obviamente não é justo que um único usuário da domine os recursos darede por muito tempo. Com a divisão da informação em pacotes, cada um dospacotes pode ser enviado/recebido individualmente, permitindo assim queoutros pacotes possam trafegar pela rede. Isso possibilita umcompartilhamento justo dos recursos.

Na maioria dos casos, os dispositivos são conectados através de cabos.Em alguns casos, usa-se ondas de rádio ou mesmo luz infravermelha. Ambasas formas de conexão física estão sujeitas a interferências, que podemcorromper os dados que trafegam na rede. Grande parte do trabalho complexoem redes é detectar e solucionar os erros no tráfego dos dados.

A maioria das técnicas de detecção e correção de erros é baseada nouso de checksums. Quando a informação é enviada, é anexado em seu finalum número indicando a soma de todos os bytes da mesma. Na recepção, essenúmero é comparado com a soma dos dados recebidos. Se houver diferença,a informação está corrompida e deve ser retransmitida.

Caso o bloco de dados seja muito grande, o reenvio vai tomar muitotempo, degradando a performance da rede. Para minimizar este problema,divide-se a informação em pacotes. Se houver algum erro, basta retransmitirapenas os pacotes corrompidos.

1.6 RoteamentoO TCP/IP pode ser usado em redes locais e para interligação de redes.

As diversas redes locais conversam através dos roteadores. Pode haver maisde um caminho entre dois pontos.

Dados FrameTrailer

TCP/UDPHeader

IPHeader

FrameHeader

DadosTCP/UDPHeader

IPHeader

DadosUDPHeader

DadosAplicaçaoDados

TransporteDatagrama UDP

RedeDatagrama

EnlaceQuadro

DadosTCPHeader

TransporteSegmento TCP {

Page 19: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

19

As redes isoladas são conectadas por meio de Roteadores IP.Roteadores modernos são equipados com vários slots que podem receberdiferentes tipos de adaptadores de rede: Ethernet, Token-Ring, FDDI, PPP, etc.

O software de IP roda nos hosts e nos roteadores.

• Se o destino está no mesmo enlace, manda-se o datagramadiretamente para ele;

• Se o destino não está no mesmo enlace, manda-se o pacote para oroteador local;

• Se o destino não estiver no mesmo enlace do roteador, este irárepassá-lo ao próximo roteador. Este processo continua até que odestino seja atingido.

Pode ser útil ilustrar isto com um exemplo. Imagine um simples roteadorde escritório, ele pode ter um link intermitente com a Internet, um número desegmentos Ethernet alimentando as estações de trabalho e outro link PPPintermitente fora de outro escritório. Quando o roteador recebe um datagramade qualquer de suas conexões de rede, o mecanismo que usa determina qual a

próxima interface deve enviar o datagrama. Computadores simples tambémprecisam rotear, todos os computadores na Internet têm dois dispositivos derede. Um é a interface loopback (explicada acima), o outro é usado para falarcom o resto da rede, talvez uma interface Ethernet, talvez uma interface serialPPP ou SLIP.

Cada computador mantém uma lista de regras especiais de roteamento,chamada tabela de roteamento. Esta tabela contém colunas que tipicamentecontém no mínimo três campos, o primeiro é o endereço de destino, 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

RedeLocal

Internet

Roteador Nó

RoteadorRoteador

Page 20: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

20

seu próximo passo através da rede. No GNU/Linux você pode ver a tabela deroteamento usando um dos seguintes comandos:

cat /proc/net/routeroute -nnetstat -r

O processo de roteamento é muito simples: um datagrama (pacote IP) érecebido, o endereço de destino (para quem ele é) é examinado e comparadocom cada item da tabela de roteamento. O item que mais corresponder com oendereço é selecionado e o datagrama é direcionado a interface especificada.

Se o campo gateway estiver preenchido, então o datagrama édirecionado para aquele computador pela interface especificada, caso contrárioo endereço de destino é assumido sendo uma rede suportada pela interface.

Em uma LAN pequena, as tabelas de roteamento podem ser feitasmanualmente. Em redes maiores, os roteadores mantém suas tabelasatualizadas trocando informações entre si. Roteadores podem descobrireventos como:

• Uma nova rede adicionada a internet;

• Um caminho foi interrompido, e um destino não pode ser atingido;

• Uma nova rota foi estabelecida para um destino.Não existe um padrão único para troca de informação entre roteadores.

A liberdade de escolha do protocolo estimulou a competição e levou a grandesmelhorias nos protocolos.

Os protocolos de roteamento mais usados são o RIP e o OSPF.

1.6.1 ReempacotamentoExiste um evento olímpico onde um competidor nada uma parte do

percurso, pega uma bicicleta e pedala outra parte, e corre uma terceira etapa.O IP funciona da mesma maneira. O datagrama foi projetado para poder sermudado de uma mídia para outra até chegar ao seu destino.

Antes de um datagrama ser transmitido por um enlace, ele éempacotado em um quadro apropriado para o enlace. Quando um roteadorrecebe o quadro:

• O roteador desempacota o quadro e extrai o datagrama

• O roteador analisa o endereço de destino e descobre a mídia dopróximo trecho

• O roteador reempacota o datagrama em um novo quadro, apropriadopara o próximo laço

Page 21: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

21

Exercícios1. Em que nível de TCP/IP rodam o telnet e o ftp?

a) Físicob) Sessãoc) Aplicaçãod) Transportee) Enlace

2. Qual das seguintes aplicações não usa o protocolo UDP?a) TFTPb) DNSc) RPCd) FTPe) SNMP

Page 22: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

22

2 ENDEREÇAMENTO

Em uma rede, o endereço de um dispositivo é uma forma de identificaresse dispositivo como sendo único. Normalmente, os endereços de redepossuem um formato padronizado e bem definido.

2.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, sendo que cada adaptador temum endereço que o identifica como único. Cada fabricante tem um código queo diferencia dos demais.

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, os demais contêm omodelo e número serial do adaptador de rede.

2.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 estação deve ser atribuído um endereço IPexclusivo.

Um endereço IP é um número de 32 bits. Este tamanho foi escolhidopara caber convenientemente em um registrador de 32 bits. O espaço deendereçamento resultante possui 232 (ou 4.294.967.296) números possíveis.

A notação de ponto foi inventada para facilitar a leitura e escrita dosnúmeros IP. Cada octeto do endereço é convertido para um número decimal, eos números são separados por pontos. Por exemplo, o endereço da estaçãoblintz.med.yale.edu é 130.132.19.31.Em redes roteadas, o endereço écomposto de pelo menos dois números: o da rede e o do nó. Se doisdispositivos possuírem endereços com o mesmo número de rede, então elesestão localizados na mesma rede. Do contrário, estão em redes distintas, masunidas através de um roteador. O número que irá diferencia-los dentro destarede é o número do nó.

Os endereços IP são números que identificam seu computador em umarede TCP/IP. Inicialmente você pode imaginar o IP como um número detelefone. O IP é composto por quatro bytes e a convenção de escrita dosnúmeros é chamada de "notação decimal pontuada". Por convenção, cadainterface (placa usada p/ rede) do computador ou roteador tem um endereçoIP. Também é permitido que o mesmo endereço IP seja usado em mais deuma interface de uma mesma máquina, mas normalmente cada interface temseu próprio endereço IP.

As Redes do Protocolo Internet são seqüências contínuas de endereçosIP. Todos os endereços dentro da rede têm um número de dígitos dentro dos

Page 23: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

23

endereços em comum. A porção dos endereços que são comuns entre todosos endereços de uma rede é chamada de porção da rede. O conjunto dosdígitos restantes é chamado de porção dos hosts. O número de bits que sãocompartilhados por todos os endereços dentro da rede é chamado de netmask(máscara da rede) e o papel da netmask é determinar quais endereçospertencem ou não a rede. Por exemplo, considere o seguinte:

Tabela 2-1 Formação de Endereços IP

Endereço do Host 192.168.110.23

Máscara da Rede 255.255.255.0

Porção da Rede 192.168.110.

Porção do Host .23

Endereço da Rede 192.168.110.0

Endereço Broadcast 192.168.110.255

Qualquer endereço que é finalizado em zero em sua netmask revelará oendereço da rede a que pertence. O endereço de rede é então sempre omenor endereço numérico dentro da escalas de endereços da rede e semprepossui a porção host dos endereços codificada como zeros.

O endereço de broadcast é um endereço especial que cada computadorem uma rede "escuta" em adição a seu próprio endereço. Este é um endereçoonde os datagramas enviados são recebidos por todos os computadores darede. Certos tipos de dados, como informações de roteamento e mensagensde alerta, são transmitidos para o endereço broadcast, assim todo computadorna rede pode recebê-las simultaneamente.

Existem dois padrões normalmente usados para especificar o endereçode broadcast. O mais amplamente aceito é para usar o endereço mais alto darede como endereço broadcast. No exemplo acima este seria192.168.110.255. Por algumas razões outros sites têm adotado a convençãode usar o endereço de rede como o endereço broadcast. Na prática nãoimporta muito se usar este endereço, mas você deve ter certeza que todocomputador na rede esteja configurado para escutar o mesmo endereçobroadcast.

2.2.1 MultihomingOs sistemas não tem endereços IP, as suas interfaces é que os têm.

Um roteador com quatro interfaces de rede precisa de quatro endereços IP.Um sistema que está ligado a mais de uma sub-rede é chamado de

multihomed.Classes de Rede IPPor razões administrativas após pouco tempo no desenvolvimento do

protocolo IP alguns grupos arbitrários de endereços foram formados em redese estas redes foram agrupadas no que foram chamadas de classes. Estasclasses armazenam um tamanho padrão de redes que podem ser usadas. Asfaixas alocadas são:

Page 24: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

24

Tabela 2-2 Classes de Endereçamento

ClasseBits Mais

SignificativosMáscara de

RedeEndereços Possíveis

na RedeA 00000 255.0.0.0 0.0.0.0 – 127.255.255.255

B 10000 255.255.0.0 128.0.0.0 - 191.255.255.255

C 11000 255.255.255.0 192.0.0.0 - 223.255.255.255

D 11100 240.0.0.0 224.0.0.0 - 239.255.255.255

E 11110 240.0.0.0 – 255.255.255.255

2.2.3 Endereços reservados para uso em Redes PrivadasSe você estiver construindo uma rede privada que nunca será conectada

a Internet, então você pode escolher qualquer endereço que quiser. Noentanto, para sua segurança e padronização, existem alguns endereços IP'sque foram reservados especificamente para este propósito. Eles estãoespecificados no RFC1597 e são os seguintes:

Tabela 2-3 Endereços IP Reservados Para Redes Privadas

Classe Máscara de Rede Endereços Possíveis na RedeA 255.0.0.0 10.0.0.0 - 10.255.255.255

B 255.255.0.0 172.16.0.0 - 172.31.255.255

C 255.255.255.0 192.168.0.0 - 192.168.255.255

Você deve decidir primeiro qual será a largura de sua rede e entãoescolher a classe de rede que será usada.

Pode-se obter um software de Proxy que repassa a informação entre oscomputadores internos e o mundo exterior através do endereço de Classe Cregistrado.

2.2.4 Endereços EspeciaisNem todos os números podem ser atribuídos a uma sub-rede ou

estação. Por exemplo, alguns endereços são reservados para broadcast,outros são reservados para tabelas de roteamento.

2.2.4.1 O endereço de RedeSe um número IP tiver todos os bits da estação em 0, ele se refere à

rede, e não à uma estação específica. Por outro lado, se os bits da sub-redefossem todos 0, a identificação seria ambígua, por isso essa combinação éinválida.

Page 25: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

25

2.2.4.2 O endereço de BroadcastO endereço IP 255.255.255.255 é reservado para broadcast para todos

os sistemas no link local.Se os bits da estação forem todos 1, é feito um broadcast para a sub-

rede correspondente. Por exemplo, o Endereço 192.18.7.255 significa umbroadcast para a rede 192.18.7.0.

Se os bits da estação e sub-rede forem todos 1, é feito um broadcastpara todas as estações da rede indicada.

Um boa regra é nunca usar endereços de rede ou estação cujos bitssejam todos iguais (0 ou 1). Daí pode-se deduzir que um campo nunca pode termenos do que 2 bits.

2.2.4.3 O endereço de LoopbackNo extremo oposto do broadcast, existem mensagens que nunca deixam

a estação local. Existem muitas estações que contém processos clientes eservidores. Os clientes locais comunicam-se com o servidor por IP. Para fazerisso, eles geralmente usam um endereço especial chamado Endereço deLoopback. Por convenção, qualquer endereço começando com 127 éreservado para esse propósito. Na prática, apenas o endereço 127.0.0.1 éusado.Divisão em sub-redes

Uma rede de Classe A tem 16.777.216 endereços, uma rede de ClasseB suporta 65.536 e uma de Classe C apenas 256. A grande diferença entreesses números levam à uma alocação muito ineficiente dos blocos e contribuipara o esgotamento dos endereços IP.

Por outro lado, uma organização com um endereço de classe C só temum espaço de endereçamento de 1 byte. Pode ser feito então a divisão de 4bits para o endereço de sub-rede e 4 bits para o endereço dosistemaMáscaras de Sub-Rede

O tráfego é roteado para uma estação olhando para as partes de rede esub-rede do seu endereço IP. Um endereço de Classe A, B ou C tem a partede rede com tamanho fixo. Mas em organizações que escolhem os seuscampos de sub-rede, como as estações e roteadores reconhecem o campo?

A resposta é que os sistemas tem que ser configurados para conhecer otamanho da parte de sub-rede do endereço. O tamanho do campo da sub-redeé armazenado em um parâmetro chamado Máscara de Sub-rede, ou SubnetMask. É uma seqüência de 32 bits, onde os bits correspondentes à rede e sub-rede são setados em 1, e os bits do sistema são setados em 0.

Por exemplo, se quisermos usar o terceiro byte de um endereço classeC para indicar a sub-rede, a máscara seria:11111111 11111111 11111111 00000000

As máscaras geralmente são expressas usando a notação decimal,então a máscara acima seria escrita como 255.255.255.0.

Já no caso de querermos dividir um endereço Classe C usando 4 bitspara o campo da sub-rede, a máscara ficaria assim:

Page 26: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

26

11111111 11111111 11111111 11110000

Ou, na forma decimal, 255.255.255.240.Bits de

Sub-RedeNúmeros deSub-Rede

Bits daEstação

Número deMáquinas Máscara

0 0 8 254 255.255.255.0

1 2 7 128 255.255.255.128

2 4 6 62 255.255.255.192

3 8 5 30 255.255.255.224

4 16 4 14 255.255.255.240

5 32 3 6 255.255.255.248

6 64 2 2 255.255.255.252

7 - 1 - Inválido

A tabela acima mostra as várias maneiras em que um endereço local declasse C pode ser dividido. Ele também mostra o número de sub-redes eestações para cada partição. O número de sub-redes e estações é menor doque o que se espera porque alguns endereços são reservados para propósitosespecíficos.Super-Redes e CDIR

O método de atribuir blocos de endereços de classe A, B e C era muitoineficiente. Um bloco de Classe C proporciona 254 endereços, que pode sermuito ou pouco, dependendo do tamanho da organização. Pode haverescassez ou desperdício de endereços.

Faria mais sentido atribuir às organizações o número de bits que elasrealmente precisam. Isso é feito facilmente. Se uma organização precisa de4000 endereços, ela ganha 12 bits para usar como parte local de seuendereçamento. Os 20 bits restantes são o prefixo, usado como endereço desuper-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 declasse C.

Para rotear para uma organização, o roteador precisa saber o númerode 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 únicaentrada na tabela de roteamento. Isto é chamado Classless Internet-DomainRouting (CDIR).Referência rápida de máscara de redes

A tabela abaixo faz referência às máscaras de rede mais comuns e aquantidade de máquinas máximas que ela atinge. Note que a especificação damáscara tem influência direta na classe de rede usada:

Máscara(octal)

Máscara(32 bits)

Número deMáquinas

Classe A:

/8 /255.0.0.0 16,777,214/9 /255.128.0.0 8,388,606/10 /255.192.0.0 4,194,302

Page 27: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

27

/11 /255.224.0.0 2,197,150/12 /255.240.0.0 1,048,574/13 /255.148.0.0 524,286/14 /255.252.0.0 262,142/15 /255.254.0.0 131,070Classe B:

/16 /255.255.0.0 65,534/17 /255.255.128.0 32,766/18 /255.255.192.0 16,382/19 /255.255.224.0 8,190/20 /255.255.240.0 4,094/21 /255.255.248.0 2,046/22 /255.255.252.0 1,022/23 /255.255.254.0 510Classe 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 classeA), deverá ser redimensionada com uma calculadora de IP para chegar a umnú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çãoatravés do uso do conceito de portas (ou ports).

A porta é um número de 16 bits que identifica processos (ou serviços derede). O número da porta de origem e o número da porta de destino estão

IP

TCP UDP

Portas

Ap.23

Ap.53

Ap.161

Ap.80

Page 28: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

28

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 deporta, e identifica um processo como único na rede.

Exercícios1. O que significa a sigla MAC?

a) Media Assynchronous Connectionb) Master Assynchronous Connectionc) Media Access Connectiond) Media Access Controle) Master Access Control

2. Que endereço de rede não é roteado na internet?

a) 128.9.0.0b) 10.0.0.0c) 191.168.72.0d) 171.20.20.0e) 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.255b) 0.0.0.0, 0.0.0.255, 0.0.255.255c) 255.0.0.0, 255.255.0.0, 255.255.255.0d) 0.0.0.0, 255.0.0.0, 255.255.0.0e) 255.255.255.0, 255.255.0.0, 255.0.0.0

Page 29: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

29

3 CONECTANDO REDES

Adaptado dehttp://www.conectiva.com/doc/livros/online/8.0/servidor/conectividade.html#CONECTANDO-

REDESA criação de grandes redes de computadores é possível graças à

interligação de pequenas redes de computadores. No entanto, essa divisão deredes em pequenas unidades gera a necessidade de se criar meios quepermitam que essas unidades sejam capazes de se conectar e trocarinformações.

Além dos meios físicos (cabos, hubs, roteadores, etc.) são necessáriostambém os meios lógicos que permitam essa troca de informação. Serãoestudados a seguir os conceitos básicos sobre roteamento, e em seguida serávisto um tipo particular de roteamento chamado NAT (Network AddressTranslation).

3.1 RoteamentoPara entender melhor como funciona o processo de transmissão de um

pacote de dados dentro de uma rede, pode ser feita uma analogia com oprocesso de uma ligação telefônica. Ao se discar o número do telefone comquem se deseja falar, a sua central telefônica verifica se o número estáconectado a ela, se não estiver ela "encaminha" a sua ligação para outracentral que por sua vez faz o mesmo teste, até chegar a central onde selocaliza o número de destino. Os códigos de país, área e o prefixo do telefonesão utilizados para determinar para qual central sua ligação deve serencaminhada. Cada central por onde a ligação passa, além de decidir paraonde encaminhar a ligação, funciona também como uma espécie deretransmissora ao receber sua ligação de uma central e repassá-la para outra.

Um processo bastante semelhante acontece em uma rede decomputadores, ou seja, quando um computador tenta se comunicar com outroque não esteja diretamente ligado a ele (ou em sua sub-rede), ele deve enviarseus datagramas para uma máquina especial, ligada a duas ou mais redes eque encaminhará os datagramas para o destino. Essa máquina especial recebeo nome de gateway ou roteador, e ao processo de decidir para onde repassaros datagramas chamamos de roteamento.

A idéia básica do roteamento é a criação de regras que estabeleçam quecaminho um datagrama deve tomar baseado no endereço de destino dele. Emuma máquina cliente essa regra é bastante simples: tudo que não for para arede local deve ser enviado para a máquina gateway (essa regra é chamadarota padrão). Já em uma máquina gateway podem ser necessárias muito maisregras, principalmente se essa máquina está conectada a um grande númerode redes.

3.1.1 Rotas estáticas e dinâmicasExistem dois tipos de rotas que podem ser utilizadas por um roteador:

rotas estáticas e dinâmicas. As rotas estáticas são explicitamente configuradas

Page 30: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

30

pelo administrador, enquanto que as rotas dinâmicas podem ser "aprendidas"através da utilização de um serviço especial para esse fim.

As rotas dinâmicas utilizam protocolos especiais como o RIP (RoutingInformation Protocol), OSPF (Open Shortest Path First) e BGP (BorderGateway Protocol) para divulgar e aprender rotas. O Linux possui o serviçorouted que é capaz de utilizar estes protocolos.

As rotas estáticas podem ser configuradas com o auxílio do Linuxconf, enão necessitam de nenhum serviço adicional. Será visto aqui apenas aconfiguração de rotas estáticas, já que a utilização de rotas dinâmicasnormalmente só é necessária em grandes redes e Sistemas Autonômos (AS).

3.1.2 GatewayUm gateway ou roteador funciona como uma porta de saída de uma

rede; ele é um máquina equipada com duas ou mais interfaces ou dispositivosde rede e é capaz de fazer o repasse de datagramas para fora ou para dentroda rede.

Essa máquina possui diferentes números IPs associados a cadainterface. O Linux é capaz de decidir automaticamente por qual interface derede ele deve enviar datagramas baseado nos IPs de cada interface e nadefinição da rota padrão.

Existem alguns casos nos quais é necessário informar ao seu gatewaycomo alcançar uma determinada rede, por exemplo, no caso dessa rede estarpor trás de um outro gateway. Para esses casos especiais é necessário inseriruma rota estática para esta rede (caso não se esteja usando um serviço derotas dinâmicas).

3.2 NetfilterO kernel do Linux possui recursos bastante sofisticados para filtrar e

transformar pacotes IP. Esses recursos, agrupados sob o nome de netfilter,podem ser configurados com o auxílio do comando iptables. O netfilter permitea construção de firewalls e de gateways com NAT (Network AddressTranslation). O site oficial do netfilter é http://netfilter.gnumonks.org/.

• Serão estudados aqui os conceitos básicos do netfilter e como utilizar orecurso de NAT.

Page 31: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

31

3.2.1 Anatomia do netfilterO netfilter possui um conjunto de ganchos (também chamados de

cadeias ou chain) em vários pontos da pilha de um protocolo (será consideradoaqui somente o protocolo IPv4). Cada gancho é um ponto no caminho que umpacote IP percorre ao entrar ou sair de uma máquina, conforme a figura abaixo:

O gancho PRE-ROUTING está ligado à entrada de pacotes na máquina;após a decisão de roteamento os pacotes que não são destinados à máquinalocal atravessam o gancho FORWARD e finalmente saem da máquinapassando pelo gancho POST-ROUTING. O gancho INPUT é atravessado pelospacotes que chegam com destino à máquina local enquanto que o ganchoOUTPUT é utilizado pelos pacotes originados na máquina local.

Para filtrar ou transformar pacotes IP, o netfilter possui estruturaschamadas tabelas, que se ligam a conjuntos de ganchos. Essas tabelas sãoimplementadas através de módulos do kernel. Por padrão o kernel possui trêstabelas: filter, nat e mangle.

Cada tabela possui regras ligadas a cada um dos ganchos usados porela. Estas regras podem ser criadas pelo administrador, de acordo com suasnecessidades (isto é, um firewall, NAT, etc.). Cada regra especifica um padrãoou critério a ser comparado com pacotes IPs e um alvo, ou o que fazer comcada pacote que casa com o padrão especificado. Os alvos podem ser açõespré-definidas de cada tabela, como por exemplo, DROP ou MASQUERADE,que, respectivamente, descartam ou mascaram um pacote, ou ainda uma outraregra.

A tabela nat, que será utilizada a seguir, está ligada aos ganchos PRE-ROUTING, POST-ROUTING e OUTPUT.

3.2.2 NATOs números IPs da Internet são finitos e cada número deve ser único. O

crescimento explosivo da Internet tem transformado estes números em um

Figura 3-1Estrutura do Netfilter

Page 32: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

32

recurso escasso, 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. Logo, emmuitos casos não se justifica construir redes locais utilizando-se números IPsválidos.

Como alternativa certos intervalos de números IPs são consideradosinválidos, isto é, não são utilizados na Internet, permitindo assim que elespossam ser utilizados em intranets sem problemas, ou seja, várias intranetspodem utilizá-los desde que não estejam diretamente conectadas umas àsoutras. No entanto, isso cria um dilema: como conectar uma intranet que utilizanúmeros IPs inválidos à Internet?

A resposta a essa pergunta é através da utilização de um roteador quepossua um número IP válido e que seja capaz de fazer uma tradução deendereços de rede (NAT). Para entender melhor o que isso significa considereo seguinte cenário: uma rede local ligada à Internet através de um roteadorcom conexão discada. Ao se conectar na Internet, a máquina gateway recebeum número IP válido do provedor de acesso. Quando uma máquina da intranetprecisa se conectar a um site (por exemplo), ela envia seus pacotes IPs com arequisição à máquina gateway, que por sua vez altera os cabeçalhos destespacotes inserindo o número IP que ela recebeu do provedor e os envia atravésde sua conexão. O site responde à requisição enviando a resposta para amáquina gateway que altera novamente os cabeçalhos dos pacotes e os enviaà máquina que originalmente os requisitou. Dessa forma, cada máquina daintranet se comporta como se estivesse ligada diretamente à Internet, enquantoque as várias máquinas na Internet "enxergam" apenas a sua máquinagateway.

3.2.2.1 Tipos de NATÉ possível dividir o NAT em dois tipos: o NAT de origem (SNAT) e o NAT

de destino (DNAT).O NAT de origem é quando você altera o endereço de origem de um

pacote, isto é, a conexão passa a ter um outro endereço de origem. Esse tipode NAT é sempre criado utilizando-se o gancho POSTROUTING, logo antes dopacote sair da máquina. O mascaramento (como é também conhecido) é umaforma de SNAT.

O NAT de destino se caracteriza pela alteração do endereço de destinodo pacote, isto é, alterando o destino de uma conexão que passa pelamáquina. Este tipo de NAT é sempre criado utilizando-se o gancho PRE-ROUTING. Balanceamento de carga, proxys transparentes e repasse de portassão tipos de DNAT.

3.2.3 Implementação de um serviço NATUm serviço de NAT é necessário em soluções de Conexão Discada,

mas pode ser utilizado também como uma forma de aumentar a segurança deuma intranet, uma vez que ele "esconde" as máquinas da rede mostrando parao resto do mundo apenas a máquina gateway.

Page 33: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

33

4 VULNERABILIDADES NO PROTOCOLO TCP/IP

Ultimamente temos presenciado um novo fenômeno no undergrounddigital. O fenômeno em si não é novo, mas tornou-se muito fácil acessar asferramentas necessárias para fazer más ações, temos experimentado muitasinstâncias.O fenômeno é conhecido por diferentes nomes (Smurph, Land,Bonk,etc). O intuito de todos, contudo, é o mesmo: impedir computadoresdesabilitando seu uso como pretendido.

Esse capítulo tenta explicar esses ataques.

4.1 Disponibilidade dos dadosPodemos dividir a segurança dos dados em três partes diferentes:

integridade, confidencialiade e disponibilidade. Se alguém, que não éautorizado, gerencia e muda seus dados, a integridade é comprometida. Vocênão poderá mais acreditar que o valor dessa informação é verdadeiro.

A confidencialidade da sua informação é comprometida se uma pessoafor capaz de entrar no seu computador. Se puder conhecer uma informação aqual não se pretendia que essa pessoa conhecesse. Ela poderá tambémdistribuir a informação.

A última categoria - disponibilidade - é onde os ataques aqui discutidospertencem. A disponibilidade dos dados é importante no decorrer dos negóciose grandes perdas podem ocorrer se a informação importante não estiverdisponível devido a um ataque contra um computador. Tais ataques sãofrequentemente chamados de "Denial-of-Service" (DoS).

4.2 Sobre o protocolo TCP/IPTodos os ataques discutidos aqui se beneficiam de vulnerabilidades na

implementação do protocolo TCP/IP visando a interrupção da atividade docomputador atacado. Para entender os ataques é necessário umconhecimento básico de como o protocolo foi projetado para funcionar.

TCP/IP é uma abreviação de Transmission Control Protocol/InternetProtocol e é um dos vários protocolos desenvolvidos pelo Departamento deDefesa dos Estados Unidos no final da década de 70. A razão pela qual oprotocolo foi desenhado era a necessidade de construir uma rede decomputadores capaz de se conectar com outra rede do mesmo tipo(roteamento). Essa rede chamou-se ARPANET (Advanced Research ProjectAgency Internetwork), e é a irmã mais nova da Internet.

Antes de ler sobre os ataques, recomendo que você leia a seção sobreTCP/IP.

Page 34: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

34

4.3 IP SpoofingUm ataque spoofing envolve a falsificação do endereço de origem. É o

ato de usar uma máquina para representar o papel de outra. A maioria dasaplicações e ferramentas no UNIX baseam-se na autenticação do IP de origem.Muitos programadores têm usado controle de acesso baseado na máquinapara segurança das suas redes. O endereço IP de origem é um identificadorúnico mas não é fiável. Ele pode facilmente ser forjado (spoofed). Paraentender o processo de spoofing, Primeiro vou explicar o o processo deautenticação do TCP e do IP e depois como um atacante pode enganar asua rede.

O sistema cliente começa por enviar uma mensagem SYN para oservidor. O servidor então confirma a mensagem SYN enviando umamensagem de SYN-ACK para o cliente. O cliente então completaestabelecendo a conexão respondendo com uma mensagem de ACK. Aconexão entre o cliente e o servidor é então aberta, e os dados específicos doserviço podem ser trocado entre o cliente e o servidor. Cliente e servidorpodem agora enviar dados específicos do serviço.

O TCP usa números seqüenciais. Quando um circuito virtual éestabelecido entre duas máquinas, o TCP designa para cada pacote umnúmero com um índice identificador. Amboa as máquinas usam este númeropara verificarem erros e fazerem relatórios.Rik Farrow, no seu artigo "Sequence Number Attacks", explica o sistema denúmeros seqüenciais como sendo o seguinte:

"Os números seqüenciais são usados para confirmar arecepção de dados. No início de uma ligação TCP, o cliente enviaum pacote TCP com uma número seqüencial inicial, mas nenhumreconhecimento. Se existir um servidor de aplicação a correr naoutra ponta da ligação, o servidor envia de volta um pacote TCPcom o seu próprio número seqüencial, e o reconhecimento; onúmero inicial do pacote do cliente mais um. Quando o sistemacliente recebe este pacote, ele deve enviar de volta o seu próprioreconhecimento; a sequência de número inicial do servidor maisum."

Desta forma um atacante tem dois problemas:1) Ele deve falsificar o endereço origem.2) Ele deve manter um número seqüencial com o destino.

A segunda tarefa é a mais complicada porque quando o destino ajusta onúmero seqüencial inicial, o agressor deve responder corretamente. Assim queo agressor adivinhe o número seqüencial correcto, pode então sincronizar como destino e estabelecer uma sessão válida.

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

Page 35: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

35

• Qualquer serviço que use autenticação de endereço IP

• O sistema X Window

• O conjunto de serviços R (rlogin, rsh, etc.)

4.3.2 Medidas para se prevenir de ataques IP Spoofing:• Evite usar autenticação de endereço de origem. Implemente criptografia

na autenticação em todo o sistema.

• Configure a sua rede para rejeitar pacotes de redes externas quedeclaram ser de um endereço local. Isto é geralmente feito com umrouter.

• Se você permitir ligações externas de máquinas seguras, possibiliteencriptação da sessão no router.

4.4 Sobre os ataquesOs ataques descritos nesse documento são apenas alguns dos que

estão disponíveis na Internet. Seu denominador comum é que todos usamvulnerabilidades ou implementações errôneas do protocolo TCP/IP ou ainda,vulnerabilidades na especificação do TCP/IP em si.

Qualquer um mais interessado pode dar uma olhada no sitewww.rootshell.com que descreve vários ataques. Esse site também temlinks para download de programas que protegem contra esses ataques.

Todos os ataques descritos abaixo funcionam em computadores comWindows for Workgroups, Windows 95 ou Windows NT . Podem tambémfuncionar para outros sistemas operacionais. Uma vez mais indicowww.rootshell.com para uma lista completa de ataques que funcionam emdiferentes sistemas operacionais.

4.4.1 SYN FloodingEsta é a família dos ataques DoS (Denial-of-Service) que usa variações

da mesma técnica. O ataque é realizado enviando uma stream de pacotespara o computador alvo requisitando uma conexão (a flag SYN é setada). Acada vez que o computador alvo recebe tal requisição, recursos são alocados -mas nenhuma conexão é efetivada. Quando muitas requisições são recebidaso computador alvo não pode mais alocar recursos para o tráfego da rede -como resultado o computador pode parar.

4.4.2 LandAqui o ataque acontece enviando-se um pacote com a flag SYN setada

(i.e. requisitando a abertura de uma conexão) para qualquer porta da máquina

Page 36: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

36

alvo. O pacote é modificado de tal maneira que os endereços de envio e derecebimento do pacote são idênticos (spoofing). Essa situação não écorretamente manipulada por algumas implementações do TCP/IP - ocomputador pára. Esse ataque é direcionado à porta 139 de máquinasrodando o sistema operacional Windows.

4.4.3 WinNukeO nuke tem sido uma atividade popular, principalmente em escolas.

Esse tipo de ataque é voltado principalmente para computadores rodandoWindows. O efeito principal é o congelamento do computador, que precisa serreiniciado.

A razão pela qual o computador trava é que a Microsoft não manipulaum flag especial de status no protocolo TCP - a flag URG(para urgente). Esseflag é setado em um pacote enviado para um computador rodando um sistemaoperacional Windows. O computador irá esperar por uma stream (cadeia dedados) da chamada Out-of-Band (OOB) banda de tráfego do computador queenvia. Esse tipo de tráfego tem prioridade mais alta que o tráfego ordinário darede. O problema surge quando tais mensagens não são enviadas: ocomputador para. Parece que se trata de resultado de uma má implementaçãodo protocolo TCP/IP da Microsoft, onde essa situação não é tratadasatisfatoriamente.

Esse ataque é muito simples de ser realizado (utiliza um canal legítimo)-tem sido até mesmo implementado com uma linha de código na linguagemPerl. Normalmente, o ataque é direcionado contra a porta 139 (ServiçoNetBIOS Session) do computador.

Por exemplo: suponhamos que um computador com IP 200.133.10.126esteja com a porta 139 aceitando conexões. Na barra de endereços doBrowser, podemos digitar: http://200.133.10.126:139 e se ficarmosatualizando a página, estaremos atacando essa máquina. Um simplesJavaScript pode automatizar essa tarefa.

Felizmente, é fácil proteger um computador contra esse tipo de ataque.A Microsoft desenvolveu patches para download. Quando esse patches sãoinstalados, você está protegido contra esse tipo de ataque.

4.4.4 TearDropEsse ataque utiliza outra vulnerabilidade na implementação do protocolo

TCP/IP. O resultado desse ataque pode variar, mas, normalmente ocomputador trava e precisa ser reiniciado. Os sistemas operacionais maisvulneráveis são Windows(95/98/NT) e Linux.

A razão pela qual o ataque acontece deve-se a um erro em parte doprotocolo TCP/IP que toma conta de pacotes fragmentados. A fragmentaçãodo pacote pode ocorrer se o pacote que está sendo recebido for maior do que otamanho permitido pela rede. Caso positivo, o pacote é dividido em pacotesmenores, consistindo em partes do pacote original. Quando os pacotes

Page 37: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

37

menores chegam ao computador recipiente, ele tenta colocá-los juntos -aquiocorre o erro e o computador pára.

Tecnicamente, o ataque é conduzido mandando uma combinaçãoespecial de dois pacotes UDP/IP. O primeiro tem deslocamento 0, a flag MF(mais fragmentos) setada para 1 e tamanho N. O segundo tem deslocamentomenor que N, flag MF resetada para 0 e tamanho menor que N. O segundopacote sobrepões-se ao primeiro. Uma implementação errônea do TCP/IPinterpreta o fim do pacote antes do seu começo e o computador pára.

4.4.5 NewTearEsse ataque é parecido com o TearDrop. A diferença é o tamanho da

sobreposição dos pacotes (20 bytes, enquanto o TearDrop usa 28) e amanipulação do tamanho do UDP. Esse ataque funciona contra máquinasrodando Windows95/98 e NT mesmo que o patch TearDrop esteja instalado, oque demonstra que a Microsoft não levou as variações do ataque em contaquando o patch foi programado.

4.4.6 Bonk/BoinkOutra variação do ataque TearDrop. O deslocamento do fragmento do

segundo pacote é ajustado para ser maior do que o comprimento do cabeçalhoIP. Semelhante aos outros ataques, o computador pára. Não se sabe porquêesse ataque funciona.

O Bonk ataca a porta 55 das máquinas. O Boink é uma variação doBonk - a diferença é que esse último permite ataques em outras portas, alémda 55.

4.4.7 SspingUma variação do ataque chamado "Ping da Morte". Uma pessoa

manda um pacote ICMP (ECHO_REQUEST) com um tamanho anormal para amáquina alvo. O tamanho máximo para datagramas TCP/IP é 65536 octetos (1octeto = 8 bits). Contudo, é possível mandar datagramas maiores do que otamanho máximo definido. Quando a máquina alvo recebe tal pacote podeparar. Mais uma vez, o erro deve-se a má implementação na secção doTCP/IP que manipula pacotes fragmentados. Um teste simples para testar sevocê é vulnerável é pingar seu próprio computador. Use o comando ping -s65510 seu_ip. Se sua máquina parar você é vulnerável a esse tipo deataque.

4.4.8 SmurfSmurfing é outro tipo de ataque semelhante aos que foram discutidos

aqui. Esse tipo de ataque Smurf pode ser considerado mais perigoso que osoutros.

Page 38: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

38

O ataque Smurf não tem intenção de parar um computador, mas simuma rede inteira. É realizado enviando contínuas stream (cadeias) de pacoteICMP modificados para a rede alvo.

Os pacotes são modificados de modo que o endereço da máquina queenvia os dados é idêntico ao endereço do alvo (spoofing). Além disso, ospacotes são enviados para os chamados endereços broadcast, o que resultaem os pacotes modificados serem enviados para todos os computadores deuma rede. Os computadores dessa rede irão responder enviando umamensagem de ICMP ECHO_RESPONSE para o computador que elesassumem ter enviado a mensagem ( o computador alvo da rede).Se o atacantetiver uma conexão rápida,não é preciso ser um grande matemático para saberque a quantidade de dados gerados pode parar a rede atacada. A rede iráparar até que o atacante pare de enviar os pacotes ou o tráfego sejabloqueado.

Esse tipo de ataque tem sido usado para parar vários Provedores deAcesso à Internet e todos os seus usuários. Efetivamente, é difícil se protegerdesse tipo de ataque.

Page 39: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

39

5 FIREWALL IPCHAINSAdaptado do Linux IPCHAINS-HOWTO, Paul Russell, <[email protected]>,

v1.0.7, 12 March 1999Tradução para o português por Gleydson Mazioli da Silva, <[email protected]>

5.1 IntroduçãoEste é o Linux IPCHAINS-HOWTO; Veja “Onde?” para o ver site

principal, que contém a última cópia. Você também deve ler o Linux NET-3-HOWTO. O IP-Masquerading HOWTO, o PPP-HOWTO, o Ethernet-HOWTO eo Firewall HOWTO que podem ser uma leitura interessante. (Então denovo aFAQ alt.fan.bigfoot).

Se a filtragem de pacotes é passado para você, leia a seção “Porque?”,Seção “Como?” e verifique os títulos na seção “IP Firewalling Chains”.

Se você esta convertendo através do ipfwadm, leia a secao “Introdução”,Seção “Como?”, e os Apêndices da seção “Diferenças entre ipchains eipfwadm” e a seção “Usando o script ipfwadm-wrapper”.

5.1.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,que foi uma regravação do ipfw dos BSD’s, eu acho. É requerido paraadministrar os filtros de pacotes IP nos kernels do linux 2.1.102 e superiores.

5.1.2 Por que?O antigo codigo do firewall do Linux não negociava com fragmentos,

tinha contadores de 32 bits (no Intel no mínimo), não permitia especificação deoutros protocolos senão TCP, UDP ou ICMP, não faziam grandes alteraçõesdinâmicamente, não especificava regras contrárias, possuia alguns truques, e édificil de gerenciar ( podendo causar erros do usuário).

5.1.3 Como?Atualmente o código está no kernel em desenvolvimento do 2.1.192.Para as séries do kernel 2.0, você precisará fazer o download de um

patch da página Internet. Se seu kernel 2.0 é mais recente que o patchfornecido, o patch antigo ser OK; esta parte dos kernels 2.0 é razoavelmenteestável (eg. o patch do kernel 2.0.34 funciona perfeitamente com o kernel2.0.35). Desde então o patch 2.0 é incompatível com patches do ipportfw eipautofw, eu não recomendo aplica-los a não ser que você ralmente necessitada funcionalidade que o ipchains oferece.

Page 40: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

40

5.1.4 Onde?A página oficial é The Linux IP Firewall Chains Page

http://www.rustcorp.com/linux/ipchainsLá existe uma lista de discussão para relatar bugs, discussões,

desenvolvimento e uso. Entre na lista de discussão enviando uma mensagemcontendo a palavra “subscribe” para <[email protected]>. Paraenviar E-Mails para a lista use “ipchains” ao invés de “ipchains-request”.

5.2 Básico sobre a filtragem de pacotes

5.2.1 O que é?Todo o tráfego da rede é enviado em forma de pacotes. Por exemplo,

copiando este pacote (digamos de 50k) pode fazer você receber 36 ou assimpacotes de 1460 bytes em cada um, (puxando números ao acaso).

O inicio de cada pacote diz onde ele esta indo, de onde vem, o tipo dopacote, e outros detalhes administrativos. Isto inicia o pacote e é chamado decabeçalho (head). O resto do pacote que contém o dado atual sendotransmitido, é usualmente chamado de corpo (body).

Alguns protocolos, como TCP, que é usado para o trafego na web, mail,e logins remotos, usam o conceito de “conexão”—antes de qualquer pacotecom os dados atuais serem enviados, vários pacotes de configuração (comcabeçalhos especiais) são trocados dizendo “Eu desejo conectar”, “OK” e“Obrigado”. Então os pacotes normais são trocados.

Uma filtragem de pacotes é uma peça de software que olha nocabeçalho do pacote quando eles passam, e decide o destino de todo o pacote.

Ele pode decidir negar o pacote (DENY - ie. descartar o pacote como seele nunca tivesse o recebido), aceita o pacote (ACCEPT - ie. deixar o pacoteseguir adiante), ou rejeitar o pacote (REJECT - como negar, mas avisa aorigem do pacote sobre o acontecido).

No Linux, a filtragem de pacotes é embutida no kernel, e aqui estãoalgumas coisas que nós podemos fazer com os pacotes, mas o principio geralé de olhar o cabeçalho dos pacotes e decidindo seu destino.

5.2.2 Por que?• Controle: quando você está usando um computador linux para

conectar sua rede interna a outra rede (digo, a Internet) você tem aoportunidade de permitir certos tipos de tráfego, e desativar outros.Por exemplo, o cabeçalho do pacote contém o endereço de destinodo pacote, assim você pode prevenir pacote de irem para certaspartes de fora da rede. Como outro exemplo, eu uso o Netscapepara acessar os arquivos Dilbert. Lá estão anúncios da páginadoubleclick.net, e o Netscape desperdiça partes do meu tempo

Page 41: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

41

copiando-a. Dizendo para o filtro de pacotes não permitir qualquerpacotes para ou de o endereço conhecido por doubleclick.net resolveeste problema (lá estão meios melhores de se fazer isto).

• Segurança: quando um computador linux é a única coisa entre ocaos da Internet e sua bonita e organizada rede, é maravilhosoconhecer como você pode restringir o que vem batendo em suaporta. Por exemplo, você pode permitir ir para fora de sua rede, masvocê pode estar preocupado com os conhecidos “Ping of Death”(ping da morte) que vem de computadores maliciosos de fora. Comooutro exemplo, você pode não desejar que pessoas de foraTELNETiando seu computador linux, embora mesmo que todas suascontas tenham senhas; talvez você deseja (como muitas pessoas)ser um observador na Internet, e não um servidor (legando ou casocontrário) -- simplesmente não deixe ninguém conectar em seucomputador, tendo filtros de pacotes rejeitando pacotes de entradausado para iniciar conexões.

• Vigilância: muitas vezes uma máquina mal configurada na redelocal pode decidir enviar pacotes para fora da rede. É bom dizer aofiltro de pacotes para avisa-lo se alguma coisa de anormal ocorre;talvez você pode fazer alguma coisa sobre isto, ou talvez você estásimplesmente curioso por natureza.

5.2.3 Como?

5.2.3.1 Um kernel com filtragem de pacotesVocê precisará de um kernel que tem o novo IP firewall chains nele.

Você pode ver ser o kernel que está executando tem isto instalado verificandopelo arquivo “/proc/net/ip_FWchains”. Se ele existe, seu kernel tem osuporte.

Caso contrário, você precisará compilar um kernel com o IP firewallchains. Primeiro copie o código fonte do kernel que deseja. Se possui umkernel númerado 2.1.102 ou maior, você não precisará aplicar o patch (está naversão principal do kernel agora). Caso contrário, aplique o patch da páginaweb listada acima, e ajuste a configuração como detalhado abaixo. Se vocênão sabe como fazer isto, sem pânico— leia o Kernel-HOWTO.

As opções de configuração que precisa configurar para os kernels dasérie 2.0 são:

CONFIG_EXPERIMENTAL=yCONFIG_FIREWALL=yCONFIG_IP_FIREWALL=yCONFIG_IP_FIREWALL_CHAINS=y

Para os kernels da série 2.1 ou 2.2:

Page 42: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

42

CONFIG_FIREWALL=yCONFIG_IP_FIREWALL=y

A ferramenta ipchains fala com o kernel e diz a ele quais pacotes filtrar.A não ser que você seja um programador, ou curioso demais, assim vocêcontrolará a filtragem de pacotes.

5.2.3.2 O ipchainsA ferramenta ipchains insere ou deleta regras da seção de filtragem de

pacotes do kernel. Isto quer dizer que qualquer coisa que você configurar, seráperdida na reinicialização; veja “Fazendo Regras Permanentes” para comofazer as regras serem restauradas quando o Linux é iniciado.

O ipchains substitui o ipfwadm, que foi usado pelo antigo código defirewall de IP. Há um conjunto de scripts úteis disponíveis no site ftp doipchains: ftp://ftp.rustcorp.com/ipchains/ipchains-scripts-1.1.2.tar.gz

Este contém um script shell chamado ipfwadm-wrapper que permitefazer a filtragem de pacotes como fez antes. Você provavelmente não deveusar este script a não ser se deseje fazer um método rápido de upgrade em umsistema que usa o ipfwadm (ele é lento, não checa argumentos, etc).

Neste caso, você não precisa muito deste HOWTO.Veja Apêndice “Diferenças entre ipchains e ipfwadm” e Apêndice

“Usando o script ipfwadm-wrapper” para um assunto mais detalhado sobreipfwadm.

5.2.3.3 Fazendo regras permanentesSua configuração atual do firewall é armazenada no kernel, e assim será

perdida na reinicialziação. Eu recomendo usar os scripts “ipchains-save” e“ipchains-restore” para fazer estas regras permanentes. Para fazer isto,configure suas regras, então execute (como root):

# ipchains-save > /etc/ipchains.rules

Crie um script parecido com o seguinte:#! /bin/sh# Script para controlar a filtragem de pacotes.

# Se não existir regras, não faz nada.[ -f /etc/ipchains.rules ] || exit 0

case “$1” instart)echo -n “Ativando a filtragem de pacotes:” /sbin/ipchains-restore </etc/ipchains.rules || exit 1 echo 1 > /proc/sys/net/ipv4/ip_forward echo “.” ;;stop)

Page 43: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

43

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 ACCEPTecho “.” ;; *)echo “Use: /etc/init.d/packetfilter {start|stop}”exit 1 ;;esacexit 0

Tenha certeza que isto está antes no processo de inicialização. No meucaso (Debian 2.1), eu fiz um link simbólico chamado ‘S39packetfilter’ emmeu diretório “/etc/rcS.d” (isto ser executado antes de S40network).

5.3 Roteamento, masquerading, portforwarding, ipautofw...Este HOWTO é sobre filtragem de pacotes. Isto quer dizer decidindo

que pacote terá permissão de passar ou não. No entanto, o Linux está sendoum parque de diversões para hackers, você provavelmente desejará mais doque isso.

Um problema é que a mesma ferramenta (“ipchains”) é usada paracontrolar tanto o masquerading e transparent proxy, embora estejamnacionalmente separados da filtragem de pacotes (a implementação atual doLinux obscurece estes junto não naturalmente, deixando a impressão que elesforam descontinuados).

Masquerading e proxying são discutidos em HOWTOs separados, e ascaracterísticas auto forwarding e port forwarding são controladas porferramentas separadas, mas mesmo assim muitas pessoas me perguntamsobre elas, eu também vou incluir diversos cenários comuns e indicar quandocada um deve ser aplicado. Os méritos de segurança de cada configuraçãonão serão discutidos aqui.

5.3.1 Guia rápido de três linhas para MasqueradingIsto assume que sua interface externa é chamada “ppp0”. Use ifconfig

para acha-la, e ajuste ao guia.

# ipchains -P forward DENY# ipchains -A forward -i ppp0 -j MASQ# echo 1 > /proc/sys/net/ipv4/ip_forward

Page 44: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

44

5.3.2 Configurações de firewall simplesVocê trabalha na littlecorp.com. Você tem uma rede interna, e uma

conexão dialup (PPP) simples com a Internet (firewall.littlecorp.comque é 1.2.3.4). Você usa Ethernet em sua rede local, e sua máquina pessoal échamada “myhost”.

Esta seção ilustrará os diferentes arranjos no qual são comuns. Leiacom atenção porque cada um é sutilmente diferente.

5.3.2.1 Rede PúblicaNeste cenário, sua rede pessoal é uma parte da Internet:pacotes pode seguir sem alterações através de ambas as redes. O

endereço IP da rede interna deve ser escolhido aplicando por um bloco deendereços IP, assim o resto da rede conhecerá como obter pacotes para você.Isto implica em uma conexão permanente.

Neste cenário, a filtragem de pacotes é usada para que pacotes podemser direcionados entre sua rede e o resto da internet, eg. para restringir o restoda internet para somente acessar seus servidores web internos.

Exemplo: Permitindo acesso web de sua rede privada para a Internet.1. Sua rede interna é configurada de acordo com os blocos de

endereçosIP que possui registrados, (digamos 1.2.3.*).2. O firewall está configurado para permitir qualquer tráfego.3. Netscape está configurado para conectar diretamente.4. DNS deve estar configurado corretamente em sua rede.5. O firewall deve ser a rota padrão (gateway) para sua rede privada.

Netscape em myhost lê http://slashdot.org.1. Netscape procura o nome “slashdot.org”, e obtém 207.218.152.131.Ele então abre uma conexão para aquele endereço IP, usando a porta

local 1050, e pergunta do servidor web (porta 80) pela página web.2. Pacotes passam através do firewall, simplesmente como passamatravés de diversos firewalls entre você e slashdot.org.3. Netscape desenha a página.

ie. Aqui existe somente uma conexão: de 1.2.3.100 (myhost) porta1050, para 207.218.152.131 (slashdot.org) porta 80.

Page 45: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

45

5.3.2.2 Rede Privada: MasqueradingNeste cenário, pacotes da rede privada nunca atravessam a Internet

sem um tratamento especial, e vice versa. O endereço Ip da rede privadadevem ser escolhidos de acordo com o RFC1597 Private Network Allocations(ie. 10.*.*.*, 172.16.*.* or 192.168.*.*).

Ao invés de usar um proxy, nós usamos facilidades especiais do kernelchamadas “masquerading”. Masquerading regravam pacotes quando passamatravés do firewall, assim eles sempre parecem vir do próprio firewall. Eleentão re-escreve as respostas assim eles pareceram estar indo para orecipiente original.

Masquerading possui módulos separados para manipular protocolos“enganados”, como FTP, RealAudio, Quake, etc. Para procolos realmentedifíceis de manipular, a facilidade “auto forwarding” pode manipular muitosdestes configurando automáticamente o forward de portas para configuraçõesde portas relacionadas: procure por “ipportfw” (kernels 2.0) ou “ipmasqadm”(kernels 2.1).

Quaisquer serviços que você deseja acessar na Internet deve estar nofirewall. (Mas veja “Serviços Internos Limitados” abaixo).

Exemplo: Permitindo acesso web da rede privada com a Internet.

1. A rede privada possui endereços 192.168.1.*, com myhost sendo192.168.1.100, e a interface Ethernet do firewall sendo 192.168.1.1.2. O firewall é configurado para masquerade (mascarar) qualquer

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

Netscape em myhost lê http://slashdot.org.1. Netscape procura o nome “slashdot.org”, e obtém

207.218.152.131. Ele então abre uma conexão para aquele endereço IP,usando a porta local 1050, e pergunta ao servidor web (porta 80) pela páginaweb.

2. Como os pacotes de myhost (porta 1050) para slashdot.org (porta80) passam através do firewall, eles são regravados para virem da interfacePPP do firewall, porta 65000. O firewall possui um endereço Internet válido(1.2.3.4) assim responde pacote de slashdot.org.

3. Como pacotes de slashdot.org (porta 80) parafirewall.littlecorp.com (port 65000) vem, eles são regravados para irem paramyhost, porta 1050. Esta é a mágica real do masquerading: ele relembra

Page 46: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

46

quando ele regravou pacotes enviados para regrar as respostas quandoretornarem.

4. Netscape desenha a página.

ie. Do ponto de vista de slashdot.org, a conexão é feita de 1.2.3.4(interface PPP do firewall) porta 65000 para 207.218.152.131 (slashdot.org)porta 80. Do ponto de vista de myhost, a conexão é feita de 192.168.1.100(myhost) porta 1050, para 207.218.152.131 (slashdot.org) porta 80.

5.3.2.3 Rede Privada: Proxies TransparentesNeste cenário, pacotes da rede privada nunca atravessam a Internet e

vice versa. O endereço IP da rede privada deve ser escolhido de acordo com oRFC1597 Private Network Allocations (ie. 10.*.*.*, 172.16.*.* or 192.168.*.*).

O Único meio de conectar com a internet é conectando com o firewall,que é a única máquina entre as duas redes e que conectam ambas. Vocêexecuta um programa (no firewall) chamando um proxy transparente para fazeristo; o kernel envia pacotes de saída para o transparent proxy ao invés deenvia-los adiante (ie. ele abastarda o roteamento).

Proxyes transparentes querem dizer que o cliente não precisa saber quehá um proxy envolvido.

Qualquer serviço que desejar acessar na Internet deve estar no firewall.(Mas veja “Serviços Internos Limitados” abaixo).

Exemplo: Permitindo acesso web da rede privada para a Internet.1. A rede privada usa endereços 192.168.1.*, com myhost sendo192.168.1.100, e a interface Ethernet do firewall sendo 192.168.1.1.2. Um proxy web transparente (eu acredito que existem patches

para squid para permitir ele operar desta maneira, ou tente “transproxy”) ‘instalado e configurado no firewall, digo executando na porta 8080.

3. O kernel esta configurado para redirecionar conexão para a porta80 do proxy, usando ipchains.

4. Netscape na rede privada está configurado para conectardiretamente.

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

6. A rota default (gateway) precisa estar configurado na redeprivada, para enviar pacotes para o firewall.

Netscape em myhost lê http://slashdot.org.1. Netscape localiza o nome “slashdot.org”, e obtem

207.218.152.131.

Page 47: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

47

Ele abre uma conexão para aquele endereço IP, usando a porta local1050, e pergunta ao servidor web (porta 80) pela página web.

2. Como os pacotes de myhost (porta 1050) para slashdot.org (porta80) passam pelo firewall, eles são direcionados para proxy transparenteaguardando na porta 8080. O proxy transparente abre uma conexão usando(usando a porta local 1025) com 207.218.152.131 porta 80 (que é aqui onde ospacotes originais estão indo).

3. Como o proxy recebe a página web de sua conexão com oservidor web, ele copia os dados para a conexão com o Netscape.

4. Netscape desenha a página.

ie. Do ponto de vista de slashdot.org, a conexão é feita de 1.2.3.4(interface PPP do firewall) porta 1025 para 207.218.152.131 (slashdot.org)porta 80. Do ponto de vista de myhost, a conexão é feita de 192.168.1.100(myhost) porta 1050, para 207.218.152.131 (slashdot.org) porta 80, mas eleestá atualmente falando com o proxy transparente.

5.3.2.4 Rede Privada: Proxies TradicionaisNeste cenário, pacotes vindo da rede privada nunca atravessam para a

Internet, e vice versa. O endereço IP da rede privada usam os endereços deacordo com o RFC1597 Private Network Allocations (ie. 10.*.*.*, 172.16.*.* or192.168.*.*).

O Único meio de se conectar com a Internet é conectando com ofirewall, que é a única máquina na rede que conectam ambas. Você executaum programa (no firewall) chamado proxy para fazer isto (há proxies para FTP,acesso Web, telnet, RealAudio, Usenet News e outros serviços). Veja oFirewall HOWTO.

Qualquer serviço que você deseja acessar na Internet deve estar nofirewall (mas veja “Serviços Internos Limitados” abaixo).

Exemplo: Permitindo acesso web da rede privada para a Internet.1. A rede privada usa endereços 192.168.1.*, com myhost sendo

192.168.1.100, e a interface do firewall firewall sendo designada 192.168.1.1.2. Um proxy web (eg. “squid”) está instalado e configurado no

firewall, digo executando na porta 8080.3. Netscape na rede privada está configurado para usar a porta 8080

do firewall como um proxy.4. DNS não precisa ser configurado na rede privada.5. DNS não precisa estar configurado no firewall.6. Sem rota padrão (gateway) necessitando ser configurado na rede

privada.

Page 48: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

48

Netscape em myhost lê http://slashdot.org.1. Netscape conecta-se com o firewall na porta 8080, usando a porta

1050 em myhost. Ele pergunta pela página internet “http://slashdot.org”.2. O proxy procura o nome “slashdot.org”, e obtém 207.218.152.131.

Ele abre uma conexão com aquele endereço IP (usando a porta 1025 nainterface externa do firewall), e pergunta ao servidor web (porta 80) pela páginaweb.

3. Como ele recebe a página web de sua própria conexão com oservidor web, ele copia os dados para a conexão do Netscape.

4. Netscape desenha a página.

ie. Do ponto de vista de slashdot.org, a conexão é feita de 1.2.3.4(interface PPP do firewall) porta 1025 para 207.218.152.131 (slashdot.org)porta 80. Do ponto de vista de myhost, a conexão é feita de 192.168.1.100(myhost) porta 1050, para 192.168.1.1 (interface Ethernet do firewall) porta8080.

5.3.2.5 Serviços Internos LimitadosExistem alguns truques que você pode usar para permitir a Internet

acessar seus serviços internos, em lugar de executar serviços no firewall.Estes funcionarão com aproximação baseada em proxy ou masquerading paraconexões externas.

Uma simples aproximação é executar um “redirector”, que é um poor-man’s proxy que aguarda por uma conexão em uma determinada porta, eentão abre uma conexão em um porta e host fixo, e copia os dados entre asduas conexões. Um exemplo disto é o programa “redir”. Do ponto de vista daInternet, a conexão é feita para seu firewall. Do ponto de vista de seu servidorinterno, a coneão é feita da interface interna do firewall para o servidor.

Outra aproximação (que requer um kernel 2.0 com patch para ipportfw,ou um kernel 2.1 ou superior) é usar um port forwarding no kernel. Isto faz omesmo trabalho que o redir em um método diferente: o kernel regrava ospacotes enquanto passam, alterando seus endereços de destino e portas paraapontarem para hosts e portas internas. Do ponto de vista da da internet, aconexão é feita para seu firewall. Do ponto de vista de seu servidor interno,uma conexão é feita do host Internet para o servidor.

5.3.3 Mais detalhes sobre MasqueradingDavid Ranch escreveu um excelente novo HOWTO em Masquerading,

que tem uma larga quantidade de materiais com este HOWTO. Você podeatualmente encontrar ete HOWTO emhttp://www.ecst.csuchico.edu/~dranch/LINUX/index-LINUX.html#ipmasq

Logo eu iria esperar que isto fosse encontrado em algum lugar doProjeto de documentação do Linux, em http://www.metalab.unc.edu/LDP

Page 49: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

49

A página oficial do Masquerading está disponível emhttp://ipmasq.cjb.net.

5.4 IP Firewalling ChainsEsta seção descreve tudo o que você realmente precisa saber para

construir um filtro de pacotes que se encaixe em suas necessidades.

5.4.1 Como os pacotes atravessam os filtrosO kernel inicia com três listas de regras; estas listas são chamadas

firewall chains ou simplesmente chains. Os três chains são chamados inputoutput e forward. Quando um pacote entra (digo, através da placa Ethernet) okernel usa o chain de entrada e decide seu destino. Se ele sobrevive a estepasso, então o próximo passo do kernel é decidir onde enviar o pacote (isto échamado roteamento). Se o seu destino for outra máquina, ele consultará ochain forward. Finalmente, antes de simplesmente o pacote ir para fora darede, o kernel consulta o chain output.

Um chain é uma lista de checagem de regras. Cada regra diz “se ocabeçalho do pacote parece com isto, então aqui esta o que fazer com opacote”. Se a regra não confere com o pacote, então a próxima regra no chainé consultada. Finalmente, se não existem mais regras a consultar, então okernel procura no policiamento do chains para decidir o que fazer. Em umsistema consciente em segurança, este policiamento normalmente diz aokernel para rejeitar ou negar o pacote.

Para fans da arte em ASCII, isto mostra o caminho completo do pacoteentrando em uma máquina. | ACEITAR/ interface lo | v REDIRECIONAR _______ | > C --> S --> ______ --> D --> ~~~~~~~~ -->|forward|----> _______ --> h a |input | e {Routing } |Chain | |output |ACEITAR e n |Chain | m {Decision} |_______| --->|Chain | c i |______| a ~~~~~~~~ | | ->|_______| k t | s | | | | | s y | q | v | | | u | v e v NEGAR/ | | v m | NEGAR/ r Processo Local REJEITAR | | NEGAR/ | v REJEITAR a | | | REJEITAR | NEGAR d --------------------- | v e -----------------------------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. Se estiver, ele é negado.

• Sanity: Esta é atualmente um destas checagens de sanidade antesde cada chain firewall, mas o chain input é o mais importante. Muitos

Page 50: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

50

pacotes malformados podem deixar o código de checagem de regrasconfuso, e estes são negados aqui (uma mensagem é mostrada nosyslog se isto acontecer).

• input chain: Este é o primeiro chain firewall que será testadocontra o pacote. Se a decisão do chain não for NEGAR ouREJEITAR, o pacote passa.

• Demasquerade: Se o pacote é uma resposta de um pacote anteriordo masquerade, (mascaramento) ele é desmascarado, e pula para ochain output. Se você não usa o IP masquerading, você pode ignoraresta parte no diagrama.

• Routing decision (decisão do roteamento): O campo de destino éexaminado pelo código de roteamento, para decidir se o pacote deveir para um processo local (veja processos locais abaixo) oudirecionado (forward) para uma máquina remota (veja forward chainsabaixo).

• Local process (processo local): Um processo sendo executadoem uma máquina pode receber pacotes após o passo de decisão doroteamento, e pode enviar pacotes (que vão pelo passo de decisãodo reteamento, quando atravessam o chain output).

• interface lo: Se pacotes de um processo locai são desinados aum processo local, eles vão através do chain output com a interfaceconfigurada para “lo”, então retorna pelo chain input também com ainterface “lo”. A interface lo é normalmente chamada de interfaceloopback.

• local: Se o pacote não foi criado por um processo local, então ochain forward é checado, caso contrário o pacote vai através dochain output.

• forward chain: Este chain é usado para qualquer pacote que estátentando passar entre esta máquina para outra.

• output chain: Este chain é usado para todos os pacotes antes deserem enviados para fora.

5.4.1.1 Usando ipchainsPrimeiro, verifique se você tem a versão do ipchains que este

documento se refere:

$ ipchains—versionipchains 1.3.9, 17-Mar-1999

Note que eu recomendo 1.3.4 (que não possui opões longas, como “—sport”), ou 1.3.8 ou superior; estes são muito estáveis.

ipchains tem uma página de manual razoavelmente detalhada (manipchains), e se você precisa de mais detalhes em particularidades, você deve

Page 51: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

51

checar a interface de programação (man 4 ipfw), ou o arquivo net/ipv4/ip_fw.cno código fonte do kernel 2.1.x, que é (obviamente) autoritativo.

Também existem um excelente guia de referência rápida por ScottBronson no pacote fonte, em ambas A4 e US Letter PosScript™.

Existem diferentes outras coisas que você pode fazer com ipchains.Primeiro operações para gerenciar chains completos. Você inicia com trêschains input, output e forward que voce não pode apagar.

1. Criar um novo chain (-N).2. Deletar um chain vazio (-X).3. Alterar a política de um chain interno (-P).4. Listar as regras em um chain (-L).5. Esvaziar as regras do chain (-F).6. Zerar os contadores de pacote e byte em todas as regras no chain

(-Z).

Existem diversos meios de manipular regras dentro do chain:

1. Adiciona uma nova regra no chain (-A).2. Insere uma nova na mesma posição no chain (-I).3. Substitui uma regra na mesma posição no chain (-R).4. Deleta uma regra na mesma posição no chain (-D).5. Deleta a primeira regra que confere no chain (-D).

Existem poucas operações para masquerading, que estão no ipchainsque é um bom lugar para coloca-las:

1. Lista de conexões atuais do masquerade (-M -L).2. Configura os valores de tempo máximo (timeout) do masquerade

(-M -S).(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.

5.4.1.2 Operações em uma regra SimplesEste é o pão-e-manteiga do ipchains; manipulando regras. Mas

especificamente você ira provavelmene usar os comandos append (-A) e delete

Page 52: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

52

(-D). os outros (-I para inserir e -R para substituir) são simples extensõesnestes conceitos.

Cada regra especifica uma cofiguração de condições em que o pacotese encontra, e o que fazer quando a encontra (um “alvo”). Por exemplo,você pode desejar negar todos os pacotes ICMP vindo do endereço IP127.0.0.1. Assim neste caso nossas condições são que o protocolo

deve ser ICMP e que o endereço de origem deve ser 127.0.0.1. Nosso alvo é“NEGAR”.

127.0.0.1 ‘ a interface “loopback”, que você tem’ mesmo se nãopossuir uma conexão real da rede. Você pode usar o programa “ping” paragerar tais pacotes (ele simplesmente envia um ICMP tipo 8 (echo request) comtodos os hosts cooperativos que devem serviçalmente responder com o pacoteICMP tipo 0 (echo reply). Isto é útil para testes.

# ping -c 1 127.0.0.1PING 127.0.0.1 (127.0.0.1): 56 data bytes64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms

--- 127.0.0.1 ping statistics ---1 packets transmitted, 1 packets received, 0% packet lossround-trip min/avg/max = 0.2/0.2/0.2 ms# ipchains -A input -s 127.0.0.1 -p icmp -j DENY# ping -c 1 127.0.0.1PING 127.0.0.1 (127.0.0.1): 56 data bytes

--- 127.0.0.1 ping statistics ---1 packets transmitted, 0 packets received, 100% packet loss

Você pode ver aqui que o primeiro ping se sucede( o “-c 1”que dizer parao ping enviar somente um pacote simples)

Então nós adicionamos (-A) um chain “input”, uma regra especificandoque para pacotes vindo de 127.0.0.1 (“-s 127.0.0.1”) com o protocolo ICMP (“-pICMP”) devem ser negados (“-j DENY”).

Quando nós testamos nossa regra, usando o segundo ping, Existe umapausa antes do programa aguardar a resposta que nunca vem.

Nós podemos apagar uma regra em um dos dois meios. Primeiro nósconhecemos que esta é a única regra no chain input, nós podemos usar umnúmero para apagar, como em:

# ipchains -D input 1

Para apagar a regra número 1 no chain input.

Page 53: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

53

O segundo meio é espelhar o comando -A, mas trocando o -A com -D.Isto é útil quando voce tem um complexo conjunto de regras e você não desejaconta-las para retirar a regra 37. Neste caso, nós podemos usar:

# ipchains -D input -s 127.0.0.1 -p icmp -j DENY

A sintaxe de -D deve ter exatamente as mesmas opções que oscomandos -A (ou -I ou -R). Se existem múltiplas regras idênticas no mesmochain, somente a primeira ser apagada.

5.4.1.3 Especificações de FiltragemVocê deve sempre usar “-p” para especificar um protocolo, e “-s” para

especificar um endereço de origem, mas existem outras opções que nóspodemos usar para especificar características do pacote. O que segue é umcompêndio exaustivo.5.4.1.3.1 Especificando o endereço IP de origem e Destino

Endereços IPs de origem (-s) e destino (-d) podem ser especificados emquatro meios. O meio mais comum ‘ usar o nome completo, como “localhost”ou “www.linuxhq.com”. O segundo método é especificar o endereço IP como“127.0.0.1”.

O terceiro e quarto meio permite especificar um grupo de endereços IPs,como “199.95.207.0/24” ou “199.95.207.0/255.255.255.0”. Estes doisespecificam qualquer endereços IP de 192.95.207.0 para 192.95.207.255inclusive; os digitos depois da “/” dizem dizem que a parte do endereço IP ésignificante. “/32” ou “/255.255.255.255” é o padrão (abrange todos osendereços IPs). Para especificar qualquer endereço IP, deve ser usado “/0”,como no exemplo:

# ipchains -A input -s 0/0 -j DENY

Isto é raramente usado, como o efeito acima é o mesmo como nãoespecificar a opção “-s”.5.4.1.3.2 Especificando Inversão

Muitas opções, incluindo a “-s” e “-d” podem ter seus argumentosseguidos de “!” (que significa não) para atingirem endereços NÃO iguais aoespecificado. Por exemplo, “-s ! localhost” atinge qualquer pacote menos delocalhost.5.4.1.3.3 Especificando o Protocolo

O protocolo pode ser especificado com a opção “-p”. O protocolo podeser um número (se conhecer os valores numéricos dos protocolos para IP) ouum nome para casos especiais de “TCP”, “UDP” ou “ICMP”. Caso especificar“tcp” também funcinará como “TCP”.

O nome do protcolo pode usar o prefixo “!”, para inverter a regra, como “-p ! TCP”.

Page 54: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

54

5.4.1.3.3.1 Especificando portas UDP e TCPPara casos especiais onde um protocolo TCP ou UDP é especificado,

existem argumentos extras indicando a porta TCP ou UDP, ou um (exclusivo)faixa de portas (mas veja “Dirigindo Fragmentos” abaixo). Uma faixa érepresentada pelo caracter “:”, como “6000:6010”, que abrange 11 números deportas, de 6000 para 6010. Se o menor número é omitido, o padrão será 0. Seo maior número for omitido, o padrão será 65535. Assim para especificarconexões TCP vindo de portas abaixo de 1024, a sintaxe deve ser como “-pTCP -s 0.0.0.0/0 :1023”. Números de portas podem ser especificadas pornomes, eg. “www”.

Note que a especificação de portas devem ser precedidas por uma “!”,que inverte a regra. Assim para especificar qualquer pacote TCP menos umapacote WWW, você deve especificar p TCP -d 0.0.0.0/0 ! www

É importante realizar aquela especificação

p TCP -d ! 192.168.1.1 www

é muito diferente de

p TCP -d 192.168.1.1 ! www

A primeira especifica qualquer pacote TCP para a porta WWW emqualquer máquina menos 192.168.1.1. O segundo especifica qualquerconexão TCP para qualquer porta em 192.168.1.1 menos a porta WWW.

Finalmente, este caso significa não para a porta WWW e não para192.168.1.1:

p TCP -d ! 192.168.1.1 ! www

5.4.1.3.3.2 Especificando tipo do ICMP Type e CodeICMP também permite um argumento opcional, mas como ICMP não

possui portas, (ICMP possui tipo e código) eles possuem diferentessignificados.

Você pode especifica-los como nomes ICMP (use ipchains -h icmp paralistar os nomes) após a opão “-s”, ou como um tipo e código ICMP numérico,onde os tipos seguem a opcão “-s” e o código segue a opção “-d”.

Os nomes ICMP são razoavelmente logos: você somente precisa usarbastante letras para fazer um nome se distinguir de outros.

Aqui está um pequena tabela de alguns dos pacotes ICMP maiscomuns:

Número Nome Requerido por0 echo-reply pong3 destination-unreachable Qualquer tráfego TCP/UDP.

Page 55: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

55

5 redirect se não estiver executandoum daemon de roteamento

8 echo-request ping11 time-exceeded traceroute

Note que os nomes ICMP não podem ser precedidos de “!” no momento.Atenção: NÃO, bloqueie as mensagems ICMP do tipo 3! (Veja “Pacotes

ICMP” abaixo)5.4.1.3.4 Especificando a Interface

A opção “-i” especifica o nome de uma interface para atingir. Umainterface é o dispositivo físico onde o pacote vem, ou onde vai. Você pode usaro comando ifconfig para listas as interfaces que estão em “up” (ie. trabalhandono momento).

A interface para pacotes de entrada (ie. pacotes atravessando as regrasde entrada) é considerada sendo uma interface onde eles vem. Logicamente,a interface para pacotes enviados (pacotes atravessando as regras de saída) éa interface onde eles vão. A interface para pacotes atravessando os chainsforward é também a interface onde eles serão enviados para fora; me pareceuma decisão bastante arbitrária.

É perfeitamente legal especificar uma interface que atualmente nãoexiste; a regra não atingirá nada até que a interface seja iniciada. Isto éextremamente útil para conexões PPP dialup (normalmente a interface ppp0).

Como um caso especial, um nome de interface finalizando com um “+”atinge todas as interfaces (até mesmo se existem atualmente ou não) quecomeçam com aquele string. Por exemplo, para especificar uma regra queatinge todas as interfaces PPP, a opção “-i ppp+” pode ser usada.

O nome da interface pode ser precedida por uma “!” para não atingirpacotes que NÃO conferem com a interface especificada.5.4.1.3.5 Especificando somente pacotes TCP SYN

É muitas vezes útil permitir conexões TCP em uma direção, mas não emoutra. Por exemplo, você pode desejar permitir conexões para uma servidorWWW externo, mas não conexões daquele servidor.

Uma aproximação ingênua pode ser bloquear pacotes TCP vindo doservidor. Infelizmente, conexões TCP requerem pacotes indo em ambasdireções para funcionarem corretamente.

A solução é bloquear somente os pacotes usados para requisitar umaconexão. Estes pacotes são chamados SYN (ok, técnicamente eles sãopacotes com a flag SYN configurada, e as flags FIN e ACK limpas, mas nós oschamamos de pacotes SYN). Desativando somente estes pacotes, nóspodemos parar tentativas de conexões em seus rastros.

A flag “-y” é usada para isto: é somente válida para regras queespecificam TCP como seu protocolo. Por exemplo, para especificar tentativasde conexão TCP de 192.168.1.1:

p TCP -s 192.168.1.1 -y

Page 56: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

56

Mais uma vez, esta opção pode ser invertida se for precedida de um “!”,que diz que cada pacote sem ser a inicialização da conexão.5.4.1.3.6 Dirigindo Fragmentos

As vezes um pacote é muito grande para passar de uma só vez.Quando isto acontece, o pacote é dividido em framentos, e enviado comomúltiplos pacotes. O outro lado remonta os fragmentos para reconstruir opacote inteiro.

O problema com fragmentos é que muitas das especificaçõess listadasacima (em particular, porta de origem, porta de destino, tipo ICMP, códigoICMP, ou opção TCP SYN) requerem que o kernel verifique no inicio do pacote,que é o único que contém o primeiro fragmento.

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 dospacotes que passam através dele, compilando o kernel com IP: alwaysdefragment (sempre desfragmentar) configurado para “Y”. Isto nítidamenteevita isto.

Caso contrário, é importante entender como os fragmentos são tratadospelas regras de filtragem. O primeiro fragmento é tratado como qualquer outropacote. O segundo e os fragmentos seguintes não são. Assim uma regra -pTCP -s 192.168.1.1 www (especificando uma porta de origem de “www”) nuncaatingirá um fragmento (do segundo em diante). Nem será o oposto a regra -pTCP -s 192.168.1.1 ! www.

No entanto, você pode especificar uma regra especificamente para osegundo e outros fragmentos, usando a opção “-f”. Obviamente, é ilegalespecificar uma porta TCP ou UDP, tipo ICMP, código ICMP ou a opção TCPSYN em tal regra de fragmento.

É também permitido especificar que uma regra que não se aplica aosegundo e fragmentos seguintes, procedendo “-f” com “!”.

Normalmente é considerado como seguro deixar o segundo e outrosfragmentos atravessarem, desde que a filtragem afetará o primeiro fragmento,e assim previne a remontagem no computador de destino, porém, tem sidoconhecido bugs para permitir o travamento de máquinas simplesmenteenviando fragmentos.

Nota para cabeças de rede: pacotes mal formados (TCP, UDP e pacotesICMP muitos curtos para o c¢digo de firewall ler as portas ou código e tipoICMP) são tratados como fragmentos também. Sometne fragmentos TCPiniciando na posição 8 são explicitamente derrubados pelo código do firewall(uma mensagem aparecerá no syslog se isto ocorrer).

Como um exemplo, a seguinte regra derrubará quaisquer fragmentosindo para 192.168.1.1:

# ipchains -A output -f -d 192.168.1.1 -j DENY

Page 57: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

57

5.4.1.4 Efeitos do Lado da FiltragemOK, agora nós conhecemos todos os métodos que podemos atingir um

pacote usando uma regra. Se um pacote confere com a regra, as seguintescoisas podem acontecer:

1. O contador de byte para aquela regra é aumentado pelo tamandodo pacote (cabeçalho e tudo).

2. O contador de pacotes para aquela regra é incrementado.3. Se a regra o requisitar, o pacote é registrado.4. Se a regra o requisitar, o campo do pacote Type Of Service é

alterado.5. Se a regra o requisitar, o pacote é marcado (não em kernels da

série 2.0).6. O alvo da regra é examinado para decidir o que fazer com opróximo pacote.Para variedade, todos estas regras estão em ordem de importância.

5.4.1.4.1 Especificando um alvoUm alvo diz ao kernel o que fazer com um pacote que confere cum uma

regra. ipchains usa “-j” (pense como “jump-to” - pular para) para aespecificação do alvo. O nome do alvo deve ser menor que 8 letras, e casesensitive: “RETURN” e “return” são completamente diferentes.

O caso mais simples é quando não há um alvo especificado. Este tipode regra (muitas vezes chamado de uma regra de “contagem”) é útil para umacontagem simples de certos tipos de pacotes. Se esta regra confere ou não, okernel simplesmente examina a próxima regra no chain. Por exemplo, paracontar o número de pacotes de 192.168.1.1, nós podemos fazer isto:

# ipchains -A input -s 192.168.1.1

(Usando “ipchains -L -v” nós podemos ver os contadores e bytesassociados com cada regra).

Existem seis alvos especiais. Os primeiros três, ACCEPT, REJECT eDENY são muito simples. ACCEPT aceita o pacote, DENY bloqueia o pacote,é como se nunca o tivesse recebido. REJECT rejeita o pacote, mas (se elenão é um pacote ICMP) gera uma resposta ICMP para a origem para dizer queo destino está inalcançavel.

A próxima, MASQ diz ao kernel mascarar (masquerade) o pacote. Paraisto funcionar, seu kernel precisa estar compilado com IP Masqueradingativado. Para detalhes sobre isto, veja Masquerading_HOWTO e o apêndice“Diferenças ente ipchains e ipfwadm”. Este alvo é somente válido para pacotesatravessando o chain forward.

O alvo mais especial é REDIRECT que diz ao kernel para enviar umpacote para uma porta local em vez de onde tivesse vindo.

Page 58: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

58

Isto pode ser somente especificado por regras especificando TCP ouUDP como seus protocolos. Opcionalmente, uma porta (nome ou número)podem ser especificadas seguidas de “-j REDIRECT” que causar oredirecionamento do pacote para uma porta particular, até mesmo se forendereçado para outra porta. Este alvo é somente válido para pacotesatravessando a regra de entrada.

O alvo final especial é RETURN que é idêntico a cair fora do final daregra imediatamente. (Veja “Configurando o Policiamento” abaixo).

Qualquer outro alvo indica uma regra definida pelo usuário (comodescrita em “Operações em todo o Chain” abaixo). O pacote começaráatravessando as regras naquele chain. Se aquele chain não decide o destinodo pacote, então uma vez passam por aquele chain como finalizado, passar seresume na próxima regra no chain atual.

Hora de mais arte ASCII. Considere dois (tolos) chains: input (o chainembutido) e Test (um chain definido pelo usuário). ‘input’ ‘Test’ ---------------------------- ---------------------------- | Rule1: -p ICMP -j REJECT | | Rule1: -s 192.168.1.1 | |--------------------------| |--------------------------| | Rule2: -p TCP -j Test | | Rule2: -d 192.168.1.1 | |--------------------------| ---------------------------- | Rule3: -p UDP -j DENY |

Considerando um pacote TCP vindo de 192.168.1.1, indo para 1.2.3.4.Ele entra no chain input, e é testado na regra 1 - sem bater com a regra. Aregra 2 bate, e seu alvo é Test, assim a próxima regra examinada é o inicio doteste. Regra 1 em test confere, mas não especifica um alvo, assim a próximaregra é examinada, Regra 2. Isto não confere, assim nós atingimos o final dochain. Nós retornamos ao chain de entrada, onde nós simplesmenteexaminamos a Regra 2, assim nós agora examinamos Regra3, que nãoconfere.

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 parausar regras definidas pelo usuários efetivamente.5.4.1.4.2 Registrando pacotes

Este é o lado do efeito que confere com uma regra que possui; vocêpode ter o pacote que bateu com a regra registrado com a opção “-l”. Você

Page 59: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

59

normalmente não precisará disto para pacotes rotineiros, mas ela é umacaracterística útil se você deseja verificar por eventos excepcionais.

O kernel registra esta informação parecida como:

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

Esta mensagem de registro é designada para ser concisa, e contéminformações técnicas úteis somente para gurus de rede, mas ela pode ser útilpara o resto de nós. Cada uma que dizer o seguinte:

1. “input” este é o chain que contém a regra que confere com opacote, causando a mensagem de registro.

2. “DENY” é o que a regra disse fazer com o pacote. Se isto é “-“então a regra não afetou o pacote (uma regra de registro).

3. “eth0” é o nome da interface. Porque isto foi o chain de entrada,ela significa que o pacote veio de “eth0”.

4. “PROTO=17” significa que o pacote foi protocolo 17. Uma lista denúmeros de protocolos esta disponível em “etc/prococols”. Os mais comunssão 1 (ICMP), 6(TCP) e 17(UDP).

5. “192.168.2.1” significa que o endereço IP de origem do pacote foi“192.168.2.1”.

6. “:53” significa que a porta de origem foi 53. Olhando em“/etc/services” é verificado que esta é uma porta “domínio” (ie. esta éprovavelmente a resposta do DNS). Para UDP e TCP, este número é a portade origem. Para ICMP, ele é o tipo ICMP. Para outros, ele será 65535.

7. “192.168.0.1” é o IP de destino.8. “:1025” significa que a porta de destino foi 1025. Para UDP e

TCP, este némero é a porta de destino. Para ICMP, ele é o código ICMP.Para outros, ele será 65535.

9. “L=34” significa que o pacote teve um total de 34 bytes.10. “S=0x00” campo que significa o tipo do serviço (dividido por 4

para obter o tipo do serviço com usado pelo ipchains).11. ‘I=18’ é a identificação do IP.12. “F=0x0000” é os fragmentos 16-bits offset plus flags. Um valor

iniciando com “0x4” ou “0x5” significa que o bit de fragmento não estaconfigurado. “0x2” ou “0x3” significa que o bit “mais fragmentos” estaconfigurado; espere mais fragmentos após isto. O resto dos números são ooffset deste fragmento, dividido por 8.

13. “T=254” é o tempo de vida do pacote. Um é subtraído deste valorpara cada ciclo, e normalmente iniciam em 15 ou 255.

14. “(#5)” este pode ser um número final em parênteses em kernelsmais recentes (talvez após 2.2.9). Este é um número de regra que causa oregistro do pacotes.

Page 60: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

60

Em sistemas linux padrões, esta saída do kernel é capturada por klogd(o daemon de registro do kernel) que o envia para o syslogd (o daemon deregistro do sistema). O arquivo “/etc/syslog.conf” controla o funcionamento desyslogd, especificando um destino para cada facilidade (facility - em nossocaso, a facilidade é “kernel”) e nível (para ipchains, o nível usado é “info”).

Por exemplo, meu (Debian) /etc/syslog.conf contém duas linhas queconferem “kern.info”:

kern.* -/var/log/kern.log.=info;.=notice;*.=warn;\auth,authpriv.none;\cron,daemon.none;\mail,news.none -/var/log/messages

Estas significam que as mensagem são duplicadas em “/var/log/kern.log”e “/var/log/messages”. Para mais detalhes, veja “man syslog.conf”.5.4.1.4.3 Manipulando o tipo do Serviço

Existem quatro bits raramente usados no cabeçalho IP, chamaos de bitsde tipo do serviço (TOS). Eles afetam o método como os pacotes são tratados;os quatros bits são “Minima Espera”, “Máximo processamento”, “MáximaConfiabilidade” e “Mínimo Custo”. Somente um destes bits é permitido serconfigurado. Rob van Nieuwkerk, o autor do TOS-mangling code, colocou oque segue:

Especialmente o “Minimo de Espera” é importante para mim. Eu deixoele ligado para pacotes “interativos” em meu roteador (Linux). Eu uso ummodem de 33k6. O linux inicializa pacotes em 3 meios. Deste meio eu tenhoperformance interativa aceitável enquando faço downloads grandes ao mesmotempo. (Ele pode até mesmo ser melhor se lá não tiver tal bit no driver serial,mas a latencia é mantida agora por 1.5 segundos).

Nota: Obviamente, você tem o controle através de pacotes de entrada:você pode somente controlar a prioridade dos pacotes deixando seu

computador. Para negociar prioridades com o outro computador, um protocolocomo RSVP (que não conheço nada sobre ele, não me pergunte sobre isto)deve ser usado.

O uso mais comum é configurar telnet e conexões de controle FTP parao “Minima Espera” e dados FTP para “Máximo Processamento”. Isto pode serfeito como segue:

ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08

A opção “-t” pede dois parâmetros extras, ambos em hexadecimal.Estes permitem giros complexos dos bitos TOS: o primeira mascara é ANDedcom o pacote atual TOS, e então a segunda máscara é XORed com ele.

Se isto é muito confuso, apenas use a seguinte tabela:

Page 61: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

61

TOS Name Value Typical Uses

Minimum Delay 0x01 0x10 ftp, telnetMaximum Throughput 0x01 0x08 ftp-dataMaximum Reliability 0x01 0x04 snmpMinimum Cost 0x01 0x02 nntp

Andi Klenn foi ao ponto fora dos seguintes (também editado parapostaridade):

Talvez ele possa ser útil para incluir uma referência para de ifconfig paraa discussão sobre bits TOS. O tamanho do dispositivo padrão é afinado paraplacas ethernet, em modems ele é muito grande e faz os 3 agendamentos dasbandas (que possui canais baseados no TOS) funcionarem subótimamente. Éuma boa idéia configura-lo para um valor entre 4-10 no modem ou simplescanal b para links ISDN: em dispositivos empacotados é necessário um grandecanal.

Este é uma problema 2.0 e não 2.1, mas em 2.1 ele é um opção doifconfig (com nettools recentes), enquanto em 2.0 ele requer patches fontes noscontroladores de dispositivos para alterar.

Assim, para ver máximos beneficios da manipulação TOS para links demodems PPP, faça “ifconfig $1 txqueuelen” em seu /etc/ppp/ip-up script. Onúmero usado depende da velocidade do modem e da quantidade de buffer nomodem; aqui configurações que Andi me passou denovo:

O melhor valor para dadas configurações precisam ser testadas. Se oscanais são muito pequenos em um roteador então os pacotes serãoderrubados. Também é claro que um obtém o benefício até mesmo semregravação TOS, apenas aquela regravação TOS ajuda obter benefícios paraprogramas não coperativos (mas todos os programas padrões do linux sãocoperativos).5.4.1.4.4 Marcando um Pacote

Isto permite complexas e poderosas interações com Alexey Kuznetsov’snova Qualidade de implementações de Serviço, também como forwardingbaseado em marcas em kernels da série 2.1. Esta opção é no entantoignorada em kernels da série 2.0.5.4.1.4.5 Operações em todo o chain

Uma característica muito útil do ipchains é a abilidade de agrupar regrasrelacionadas em chains. Você pode chamar chains do que quiser, desde quenão sejam nomes utilizados pelos chains embutidos (input, output e forward) ouos alvos (MASQ, REDIRECT, ACCEPT, DENY, REJECT ou RETURN). Eusugiro evitar totalmente identificações em maiúsculas, porque que eu possousar estas para futura extensão. O nome do chain pode ser maior que 8caracteres.5.4.1.4.6 Criando um novo chain

Vou criar um novo chain. Porque eu sou como um imaginador damesma categoria, eu chamarei isto de test.

Page 62: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

62

# ipchains -N test

É muito simples. Agora você pode colocar regras nele como detalhadoacima.5.4.1.4.7 Apagando um chain

Apagar um chain também é simples.

# ipchains -X test

Porque “-X”? Bem, todas as boas letras foram usadas.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 qualquerregra. Você não pode deletar qualquer destes três chains embutidos.5.4.1.4.8 Limpando um Chain

Existe um método simples de esvaziar todas as regras fora do chain,usando o comando “-F”.

# ipchains -F forward

Se você não especificar um chain, então todos os chains serão limpos.5.4.1.4.9 Listando um chain

Você pode listar todas as regras em um chain usando o comando “-L”.

# ipchains -L inputChain input (refcnt = 1): (policy ACCEPT) target prot opt source destination ports ACCEPT icmp ----- anywhere anywhere any# ipchains -L testChain test (refcnt = 0): target prot opt source destination ports DENY icmp ----- localnet/24 anywhere any #

O “refcnt” listado para test é o número de regras que tem test como seualvo. Este pode ser zero (e o chain ser vazio) antes deste chain ser apagado.

Se o nome do chain é omitido, todos os chains são listados.Existem três opções que podem acompanhar “-L”. A “-n” (numérica)

opção é muito útil porque ela previne ipchains de tentar localizar endereços IP,que (se você esta usando DNS como muitas pessoas) causa larga espera seseu DNS se não estiver configurado corretamente, ou se você filtrará suasrequisições DNS. Ele faz as portas serem listadas como números ao invés denomes.

Page 63: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

63

A opção “-v” mostra os detalhes das regras, como o pacote e contadoresde byes, as máscaras TOS, a interface, e a marca do pacote. Caso contrárioestes valores são omitidos. Por exemplo:

# ipchains -v -L inputChain input (refcnt = 1): (policy ACCEPT) pkts bytes target prot opt tosa tosx ifname mark sourcedestination ports 10 840 ACCEPT icmp ----- 0xFF 0x00 lo anywhereanywhere any

Note que o pacote e o contador do byte são mostrados usando ossufixos “K”, “M” ou “G” para 100, 1,000,000 e 1,000,000,000 respectivamente.

Usando a opção “-x” (números expandidos) são mostrados númeroscompletos, não discutirei como eles são grandes.5.4.1.4.10 Resetando (Zerando) Contadores

Isto é útil para permitir resetar os contadores. Isto pode ser feito com aopção “-Z” (zero counters). Por exemplo:

# ipchains -v -L input

Chain input (refcnt = 1): (policy ACCEPT)

pkts bytes target prot opt tosa tosx ifname mark source destination ports

10 840 ACCEPT icmp ----- 0xFF 0x00 lo anywhere anywhere any

# ipchains -Z input

# ipchains -v -L input

Chain input (refcnt = 1): (policy ACCEPT)

pkts bytes target prot opt tosa tosx ifname mark source destination ports

0 0 ACCEPT icmp ----- 0xFF 0x00 lo anywhere anywhere any

O problema disto é que muitas vezes você precisa conhecer os valoresdo contador imediatamente antes dele ser resetado. No exemplo acima,muitos pacotes pode passar entre os comandos “-L” e “-Z”. Por esta razão,você pode usar “-L” e “-Z” juntos, para resetar os contadores enquando os lê.Infelizmene, se você fizer isto, você não poderá operar em um chain simples:você terá que listar e zerar todos os chains imediatamente.

# ipchains -L -v -Z

Chain input (policy ACCEPT):

pkts bytes target prot opt tosa tosx ifname mark source destination ports

10 840 ACCEPT icmp ----- 0xFF 0x00 lo anywhere anywhere any

Chain forward (refcnt = 1): (policy ACCEPT)

Chain output (refcnt = 1): (policy ACCEPT)

Chain test (refcnt = 0):

0 0 DENY icmp ----- 0xFF 0x00 ppp0 localnet/24 anywhere any

# ipchains -L -v

Chain input (policy ACCEPT):

pkts bytes target prot opt tosa tosx ifname mark source destination ports

10 840 ACCEPT icmp ----- 0xFF 0x00 lo anywhere anywhere any

Page 64: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

64

Chain forward (refcnt = 1): (policy ACCEPT)

Chain output (refcnt = 1): (policy ACCEPT)

Chain test (refcnt = 0):

0 0 DENY icmp ----- 0xFF 0x00 ppp0 localnet/24 anywhere any

5.4.1.4.11 Configurando a PolíticaNós mostramos o que acontece quando um pacote atinge o final do

chain de entrada embutido quando nós discutimos como um pacote andaatravés dos chains em “Especificando um Alvo” acima. Neste caso, opoliciamento do chain determina o destino do pacote. Somente chainsembutidos (input output e forward) tem policiamento, porque se um pacote caino final de um chain definido pelo usuário, a passagem é resumida no chainanterior.

O policiamento pode ser qualquer dos primeiros quatro alvos especiais:ACCEPT, DENY, REJECT, MASQ. MASQ é somente válido para o

chain “forward”.É 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 opacote se encaixa em uma regra.

5.4.1.5 Operações em Masquerading

Existem diversos parâmetros que você pode usar para IP Masquerading.Eles estão empacotados com ipchains porque não compensa fazer umaferramenta separada para eles (no entanto isto pode mudar).

O comando IP Masquerading é “-M”, e ele pode ser combinado com “-L”para listar conexões Masquerade atuais, ou “-S” para configurar parâmetrosmasquerade.

O comando “-L” pode ser acompanhado por “-n” (mostar números aoinvés de nomes dos hosts e nomes das portas) ou “-v” (mostra deltas emnúmeros sequenciais para conexão masquerade, apenas em caso depreocupação).

O comando “-S” deve ser seguido de três valores de timeout, cada umem segundos: para seções TCP, para seções TCP após um pacote FIN, e parapacotes UDP. Se você não desejar alterar um destes valores, simplesmentepasse um valor “0”.

Os valores padrões estão listados em‘/usr/src/linux/include/net/ip_masq.h’, atualmente 15 minutos, 2 minutos e

5 minutes respectivamente.O valor mais comum para ser alterado é o primeiro, para FTP (veja

“Pesadelos FTP” abaixo).Note os problemas com as configurações de timeout listados em “Eu não

posso configurar timeouts em masquerade!”.

Page 65: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

65

5.4.1.6 Checando um PacoteMuitas vezes você deseja ver o que esta acontecendo quando um certo

pacote entra em sua máquina, tal como para verificar seus chains de entrada.ipchains tem o comando “-C” para permitir isto, usando exatamente as mesmasrotinas que o kernel usa para diagnosticar pacotes reais.

Você especifica que chain testará o pacote seguido do argumento “-C”com seu nome. Considerando que o kernel sempre inicia atravessando oschains input, output e forward, você está permitido o inicio da travessia emqualquer chain para fins de testes.

Os detalhes do “pacote” são especificados usando a mesma sintaxeusada para expecificar regras do firewall. Em particular, um protocolo (“-p”),endereço de origem (“-s”), endereço de destino (“-d”) e interface (“-i”) sãocompulsórios. Se o protoclo é TCP ou UDP, então uma porta simples deorigem e destino devem ser especificadas, e um tipo ICMP e um código devemser especificados para o protocolo ICMP (a não ser que a opção “-f” éespeficada para indicar uma regra de fragmento, em tal caso estas opções sãoilegais).

Se o protocolo é TCP (e a opção “-f” não é especificada), a opção “-y”deve ser especificada, para indicar que o pacote test deve ter o bit SYNajustado.

Aqui está um exemplo de teste de um pacote TCP SYN de 192.168.1.1porta 60000 para 192.168.1.2 porta www, vindo na interface eth0, entrando nochain “input”. Isto é uma clássica inicialização de conexão WWW.

# ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 wwwpacket accepted

5.4.1.7 Multiplas Regras at Once and Watching What HappensMuitas vezes uma simples linha de comando pode resultar em múltiplas

regras sendo afetadas. Isto é feito em duas maneiras. Primeiro, se vocêespecificar um hostname que resolve (usando DNS) múltiplos endereços IPs,ipchains pode atuar como se você tivesse digitado m£ltiplos comandos comcada combinação de endereços.

Assim se o hostname “www.foo.com” resolve três endereços IPs, e ohostname “www.bar.com” resolve dois endereços IPs, então o comando“ipchains -A input -j reject -s www.bar.com -d www.foo.com” acumula seisregras para o chain de entrada.

O outro meio de ter o ipchains fazendo múltiplas ações é usar a opçãobidirecional (“-b”). Esta opção faz o ipchains se comportar como se vocêtivesse digitado o comando duas vezes, a segunda vez com os argumentos “-s”e “-d” invertidos. Assim, para evitar forwarding para ou de 192.168.1.1, vocêdeve fazer o seguinte:

# ipchains -b -A forward -j reject -s 192.168.1.1

Page 66: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

66

Pessoalmente, eu não gosto muito da opção “-b”; se você desejaconveniência, veja “Usando ipchains-save” abaixo.

A opção -b pode ser usada com insert (“-I”), delete (“-D”) (mas não comvariações que pegam regras numúricas), comando append (“-A”) e comandocheck (“-C”).

Outra opção útil é “-v” (verbose) que mostra exatamente o que oipchains está fazendo com seus comandos. Isto é útil se você está negociandocom comandos que podem afetar multiplas regras. Por exemplo, aqui nóschecamos 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 úteisEu 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 horaque disco. Eu uso o método FTP da Debian para atualizar minha máquinaregularmente (-p TCP -y -s ftp.debian.org.au ftp-data).

Eu surfo na WEB através do meu proxy ISP enquando isto está sendofeito (-p TCP -d proxy.virtual.net.au 8080), mas odeio os anúncios dedoubleclick.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áquinaenquando eu estou online (-p TCP -d $LOCALIP ftp), mas não desejo qualquerum de fora pretendendo ter um endereço IP de minha rede interna (-s192.168.1.0/24).Isto é normalmente chamado de IP spoofing, e aqui está umbelo meio de proteger você dele em kernels 2.1.x e superiores: veja “Como euconfiguro a proteção IP spoof?”.

A configuração é razoavelmente simples, porque não existe atualmentenenhuma outra máquina na minha rede interna.

Eu não desejo que nenhum processo local (ie. Netscape, linx etc...) seconecte 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ãoexiste muitos motivos de se fazer isto em pacotes que entram). Desde que eu

Page 67: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

67

tenho diversos números destas regras, é sensato colocar todas elas em umsimples 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 deorigem 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 cachede nomes que redireciona todas as requisições para 203.29.16.1, assim euespero respostas DNS somente dele), entrada FTP, e somente retorno dedados ftp(ftp-data) (que deve somente estar indo para uma porta acima de1023, e não as portas X11 em torno de 6000).

# ipchains -A ppp-in -p UDP -s 203.29.16.1 -d $LOCALIP dns -j ACCEPT# ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 1024:5999 -j ACCEPT# ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 6010: -j ACCEPT# ipchains -A ppp-in -p TCP -d $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, assimqualquer outra coisa é derrubada:

# ipchains -P input DENY

Page 68: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

68

NOTA: Eu não configurei meus chains nesta ordem, como os pacotespodem ir através da minha configuração. Seguramente é normalmente feito oDENY (bloqueio) primeiro, então inseridas as regras. É claro, se suas regrasrequerem chamadas DNS para resolver nomes de hosts, você terá problemas.

5.4.2.1 Usando ipchains-saveConfigurar regras de firewall simplesmente do jeito que desejar, e então

tente se lembrar dos comandos que usou assim você pode estar na próximahora em pane.

Assim ipchains-save é um script que lê sua configuração atual doschains e salva em um arquivo. No momento eu mantenho seu suspense sobreo que o ipchains-restore faz.

ipchains-save pode salvar uma simples regra, ou todas as regras (senenhum nome de regra é especificada). A única opção atualmente permitida é“-v” que mostra as regras (para stderr) quando são salvas. O policiamento dochain é também salvo para as regras input, output e forward.

# ipchains-save > my_firewallSaving ‘input’.Saving ‘output’.Saving ‘forward’.Saving ‘ppp-in’.Saving ‘ppp-out’.

5.4.2.2 Usando ipchains-restoreO ipchains-restore restaura chains que foram salvos com ipchains-

save. Ele pode usar duas opções “-v” que descreve cada resgra sendoincluída, e “-f” que força a limpeza de regras definidas pelo usuário se elasexistem, como descrito abaixo.

Se uma regra definida pelo usuário é encontrada em input, ipchains-restore 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 sea restauração deste chain deve ser ignorada. Se você especificar “-f” na linhade comando, você não será perguntado; a regra será limpa.

Por exemplo:

# ipchains-restore < my_firewallRestoring ‘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’.

Page 69: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

69

Chain ‘ppp-out’ already exists. Skip or flush? [S/f]? f Flushing ‘ppp-out’.

5.5 DiversosEsta seção contém todas as informações e FAQs que eu pude colocar

dentro da estrutura do arquivo abaixo.

5.5.1 Como organizar suas regras de firewallEsta questão requer muita concentração. Você pode tentar organiza-las

para melhorar a velocidade (minimizar o números de checagem de regras paraos pacotes mais comuns) ou para diminuir o gerenciamento.

Se você tiver um link intermitente, digamos PPP, você pode desejarconfigurar a primeira regra do chain de entrada para “-i ppp0 -j DENY” nainicialização, então tendo qualquer coisa como esta em seu script ip-up:

# Re-create the ‘ppp-in’ chain.ipchains-restore -f < ppp-in.firewall

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

Seu script ip-down deve se parecer com isto:

ipchains -R input 1 -i ppp0 -j DENY

5.5.2 O que não filtrarExistem muitas coisa que você deve estar atento antes de iniciar a

filtragem de tudo o que não desejar.

5.5.2.1 Pacotes ICMPPacotes ICMP são usados (entre outras coisas) para indicar falhas de

outros protocolos (tal como TCP e UDP). Pacotes “destination-unreachable”em particular. Bloqueando estes pacotes significa que você nunca obterá erros“Host unreachable” ou “No route to host”; qualquer conexão simplesmenteaguardará por uma resposta que nunca virá. Isto é irritante, mas raramentefatal.

Um problema pior é o papel de pacotes ICMP em na descoberta MTU.Todas as boas implementações TCP (incluindo o Linux) usa a descoberta MTUpara tentar entender qual pacote grande que pode ir para um destino sem serfragmentado (fragmentação diminui a performance, especialmente quandofragmentos ocasionais são perdidos). Descoberta MTU funciona enviando

Page 70: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

70

pacotes com o bit “Don’t Fragment” ajustado, e então enviando pacotespequenos se ele obter um pacote ICMP indicando “Fragmentação necessáriamas DF ajustado” (“fragmentação necessária”). Este é um tipo de pacote“destination-unreachable”, e se ele nunca é recebido, o host local não reduziráo MTU, e a performance será abismal ou não existente. Note que é comum elebloquear todas as mensagens de redirecionamento ICMP (tipo 5); estas podemser usados para manipular roteamento (embora boas stacks IP tem proteções),e assim são frequentemente vistas como ligeiramente ariscadas.

5.5.2.2 Conexões TCP para DNS (servidores de nomes)Se estiver tentando bloquear conexões TCP de saída, se lembre que

DNS nem sempre usa UDP; se a resposta do servidor excede, 512 bytes, ocliente usa uma conexão TCP (ainda indo para o número de porta 53) paraobter a resposta.

Isto pode ser uma armadilha porque DNS sempre “trabalha mais oumenos” se você bloquear tais transferências TCP; você pode experimentaresperas longas e estranhas ou outros problemas DNS ocasionais se você ofizer.

Se suas requisições DNS sempre são direcionadas para a mesmaorigem externa (ou diretamente usando a linha nameserver em /etc/resolv.confou usando um servidor de nomes cache no modo forward), então vocêprecisará somente permitir conexões TCP para a porta domínio naqueleservidor de nomes da porta de domínio local (se usando um servidor de nomescache) ou de uma porta alta (>1023) se estiver usando /etc/resolv.conf.

5.5.2.3 Pesadelos FTPO problema clássico de filtragem de pacotes é o FTP. FTP tem dois

modos; um é o tradicional que é chamado modo ativo e o mais recente échamado de modo passivo. Navegadores Web normalmente usam o modopassivo, mas programas FTP de linha de comando normalmente usam o modoativo.

No modo ativo, quando o computador remoto tenta enviar um arquivo(ou até mesmo o resultado de um comando ls ou dir) ele tenta abrir umaconexão TCP com a máquina local. Isto significa que você não pode filtrarestas conexões TCP sem bloquear o FTP ativo.

Se você tem a opção de usar o modo passivo, então bem; modo passivofaz as conexäes de dados de cliente para servidor, até mesmo para dados deentrada. Caso contrário, é recomendado que você somente permita conexõesTCP para portas acima de 1024 e não entre 6000 e 6010 (6000 é usada peloX-Window).

Page 71: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

71

5.5.3 Filtrando o Ping of Death (ping da morte)Computadores Linux são agora imunes aos famosos Ping of Death, que

envolve o envio de grandes pacotes ICMP ilegais que sobrecarrega os buffersna pilha TCP no receptor e causa destruição.

Se você está protegendo computadores que podem ser vulneráveis,você deve simplesmente bloquear fragmentos ICMP. Pacotes normais ICMPnão são grandes o bastante para requerer fragmentação, assim você não devebloquear nada exceto grandes pings. Eu tenho ouvido (não confirmados)relatos que muitos sistemas requerem somente o último fragmento de umpacote ICMP acima de seu tamanho para o corromper, assim bloquearsomente o primeiro fragmento não é recomendado.

Sobre os programas exploit e tenho sempre visto que todos usam ICMP,não existem razões que fragmentos TCP ou UDP (ou um protocolodesconhecido) possa ser usado neste ataque, assim bloqueando fragmentosICMP é somente uma solução temporária.

5.5.4 Filtrando o Teardrop e BonkTeardrop e Bonk são dois ataques (principalmente sobre máquinas

Microsoft Windows NT) que confiam em fragmentos sobrepostos. Tendo seuroteador Linux fazendo desfragmentação, ou não permitindo todos osfragmentos para suas máquinas vulneráveis são as outras opções.

5.5.5 Filtrando Bombas de FragmentoAlgumas pilhas TCP são comentadas por ter problemas negociando com

grandes números de fragmentos de pacotes quando eles não recebem todosos fragmentos. Linux não tem este problema. Você pode filtrar forafragmentos (que podem interromper legitimos usuários) ou compilar seu kernelcom “IP: always defragment” ajustado para “Y” (somente se seu computadorlinux é o roteador para estes pacotes).

5.5.6 Modificando regras do firewallExistem alguns assuntos cronometrados envolvidos em alterar regras do

firewall. Se você não é cuidadoso, você pode deixar pacotes passaremenquanto estiver fazendo suas alterações. Uma solução simplíssima é fazer oseguinte:

# ipchains -I input 1 -j DENY# ipchains -I output 1 -j DENY# ipchains -I forward 1 -j DENY

... faz alterações ...

# ipchains -D input 1

Page 72: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

72

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

Isto bloqueia todos os pacotes durante as alterações.Se suas alterações são restritas para um chain simples, você deve criar

um novo chain com novas regras, e então trocar (“-R”) a regra que aponta parao antigo chain para a nova que aponta para o novo chain: então você podeapagar o antigo chain. Esta substituição ocorrerá atomicamente.

5.5.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. Desde que a filtragem de pacotes faz decisões baseadas noendereço de origem, IP spoofing ‘ usado para filtros de pacotes bobos. Ele étambém usado para ocultar a identidade de atacantes usando ataques SYN,Teardrop, Ping of Death e outros (não se preocupe se não sabe o que elesfazem).

O melhor meio para proteger de IP spoofing é chamado Verificação doendereço de Origem, e é feito pelo código de roteamento, e não o firewallcompletamente. Procure por um arquivo chamado/proc/sys/net/ipv4/conf/all/rp_filter. Se ele existe, então ligando a Verificação doEndereço de Origem (Source Address Verification) em cada inicialização é asolução certa para você. Para fazer isto, insira as seguintes linhas emqualquer lugar de seus scripts init, antes de qualquer placa de rede serinicializada:

# This is the best method: turn on Source Address Verification and get# spoof protection on all current and future interfaces.if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; thenecho -n “Setting up IP spoofing protection...”for f in /proc/sys/net/ipv4/conf/*/rp_filter; doecho 1 > $f done echo “done.”elseecho PROBLEMS SETTING UP IP SPOOFING PROTECTION. BE WORRIED. echo “CONTROL-Dwill exit from this shell and continue system startup.”echo# Start a single user shell on the console/sbin/sulogin $CONSOLEfi

Se você não puder fazer isto, você pode inserir manualmente regraspara proteger cada interface. Isto requer conhecimento de cada interface. Oskernels 2.1 automáticamente rejeitam pacotes dizendo vir de endereços 127.*(reservados para a interfaceloopback local, lo).

Por exemplo, digamos que temos três interfaces, eth0, eth1 e ppp0. Nóspodemos usar ifconfig para nos dizer o endereço e netmask das interfaces.Digamos eth0 foi ligada a rede 192.168.1.0 com a netmasq 255.255.255.0, eth1foi ligada a rede 10.0.0.0 com a netmask 255.0.0.0, e ppp0 conectado com a

Page 73: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

73

internet (onde qualquer endereço exceto endere‡os IP privados sãopermitodos), nós devemos inserir as seguintes regras:

# ipchains -A input -i eth0 -s ! 192.168.1.0/255.255.255.0 -j DENY# ipchains -A input -i ! eth0 -s 192.168.1.0/255.255.255.0 -j DENY# ipchains -A input -i eth1 -s ! 10.0.0.0/255.0.0.0 -j DENY# ipchains -A input -i ! eth1 -s 10.0.0.0/255.0.0.0 -j DENY

Esta idéia não é tão boa como a Verificação do endereço de origem,porque se sua rede muda, você deve mudar suas regras de firewall paraprevenila.

Se você está executando um kernel da série 2.0, você pode desejarproteger a interface loopback também, usando uma regra como esta:

# ipchains -A input -i ! lo -s 127.0.0.0/255.0.0.0 -j DENY

5.6 Problemas comuns

5.6.1 ipchains -L Trava!Você está provavelmente bloqueando chamada DNS; e eventualmente o

time out. Tente usar a opção “-n” (númerico) com ipchains, que não mostranomes.

5.6.2 Masquerading/Forwarding não funciona!Certifique-se que o forward de pacotes está ativado (em kernels

recentes é desativado por padrão, dizendo que pacotes nunca tentamatravessar o chain “forward”). Você pode alterar isto (como root) digitando:

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

Se isto funciona para você, coloque isto em algum lugar em seus scriptsde inicialização assim ele será ativado toda hora; você deve configurar seufirewall antes de executar este comando, caso contrário existe umaoportunidade de pacotes escaparem.

5.6.3 -j REDIR não funciona!Você deve permitir pacotes forward (veja acima) para o

redirecionamento funcionar; caso contrário o código de roteamento bloqueia opacote. Assim se você está simplesmente usando o redirecionamento, e nãotem qualquer forward, você deverá estar atento a isto.

Page 74: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

74

Note que REDIR (sendo no chain input) não afeta conexões de umprocesso local.

5.6.4 Coringas nas Interfaces não funcinam!Existe um bug nas versões 2.1.102 e 2.1.103 do kernel (e alguns

patches antigos que produzi) que fazem comandos ipchains falharem aoespecificar uma inteface com coringas (tal como -i ppp+).

Isto está corrigido nos kernels mais recentes, e no patch 2.0.34 do website. Você pode também pode corrigir alterando o fonte do kernel alterando alinha 63 ou assim em include/linu/ip_fw.h

#define IP_FW_F_MASK 0x002F /* All possible flag bits mask */

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

5.6.5 TOS 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.1.102 entre 2.1.111. Esteproblema foi corrigido em 2.1.112.

5.6.6 ipautofw e ipportfw não funcionam!Para o kernel 2.0.x, isto é verdade: eu não tenho tempo para criar e

manter um patch gigantesco para ipchains e ipautofw/ipportfw.Para o kernel 2.1.x, copie Juan Ciarlante’s ipmasqadm de

http://juanjox.linuxhq.com/ e use-o exetamente como usaria como ipautofw ouipportfw, exceto ao invés de ipportfw você digita ipmasqadm portfw, e ao invésde ipautofw você deve digitar ipmasqadm autofw.

5.6.7 xosview está quebrado!Atualize para a versão 1.6.0 ou superior, que não requerem qualquer

regra de firewall para kernels 2.1.x. Isto parece ter quebrado denovo nolançamento 1.6.1; por favor fale sobre o erro para o autor (este erro não émeu).

5.6.8 Falta de Segmentação com “-j REDIRECT”!Este foi um bug no ipchains versão 1.3.3. Por favor atualize.

5.6.9 Eu não posso configurar tempo limite no masquerade!Verdadeiro (para kernels 2.1.x) até 2.1.123. Em 2.1.124, tentando

configurar o tempo limite no masquerading causava uma chamada no kernel

Page 75: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

75

(altere return para ret = na linha 1328 de net/ipv4/ip_fw.c). Em 2.1.125,funciona corretamente.

5.6.10 Eu desejo proteger IPX!Assim como outros, eu vejo. Meu código somente cobre IP,

infelizmente. Do lado bom, todos os ganchos estão lá para IPX! Você apenasprecisa re-escrever o código; Eu ficaria feliz em ajudar onde for possível.

Page 76: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

76

6 FIREWALL IPTABLESAdaptado do Guia Foca GNU/Linux Avançado – Capítulo 9.

Este capítulo documenta o funcionamento do firewall iptables queacompanha a série do kernel 2.4, opções usadas, e aponta alguns pontosfundamentais para iniciar a configuração e construção de bons sistemas defirewall.

6.1 IntroduçãoO Firewall é um programa que como objetivo proteger a máquina contra

acessos indesejados, tráfego indesejado, proteger serviços que estejamrodando na máquina e bloquear a passagem de coisas que você não desejareceber (como conexões vindas da Internet para sua segura rede local,evitando acesso aos dados corporativos de uma empresa ou a seus dadospessoais). No kernel do Linux 2.4, foi introduzido o firewall iptables (tambémchamado de netfilter) que substitui o ipchains dos kernels da série 2.2. Estenovo firewall tem como vantagem ser muito estável (assim como o ipchains eipfwadm), confiável, permitir muita flexibilidade na programação de regras peloadministrador do sistema, mais opções disponíveis ao administrador paracontrole de tráfego, controle independente do tráfego da rede local/entreredes/interfaces devido a nova organização das etapas de roteamento depacotes.

O iptables é um firewall a nível de pacotes e funciona baseado noendereço/porta de origem/destino do pacote, prioridade, etc. Ele funcionaatravés da comparação de regras para saber se um pacote tem ou nãopermissão para passar. Em firewalls mais restritivos, o pacote é bloqueado eregistrado para que o administrador do sistema tenha conhecimento sobre oque está acontecendo em seu sistema.

Ele também pode ser usado para modificar e monitorar o tráfego darede, fazer NAT (masquerading, source nat, destination nat), redirecionamentode pacotes, marcação de pacotes, modificar a prioridade de pacotes quechegam/saem do seu sistema, contagem de bytes, dividir tráfego entremáquinas, criar proteções anti-spoofing, contra syn flood, DoS, etc. O tráfegovindo de máquinas desconhecidas da rede pode também serbloqueado/registrado através do uso de simples regras. As possibilidadesoferecidas pelos recursos de filtragem iptables como todas as ferramentasUNIX maduras dependem de sua imaginação, pois ele garante uma grandeflexibilidade na manipulação das regras de acesso ao sistema, precisandoapenas conhecer quais interfaces o sistema possui, o que deseja bloquear, oque tem acesso garantido, quais serviços devem estar acessíveis para cadarede, e iniciar a construção de seu firewall.

O iptables ainda tem a vantagem de ser modularizável, funções podemser adicionadas ao firewall ampliando as possibilidades oferecidas. Usei por 2anos o ipchains e afirmo que este é um firewall que tem possibilidades degerenciar tanto a segurança em máquinas isoladas como roteamento em

Page 77: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

77

grandes organizações, onde a passagem de tráfego entre redes deve serminuciosamente controlada.

Um firewall não funciona de forma automática (instalando e esperar queele faça as coisas por você), é necessário pelo menos conhecimentos básicosde rede tcp/ip, roteamento e portas para criar as regras que farão a segurançade seu sistema. A segurança do sistema depende do controle das regras queserão criadas por você, as falhas humanas são garantia de mais de 95% desucesso nas invasões.

Enfim o iptables é um firewall que agradará tanto a pessoas quedesejam uma segurança básica em seu sistema, quando administradores degrandes redes que querem ter um controle minucioso sobre o tráfego quepassam entre suas interfaces de rede (controlando tudo o que pode passar deuma rede a outra), controlar o uso de tráfego, monitoração, etc.

6.1.1 VersãoÉ assumido que esteja usando a versão 1.2.3 do iptables e baseadas

nas opções do kernel 2.4.16 (sem o uso de módulos experimentais). Asexplicações contidas aqui podem funcionar para versões posteriores, 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çõesfornecidas aqui.

6.1.2 Um resumo da história do iptablesO iptables é um código de firewall das versões 2.4 do kernel, que

substituiu o ipchains (presente nas séries 2.2 do kernel). Ele foi incluído nokernel da série 2.4 em meados de Junho/Julho de 1999.

A história do desenvolvimento (desde o porte do ipfw do BSD para oLinux até o iptables (que é a quarta geração de firewalls do kernel) estádisponível no documento, Netfilter-howto.

6.1.3 Características do firewall iptables• Especificação de portas/endereço de origem/destino

• Suporte a protocolos TCP/UDP/ICMP (incluindo tipos de mensagensicmp)

• 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 dotráfego que entra/sai da máquina e tráfego redirecionado.

• Permite um número ilimitado de regras por chain

• Muito rápido, estável e seguro

• Possui mecanismos internos para rejeitar automaticamente pacotesduvidosos ou mal formados.

Page 78: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

78

• Suporte a módulos externos para expansão das funcionalidades padrõesoferecidas pelo código de firewall

• Suporte completo a roteamento de pacotes, tratadas em uma áreadiferente de tráfegos padrões.

• Suporte a especificação de tipo de serviço para priorizar o tráfego dedeterminados tipos 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áfegoaceito/bloqueado.

• Redirecionamento de portas

• Masquerading

• Suporte a SNAT (modificação do endereço de origem das máquinaspara um único IP ou faixa de IP's).

• Suporte a DNAT (modificação do endereço de destino das máquinaspara 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 paracriar proteções contra, syn flood, ping flood, DoS, etc).

6.1.4 Ficha técnicaPacote: iptables

• iptables - Sistema de controle principal para protocolos ipv4

• ip6tables - Sistema de controle principal para protocolos ipv6

• iptables-save - Salva as regras atuais em um arquivo especificado comoargumento. Este utilitário pode ser dispensado por um shell scriptcontendo as regras executado na inicialização da máquina.

• iptables-restore - Restaura regras salvas pelo utilitário iptables-save.

6.1.5 RequerimentosÉ necessário que o seu kernel tenha sido compilado com suporte ao

iptables (veja Habilitando o suporte ao iptables no kernel, Section 9.1.15. Orequerimento mínimo de memória necessária para a execução do iptables é omesmo do kernel 2.4 (4MB). Dependendo do tráfego que será manipuladopela(s) interface(s) do firewall ele poderá ser executado com folga em umamáquina 386 SX com 4MB de RAM.

Page 79: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

79

Como as configurações residem no kernel não é necessário espaçoextra em disco rígido para a execução deste utilitário.

6.1.6 Arquivos de logs criados pelo iptablesTodo tráfego que for registrado pelo iptables é registrado por padrão no

arquivo /var/log/kern.log.

6.1.7 Instalação

apt-get install iptables

O pacote iptables contém o utilitário iptables (e ip6tables para redesipv6) necessários para inserir suas regras no kernel. Se você não sabe o que éipv6, não precisará se preocupar com o utilitário ip6tables por enquanto.

6.1.8 Enviando Correções/Contribuindo com o projetoA página principal do projeto é http://netfilter.filewatcher.org. Sugestões

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

6.1.9 O que aconteceu com o ipchains e ipfwadm?O iptables faz parte da nova geração de firewalls que acompanha o

kernel 2.4, mas o suporte ao ipchains e ipfwadm ainda será mantido no kernelaté 2004. Seria uma grande falta de consideração retirar o suporte a estesfirewalls do kernel como forma de obrigar a "aprenderem" o iptables (mesmo osuporte sendo removido após este período, acredito que criarão patches"externos" para futuros kernels que não trarão mais este suporte). Se precisado suporte a estes firewalls antes de passar em definitivo para o iptables leiaHabilitando o suporte ao iptables no kernel, Section 9.1.15.

Se você é um administrador que gosta de explorar todos os recursos deum firewall, usa todos os recursos que ele oferece ou mantém uma complexarede corporativa, tenho certeza que gostará do iptables.

6.1.10 Tipos de firewallsExistem basicamente dois tipos de firewalls:

• nível de aplicação - Este tipo de firewall analisam o conteúdo do pacotepara tomar suas decisões de filtragem. Firewalls deste tipo são maisintrusivos (pois analisam o conteúdo de tudo que passa por ele) epermitem um controle relacionado com o conteúdo do tráfego. Algunsfirewalls a nível de aplicação combinam recursos básicos existentes emfirewalls a nível de pacotes combinando as funcionalidade de controle detráfego/controle de acesso em uma só ferramenta. Servidores proxy,como o squid, são um exemplo deste tipo de firewall.

Page 80: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

80

• nível de pacotes - Este tipo de firewall toma as decisões baseadas nosparâmetros do pacote, como porta/endereço de origem/destino, estadoda conexão, e outros parâmetros do pacote. O firewall então podenegar o pacote (DROP) ou deixar o pacote passar (ACCEPT). Oiptables é um excelente firewall que se encaixa nesta categoria.

Firewall a nível de pacotes é o assunto explicado nesta seção do guia.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áquinasclientes.

6.1.11 O que proteger?Antes de iniciar a construção do firewall é bom pensar nos seguintes

pontos:• Quais serviços precisa proteger. Serviços que devem ter acesso

garantido a usuários externos e quais serão bloqueados atodas/determinadas máquinas. É recomendável bloquear o acesso atodas portas menores que 1024 por executarem serviços que rodamcom privilégio de usuário root, e autorizar somente o acesso as portasque realmente deseja (configuração restritiva nesta faixa de portas).

• Que tipo de conexões eu posso deixar passar e quais bloquear.Serviços com autenticação em texto plano e potencialmente inseguroscomo rlogin, telnet, ftp, NFS, DNS, LDAP, SMTP RCP, X-Window sãoserviços que devem ser ter acesso garantido somente paramáquinas/redes que você confia. Estes serviços podem não ser sóusados para tentativa de acesso ao seu sistema, mas também comoforma de atacar outras pessoas aproveitando-se de problemas deconfiguração.

A configuração do firewall ajuda a prevenir isso, mesmo se um serviçoestiver mal configurado e tentando enviar seus pacotes para fora, seráimpedido. Da mesma forma se uma máquina Windows de sua rede forinfectada por um trojan não haverá pânico: o firewall poderá estarconfigurado para bloquear qualquer tentativa de conexão vinda dainternet (cracker) para as máquinas de sua rede.

Para cópia de arquivos via rede insegura (como através daInternet), é recomendado o uso de serviços que utilizam criptografia paralogin e cópia de arquivos (veja Servidor ssh, Chapter 14).

• Que máquinas terão acesso livre e quais serão restritas.

• Que serviços deverão ter prioridade no processamento.

• Que máquinas/redes NUNCA deverão ter acesso a certas/todasmáquinas.

• O volume de tráfego que o servidor manipulará. Através disso vocêpode ter que balancear o tráfego entre outras máquinas, configurarproteções contra DoS, syn flood, etc.

Page 81: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

81

• O que tem permissão de passar de uma rede para outra (em máquinasque atuam como roteadores/gateways de uma rede interna).

• Etc.A análise destes pontos pode determinar a complexidade do firewall,

custos de implementação, prazo de desenvolvimento e tempo de maturidadedo código para implementação. Existem muitos outros pontos que podementrar na questão de desenvolvimento de um sistema de firewall, elesdependem do tipo de firewall que está desenvolvendo e das políticas desegurança de sua rede.

6.1.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) deacordo com o endereço/porta de origem/destino, interface de origem/destino,etc. As regras são armazenadas dentro dos chains e processadas na ordemque são inseridas.

As regras são armazenadas no kernel, o que significa que quando ocomputador for reiniciado tudo o que fez será perdido. Por este motivo elasdeverão ser gravadas em um arquivo para serem carregadas a cadainicialização.

Um exemplo de regra: iptables -A INPUT -s 123.123.123.1 -jDROP.

6.1.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. Existem dois tipos de chains: osembutidos (como os chains INPUT, OUTPUT e FORWARD) e os criados pelousuário. Os nomes dos chains embutidos devem ser especificados sempre emmaiúsculas (note que os nomes dos chains são case-sensitive, ou seja, o chaininput é completamente diferente de INPUT).

6.1.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. As tabelas podem serreferenciadas com a opção -t tabela e existem 3 tabelas disponíveis noiptables:

• filter - Esta é a tabela padrão, contém 3 chains padrões:

o INPUT - Consultado para dados que chegam a máquina

o OUTPUT - Consultado para dados que saem da máquina

o FORWARD - Consultado para dados que são redirecionados paraoutra interface de rede ou outra máquina.

Page 82: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

82

Os chains INPUT e OUTPUT somente são atravessados por conexõesindo/se originando de localhost. OBS: Para conexões locais, somenteos chains INPUT e OUTPUT são consultados na tabela filter.

• nat - Usada para dados que gera outra conexão (masquerading, sourcenat, destination nat, port forwarding, proxy transparente são algunsexemplos). Possui 3 chains padrões:

o PREROUTING - Consultado quando os pacotes precisam sermodificados logo que chegam. É o chain ideal para realização deDNAT e redirecionamento de portas (Fazendo DNAT, Section9.4.4).

o OUTPUT - Consultado quando os pacotes gerados localmenteprecisam ser modificados antes de serem roteados. Este chainsomente é consultado para conexões que se originam de IPs deinterfaces locais.

o POSTROUTING - Consultado quando os pacotes precisam sermodificados após o tratamento de roteamento. É o chain idealpara realização de SNAT e IP Masquerading (Fazendo SNAT,Section 9.4.3).

• mangle - Utilizada para alterações especiais de pacotes (como modificaro tipo de serviço (TOS) ou outros detalhes que serão explicados nodecorrer do capítulo. Possui 2 chains padrões:

o PREROUTING - Consultado quando os pacotes precisam sermodificados logo que chegam.

o OUTPUT - Consultado quando pacotes gerados localmenteprecisam ser modificados antes de serem roteados.

Veja A tabela mangle, Section 9.5 para mais detalhes sobre a tabelamangle.

6.1.15 Habilitando o suporte ao iptables no kernelPara usar toda a funcionalidade do firewall iptables, permitindo fazer o

controle do que tem ou não permissão de acessar sua máquina, fazerMasquerading/NAT em sua rede, etc., você precisará dos seguintescomponentes compilados em seu kernel (os módulos experimentais foraignorados intencionalmente):

* * Network Options: *

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

e na Subseção:

Page 83: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

83

* * 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 ouso e configuração do seu firewall iptables, ela ativa os módulos necessáriospara utilização de todos os recursos do firewall iptables. Quando conhecer afunção de cada um dos parâmetros acima (durante o decorrer do texto), vocêpoderá eliminar muitas das opções desnecessárias para seu estilo de firewallou continuar fazendo uso de todas ;-)

OBS1: A configuração acima leva em consideração que você NÃOexecutará os códigos antigos de firewall ipfwadm e ipchains. Caso desejeutilizar o ipchains ou o ipfwadm, será preciso responder com "M" a questão "IPtables support (required for filtering/masq/NAT) (CONFIG_IP_NF_IPTABLES)".Será necessário carregar manualmente o módulo correspondente ao firewallque deseja utilizar (modprobe iptables_filter.o no caso do iptables).

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, caso contrário será necessário compilar todas as partes necessáriasembutidas no kernel, carregar os módulos necessários manualmente ou peloiptables (através da opção --modprobe=módulo).

Page 84: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

84

6.1.16 Ligando sua rede interna a InternetSe a sua intenção (como da maioria dos usuários) é conectar sua rede

interna a Internet de forma rápida e simples, leia Fazendo IP masquerading(para os apressados), Section 9.4.2 ou Fazendo SNAT, Section 9.4.3. Umexemplo prático de configuração de Masquerading deste tipo é encontrado emConectando sua rede interna a Internet, Section 9.8.3.

Após configurar o masquerading, você só precisará especificar oendereço IP da máquina masquerading (servidor) como Gateway da rede. NoWindows 9x/NT/2000 isto é feito no Painel de Controle/Rede/Propriedades deTcp/IP. No Linux pode ser feito com route add default gw IP_do_Servidor.

6.2 Manipulando chainsAs opções passadas ao iptables usadas para manipular os chains são

SEMPRE em maiúsculas. As seguintes operações podem ser realizadas comos chains:

6.2.1 Adicionando regras - AComo exemplo vamos criar uma regra que bloqueia o acesso a nosso

própria máquina (127.0.0.1 - loopback). Primeiro daremos um ping paraverificar seu funcionamento:

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

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

Ok, a máquina responde, agora vamos incluir uma regra no chain INPUT(-A INPUT) que bloqueie (-j DROP) qualquer acesso indo ao endereço127.0.0.1 (-d 127.0.0.1):

iptables -t filter -A INPUT -d 127.0.0.1 -j DROPAgora verificamos um novo ping: #ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes

--- 127.0.0.1 ping statistics --- 2 packets transmitted, 0 packets received, 100% packet loss

Desta vez a máquina 127.0.0.1 não respondeu, pois todos os pacotescom o destino 127.0.0.1 (-d 127.0.0.1) são rejeitados (-j DROP). A opção -A éusada para adicionar novas regras no final do chain. Além de -j DROP queserve para rejeitar os pacotes, podemos também usar -j ACCEPT para aceitar

Page 85: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

85

pacotes. A opção -j é chamada de alvo da regra ou somente alvo pois define odestino do pacote que atravessa a regra (veja Especificando um alvo, Section9.3.6). Bem vindo a base de um sistema de firewall :-)

OBS1: - O acesso a interface loopback não deve ser de forma algumabloqueado, pois muitos aplicativos utilizam soquetes tcp para realizaremconexões, mesmo que você não possua uma rede interna.

OBS2: - A tabela filter será usada como padrão caso nenhuma tabelaseja especificada através da opção -t.

6.2.2 Listando regras - LA seguinte sintaxe é usada para listar as regras criadas:iptables [-t tabela] -L [chain] [opções]Onde:tabela

É uma das tabelas usadas pelo iptables. Se a tabela não forespecificada, a tabela filter será usada como padrão. Veja O que sãotabelas?, Section 9.1.14 para detalhes.chain

Um dos chains disponíveis na tabela acima (veja O que sãotabelas?, Section 9.1.14) ou criado pelo usuário (Criando um novo chain- N, Section 9.2.6). Caso o chain não seja especificado, todos os chainsda tabela serão mostrados.opções

As seguintes opções podem ser usadas para listar o conteúdo dechains:

• -v - Exibe mais detalhes sobre as regras criadas nos chains.

• -n - Exibe endereços de máquinas/portas como números ao invésde tentar a resolução DNS e consulta ao /etc/services. Aresolução de nomes pode tomar muito tempo dependendo daquantidade de regras que suas tabelas possuem e velocidade desua conexão.

• -x - Exibe números exatos ao invés de números redondos.Também mostra a faixa de portas de uma regra de firewall.

• --line-numbers - Exibe o número da posição da regra na primeiracoluna da listagem.

Para listar a regra criada anteriormente usamos o comando:

#iptables -t filter -L INPUT

Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- anywhere localhost

Page 86: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

86

O comando iptables -L INPUT -n tem o mesmo efeito, a diferença é quesão mostrados números ao invés de nomes:

#iptables -L INPUT -n

Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 0.0.0.0/0 127.0.0.1

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

Chain INPUT (policy ACCEPT) num target prot opt source destination 1 DROP all -- 0.0.0.0/0 127.0.0.1

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

Os campos assim possuem o seguinte significado:Chain INPUT

Nome do chain listado(policy ACCEPT 78 packets, 5820 bytes)

Policiamento padrão do chain (veja Especificando o policiamentopadrão de um chain - P, Section 9.2.11).pkts

Quantidade de pacotes que atravessaram a regra (veja Zerandocontador de bytes dos chains - Z, Section 9.2.10).bytes

Quantidade de bytes que atravessaram a regra. Pode serreferenciado com K (Kilobytes), M (Megabytes), G (Gigabytes).target

O alvo da regra, o destino do pacote. Pode ser ACCEPT, DROPou outro chain. Veja Especificando um alvo, Section 9.3.6 para detalhessobre a especificação de um alvo.prot

Protocolo especificado pela regra. Pode ser udp, tcp, icmp ou all.Veja Especificando um protocolo, Section 9.3.3 para detalhes.opt

Page 87: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

87

Opções extras passadas a regra. Normalmente "!" (vejaEspecificando uma exceção, Section 9.3.5) ou "f" (veja Especificandofragmentos, Section 9.3.4).in

Interface de entrada (de onde os dados chegam). VejaEspecificando a interface de origem/destino, Section 9.3.2.out

Interface de saída (para onde os dados vão). Veja Especificandoa interface de origem/destino, Section 9.3.2.source

Endereço de origem. Veja Especificando um endereço deorigem/destino, Section 9.3.1.destination

Endereço de destino. Veja Especificando um endereço deorigem/destino, Section 9.3.1.outras opções

Estas opções normalmente aparecem quando são usadas aopção -x:

• dpt ou dpts - Especifica a porta ou faixa de portas de destino.

• reject-with icmp-port-unreachable - Significa que foi usado o alvoREJECT naquela regra (veja Alvo REJECT, Section 9.3.6.1).

6.2.3 Apagando uma regra - DPara apagar um chain, existem duas alternativas:

1. Quando sabemos qual é o número da regra no chain (listado com aopção -L) podemos referenciar o número diretamente. Por exemplo,para apagar a regra criada acima:

iptables -t filter -D INPUT 1Esta opção não é boa quando temos um firewall complexo com

um grande número de regras por chains, neste caso a segunda opção éa mais apropriada.

2. Usamos a mesma sintaxe para criar a regra no chain, mas trocamos -Apor -D:

iptables -t filter -D INPUT -d 127.0.0.1 -j DROPEntão a regra correspondentes no chain INPUT será

automaticamente apagada (confira listando o chain com a opção "-L").Caso o chain possua várias regras semelhantes, somente a primeiraserá apagada.

Page 88: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

88

6.2.4 Inserindo uma regra - IPrecisamos que o tráfego vindo de 192.168.1.15 não seja rejeitado pelo

nosso firewall. Não podemos adicionar uma nova regra (-A) pois esta seriaincluída no final do chain e o tráfego seria rejeitado pela primeira regra (nuncaatingindo a segunda). A solução é inserir a nova regra antes da regra quebloqueia todo o tráfego ao endereço 127.0.0.1 na posição 1:

iptables -t filter -I INPUT 1 -s 192.168.1.15 -d 127.0.0.1 -j ACCEPTApós este comando, 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 anúmero 2. Desta forma a regra acima será consultada, se a máquina deorigem for 192.168.1.15 então o tráfego estará garantido, caso contrário otráfego com o destino 127.0.0.1 será bloqueado na regra seguinte.

6.2.5 Substituindo uma regra - RApós criar nossa regra, percebemos que a nossa intenção era somente

bloquear os pings com o destino 127.0.0.1 (pacotes ICMP) e não havianecessidade de bloquear todo o tráfego da máquina. Existem duasalternativas: apagar a regra e inserir uma nova no lugar ou modificardiretamente a regra já criada sem afetar outras regras existentes e mantendo asua ordem no chain (isso é muito importante). Use o seguinte comando:

iptables -R INPUT 2 -d 127.0.0.1 -p icmp -j DROPO número 2 é o número da regra que será substituída no chain INPUT, e

deve ser especificado. O comando acima substituirá a regra 2 do chain INPUT(-R INPUT 2) bloqueando (-j DROP) qualquer pacote icmp (-p icmp) com odestino 127.0.0.1 (-d 127.0.0.1).

6.2.6 Criando um novo chain - NEm firewalls organizados com um grande número de regras, é

interessante criar chains individuais para organizar regras de um mesmo tipoou que tenha por objetivo analisar um tráfego de uma mesma categoria(interface, endereço de origem, destino, protocolo, etc) pois podem consumirmuitas linhas e tornar o gerenciamento do firewall confuso (econseqüentemente causar sérios riscos de segurança). O tamanho máximo deum nome de chain é de 31 caracteres e podem conter tanto letras maiúsculasquanto minúsculas.

iptables [-t tabela] [-N novochain]

Para criar o chain internet (que pode ser usado para agrupar as regrasde 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.200.200.200 -j DROP

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

Page 89: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

89

iptables -t filter -A INPUT -j internetOBS: O chain criando pelo usuário pode ter seu nome tanto em

maiúsculas como minúsculas.Se uma máquina do endereço 200.200.200.200 tentar acessar sua

máquina, o iptables consultará as seguintes regras: `INPUT' internet'

---------------------------- -----------------------------

| Regra1: -s 192.168.1.15 | | Regra1: -s 200.200.200.200|

|--------------------------| |---------------------------|

| Regra2: -s 192.168.1.1 | | Regra2: -d 192.168.1.1 |

|--------------------------| -----------------------------

| Regra3: -j DROP |

----------------------------

O pacote tem o endereço de origem

200.200.200.200, ele passa pela

primeira e segunda regras do chain

INPUT, a terceira regra direciona

para o chain internet _______________________________________

v / v

/-------------------------|-\ / /-------------------------------------|-\

| Regra1: -s 192.168.1.15 | | / | Regra1: -s 200.200.200.200 -j DROP \_____\

|-------------------------|-| / |---------------------------------------| /

| Regra2: -s 192.168.1.1 | | / | Regra2: -d 200.200.200.202 -j DROP |

|-------------------------|-|/ \---------------------------------------/

| Regra3: -j internet /|

|---------------------------| No chain internet, a primeira regra confere

| Regra4: -j DROP | com o endereço de origem 200.200.200.200 e

\---------------------------/ o pacote é bloqueado.

Se uma máquina com o endereço de origem 200.200.200.201 tentaracessar a máquina, então as regra consultadas serão as seguintes: O pacote tem o endereço de origem

200.200.200.201, ele passa pela

primeira e segunda regras do chain

INPUT, a terceira regra direciona

para o chain internet ______________________________________

v / v

/-------------------------|-\ / /-------------------------------------|-\

| Regra1: -s 192.168.1.15 | | / | Regra1: -s 200.200.200.200 -j DROP | |

|-------------------------|-| / |-------------------------------------|-|

| Regra2: -s 192.168.1.1 | | / | Regra2: -s 200.200.200.202 -j DROP | |

|-------------------------|-|/ \-------------------------------------|-/

| Regra3: -j internet /| v

|---------------------------| /

| Regra4: -j DROP --+-------------------------------------------

\------------------------/-/ O pacote passa pelas regras 1 e 2 do chain

| internet, como ele 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.

que diz para rejeitar o

pacote.

Page 90: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

90

6.2.7 Listando os nomes de todos os chains atuaisUse o comando cat /proc/net/ip_tables_names para fazer isto. É

interessante dar uma olhada nos arquivos dentro do diretório /proc/net, poispodem lhe ser interessantes.

6.2.8 Limpando as regras de um chain - FPara 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.chain

Chain que desejamos limpar. Caso um chain não sejaespecificado, todos os chains da tabela serão limpos. iptables -t filter -F INPUT iptables -t filter -F

6.2.9 Apagando um chain criado pelo usuário - XPara apagarmos um chain criado pelo usuário, usamos a seguinte

sintaxe:iptables [-t tabela] [-X chain]Onde:tabela

Nome da tabela que contém o chain que desejamos excluir.chain

Nome do chain que desejamos apagar. Caso não sejaespecificado, todos os chains definidos pelo usuário na tabelaespecificada serão excluídos.OBS: - Chains embutidos nas tabelas não podem ser apagados pelo

usuário. Veja os nomes destes chains em “6.1.14 O que são tabelas?”.

iptables -t filter -X internet iptables -X

6.2.10 Zerando contador de bytes dos chains - ZEste comando zera o campo pkts e bytes de uma regra do iptables.

Estes campos podem ser visualizados com o comando iptables -L -v. Aseguinte sintaxe é usada:

iptables [-t tabela] [-Z chain] [-LOnde:tabela

Page 91: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

91

Nome da tabela que contém o chain que queremos zerar oscontadores de bytes e pacotes.chain

Chain que deve ter os contadores zerados. Caso não sejaespecificado, todos os chains da tabela terão os contadores zerados.Note que as opções -Z e -L podem ser usadas juntas, assim o chainserá listado e imediatamente zerado. Isto evita a passagem de pacotesdurante a listagem de um chain.

iptables -t filter -Z INPUT

6.2.11 Especificando o policiamento padrão de um chain - PO policiamento padrão determina o que acontecerá com um pacote

quando ele chegar ao final das regras contidas em um chain. O policiamentopadrã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 opoliciamento padrão.chain

Define o chain que terá o policiamento modificado. O chain deveser especificado.ACCEPT/DROP

ACCEPT aceita os pacotes caso nenhuma regra do chain conferir(usado em regras permissivas). DROP rejeita os pacotes caso nenhumaregra do chain conferir (usado em regras restritivas).O policiamento padrão de um chain é mostrado com o comando iptables

-L:

# iptables -L INPUT

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

No exemplo acima, o policiamento padrão de INPUT é ACCEPT (policyACCEPT), o que significa que qualquer pacote que não seja rejeitado pelaregra do chain, será aceito. Para alterar o policiamento padrão deste chainusamos o comando:

iptables -t filter -P INPUT DROP

Page 92: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

92

OBS: Note que policiamentos PERMISSIVOS (ACCEPT) normalmentesã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).

6.3 Outras opções do iptables

6.3.1 Especificando um endereço de origem/destinoAs opções -s (ou --src/--source)e -d (ou --dst/--destination) servem para

especificar endereços de origem e destino respectivamente. É permitido usarum endereço IP completo (como 192.168.1.1), um hostname (debian), umendereço fqdn (www.debian.org) ou um par rede/máscara (como200.200.200.0/255.255.255.0 ou 200.200.200.0/24).

Caso um endereço/máscara não sejam especificados, é assumido 0/0como padrão (todos as máquinas de todas as redes). A interpretação dosendereços de origem/destino dependem do chain que está sendo especificado(como INPUT e OUTPUT por exemplo).

OBS: Caso seja especificado um endereço fqdn e este resolver mais deum endereço IP, serão criadas várias regras, cada uma se aplicando a esteendereço IP específico. É recomendável sempre que possível a especificaçãode endereços IP's nas regras, pois além de serem muito rápidos (pois nãoprecisar de resolução DNS) são mais seguros para evitar que nosso firewallseja enganado por um ataque de IP spoofing.

# Bloqueia o tráfego vindo da rede 200.200.200.*: iptables -A INPUT -s 200.200.200.0/24 -j DROP

# Bloqueia conexões com o destino 10.1.2.3: iptables -A OUTPUT -d 10.1.2.3 -j DROP

# Bloqueia o tráfego da máquina www.dominio.teste.org a rede 210.21.1.3 # nossa máquina possui o endereço 210.21.1.3 iptables -A INPUT -s www.dominio.teste.org -d 210.21.1.3 -j DROP

6.3.2 Especificando a interface de origem/destinoAs opções -i (ou --in-interface) e -o (ou --out-interface) especificam as

interfaces de origem/destino de pacotes. Nem todos as chains aceitam asinterfaces de origem/destino simultaneamente, a interface de entrada (-i) nuncapoderá ser especificada em um chain OUTPUT e a interface de saída (-o)nunca poderá ser especificada em um chain INPUT. Abaixo uma rápidareferência: +---------------------+--------------------------------+ TABELA | CHAIN | INTERFACE | | +----------------+---------------+

Page 93: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

93

| | 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 é determinadapela posição dos chains nas etapas de roteamento do pacote. O chainOUTPUT da tabela filter somente poderá conter a interface de saída (veja atabela acima). O chain FORWARD da tabela filter é o único que aceita aespecificação de ambas as interfaces, este é um ótimo chain para controlar otráfego que passa entre interfaces do firewall.

Por exemplo para bloquear o acesso do tráfego de qualquer máquinacom o endereço 200.123.123.10 vinda da interface ppp0 (uma placa de fax-modem):

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

A mesma regra pode ser especificada como

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

O sinal de "+" funciona como um coringa, assim a regra terá efeito emqualquer interface de ppp0 a ppp9. As interfaces ativas no momento podemser listadas com o comando ifconfig, mas é permitido especificar uma regra quefaz referência a uma interface que ainda não existe, isto é interessante paraconexões intermitentes como o PPP. Para bloquear qualquer tráfego local paraa Internet:

iptables -A OUTPUT -o ppp+ -j DROP

Para bloquear a passagem de tráfego da interface ppp0 para a interfaceeth1 (de uma de nossas redes internas):

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

Page 94: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

94

6.3.3 Especificando um protocoloA opção -p (ou --protocol) é usada para especificar protocolos no

iptables. Podem ser especificados os protocolos tcp, udp e icmp. Porexemplo, para rejeitar todos os pacotes UDP vindos de 200.200.200.200:

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

OBS1: Tanto faz especificar os nomes de protocolos em maiúsculas ouminúsculas.

6.3.3.1 Especificando portas de origem/destinoAs 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 - Especifica uma porta ou faixa de portas de

origem.

• --destination-port ou --dport - Especifica uma porta ou faixa de portas dedestino.Uma faixa de portas pode ser especificada através de

PortaOrigem:PortaDestino:

# Bloqueia qualquer pacote indo para 200.200.200.200 na faixa de # portas 0 a 1023 iptables -A OUTPUT -d 200.200.200.200 -p tcp --dport :1023 -j DROP

Caso a PortaOrigem de uma faixa de portas não seja especificada, 0 éassumida como padrão, caso a Porta Destino não seja especificada, 65535 éassumida como padrão. Caso precise especificar diversas regras queenvolvam o tratamento de portas diferentes, recomendo da uma olhada em“6.6.6 Especificando múltiplas portas de origem/destino”, antes de criar umgrande número de regras.

6.3.3.2 Especificando mensagens do protocolo ICMPO protocolo ICMP não possui portas, mas é possível fazer um controle

maior sobre o tráfego ICMP que entra/sai da rede através da especificação dostipos de mensagens ICMP. Os tipos de mensagens devem ser especificadoscom a opção "--icmp-type CódigoICMP" logo após a especificação do protocoloicmp:

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

A regra acima rejeitará mensagens ICMP do tipo "time-exceeded"(tempo de requisição excedido) que venham do endereço 200.123.123.10através da interface ppp+.

Alguns tipos de mensagens ICMP são classificados por categoria (comoo próprio "time-exceeded"), caso a categoria "time-exceeded" sejaespecificada, todas as mensagens daquela categoria (como "ttl-zero-during-

Page 95: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

95

transit", "ttl-zero-during-reassembly") conferirão na regra especificada.Os tiposde 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.

6.3.3.3 Especificando pacotes synPacotes syn são usados para iniciarem uma conexão, o uso da opção --

syn serve para especificar estes tipos de pacotes. Desta maneira é possívelbloquear somente os pacotes que iniciam uma conexão, sem afetar os pacotesrestantes. Para que uma conexão ocorra é necessário que a máquina obtenha

Page 96: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

96

a resposta a pacotes syn enviados, caso ele seja bloqueado a resposta nuncaserá retornada e a conexão não será estabelecida.

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, conexões jáefetuadas ão são afetadas por esta regra. A opção --syn somente pode serespecificada para o protocolo tcp.

ATENÇÃO: - A situação de passagem de pacotes durante deve serlevada em conta durante a inicialização do firewall, bloqueando a passagem depacotes durante o processo de configuração, criando regras que bloqueiam apassagem de pacotes (exceto para a interface loopback) até que aconfiguração do firewall esteja completa, pode ser uma solução eficiente.

Outra alternativa segura é configurar as regras de firewall antes dasinterfaces de rede se tornarem ativas (usando a opção "pre-upcomando_firewall" no arquivo de configuração /etc/network/interfaces emsistemas Debian.

6.3.4 Especificando fragmentosA opção "-f" (ou --fragment) permite especificar regras que confiram com

fragmentos. Fragmentos são simplesmente um pacote maior dividido empedaços para poder ser transmitido via rede TCP/IP para remontagem dopacote pela máquina de destino.

Somente o primeiro fragmento possui detalhes de cabeçalho para serprocessado, os segundos e seguintes somente possuem alguns cabeçalhosnecessários para dar continuidade ao processo de remontagem do pacote nodestino.

Uma regra como

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

derrubará os fragmentos de 200.200.200.1 que cheguem até nós.OBS1: Note que se o cabeçalho do pacote não tiver detalhes suficientes

para checagem de regras no iptables, a regra simplesmente não ira conferir.OBS2: Não é preciso especificar a opção "-f" para conexões NAT, pois

os pacotes são remontados antes de entrarem no código de filtragem.OBS3: A opção "-f" também pode ser usada para evitar o flood por

fragmentos (bomba de fragmentos) que, dependendo da intensidade, podematé travar a máquina.

6.3.5 Especificando uma exceçãoMuitos parâmetros como o endereço de origem/destino, protocolo, porta,

mensagens ICMP, fragmentos, etc) podem ser precedidos pelo sinal "!" quesignifica exceção. Por exemplo:

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

Page 97: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

97

Diz para rejeitar todos os pacotes EXCETO os que vem do endereço200.200.200.10.

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

Diz para bloquear todos os pacotes EXCETO os que iniciam conexões (!--syn), EXCETO para pacotes vindos na interface eth0 (! -i eth0).

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

Bloqueia todos os pacotes vindos de 200.200.200.10, EXCETO os doprotocolo tcp.

6.3.6 Especificando um alvoO alvo (-j) é o destino que um pacote terá quando conferir com as

condições de uma regra, um alvo pode dizer para bloquear a passagem dopacote (-j DROP), aceitar a passagem do pacote (-j ACCEPT), registrar opacote no sistema de log (-j LOG), rejeitar o pacote (-j REJECT), redirecionarum pacote -j REDIRECT, retornar ao chain anterior sem completar oprocessamento no chain atual (-j RETURN), passar para processamento deprogramas externos (-j QUEUE), fazer source nat (-j SNAT), destination nat (-jDNAT), etc. Podem existir mais alvos, pois o iptables é modularizável, emódulos que acrescentam mais funções podem ser carregados em adição aosjá existentes no kernel.

Nos exemplos anteriores vimos o uso de diversos alvos como o DROP eo ACCEPT. Apenas farei uma breve referência sobre os alvos mais usados emoperações mais comuns dos chains. Os alvos REDIRECT, SNAT e DNATserão explicados em uma seção seguinte:

• ACCEPT: O pacote é ACEITO e o processamento das regrasdaquele chains é concluído. Pode ser usado como alvo em todos oschains de todas as tabelas do iptables e também pode serespecificado no policiamento padrão das regras do firewall (veja“6.2.11 Especificando o policiamento padrão de um chain - P”).

• DROP: Rejeita o pacote e o processamento das regras daquelechain é concluído. Pode ser usado como alvo em todos os chains detodas as tabelas do iptables e também pode ser especificado nopoliciamento padrão das regras do firewall (veja “6.2.11Especificando o policiamento padrão de um chain - P”).

• REJECT:Este é um módulo opcional que faz a mesma função doalvo 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 somente nos chains da tabela filter.

• LOG: Este módulo envia uma mensagem ao syslog caso aregra confira, o processamento continua normalmente para a próximaregra (o pacote não é nem considerado ACEITO ou REJEITADO).

• RETURN: Retorna o processamento do chain anterior semprocessar o resto do chain atual.

Page 98: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

98

• QUEUE: Passa o processamento para um programa a nível deusuário.

6.3.6.1 Alvo REJECTPara ser usado, o módulo ipt_REJECT deve ser compilado no kernel ou

como módulo. Este alvo rejeita o pacote (como o DROP) e envia umamensagem ICMP do tipo "icmp-port-unreachable" para a máquina de origem.

É um alvo interessante para bloqueio de portas TCP, pois em algunscasos da a impressão que a máquina não dispõe de um sistema de firewall (oalvo DROP causa uma parada de muito tempo em alguns portscanners etentativas de conexão de serviços, revelando imediatamente o uso de umsistema de firewall pela máquina). O alvo REJECT vem dos tempos doipchains e somente pode ser usado na tabela filter. Quando um pacoteconfere, ele é rejeitado com a mensagem ICMP do tipo "port unreachable", épossível especificar outro tipo de mensagem ICMP com a opção --reject-withtipo_icmp.

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 (comoacontecia no ipchains. Uma forma alternativa é inserir como última regra umaque pegue todos os pacotes restantes daquele chain e tenha como alvoREJECT (como iptables -A INPUT -j REJECT), desta forma ele nunca atingirá opoliciamento padrão do chain.

# Rejeita pacotes vindos de 200.200.200.1 pela interface ppp0: iptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT

6.3.6.2 Especificando LOG como alvoEste alvo é usado para registrar a passagem de pacotes no syslog do

sistema. É um alvo muito interessante para ser usado para regras quebloqueiam determinados tráfegos no sistema (para que o administrador tomeconhecimento sobre tais tentativas), para regras de fim de chain (quando vocêtem um grande conjunto de regras em um firewall restritivo e não sabe ondesuas regras estão sendo bloqueadas), para satisfazer sua curiosidade, etc.

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

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

# Para efetuar o bloqueio

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

Note que a regra que registra o pacote (-j LOG) deve aparecer antes daregra que REJEITA (-j REJECT), caso contrário a regra de LOG nuncafuncionará. A única coisa que muda nas regras de log é o alvo da regra, istofacilita a implementação de grandes conjuntos de regras de firewall.

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

Page 99: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

99

Os campos possuem o seguinte significado:Aug 25 10:08:01

Mês, dia e hora do registro do pacote.debian

Nome do computador que registrou o pacote.kernel:

Daemon que registrou a mensagem, no caso o iptables faz partedo próprio kernel.IN=ppp0

Especifica a interface de entrada (de onde o pacote veio).OUT=

Especifica a interface de saída (para onde o pacote foi).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 arpinterface).SRC=200.200.200.1

Endereço de origem do pacote.DST=200.210.10.10

Endereço de destino do pacote.LEN=61

Tamanho do pacote.TOS=0x00

Prioridade do cabeçalho TOS (prioridade normal neste caso).Veja a seção Especificando o tipo de serviço, Section 9.5.1 para maisdetalhes.PROTO=UDP

Nome do protocolo. Pode ser TCP, UDP ou ICMPSPT=1031

Porta de origem da requisição.DPT=53

Porta de destino da requisição.LEN=41

Tamanho do pacote.O log acima mostra uma consulta DNS (porta destino 53) para nossa

máquina (INPUT) de 200.200.200.1 para 200.210.10.10.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

Page 100: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

100

origem/destino) e o destino do pacote (se ele foi ACEITO ou BLOQUEADO)pois você pode ter regras para ambas as situações. Por este motivo existemalgumas 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. Caso tiver espaços, devem ser usadas "aspas".--log-level nível

Especifica o nível da mensagem no syslog.--log-tcp-options

Registra campos do cabeçalho TCP nos logs do sistema.--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 usodesta opção, pois a seqüencia de números TCP pode ser a chave paraum seqüestro de seção ou IP spoofing em seu sistema caso algumusuário tenha acesso a estes logs.Lembre-se que estas opções são referentes ao alvo LOG, e devem ser

usadas após este, caso contrário você terá um pouco de trabalho para analisare consertar erros em suas regras do firewall.

# Complementando o exemplo anterior:

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

iptables -A INPUT -s 200.200.200.1 -i ppp+ -j LOG --log-prefix "FIREWALL: Rejeitado "

# Para efetuar o bloqueio

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

Retornará a seguinte mensagem no syslog:

Aug 25 10:08:01 debian kernel: FIREWALL: Rejeitado IN=ppp0 OUT=MAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00 SRC=200.200.200.1 DST=200.210.10.10 LEN=61TOS=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). Apadronização de mensagens de firewall é também importante para a criação descripts de análise que poderão fazer a análise dos logs do seu firewall (paracriação de estatísticas que podem servir como base para a criação de novasregras de firewall ou eliminação de outras).

OBS: Se você sente falta da função "-l" do ipchains que combina o alvoe 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

Page 101: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

101

E usar "log-drop" como alvo em suas regras. Mesmo assim esta soluçãoé "limitada" em relação a "-l" do ipchains porque o iptables não inclui detalhesde qual chain bloqueou o pacote/qual pacote foi bloqueado, assim é necessárioa especificação da opção --log-prefix para as mensagens se tornarem maiscompreensíveis. Infelizmente o iptables não aceita variáveis, senão estalimitação seria facilmente contornada.

6.3.6.3 Especificando RETURN como alvoO alvo RETURN diz ao iptables interromper o processamento no chain

atual e retornar o processamento ao chain anterior. Ele é útil quando criamosum chain que faz um determinado tratamento de pacotes, por exemplobloquear conexões vindas da internet para portas baixas, exceto para umendereço IP específico. Como segue:

iptables -t filter -A INPUT -i ppp0 -j internetiptables -t filter -j ACCEPTiptables -t filter -N internetiptables -t filter -A internet -s www.debian.org -p tcp --dport 80 -j RETURNiptables -t filter -A internet -p tcp --dport 21 -j DROPiptables -t filter -A internet -p tcp --dport 23 -j DROPiptables -t filter -A internet -p tcp --dport 25 -j DROPiptables -t filter -A internet -p tcp --dport 80 -j DROP

Quando um pacote com o endereço www.debian.org tentando acessar aporta www (80) de nossa máquina através da internet (via interface ppp0), ochain número 1 confere, então o processamento continua no chain número 4, ochain número 4 confere então o processamento volta para a regra número 2,que diz para aceitar o pacote.

Agora se um pacote vem com o endereço www.dominio.com.br tentandoacessar a porta www *80) de nossa máquina através da internet (via interfaceppp0), o chain número 1 confere, então o processamento continua no chainnúmero 4, que não confere. O mesmo acontece com os chains 5, 6 e 7. Ochain número 8 confere, então o acesso é bloqueado.

Como pode ter notado, o alvo RETURN pode facilitar bastante aconstrução das regras do seu firewall, caso existam máquinas/redes que sejamexceções as suas regras. Se ela não existisse, seria necessário especificardiversas opções -s, -d, etc para poder garantir o acesso livre a determinadasmáquinas.

6.4 A tabela nat (Network Address Translation) - fazendo natA tabela nat serve para controlar a tradução dos endereços que

atravessam o código de roteamento da máquina Linux. Existem 3 chains natabela nat: PREROUTING, OUTPUT e POSTROUTING (veja “6.1.14 O quesão tabelas?” para maiores detalhes).

A tradução de endereços tem inúmeras utilidades, uma delas é oMasquerading, onde máquinas de uma rede interna podem acessar a Internetatravés de uma máquina Linux, redirecionamento de porta, proxy transparente,

Page 102: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

102

etc. Esta seção abordará os tipos de NAT, exemplos de como criarrapidamente uma conexão IP masquerading e entender como a tradução deendereços funciona no iptables.

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 - como uma conexão PPP) entãoo IP masquerading é o que precisa (veja “6.4.2 Fazendo IPmasquerading (para os apressados)” ou “6.4.3.1 Fazendo IPMasquerading”).

• Você tem uma conexão que lhe oferece um endereço IP permanente(ADSL, por exemplo) então o SNAT é o que precisa (veja “6.4.3Fazendo SNAT”).

6.4.1 Criando um novo chain na tabela NATO procedimento para criação de um novo chain nesta tabela é o mesmo

descrito em “6.2.6 Criando um novo chain - N” será necessário somenteespecificar a tabela nat (-t nat) para que o novo chain não seja criado na tabelapadrão (-t filter).

iptables -t nat -N intra-inter

Que criará o chain chamado intra-inter na tabela nat. Para inserir regrasneste chain será necessário especificar a opção "-t nat".

6.4.2 Fazendo IP masquerading (para os apressados)Você precisará de um kernel com suporte ao iptables (veja “6.1.15

Habilitando o suporte ao iptables no kernel” e ip_forwarding e então digitar osdois comandos abaixo para habilitar o masquerading para todas as máquinasda rede 192.168.1.*:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE echo "1" >/proc/sys/net/ipv4/ip_forwarding

A configuração do servidor Linux está completa, agora os clientes darede precisarão ser configurados para usar o endereço IP do servidor Linuxcomo gateway. É recomendável instalar um servidor proxy e DNS na máquinaLinux para acelerar o desempenho das requisições/resolução de nomes dasmáquinas em rede. A utilização de bits TOS também pode trazer um grandeaumento de velocidade para os diferentes serviços da rede (veja “6.5.1Especificando o tipo de serviço”).

6.4.3 Fazendo SNATSNAT (source nat - nat no endereço de origem) consiste em modificar o

endereço de origem das máquinas clientes antes dos pacotes serem enviados.A máquina roteadora é inteligente o bastante para lembrar dos pacotes

Page 103: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

103

modificados e reescrever os endereços assim que obter a resposta da máquinade destino, direcionando os pacotes ao destino correto. Toda operação deSNAT é feita no chain POSTROUTING.

É permitido especificar endereços de origem/destino, protocolos, portasde origem/destino, interface de entrada/saída (dependendo do chain), alvos,etc. É desnecessário especificar fragmentos na tabela nat, pois eles serãoremontados antes de entrar no código de roteamento.

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 damáquina Linux. Nenhuma máquina da Internet poderá ter acesso direto asmáquinas de sua rede interna via SNAT.

OBS: A observação acima não leva em conta o controle de acessoexterno configurado na máquina que estiver configurando o iptables, umaconfiguração mau realizada pode expor sua máquina a acessos externosindesejados e comprometer sua rede interna caso alguém consiga acessodireto ao servidor.

É necessário especificar SNAT como alvo (-j SNAT) quando desejar queas máquinas de sua rede interna tenha acesso a Internet através do IP fixo damáquina Linux (para conexões intermitentes como PPP, veja “6.4.3.1 FazendoIP Masquerading”). O parâmetro --to IP:portas deve ser usado após o alvoSNAT. Ele serve para especificar um endereço IP, faixa de endereços eopcionalmente uma porta ou faixa de portas que será substituída. Toda aoperação de SNAT é realizada através do chain POSTROUTING:

# Modifica o endereço IP dos pacotes vindos da máquina 192.168.1.2 da rede interna

# que tem como destino a interface eth1 para 200.200.217.40 (que é o nosso endereço

# IP da interface ligada a Internet).

iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth1 -j SNAT --to 200.200.217.40

Os pacotes indo para a Internet (nossa conexão é feita via eth1, nossainterface externa) vindo do endereço 192.168.1.2, são substituídos por200.241.200.40 e enviados para fora. Quando a resposta a requisição éretornada, a máquina com iptables recebe os pacotes e faz a operação inversa,modificando o endereço 200.241.200.40 novamente para 192.168.1.2 eenviando a resposta a máquina de nossa rede interna. Após definir suasregras de NAT, execute o comando echo "1" >/proc/sys/net/ipv4/ip_forwardpara habilitar o suporte a redirecionamento de pacotes no kernel.

Também é possível especificar faixas de endereços e portas que serãosubstituídas:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to200.200.217.40-200.200.217.50

Modifica o endereço IP de origem de todas as máquinas da rede192.168.1.0/24 que tem o destino a interface eth0 para 200.241.200.40 a200.241.200.50. O endereço IP selecionado é escolhido de acordo com oúltimo IP alocado. # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -oeth1 \ -j SNAT --to 1.2.3.0-1.2.3.4 --to 1.2.3.6-1.2.3.254

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to200.200.217.40-200.200.217.50:1-1023

Page 104: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

104

Idêntico ao anterior, mas faz somente substituições na faixa de portas deorigem de 1 a 1023.

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to200.200.217.40-200.200.217.50 --to 200.200.217.70-200.200.217.73

Faz o mapeamento para a faixa de portas 200.200.217.40 a200.200.217.50 e de 200.200.217.70 a 200.200.217.73.

OBS1: Se por algum motivo não for possível mapear uma conexão NAT,ela será derrubada. OBS2: Tenha certeza que as respostas podem chegar atéa máquina que fez o NAT. Se estiver fazendo SNAT em um endereço livre emsua rede (como 200.200.217.73).

OBS2: Como notou acima, o SNAT é usado quando temos umaconexão externa com um ou mais IP's fixos. O Masquerading é uma formaespecial de SNAT usada para funcionar em conexões que recebem endereçosIP aleatórios (PPP).

OBS3: Não se esqueça de habilitar o redirecionamento de pacotes apósfazer suas regra de NAT com o comando: echo "1">/proc/sys/net/ipv4/ip_forward, caso contrário o redirecionamento depacotes não funcionará.

6.4.3.1 Fazendo IP MasqueradingO IP Masquerading é um tipo especial de SNAT usado para conectar a

sua rede interna a internet quando você recebe um IP dinâmico de seuprovedor (como em conexões ppp). Todas as operações de IP Masqueradingsão realizadas no chain POSTROUTING. Se você tem um IP fixo, deve ler“6.4.3 Fazendo SNAT”.

Para fazer IP Masquerading de uma máquina com o IP 192.168.1.2 parater acesso a Internet, use o comando:

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

A diferença é que o alvo é -j MASQUERADE. O comando acima faz IPMasquerading de todo o tráfego de 192.168.1.2 indo para a interface ppp0: Oendereço IP dos pacotes vindos de 192.168.1.2 são substituídos pelo IPoferecido pelo seu provedor de acesso no momento da conexão, quando aresposta é retornada a operação inversa é realizada para garantir que aresposta chegue ao destino. Nenhuma máquina da internet poderá ter acessodireto a sua máquina conectava via Masquerading.

Para fazer o IP Masquerading de todas as máquinas da rede192.168.1.*:

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

Após definir a regra para fazer Masquerading (SNAT), execute ocomando echo "1" >/proc/sys/net/ipv4/ip_forward para habilitar osuporte a redirecionamento de pacotes no kernel.

Page 105: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

105

6.4.4 Fazendo DNATDNAT (Destination nat - nat no endereço de destino) consiste em

modificar o endereço de destino das máquinas clientes. O destination nat émuito usado para fazer redirecionamento de pacotes, proxyes transparentes ebalanceamento de carga.

Toda operação de DNAT é feita no chain PREROUTING. As demaisopções e observações do SNAT são também válidas para DNAT (com exceçãoque somente é permitido especificar a interface de origem no chainPREROUTING).

# Modifica o endereço IP destino dos pacotes de 192.168.1.2 vindo da interface eth0

# para 200.200.217.40.

iptables -t nat -A PREROUTING -s 192.168.1.2 -i eth0 -j DNAT --to 200.200.217.40

Também é possível especificar faixas de endereços e portas que serãosubstituídas no DNAT:

iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 200.200.217.40-200.200.217.50

Modifica o endereço IP de destino do tráfego vindos da interface192.168.1.0/24 para um IP de 200.241.200.40 a 200.241.200.50. Este é umexcelente método para fazer o balanceamento de carga entre servidores. Oendereço IP selecionado é escolhido de acordo com o último IP alocado.

iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 200.200.217.40-200.200.217.50:1024:5000

Idêntico ao anterior, mas faz somente substituições na faixa de portas dedestino de 1024 a 5000. A operação acima é a mesma realizada peloipmasqadm dos kernels da série 2.2.

OBS: Se por algum motivo não for possível mapear uma conexão NAT,ela será derrubada.

6.4.4.1 Redirecionamento de portasO redirecionamento de portas permite a você repassar conexões com

destino a uma porta para outra porta na mesma máquina. O alvo REDIRECT éusado para fazer esta operação, junto com o argumento --to-port especificandoa porta que será redirecionada. Este é o método DNAT específico para se parafazer proxy transparente (para redirecionamento de endereços/portas, veja“6.4.4 Fazendo DNAT”). Todas as operações de redirecionamento de portas érealizada no chain PREROUTING.

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

Redireciona as conexões indo para a porta 80 para a porta 81 (rodandosquid) no firewall.

ATENÇÃO: O squid possui suporte a proxy transparente, e poderáatender as requisições acima da regra acima.

Page 106: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

106

6.4.5 Monitorando conexões feitas na tabela natUse o comando cat /proc/net/ip_conntrack para listar todas as

conexões atuais tratadas pelo módulo nat.

6.5 A tabela mangleA tabela mangle serve para especificar ações especiais para o

tratamento do tráfego que atravessa os chains. Nesta tabela existem doischains: PREROUTING e OUTPUT (veja “6.1.14 O que são tabelas?” paramaiores detalhes).

Opções com o Tipo de Serviço (TOS) é especificada nesta tabela paraclassificar e aumentar consideravelmente a velocidade de tráfego consideradosem tempo real.

6.5.1 Especificando o tipo de serviçoO 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.Uma das vantagens da utilização do tipo de serviço é dar prioridade ao tráfegode pacotes interativos (como os do ICQ, IRC, servidores de chat), etc. Com oTOS especificado, mesmo que esteja fazendo um download consumindo toda abanda de sua interface de rede, o tráfego com prioridade interativa seráenviado antes, aumentando a eficiência dos serviços em sua máquina.

Em testes realizados em minha conexão de 56K, o uso de regras TOSaumentou bastante o desempenho em tráfego interativo (em torno de 300%),durante o uso total da banda da interface ppp em um grande download.

Usamos o alvo TOS (-j TOS) para especificar a modificação do tipo deserviço nos pacotes que atravessam as regras do firewall, acompanhada doargumento --set-tos TOS que define a nova prioridade dos pacotes. Os valoresaceitos são os seguintes:

Espera MínimaÉ especificado através de Minimize-Delay, 16 ou 0x10

Máximo ProcessamentoÉ especificado através de Maximize-Throughput, 8, ou 0x08.

Máxima ConfiançaÉ especificado através de Maximize-Reliability, 4 ou 0x04.

Custo mínimoEspecificado através de Minimize-Cost, 2 ou 0x02.

Prioridade NormalEspecificado através de Normal-Service, 0 ou 0x00.

Os pacotes vem por padrão com o valor TOS ajustado como prioridadenormal (bits tos ajustados para 0x00). O tipo Mínima Espera é o mais usado,pois prioriza o tráfego em serviços interativos.

Page 107: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

107

6.5.1.1 Especificando o TOS para tráfego de saídaEste é o mais usado, pois prioriza o tráfego que sai da máquina (com

destino a Internet, por exemplo). Sua operação é realizada através do chainOUTPUT.

Para priorizar todo o tráfego de IRC de nossa rede interna indo para ainterface 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 dospacotes com prioridade normal para fora. Para priorizar a transmissão dedados 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, só dependedos requerimentos e análise de cada serviço da rede pelo administrador.

OBS: - Os pacotes que atravessam o alvo TOS somente tem os bits tipodo serviço modificados, eles não serão de qualquer forma rejeitados.

6.5.1.2 Especificando o TOS para o tráfego de entradaEste prioriza o tráfego que entra da máquina. Sua operação é realizada

no chain PREROUTING. Não faz muito sentido o uso deste chain dentro deuma rede pequena/média, pois o tráfego que recebermos será priorizado pelosaída de outras máquinas da internet/outras redes antes de chegar a nossa.

Para priorizar o processamento do tráfego interativo vindo de servidoresIRC 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 enviadopor servidores de IRC vindo da interface eth0.

OBS: - Os pacotes que atravessam o alvo TOS somente tem os bits tipodo serviço modificados, eles não serão de qualquer forma rejeitados.

6.6 Outros módulos do iptablesOs 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 denovas conferências e recursos de filtragem adicionais, como limitar aconferência de regras do firewall (um método útil de limitar ping floods, synfloods, etc).

Page 108: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

108

6.6.1 Conferindo de acordo com o estado da conexãoEste módulo permite especificar regras de acordo com o estado da

conexão do pacote, isto é feito através da interpretação da saída do móduloip_conntrack. O parâmetro --state OPÇÕES deve acompanhar este módulo.As opções permitidas são as seguintes:

• NEW - Confere com pacotes que criam novas conexões

• ESTABLISHED - Confere com conexões já estabelecidas

• RELATED - Confere com pacotes relacionados indiretamente a umaconexão, como mensagens de erro icmp, etc.

• INVALID - Confere com pacotes que não puderam ser identificados poralgum motivo. Como respostas de conexões desconhecidas.Caso seja necessário especificar mais de uma opções estas devem ser

separadas por vírgulas.

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

Bloqueia qualquer tentativa de nova conexão vindo da interface ppp0.

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

Permite registrar novas conexões e pacotes inválidos vindos da interfaceppp0.

6.6.2 Limitando o número de vezes que a regra confereA opção -m limit permite especificar o número de vezes que uma regra

conferirá quando todas as outras condições forem satisfeitas. O númeropadrão de conferência é de 3 por hora, a não ser que seja modificado atravésdos argumentos aceitos pelo limit:

• --limit num/tempo - Permite especificar a taxa de conferências do limit.O parâmetro num especifica um número e tempo pode ser

o s - Segundo

o m - Minuto

o h - Hora

o d - DiaAssim uma regra como iptables -A INPUT -m limit --limit 5/m -j ACCEPTpermitirá que a regra acima confira apenas 5 vezes por minuto (--limit2/s). Este limite pode ser facilmente adaptado para uma regra de logque confere constantemente não causar uma avalanche em seus logs.O valor padrão é 3/h.

• --limit-burst num - Especifica o número inicial máximo de pacotes queirão conferir, este número é aumentado por 1 a cada vez que oparâmetro --limit acima não for atingido. O valor padrão é 5.

Page 109: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

109

6.6.3 Proteção contra ping da morteA 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 ACCEPTiptables -t filter -A ping-chain -j DROP

A regra acima limita em 1 vez por segundo (--limit 1/s) a passagem depings (echo requests) para a máquina Linux.

iptables -t filter -A ping-chain -i ppp0 -p icmp --icmp-type echo-reply -m limit--limit 1/s -j RETURNiptables -t filter -A ping-chain -j DROP

Limita respostas a pings (echo reply) vindos da interface ppp0 (-i ppp0) a1 por segundo.

ATENÇÃO: Os exemplos acima devem são somente exemplos paracriação de suas próprias regras com limitações, caso um pacote não confiracom a regra ele será bloqueado pela próxima regra. Se uma regra como forcolocada no chain INPUT sem modificações obviamente colocará em risco asegurança de seu sistema.

6.6.4 Proteção contra syn floodA 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 ACCEPTiptables -t filter -A syn-chain -j DROP

Esta regra limita o atendimento de requisições de conexões a 2 porsegundo.

ATENÇÃO: Os exemplos acima devem são somente exemplos paracriação de suas próprias regras com limitações, caso um pacote não confiracom a regra ele será bloqueado pela próxima regra. Se uma regra como forcolocada no chain INPUT sem modificações obviamente colocará em risco asegurança de seu sistema.

6.6.5 Proteção contra IP spoofingA especificação de endereços de origem/destino junto com a interface

de rede pode ser usado como um detector de ataques spoofing. A lógica é quetodos os endereços que NUNCA devem vir da interface X devem ser negadosimediatamente. As regras abaixo são colocadas no inicio do chain INPUT paradetectar tais ataques:

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

A primeira regra diz para bloquear todos os endereços da faixa de rede192.168.1.* que NÃO vem da interface eth0, a segunda regra diz para bloquear

Page 110: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

110

todos os endereços que não sejam 192.168.1.* vindos da interface eth0. Osímbolo "!" serve para especificar exceções (veja “6.3.5 Especificando umaexceção”). O kernel do Linux automaticamente bloqueia a passagem depacotes que dizem ser de 127.0.0.1 e não está vindo da interface loopback.

O método preferido para controlar o ip spoofing é através do código deroteamento do kernel (a não ser que esteja usando algum tipo de roteamentoassimétrico):

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

Desta forma qualquer endereço dizendo ser 192.168.1.5 vindo de ppp0será imediatamente rejeitado. Uma checagem adicional contra IP spoofingpode ser feita no arquivo /etc/host.conf.

6.6.6 Especificando múltiplas portas de origem/destinoO módulo multiport permite que seja especificado múltiplas portas para

um alvo. Podem ser especificadas até 15 portas em um único parâmetro ebasta que uma porta confira para que a regra entre em ação, pois acomparação é feita usando condições "or". O parâmetro multiport deve seracompanhado de um dos argumentos abaixo:

• --source-port [porta1, porta2...] - Faz a regra conferir se a porta deorigem estiver presente entre as portas especificadas.

• --destination-port [porta1, porta2...] - Faz a regra conferir se a porta dedestino estiver presente entre as portas especificadas.

• --port [porta1, porta2...] - Faz a regra conferir caso a porta de origem oudestino esteja presente no parâmetro.Este módulo pode eliminar muitas regras de firewall que fazem o mesmo

tratamento de pacotes para diversas portas diferentes.

iptables -A INPUT -p tcp -i ppp0 -m multiport --destination-port21,23,25,80,110,113,6667 -j DROP

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

6.6.7 Especificando o endereço MAC da interfaceO módulo mac serve para conferir com o endereço Ethernet dos pacotes

de origem. Somente faz sentido se usado nos chains de PREROUTING (databela nat) ou INPUT (da tabela filter). Aceita como argumento a opção --mac-source endereço. O símbolo "!" pode ser usado para especificar uma exceção.

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

Page 111: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

111

Confere com a máquina com endereço ethernet igual a00:80:AD:B2:60:0B.

6.6.8 Conferindo com quem criou o pacoteEste módulo confere com o usuário que iniciou a conexão. É somente

válido no chain OUTPUT da tabela filter. Os seguintes argumentos são válidaspara este módulo:

• --uid-owner UID - Confere se o pacote foi criado por um processo com oUID especificado. Até o momento somente UID numéricos são aceitos.

• --gid-owner GID - Confere se o pacote foi criado por um usuáriopertencente ao grupo GID. Até o momento somente GID numéricos sãoaceitos.

• --pid-owner PID - Confere se o pacote foi criado por um processo com oPID especificado.

• --sid-owner ID - Confere se o pacote foi criado por um processo nogrupo de seção especificado.OBS: - 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 pelousuários pertencentes ao grupo 100.

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 deorigem/destino. Esta seção explica a ordem que as regra são atravessadas,isso lhe permitirá planejar a distribuição das regras nos chains, e evitar erros delocalização de regras que poderia deixar seu firewall com sérios problemas desegurança, ou um sistema de firewall totalmente confuso e sem lógica.

Nos exemplos abaixo assumirei a seguinte configuração:• A máquina do firewall com iptables possui o endereço IP 192.168.1.1 e

conecta a rede interna ligada via interface eth0 a internet via a interfaceppp0.

• Rede interna com a faixa de endereços 192.168.1.0 conectada aofirewall via interface eth0

• Interface ppp0 fazendo conexão com a Internet com o endereço IP200.217.29.67.

• A conexão das máquinas da rede interna (eth0) com a rede externa(ppp0) é feita via Masquerading.

Page 112: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

112

Também utilizarei a sintaxe CHAIN-tabela para fazer referência aoschains e tabelas dos blocos ASCII: INPUT-filter - chain INPUT da tabela filter.

ATENÇÃO: A ordem de processamento das regras do iptables, édiferente do ipchains devido a inclusão do novo sistema de nat e da tabelamangle.

6.7.1 ping de 192.168.1.1 para 192.168.1.1• Endereço de Origem: 192.168.1.1

• Endereço de Destino: 192.168.1.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.168.1.1): +-------------+ +----------+ +-------------+ +----------------+ |OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat | +-------------+ +----------+ +-------------+ +----------------+

ENTRADA DOS PACOTES (Retorno da resposta ping acima): +-----------------+ +------------+ |PREROUTING-mangle| => |INPUT-filter| +-----------------+ +------------+

Quando damos o ping (echo request) os pacotes seguem o caminho emSAÍDA DE PACOTES percorrendo os chains na ordem especificada e retornamvia ENTRADA DOS PACOTES (echo reply).

OBS1: Para conexões com destinos na própria máquina usando umendereço IP das interfaces locais, a interface será ajustada sempre para lo(loopback).

OBS2: Em qualquer operação de entrada/saída de pacotes, os doischains da tabela mangle são sempre os primeiros a serem acessados. Isto énecessário para definir a prioridade e controlar outros aspectos especiais dospacotes que atravessam os filtros.

OBS3: O chain OUTPUT da tabela filter é consultado sempre quandoexistem conexões se originando em endereços de interfaces locais.

6.7.2 Conexão FTP de 192.168.1.1 para 192.168.1.1• Endereço de Origem: 192.168.1.1

• Endereço de Destino: 192.168.1.1

• Interface de Origem: lo

• Interface de Destino: lo

Page 113: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

113

• Porta Origem: 1404

• Porta Destino: 21

• Protocolo: TCP

• Descrição: Conexão ftp (até o prompt de login, sem transferência dearquivos).

SAÍDA DOS PACOTES (envio da requisição para 192.168.1.1): +-------------+ +----------+ +-------------+ +---------------+ |OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat| +-------------+ +----------+ +-------------+ +---------------+

ENTRADA DE PACOTES (respostas da requisição vindas de 192.168.1.1): +-----------------+ +------------+ |PREROUTING-mangle| => |INPUT-filter| +-----------------+ +------------+

A requisição ftp passa através dos chains especificados em SAÍDA DOSPACOTES e retorna por ENTRADA DE PACOTES. Após a conexão serestabelecida, o caminho de SAÍDA DE PACOTES será: +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+

pois os dados de entrada que vem da interface externa, são passadosdiretamente a máquina do firewall, não necessitando de tratamento SNAT (oschains OUTPUT-nat e POSTROUTING-nat são processado somente uma veza procura de regras que conferem, principalmente para fazer SNAT).

OBS1: Para conexões com destinos na própria máquina usando umendereço IP das interfaces locais, a interface será ajustada sempre para lo(loopback).

OBS2: Em qualquer operação de entrada/saída de pacotes, os doischains da tabela mangle são sempre os primeiros a serem acessados. Isto énecessário para definir a prioridade e controlar outros aspectos especiais dospacotes que atravessam os filtros.

6.7.3 Conexão FTP de 192.168.1.1 para 192.168.1.4• Endereço de Origem: 192.168.1.1

• Endereço de Destino: 192.168.1.4

• Interface de Origem: eth0

• Interface de Destino: eth0

• Porta Origem: 1405

• Porta Destino: 21

• Protocolo: TCP

Page 114: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

114

• Descrição: Conexão ftp (até o prompt de login, sem transferência dearquivos).

SAÍDA DOS PACOTES (envio da requisição para 192.168.1.4): +-------------+ +----------+ +-------------+ +---------------+ |OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat| +-------------+ +----------+ +-------------+ +---------------+

ENTRADA DE PACOTES (respostas da requisição de 192.168.1.4): +-----------------+ +------------+ |PREROUTING-mangle| => |INPUT-filter| +-----------------+ +------------+

A requisição ftp passa através dos chains especificados em SAÍDA DOSPACOTES com o destino 192.168.1.4 porta 21 e retorna por ENTRADA DEPACOTES para 192.168.1.1 porta 1405. Após a conexão ser estabelecida, ocaminho de SAÍDA DE PACOTES será: +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+

pois os dados não precisam de tratamento SNAT (os chains OUTPUT-nat e POSTROUTING-nat são processado somente uma vez a procura deregras que conferem, principalmente para fazer SNAT).

OBS: Em qualquer operação de entrada/saída de pacotes, os doischains da tabela mangle são sempre os primeiros a serem acessados. Isto énecessário para definir a prioridade e controlar outros aspectos especiais dospacotes que atravessam os filtros.

6.7.4 Conexão FTP de 200.217.29.67 para ftp.debian.org.br• Endereço de Origem: 200.217.29.67

• Endereço de Destino: 200.198.129.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, sem transferência dearquivos).

Page 115: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

115

SAÍDA DOS PACOTES (envio da requisição para 200.198.129.162): +-------------+ +----------+ +-------------+ +---------------+ |OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat| +-------------+ +----------+ +-------------+ +---------------+

ENTRADA DE PACOTES (respostas da requisição vindas de 200.198.129.162): +-----------------+ +--------------+ +------------+ |PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter| +-----------------+ +--------------+ +------------+

A requisição ftp passa através dos chains especificados em SAÍDA DOSPACOTES com o destino 200.198.129.162 porta 21 (após a resolução DNS dewww.debian.org.br) e retorna por ENTRADA DE PACOTES para 200.217.29.67porta 1407. Após a conexão ser estabelecida, o caminho de saída de pacotesé: +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+

pois os dados não precisam de tratamento SNAT (os chains OUTPUT-nat e POSTROUTING-nat são processado somente uma vez a procura deregras que conferem, principalmente para fazer SNAT).

E após a conexão estabelecida, o caminho de entrada de pacotes passaa ser: +-----------------+ +-------------+ |PREROUTING-mangle| => |INPUT-filter | +-----------------+ +-------------+

pois os dados não precisam de tratamento DNAT (o chainPREROUTING-nat é processado somente uma vez a procura de regras queconferem, principalmente para fazer DNAT).

OBS: Para qualquer operação de entrada/saída de pacotes, os doischains da tabela mangle são sempre os primeiros a serem acessados. Isto énecessário para definir a prioridade e controlar outros aspectos especiais dospacotes que atravessam os filtros.

6.7.5 Ping de 192.168.1.4 para 192.168.1.1• Endereço de Origem: 192.168.1.4

• Endereço de Destino: 192.168.1.1

• Interface de Entrada: eth0

• Interface de Saída: eth0

• Protocolo: ICMP

• Descrição: Ping de 192.168.1.4 para a máquina do firewall.

Page 116: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

116

ENTRADA DE PACOTES (recebimento da requisição, vinda de 192.168.1.4): +-----------------+ +--------------+ +------------+ |PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter| +-----------------+ +--------------+ +------------+

SAÍDA DE PACOTES (envio da resposta a 192.168.1.4) +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+

Quando damos o ping (echo request) os pacotes seguem o caminho emENTRADA DE PACOTES percorrendo os chains na ordem especificada eretornam via SAÍDA DOS PACOTES (echo reply).

OBS1: Para qualquer operação de entrada/saída de pacotes, os doischains da tabela mangle são sempre os primeiros a serem acessados. Isto énecessário para definir a prioridade e controlar outros aspectos especiais dospacotes que atravessam os filtros.

6.7.6 Conexão FTP de 192.168.1.4 para 192.168.1.1• Endereço de Origem: 192.168.1.4

• Endereço de Destino: 192.168.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, sem transferência dedados).

ENTRADA DOS PACOTES (envio da requisição vindas de 192.168.1.4): +-----------------+ +--------------+ +------------+ |PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter| +-----------------+ +--------------+ +------------+

SAÍDA DE PACOTES (respostas da requisição acima para 192.168.1.4): +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+

A requisição ftp passa através dos chains especificados em ENTRADADOS PACOTES com o destino 192.168.1.1 porta 21 e retorna por SAÍDA DEPACOTES para 192.168.1.4 porta 1030. Após a conexão ser estabelecida, ocaminho de entrada de pacotes é: +-----------------+ +------------+ |PREROUTING-mangle| => |INPUT-filter| +-----------------+ +------------+

Page 117: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

117

pois os dados não precisam de tratamento DNAT (o chainPREROUTING-nat é processado somente uma vez a procura de regras queconferem, principalmente para fazer DNAT).

OBS: O roteamento é sempre realizado após o processamento do chainPREROUTING da tabela nat.

6.7.7 Conexão FTP de 192.168.1.4 para ftp.debian.org.br• Endereço de Origem: 192.168.1.4

• Endereço de Destino: 200.198.129.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, sem transferência dedados).

SAÍDA DOS PACOTES (requisição vindas de 192.168.1.4):

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

|PREROUTING-mangle| => |PREROUTING-nat| => |FORWARD-filter| => |POSTROUTING-nat|

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

ENTRADA DE PACOTES (respostas da requisição acima, enviadas para 192.168.1.4):

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

|PREROUTING-mangle| => |FORWARD-filter|

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

A requisição ftp passa através dos chains especificados em SAÍDA DOSPACOTES com o destino 200.198.129.162 porta 21 (após a resolução DNS deftp.debian.org.br) e retorna por ENTRADA DE PACOTES para 192.168.1.4porta 1032.

Note que o Masquerading regrava os pacotes; para a máquina200.198.129.162 a conexão está sendo feita para 200.217.29.67. As respostasde conexões vindas de 200.198.129.162 e indo para 200.217.29.67 sãoregravadas no firewall com o destino 192.168.1.4 e enviadas para a máquinacorrespondente. Após a conexão ser estabelecida, o caminho de saída depacotes é: +-----------------+ +--------------+ |PREROUTING-mangle| => |FORWARD-filter| +-----------------+ +--------------+

Isto acontece porque após feita a conexão Masquerading (viaPREROUTING-nat), o firewall já sabe como reescrever os pacotes para realizara operação de Masquerading, reescrevendo todos os pacotes que chegam dewww.debian.org.br para 192.168.1.4.

OBS: As conexões Masquerading feitas através da rede interna, sãoenviadas para 200.198.129.162 tem o endereço de origem ajustado para

Page 118: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

118

200.217.29.67 que é o IP de nossa interface ppp0. Quando as respostasatravessam o firewall, os pacotes são checados pra saber se são uma respostaa uma conexão masquerading e fará a regravação dos pacotes substituindo oendereço de destino para 192.168.1.4. Caso uma operação de Masqueradingfalhe, os pacotes serão Bloqueados.

6.7.8 Conexão FTP de 200.198.129.162 para 200.217.29.167• Endereço de Origem: 200.198.129.162

• Endereço de Destino: 200.217.29.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.198.129.162): +-----------------+ +--------------+ +------------+ |PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter| +-----------------+ +--------------+ +------------+

SAÍDA DE PACOTES (respostas da requisição de 200.198.129.162): +-------------+ +-------------+ |OUTPUT-mangle| => |OUTPUT-filter| +-------------+ +-------------+

A requisição ftp passa através dos chains especificados em ENTRADADOS PACOTES com o destino 200.217.29.67 (nossa interface ppp0 local)porta 21 e retorna por SAÍDA DE PACOTES para 200.198.129.162 porta 3716(também via ppp0). Após a conexão ser estabelecida, o caminho de entradade pacotes é: +-----------------+ +------------+ |PREROUTING-mangle| => |INPUT-filter| +-----------------+ +------------+

Isto acontece porque após feita a análise do chain PREROUTING (paranecessidade de DNAT), a máquina já saberá tomar a decisão apropriada paragerenciar aquela conexão.

6.7.9 Gráfico geral da passagem dos pacotesEste gráfico foi retirado do documento netfilter-hacking-HOWTO.txt e

mostra a estrutura geral de passagem dos pacotes nas tabelas/chains. Osexemplos de passagem de pacotes acima poderão ser facilmente comparadoscom as etapas abaixo para compreender a estrutura do iptables.

Page 119: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

119

E ---> PREROUTING ------> (ROTEAM.) ---> FORWARD ----------> POSTROUTING --> S Mangle e | Filter ^ NAT (Src) NAT (DNAT)) | | | (ROTEAM.) V | IN Filter OUT - Mangle, | ^ NAT (DNAT) | | Filter V | +----------------------------------------+ | Processo Local | +----------------------------------------+

6.8 Exemplos de configurações do iptablesEm construção. Exemplo de como bloquear todas as conexões para a

máquina do firewall permitindo somente conexões da máquina Linux para fora.

6.8.1 Bloqueando conexões de fora para sua máquinaAs 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. O tráfego de outras interfaces não é afetado com as regras a seguir:

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

Todas as conexões vindas de ppp0 de estado diferente deESTABLISHED e RELATED (NEW e INVALID) serão derrubadas. Veja “6.6.1Conferindo de acordo com o estado da conexão” para detalhes.

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

Este acima é mais simples e possui o mesmo efeito: Pacotes SYN sãousados para iniciar conexões, derrubando pacotes deste tipo significa bloquearnovas conexões. Pacotes de conexões já estabelecidas ainda são permitidos.

Estas regras acima servem para quem não deseja NENHUM acessoindevido a sua máquina. Existem outras formas de bloquear conexões demodo mais seletivo usando chains específicos, endereços de origem/destino,portas, etc., este tipo de configuração é muito usada caso precise forneceralgum tipo de serviço que seja acessível externamente e protegendo outros.

6.8.2 Monitorando tentativa de conexão de trojans em sua máquinaAs regras abaixo alertam sobre a tentativa de conexão dos trojans "For

Win" mais conhecidos. Coloquei isto aqui por curiosidade de algumas pessoas,pois máquinas Linux são imunes a este tipo de coisa:

#!/bin/sh

Page 120: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

120

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

iptables -t filter -N trojans-in

for PORTA in ${TROJAN_PORTS};do iptables -A trojans-in -p tcp --sport=1024: --dport=${PORTA} -j LOG \ --log-prefix "FIREWALL: Trojan ${PORTA} " iptables -A trojans-in -p tcp --sport=1024: --dport=${PORTA} -j DROPdone

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

A primeira linha do iptables cria o chain trojans-in dentro da tabela filterque usaremos para armazenar nossas regras de firewall. A segunda (dentrodo laço for) faz uma regra de LOG para registrar as tentativas de acesso detrojans em nosso sistema, a terceira rejeita o acesso. A quarta regra doiptables 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 trojans-in).

Muitas das portas especificadas na variável TROJAN_PORTS sãoantigas conhecidas de quem já brincou ou sofreram com o Back Orifice, WinCrack, NetBus (quem nunca passou pela fase de ter uma lista com mais de 100netmasks e conseguir encontrar centenas de máquinas por dia infectadas peloBO? :-).

No código acima a única coisa que precisa fazer para adicionar maisportas é inseri-las na variável TROJAN_PORTS e executar o programa. O laçodo for executará as 2 regras para cada porta processada (economizando linhase linhas de regras, me livrando de uma LER e poupando muitos bytes nesteguia ;-).

Dependendo do número de portas alvo, este código pode ser muitosimplificado usando o recurso multiport do iptables (veja “6.6.6 Especificandomúltiplas portas de origem/destino” para detalhes).

6.8.3 Conectando sua rede interna a InternetO seguinte exemplo permite ligar sua rede interna com a faixa de IP's

192.168.1.* a internet (usando uma conexão discada do tipo ppp):

iptables -A nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -j MASQUERADE echo "1" >/proc/sys/net/ipv4/ip_forward

6.8.4 Um exemplo de firewall simplesEsta seção possui um exemplo mais elaborado de firewall que servirá

para máquinas conectadas via ppp com uma rede interna conectada viaMasquerading. Este exemplo não é tão complexo e cobre as expectativas maiscomuns de pessoas que gostam de explorar os potenciais de rede no Linux ousatisfazer sua curiosidade. Ele poderá ser facilmente adaptado para atenderoutro tipo de necessidade. A configuração assumida é a seguinte:

Page 121: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

121

1. Máquina do firewall com 2 interfaces de rede, uma é eth0 com o IP192.168.1.1 que serve de ligação a sua rede Interna, a outra é ppp0 queé a interface Internet.

2. Qualquer acesso externo a máquinas da rede interna é bloqueado.

3. Os usuários da rede local tem acesso livre ao servidor Linux.

4. Qualquer acesso externo a máquina do firewall é bloqueado, excetoconexões para o serviço Apache (httpd). Outras tentativas de conexõesdevem ser explicitamente registradas nos logs do sistema paraconhecimento do administrador.

5. Todos os usuários possuem acesso livre a Internet via Masquerading,exceto que o acesso para o serviço www deve ser obrigatoriamente feitovia squid, e o servidor smtp a ser usado deverá ser o do firewall Linux.

6. Prioridades serão estabelecidas para os serviços de telnet, IRC,talk eDNS.

#!/bin/sh# Modelo de configuração de firewall# Autor: Gleydson M. Silva# Data: 05/09/2001# Descrição: Produzido para ser distribuído livremente, acompanha o guia# Foca GNU/Linux. http://focalinux.cipsga.org.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, será necessário# carregar estes módulos via modprobe, insmod ou iptables --modprobe=modulo

##### Definição de Políticas ###### Tabela filteriptables -t filter -P INPUT DROPiptables -t filter -P OUTPUT ACCEPTiptables -t filter -P FORWARD DROP# Tabela natiptables -t nat -P PREROUTING ACCEPTiptables -t nat -P OUTPUT ACCEPTiptables -t nat -P POSTROUTING DROP

Page 122: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

122

# Tabela mangleiptables -t mangle -P PREROUTING ACCEPTiptables -t mangle -P OUTPUT ACCEPT

##### Proteção contra IP Spoofing #####for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 >$idone

##### 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. Para 32MB = 2048, 64MB = 4096, 128MB = 8192,# sendo que são usados 350 bytes de memória residente para controlar# cada conexão.# Quando este limite é excedido a seguinte mensagem é mostrada:# "ip_conntrack: maximum limit of XXX entries exceed"## Como temos uma rede simples, vamos abaixar este limite. Por outro lado isto# criará uma certa limitação de tráfego para evitar a sobrecarga do servidor.echo "2048" > /proc/sys/net/ipv4/ip_conntrack_max

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

##### Chain INPUT ###### Criamos um chain que será usado para tratar o tráfego vindo da Internet eiptables -N ppp-input

# Aceita todo o tráfego vindo do loopback e indo pro loopbackiptables -A INPUT -i lo -j ACCEPT# Todo tráfego vindo da rede interna também é aceitoiptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT

# Conexões vindas da interface ppp0 são tratadas pelo chain ppp-inputiptables -A INPUT -i ppp+ -j ppp-input

# Qualquer outra conexão desconhecida é imediatamente registrada e derrubadaiptables -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

Page 123: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

123

# interfaces será bloqueado neste passoiptables -A FORWARD -d 192.168.1.0/24 -i ppp+ -o eth0 -j ACCEPTiptables -A FORWARD -s 192.168.1.0/24 -i eth0 -o ppp+ -j ACCEPTiptables -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çãoiptables -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.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áquinaiptables -A ppp-input -m state --state ! ESTABLISHED,RELATED -j LOG --log-prefix"FIREWALL: ppp-in "iptables -A ppp-input -m state --state ! ESTABLISHED,RELATED -j DROP# Qualquer outro tipo de tráfego é aceitoiptables -A ppp-input -j ACCEPT

######################################################## Tabela nat ########################################################

##### Chain POSTROUTING ###### Permite qualquer conexão vinda com destino a lo e rede local para eth0iptables -t nat -A POSTROUTING -o lo -j ACCEPTiptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j ACCEPT

# Não queremos que usuários tenham acesso direto a www e smtp da rede externa, o# squid e smtpd do firewall devem ser obrigatoriamente usados. Tambémregistramos# as tentativas para monitorarmos qual máquina está tentando conectar-sediretamente.

Page 124: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

124

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -p tcp --dport 80 -j LOG--log-prefix "FIREWALL: SNAT-www "iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -p tcp --dport 25 -j LOG--log-prefix "FIREWALL: SNAT-smtp "iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -p tcp --dport 25 -jDROPiptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -p tcp --dport 80 -jDROP# É feito masquerading dos outros serviços da rede interna indo para a interface# ppp0iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -j MASQUERADE

# Qualquer outra origem de tráfego desconhecida indo para eth0 (conexões vindas# de ppp+) são bloqueadas aquiiptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.0/24 -j LOG --log-prefix"FIREWALL: SNAT unknown"iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.0/24 -j DROP# Quando iniciamos uma conexão ppp, obtermos um endereço classe A (10.x.x.x) eapós# estabelecida a conexão real, este endereço é modificado. O tráfego indo para# a interface ppp não deverá ser bloqueado. Os bloqueios serão feitos no# chain INPUT da tabela filteriptables -t nat -A POSTROUTING -o ppp+ -j ACCEPT

# Registra e bloqueia qualquer outro tipo de tráfego desconhecidoiptables -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, telnet, irc e DNS, 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.iptables -t mangle -A OUTPUT -o ppp+ -p tcp --dport 21 -j TOS --set-tos 0x10iptables -t mangle -A OUTPUT -o ppp+ -p tcp --dport 23 -j TOS --set-tos 0x10iptables -t mangle -A OUTPUT -o ppp+ -p tcp --dport 6665:6668 -j TOS --set-tos0x10iptables -t mangle -A OUTPUT -o ppp+ -p udp --dport 53 -j TOS --set-tos 0x10

Page 125: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

125

7 O PROXY SQUID

Adaptado de “O Squidnomicon”, por <[email protected]>,Versão 1.21http://www.alceujun.hpg.ig.com.br/linux/squidnomicon.html

O Squid é amplamente utilizado como servidor cache e servidor de proxytransparente http.

O Squid como PROXY HTTP é aberto uma porta em TCP, onde o clienteirá configurar o seu navegador para requisitar pacotes da máquina servidora. OProxy http está configurado com algumas proteções de segurança de acesso àpáginas. Algumas páginas serão bloqueadas por conterem em seu linkpalavras que estão catalogadas no arquivo blacklist. As páginas que oadministrador quiser liberar o acesso basta colocar a palavra no arquivowhitelist.

O Squid como CACHE é utilizado para armazenar conteúdos de páginaspara que os clientes da rede interna não precisem buscar os dados na internet,mas primeiro vão buscar as páginas no servidor cache. O Squid faz umaverificação do conteúdo do cache com o conteúdo da página real e executauma atualização automática.

7.1 IntroduçãoResolvi escrever esse manual principalmente porque ninguém o havia

feito antes. Dentre todos os inúmeros documentos sobre Linux e software livreem http://www.linuxdoc.org não há nenhum que fale sobre Squid, mesmo eminglês, quem diria em português.

Você poderá encontrar maiores informações sobre o Squid no seuwebsite (http://www.squid-cache.org) e ainda poderá recorrer a FAQS e a listade discussão para dúvidas.

Squidnomicon significa manual do Squid. Eu achei divertido fazer umarelação com o Necronomicon (Livro dos Mortos). Mas não espere encontrarnenhuma outra semelhança além desta. Talvez eu use um desenho do grandeCthullu como logo do manual, mas tenho receio dos direitos autorais.

Este manual é livre e está sobre a licença Free GNU Documentation.Qualquer ajuda (dicas, comentários) e/ou modificações são muito bem-vindas.

7.2 Requisitos básicosVocê terá que ter:

• um UNIX: o tutorial tem seu foque em Linux, mas com algum esforçovocê pode utilizar o mesmo tutorial em FreeBSD, SUN Solaris, etc.;

• o pacote/fonte do Squid;

Page 126: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

126

• um computador: para testes qualquer um serve, mas para entrar emoperação você terá que ter pelo menos um Pentium 2 com 128MB eum HD de 4 Gb. Isto é aproximado, e pode variar muito conforme onúmero de usuários X requisições. Basta saber que os requisitos dehardware de um servidor proxy são muito maiores em relação àquantidade de memória e velocidade do disco do que para umfirewall, principalmente devido ao cache; velocidade deprocessamento também influirá na performance do proxy.

• conhecimento básico sobre protocolo TCP-IP e Internet;

• conhecer o UNIX no qual você quer instalar o Squid!

7.3 O feijão com arrozO Squid é um webproxy que suporta proxying para DNS e FTP, alem do

tradicional HTTP. Ele permite também a criação de árvores de cache viaHTCP, load balance para servidores HTTP (vide http_accelerator) e diversosmodos de autentificação de usuário, o que também inclui a possibilidade decriação de listas de sites e/ou palavras proibidas para acesso.

Neste capitulo irei mostrar apenas o básico para você ter o Squidrodando. Com essas configurações, você irá ter o Squid como proxy eefetuando cache das páginas visitadas.

7.3.1 InstalaçãoA instalação poderá depender de qual distribuição você estiver usando.

Normalmente você encontrara o Squid nos CDROM de distribuição emformatos RPM, DEB ou TGZ. Você também pode usar o fonte do Squid ecompilar os binários usando somente as funções que você precisar.

Para distribuições que trabalham com pacotes a instalação é muitosimples:rpm -ivh squid-versao.rpm (para distribuições baseadas em RPM)

ouapt-get install squid (para o Debian)

O Conectiva (versão 6 e posteriores) também podem usar as mesmasfacilidades do apt-get.

Para instalar a partir do fonte, faca o download do Squid emhttp://www.squid-cache.org na seção de downloads. Depois execute:tar -xzvf squid-versao.tar.gz/cd /diretorio_criado./configuremakemake install

Ler o arquivo README que acompanha o arquivo fonte também eessencial para obter os detalhes.A versão termina em números pares (para versões estáveis) e impares (para

Page 127: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

127

versões de teste) então escolha a ultima de acordo com seus interesses.Procure sempre pelos arquivos com o RELEASE incluso.

7.3.2 ConfiguraçãoDepois de instalado você provavelmente (espero!) terá os binários e

arquivos de configuração, muitos deles comentados e precedidos decomentários sobre as funções que exercem. O arquivo de configuração doSquid fica em /etc/squid.conf. Inicialmente você deve configurar apenas 3parâmetros para que tenha o Squid ao menos respondendo a requisições ecriando cache das páginas requisitadas:http_port 3128cache_mem 8Mbhttp_access allow all

Com exceção do ultimo parâmetro (que deve ser inserido) essesparâmetros estão apenas comentados (com um sinal "#"). Depois disso vocêpode iniciar o Squid usando o script de inicialização que fica dentro do diretório/etc/rc.d/init.d (ou /etc/init.d para o Debian):# cd /etc/rc.d/init.d#./squid start

Na maioria das distribuições o cache é criado quando o Squid é iniciadopela primeira vez (pelo menos para sistemas Linux). Você ainda pode forçar acriação de cache digitando:# squid -z

Ainda é possível fazer com que o Squid interprete novos parâmetros noarquivo de configuração sem interromper os processos atuais:# squid -k reconfigure

O Squid já está rodando e aceitando conexões. Agora vamos explicarmelhor os parâmetros utilizados:

• http_port 3128: Este parâmetro indica em que porta o Squidestará aceitando requisições de páginas Web. Várias portasdiferentes podem ser listadas simultaneamente, desde que estejamlivres.

• cache_mem 8Mb: Este parâmetro especifica a quantidade ideal dememória a ser usada pelo Squid, mas isso não significa um limite. OSquid irá ultrapassar o valor estipulado se assim for necessário.

• http_access allow all: Inicialmente o Squid estará recusandoo serviço de proxy para qualquer requisição que não tenha sido feitaa partir do localhost (127.0.0.1). Essa diretriz, pelo contrário, estapermitindo que qualquer um requisite qualquer página.

O Squid permite uma grande flexibilidade sobre o que é permitido ou nãoque o cliente requisite (conforme você poderá acompanhar mais à frente).Agora você pode fazer um teste com um navegador qualquer, como oNetscape ou o Internet Explorer. Para isso, configure (na parte referente aservidor proxy) o endereço IP do proxy Squid sem esquecer de indicar a porta3128.

Page 128: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

128

As solicitações agora serão atendidas pelo Squid, que irá fazer cachedas requisições, como páginas html e figuras, o que aumentaconsideravelmente a rapidez de navegação e diminui a ocupação de banda dolink.

7.4 Controlando os usuáriosUsuá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ê podebloquear 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 definidosnestas listas.

Antes de mostrar como a lista é feita, procure ter antes em mente aseguinte idéia:

1 - As regras são interpretadas na ordem que aparecem: quando vocêdefine regras, a primeira é interpretada. Se a regra descritanão combinar com a requisição a mesma será comparada com a próximaregra, e assim por diante.

2 - Sempre, SEMPRE coloque como última regra uma ACL que bloqueietudo. Se você não fizer isso, seu controle vai para o espaço.

3 - Não crie regras demais e desnecessárias! Procure evitarredundâncias e regras de controle que exijam resolução de nomes. Isso podeatrasar 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ãoobtido por resolução reversa de IP o que pode causar atrasos para arequisição ter resposta.

• DSTDOMAIN Método de controle sobre um domínio especifico.

• SRCDOM_REGEX Expressão regular que e avaliada para tentarmarcar um domínio requisitante; esse parâmetro pode causar atrasospor usar resolução reversa de endereço IP.

• DSTDOM_REGEX O mesmo que srcdom_regex só que para odomínio de destino.

• TIME Dia da semana e hora da semana.

• URL_REGEX Essa ACL irá procura em na URL uma expressaregular que você especificar.

Page 129: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

129

• URLPATH_REGEX Semelhante ao url_regex só que ira procurara expressão na url toda exceto no nome do protocolo e domínio. Issoira tentar combinar com o nome do diretório ao longo da url.

• PORT O acesso pode ser controlado pela porta do endereço doservidor 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 como contido no cabeçário HTTP de requisição do cliente.

• IDENT Seqüência de caracteres que combinam com o nome dousuário. Requer um servidor Ident rodando na máquina do cliente.

• IDENT_REGEX O mesmo que ident, mas utilizando-se de umaexpressão regular.

• PROXY_AUTH Permite a autentificação de usuários através doenvio de usuário/senha. Requer um programa externo para realizaressa autentificação.

• PROXY_AUTH_REGEX O mesmo que proxy_auth, só que iratentar combinar o nome do usuário fornecido pelo programa deautentificação através de uma expressão regular.

• SNMP_COMMUNITY Seqüência de caracteres que tentarãocombinar com o nome da comunidade SNMP.

• REQ_MIME_TYPE Expressão regular que tentara combinar como 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 cadalinha da acl o que ela poderá ter como permitido (ou negado). A lista de regrasjá é um pouco menor.

HTTP_ACCESSsintaxe: http_access allow | deny [!] acl descrição: permite ou nega acesso aoserviço http baseado na lista de acesso (acl) definida. O uso de "!" indicainversão (diferente de).

Eu coloquei uma observação um pouco acima de que você sempre temde ter como última regra uma regra de bloqueie tudo, a fim de evitar brechas noconjunto de acl's que você tenha criado. Você pode usar o http_access parabloquear acesso a http dessa forma:

acl all src 0.0.0.0/0 http_access deny allIsso 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.

Page 130: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

130

• ICP_ACCESSsintaxe: icp_access allow | deny [!] acl descrição: use para forçarseus vizinhos a usarem você como um <sibling> ao invés de pai. Issoe utilizado quando se trabalha com arvores de cache.

• MISS_ACCESSsintaxe: miss_access allow | deny [!] acl descrição: limita os domíniosque podem fazer requisições ao cache do servidor utilizando osrecursos acl.

• PROXY_AUTH_REALMsintaxe: proxy_auth_realm seqüência de caracteres descrição: narealidade esse comando não exerce nenhum tipo de controle, apenasinforma ao cliente (através da seqüência de caracteres) aonde eleesta realizando o logon. Não é essencial, mas o padrão aparececomo "Squid proxy"? e você pode mudar isso sem problemas.

• IDENT_LOOKUP_ACCESSsintaxe: ident_lookup_access allow | deny acl descrição: se a aclcombinar com a requisição do cliente, este cliente será autentificadopor uma procura ident.

7.5 Exemplos de configuraçãoAgora 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 MACaddress igual a 00:08:c7:9f:34:41 :

acl all src 0.0.0.0acl pl800_arp arp 00:08:c7:9f:34:41http_access allow pl800_arphttp_access deny all

7.5.2 Para restringir acesso nas horas de trabalho (9 horas - 17horas, de segunda sexta) da faixa de IP 192.168.2.0 máscara255.255.255.0 :

acl all src 0.0.0.0acl ip_acl src 192.168.2.0/24acl time_acl time M T W H F 9:00-17:00http_access allow ip_acl time_aclhttp_access deny all

7.5.3 Posso usar uma lista de controle com multiplos horários paradiferentes usuários?Se você pensou em algo assim:

Page 131: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

131

acl carlos src 192.168.10.1acl davi src 192.168.10.2acl cleusa src 192.168.10.3acl manhã time 06:00-11:00acl tarde time 14:00-14:30acl noite time 16:25-23:59http_access allow carlos manhã almoçohttp_access allow davi manhã almoçohttp_access allow cleusa noite

você errou !O Squid interpreta regras desta forma:

http_access REGRA definição1 E definição 2 E definição3

OUhttp_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, umavez que nunca serão verdadeiros na mesma hora. Como é falso (de acordocom a lógica booleana):0/1 E 1 = 0 (falso)http_access allow carlos E manhã OUhttp_access allow carlos almoço

7.5.4 Quero criar uma acl para bloquear sites com a palavra sexopois meus funcionários ficam baixando filmes em Divx depornografia:

acl porno url_regex sexohttp_access deny porno

Isso tem algumas conseqüências. Primeiro que essa regra deveencabeçar a lista para você não correr o risco de liberar o acesso antes debloqueá-lo. Segundo que um site http://www.sexoesaude.com.br estariaencaixado na lista de bloqueio, apesar do conteúdo não ser o mesmo.

7.5.5 A idéia acima e ótima, mas eu tenho uma lista de palavraspara fazer o mesmo. Terei que repetir esse comando váriasvezes?De forma alguma:

acl porno url_regex "/etc/squid/porno.txt"http_access deny porno

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

7.5.6 Ainda existem sites que escapam a esse controle. Gostaria debloqueá-los diretamente.

acl porno2amissao dstdomain playboy.com

Page 132: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

132

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

7.5.7 Meu diretor reclama que agora não consegue mais ler asentrevistas no site da Playboy.Chefe é chefe. Antes que ele deixe de pagar seu salário, inclua no

arquivo /etc/squid.conf :acl entrevistas urlpath_regex entrevistashttp_access allow entrevistas

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

7.5.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ênciasquando estas palavras aparecerem no final da URL. O símbolo é usado emexpressões regulares e pode ajudar a marcar casos bem específicos.

A essa altura você já sabe como proceder em seguida.

7.6 Recursos na InternetO 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.org

Outro site interessante e o ORSO(http://web.onda.com.br/orso/index.html) pois contem conteúdo interessantesobre o Squid, incluindo o SARG, script para gerar páginas html dos arquivosde log do Squid. No site você também encontrara listas de palavras parabloqueios de sites pornográficos.

Você poderá encontrar versões novas desse manual no websitehttp://www.imortais.cjb.net/linux/

Page 133: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

133

APÊNDICE A. LICENÇA DE PUBLICAÇÃO LIVRE

Esta é uma tradução não-oficial da Open Publication License versão 1.0,de 8 de junho de 1999, e não é substituto legal para a Licença original,disponível em http://www.opencontent.org/openpub. Entretanto, esta traduçãopoderá auxiliar pessoas que falem Português a entender melhor a licença. Épermitido a qualquer pessoa copiar e distribuir cópias desse documento delicença, desde que sem a implementação de qualquer mudança.

OPEN PUBLIC LICENSEDraft v1.0, 8 june 1999

I. Requisitos comuns às versões modificadas e nãomodificadas

Os trabalhos protegidos pela Licença de Livre Publicação (OpenPublication License) podem ser reproduzidos e distribuídos no todo ou emparte, em qualquer meio físico ou eletrônico, desde que os termos destalicença estejam incluídos, e que esta licença ou uma incorporação dela porreferência (com quaisquer das opções escolhidas pelo autor ou editor) estejampresentes na reprodução.

A forma apropriada para uma incorporação por referência deste livro é:

Copyright© 2002 Alfamídia Ltda. Este material somente poderá serdistribuído se sujeito aos termos e condições firmados na Licençade Livre Publicação (Open Publication License), versão 1.0 ousuperior (a versão mais atual encontra-se disponível emhttp://www.opencontent.org/openpub/).

Esta referência, devidamente preenchida com os dados da publicação,deve ser seguida imediatamente com quaisquer opções escolhidas pelosautores ou editor do documento (consultar a seção Termos opcionais).

É permitida a redistribuição comercial de material licenciado pelaLicença de Livre Publicação (Open Publication License).

Qualquer publicação no formato livro padrão (papel) requerobrigatoriamente a citação dos autores e editor originais. Os nomes dosautores e do editor devem aparecer em todas as superfícies externas do livro.Em todas as faces externas do livro, o nome do editor original deve estarimpresso em tamanho tão grande quanto o título do trabalho, e citado comoproprietário em relação àquele título.

II. CopyrightO copyright de todo trabalho protegido pela Licença de Livre Publicação

(Open Publication License) pertence aos autores ou proprietários.

Page 134: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

134

III. Escopo da licençaOs termos de licença a seguir aplicam-se a todos os trabalhos

protegidos pela Licença de Livre Publicação (Open Publication License), a nãoser 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 deLivre Publicação (Open Publication License) em uma mesma mídia quecontenha outros trabalhos ou programas não protegidos por essa licença nãodecorre em aplicação da Licença de Livre Publicação (Open PublicationLicense) para esses outros trabalhos. O trabalho resultante deve explicitamenteconter uma nota especificando a inclusão do material protegido pela Licença deLivre Publicação (Open Publication License) e o aviso de copyright apropriado.

APLICABILIDADE. Se alguma parte desta licença não puder seraplicada em alguma jurisdição, as partes restantes deste documento continuamsendo aplicadas.

AUSÊNCIA DE GARANTIA. Os trabalhos protegidos pela Licença deLivre Publicação (Open Publication License) são fornecidos "como estão", semgarantias de qualquer tipo, explícita ou implícita, incluindo, mas não limitado a,as garantias implícitas de comercialização e conveniência para um propósitoparticular, ou garantia de não-infração.

IV. Requisitos para trabalhos modificadosTodas as versões modificadas de documentos cobertos por esta licença,

incluindo traduções, antologias, compilações e documentação parcial, deveseguir os requisitos abaixo:

A versão modificada deve ser indicada como tal.As pessoas que fizerem as modificações e as datas de modificação

devem ser identificadas.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.O local da versão não-modificada do documento deve ser indicado.Os nomes originais dos autores não devem ser utilizados para indicar ou

garantir seu endosso ao documento resultante sem a autorização expressa dosautores.

V. Práticas recomendadasEm adição aos requisitos desta licença, é 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,os autores sejam informados por email, ao menos trinta dias antes, para que osautores tenham tempo de providenciar documentação atualizada. Estanotificação deve descrever as modificaçoes introduzidas no documento, seexistirem.

Page 135: Firewall: Segurança de redes LinuxCurso_Tecnico/Redes- Prof. Raul... · 2009. 6. 16. · Firewall: Segurança de redes Linux Paul Russell Gleydson Mazioli da Silva Alexandre Folle

135

Todas as modificações substanciais (incluindo exclusões) devem sermarcadas claramente no documento, ou então descritas em um anexo aodocumento.

Finalmente, mesmo não sendo obrigatório sob esta licença, éconsiderado de bom tom oferecer uma cópia sem ônus de todo o materialmodificado (impresso e CD-ROM) para os autores originais.

VI. Termos opcionaisOs autores e editores de documentos protegidos pela Licença de Livre

Publicação (Open Publication License) podem escolher certas opções delicença simplesmente incluindo alguns parágrafos após a cópia da licença ousua referência. Estas opções são consideradas parte da licença e devem serincluídas com ela (ou com a referência a ela) nos trabalhos derivados.

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

B:É vedada a distribuição deste trabalho ou qualquer derivado seu emqualquer formato de livro padrão (papel) sem a prévia autorização dosproprietários do direito autoral.

Políticas de Publicação Livre(O texto a seguir não é considerado parte da licença.)Os trabalhos protegidos pela Licença de Livre Publicação (Open

Publication License) estão disponíveis e podem ser acessados na home pageda Open Publication http://works.opencontent.org/ .

Os autores de trabalhos protegidos pela Licença de Livre Publicação(Open Publication License) podem incluir suas próprias licenças nessestrabalhos, desde que os termos dessa licença não sejam mais restritrivos queos da Licença de Livre Publicação (Open Publication License).

Em caso de dúvidas sobre a Licença de Livre Publicação (OpenPublication License), contactar David Wiley <[email protected]> ou a lista deautores de publicações <[email protected]> via email.

Para se inscrever na lista de autores de publicações livres (OpenPublication Author's List), mande um email para <[email protected]>com a palavra subscribe no corpo da mensagem.

Para enviar mensagens para a lista de autores de publicações livres(Open Publication Author's List), mande um email [email protected] ou simplesmente responda a uma mensagempostada.

Para se desinscrever na lista de autores de publicações livres (OpenPublication Author's List), mande um email para [email protected] com a palavra unsubscribe no corpo damensagem.