Você está na página 1de 135

Firewall:

Segurana de redes Linux


Paul Russell
Gleydson Mazioli da Silva
Alexandre Folle de Menezes
Traduo Oficial Alfamdia
Alexandre Folle de Menezes
Verso 1.1, agosto/2002.
As marcas registradas utilizadas no decorrer deste livro so usadas
unicamente para fins didticos, sendo estas propriedade de suas respectivas
companhias.
A Alfamdia no assume qualquer responsabilidade por erros ou omisses, ou
por danos resultantes do uso das informaes contidas neste livro.
O captulo 5 uma adaptao do texto:
Linux IPCHAINS-HOWTO
Copyright 1999 Paul Russell, <ipchains@rustcorp.com>
Traduo para o portugus por Gleydson Mazioli da Silva, <gleydson@linuxbr.com.br>
O captulo 6 uma adaptao do texto:
Guia Foca GNU/Linux
Copyleft 1999-2002 - Gleydson Mazioli da Silva.
Fonte: http://focalinux.cipsga.org.br
Os captulos 1, 2 e 4 foram escritos por:
Copyright 2002 por Alexandre Folle de Menezes
Traduo para portugus - Brasil, 2002:
Alfamdia Ltda
Rua Flix da Cunha, 818
Porto Alegre - RS - Brasil
Fone/Fax: +55 (51) 3346-7300
E-mail: alfamidia@alfamidia.com.br
URL: http://www.alfamidia.com.br
Esta apostila uma coletnea de textos com licena GNU ou livres
encontrados na Internet, conforme referncias acima.
Este material foi totalmente montado com fins didticos, sem objetivo
comercial. Foram acrescentados exemplos e exerccios desenvolvidos
pela Alfamdia Ltda.
CONTEDO
CONTEDO................................................................................................................... 5
1 TCP/IP..................................................................................................................... 11
1.1 A CAMADA FSICA................................................................................................. 11
1.2 A CAMADA DE ENLACE DE DADOS ....................................................................... 12
1.3 A CAMADA DE REDE ............................................................................................. 12
1.3.1 O DATAGRAMA IP............................................................................................... 13
1.3.2 FRAGMENTAO DOS DATAGRAMAS .................................................................. 14
1.4 CAMADA DE TRANSPORTE.................................................................................... 14
1.4.1 TCP..................................................................................................................... 14
1.4.1.1 O pacote TCP .................................................................................................. 15
1.4.2 UDP.................................................................................................................... 16
1.4.3 ICMP .................................................................................................................. 16
1.5 MONTAGEM DOS PACOTES.................................................................................... 17
1.6 ROTEAMENTO ....................................................................................................... 18
1.6.1 REEMPACOTAMENTO........................................................................................... 20
EXERCCIOS.................................................................................................................... 21
2 ENDEREAMENTO............................................................................................. 22
2.1 ENDEREAMENTO DE ENLACE (MAC) ................................................................ 22
2.2 ENDEREAMENTO DE REDE (IP) .......................................................................... 22
2.2.1 MULTIHOMING .................................................................................................... 23
2.2.2 CLASSES DE REDE IP........................................................................................... 23
2.2.3 ENDEREOS RESERVADOS PARA USO EM REDES PRIVADAS ................................. 24
2.2.4 ENDEREOS ESPECIAIS ........................................................................................ 24
2.2.4.1 O endereo de Rede......................................................................................... 24
2.2.4.2 O endereo de Broadcast................................................................................. 25
2.2.4.3 O endereo de Loopback ................................................................................. 25
2.2.5 DIVISO EM SUB-REDES....................................................................................... 25
2.2.5.1 Mscaras de Sub-Rede .................................................................................... 25
2.2.6 SUPER-REDES E CDIR......................................................................................... 26
2.2.7 REFERNCIA RPIDA DE MSCARA DE REDES ...................................................... 26
2.3 ENDEREAMENTO DE SESSO (PORTAS) ............................................................. 27
EXERCCIOS.................................................................................................................... 28
3 CONECTANDO REDES....................................................................................... 29
3.1 ROTEAMENTO ....................................................................................................... 29
3.1.1 ROTAS ESTTICAS E DINMICAS.......................................................................... 29
3.1.2 GATEWAY............................................................................................................ 30
6
3.2 NETFILTER ............................................................................................................ 30
3.2.1 ANATOMIA DO NETFILTER ................................................................................... 31
3.2.2 NAT.................................................................................................................... 31
3.2.2.1 Tipos de NAT.................................................................................................. 32
3.2.3 IMPLEMENTAO DE UM SERVIO NAT.............................................................. 32
4 VULNERABILIDADES NO PROTOCOLO TCP/IP ........................................ 33
4.1 DISPONIBILIDADE DOS DADOS............................................................................... 33
4.2 SOBRE O PROTOCOLO TCP/IP ............................................................................. 33
4.3 IP SPOOFING......................................................................................................... 34
4.3.1 SERVIOS VULNERVEIS AO IP SPOOFING:.......................................................... 34
4.3.2 MEDIDAS PARA SE PREVENIR DE ATAQUES IP SPOOFING: .................................... 35
4.4 SOBRE OS ATAQUES............................................................................................... 35
4.4.1 SYN FLOODING................................................................................................... 35
4.4.2 LAND................................................................................................................... 35
4.4.3 WINNUKE............................................................................................................ 36
4.4.4 TEARDROP .......................................................................................................... 36
4.4.5 NEWTEAR............................................................................................................ 37
4.4.6 BONK/BOINK....................................................................................................... 37
4.4.7 SSPING................................................................................................................. 37
4.4.8 SMURF................................................................................................................. 37
5 FIREWALL IPCHAINS........................................................................................ 39
5.1 INTRODUO......................................................................................................... 39
5.1.1 O QUE?................................................................................................................ 39
5.1.2 POR QUE? ............................................................................................................ 39
5.1.3 COMO? ................................................................................................................ 39
5.1.4 ONDE?................................................................................................................. 40
5.2 BSICO SOBRE A FILTRAGEM DE PACOTES........................................................... 40
5.2.1 O QUE ? ............................................................................................................. 40
5.2.2 POR QUE? ............................................................................................................ 40
5.2.3 COMO? ................................................................................................................ 41
5.2.3.1 Um kernel com filtragem de pacotes............................................................... 41
5.2.3.2 O ipchains.................................................................................................. 42
5.2.3.3 Fazendo regras permanentes............................................................................ 42
5.3 ROTEAMENTO, MASQUERADING, PORTFORWARDING, IPAUTOFW...................... 43
5.3.1 GUIA RPIDO DE TRS LINHAS PARA MASQUERADING......................................... 43
5.3.2 CONFIGURAES DE FIREWALL SIMPLES ............................................................. 44
5.3.2.1 Rede Pblica.................................................................................................... 44
5.3.2.2 Rede Privada: Masquerading........................................................................... 45
5.3.2.3 Rede Privada: Proxies Transparentes .............................................................. 46
5.3.2.4 Rede Privada: Proxies Tradicionais................................................................. 47
7
5.3.2.5 Servios Internos Limitados ............................................................................ 48
5.3.3 MAIS DETALHES SOBRE MASQUERADING............................................................ 48
5.4 IP FIREWALLING CHAINS..................................................................................... 49
5.4.1 COMO OS PACOTES ATRAVESSAM OS FILTROS...................................................... 49
5.4.1.1 Usando ipchains......................................................................................... 50
5.4.1.2 Operaes em uma regra Simples ................................................................... 51
5.4.1.3 Especificaes de Filtragem............................................................................ 53
5.4.1.4 Efeitos do Lado da Filtragem.......................................................................... 57
5.4.1.5 Operaes em Masquerading .......................................................................... 64
5.4.1.6 Checando um Pacote ....................................................................................... 65
5.4.1.7 Multiplas Regras at Once and Watching What Happens ................................ 65
5.4.2 EXEMPLOS TEIS ................................................................................................. 66
5.4.2.1 Usando ipchains-save............................................................................. 68
5.4.2.2 Usando ipchains-restore...................................................................... 68
5.5 DIVERSOS .............................................................................................................. 69
5.5.1 COMO ORGANIZAR SUAS REGRAS DE FIREWALL................................................... 69
5.5.2 O QUE NO FILTRAR............................................................................................ 69
5.5.2.1 Pacotes ICMP.................................................................................................. 69
5.5.2.2 Conexes TCP para DNS (servidores de nomes)............................................ 70
5.5.2.3 Pesadelos FTP ................................................................................................. 70
5.5.3 FILTRANDO O PING OF DEATH (PING DA MORTE) ................................................. 71
5.5.4 FILTRANDO O TEARDROP E BONK........................................................................ 71
5.5.5 FILTRANDO BOMBAS DE FRAGMENTO................................................................. 71
5.5.6 MODIFICANDO REGRAS DO FIREWALL ................................................................. 71
5.5.7 COMO EU CONFIGURO A PROTEO IP SPOOF?.................................................... 72
5.6 PROBLEMAS COMUNS............................................................................................ 73
5.6.1 IPCHAINS -L TRAVA! ........................................................................................... 73
5.6.2 MASQUERADING/FORWARDING NO FUNCIONA!................................................. 73
5.6.3 -J REDIR NO FUNCIONA!.............................................................................. 73
5.6.4 CORINGAS NAS INTERFACES NO FUNCINAM! ..................................................... 74
5.6.5 TOS NO FUNCIONA! .......................................................................................... 74
5.6.6 IPAUTOFW E IPPORTFW NO FUNCIONAM! ........................................................... 74
5.6.7 XOSVIEW EST QUEBRADO! ................................................................................. 74
5.6.8 FALTA DE SEGMENTAO COM -J REDIRECT! ............................................ 74
5.6.9 EU NO POSSO CONFIGURAR TEMPO LIMITE NO MASQUERADE! ........................... 74
5.6.10 EU DESEJO PROTEGER IPX! ............................................................................... 75
6 FIREWALL IPTABLES........................................................................................ 76
6.1 INTRODUO......................................................................................................... 76
6.1.1 VERSO............................................................................................................... 77
6.1.2 UM RESUMO DA HISTRIA DO IPTABLES............................................................... 77
8
6.1.3 CARACTERSTICAS DO FIREWALL IPTABLES......................................................... 77
6.1.4 FICHA TCNICA.................................................................................................... 78
6.1.5 REQUERIMENTOS................................................................................................. 78
6.1.6 ARQUIVOS DE LOGS CRIADOS PELO IPTABLES ...................................................... 79
6.1.7 INSTALAO........................................................................................................ 79
6.1.8 ENVIANDO CORREES/CONTRIBUINDO COM O PROJETO.................................... 79
6.1.9 O QUE ACONTECEU COM O IPCHAINS E IPFWADM? ............................................... 79
6.1.10 TIPOS DE FIREWALLS ......................................................................................... 79
6.1.11 O QUE PROTEGER?............................................................................................. 80
6.1.12 O QUE SO REGRAS?.......................................................................................... 81
6.1.13 O QUE SO CHAINS? .......................................................................................... 81
6.1.14 O QUE SO TABELAS?........................................................................................ 81
6.1.15 HABILITANDO O SUPORTE AO IPTABLES NO KERNEL .......................................... 82
6.1.16 LIGANDO SUA REDE INTERNA A INTERNET......................................................... 84
6.2 MANIPULANDO CHAINS......................................................................................... 84
6.2.1 ADICIONANDO REGRAS - A.................................................................................. 84
6.2.2 LISTANDO REGRAS - L......................................................................................... 85
6.2.3 APAGANDO UMA REGRA - D................................................................................ 87
6.2.4 INSERINDO UMA REGRA - I................................................................................... 88
6.2.5 SUBSTITUINDO UMA REGRA - R........................................................................... 88
6.2.6 CRIANDO UM NOVO CHAIN - N............................................................................. 88
6.2.7 LISTANDO OS NOMES DE TODOS OS CHAINS ATUAIS............................................. 90
6.2.8 LIMPANDO AS REGRAS DE UM CHAIN - F.............................................................. 90
6.2.9 APAGANDO UM CHAIN CRIADO PELO USURIO - X............................................... 90
6.2.10 ZERANDO CONTADOR DE BYTES DOS CHAINS - Z............................................... 90
6.2.11 ESPECIFICANDO O POLICIAMENTO PADRO DE UM CHAIN - P............................. 91
6.3 OUTRAS OPES DO IPTABLES.............................................................................. 92
6.3.1 ESPECIFICANDO UM ENDEREO DE ORIGEM/DESTINO........................................... 92
6.3.2 ESPECIFICANDO A INTERFACE DE ORIGEM/DESTINO............................................. 92
6.3.3 ESPECIFICANDO UM PROTOCOLO ......................................................................... 94
6.3.3.1 Especificando portas de origem/destino.......................................................... 94
6.3.3.2 Especificando mensagens do protocolo ICMP................................................ 94
6.3.3.3 Especificando pacotes syn............................................................................... 95
6.3.4 ESPECIFICANDO FRAGMENTOS............................................................................. 96
6.3.5 ESPECIFICANDO UMA EXCEO........................................................................... 96
6.3.6 ESPECIFICANDO UM ALVO.................................................................................... 97
6.3.6.1 Alvo REJECT.................................................................................................. 98
6.3.6.2 Especificando LOG como alvo........................................................................ 98
6.3.6.3 Especificando RETURN como alvo.............................................................. 101
6.4 A TABELA NAT (NETWORK ADDRESS TRANSLATION) - FAZENDO NAT............. 101
6.4.1 CRIANDO UM NOVO CHAIN NA TABELA NAT..................................................... 102
9
6.4.2 FAZENDO IP MASQUERADING (PARA OS APRESSADOS) ...................................... 102
6.4.3 FAZENDO SNAT................................................................................................ 102
6.4.3.1 Fazendo IP Masquerading ............................................................................. 104
6.4.4 FAZENDO DNAT............................................................................................... 105
6.4.4.1 Redirecionamento de portas .......................................................................... 105
6.4.5 MONITORANDO CONEXES FEITAS NA TABELA NAT .......................................... 106
6.5 A TABELA MANGLE ............................................................................................. 106
6.5.1 ESPECIFICANDO O TIPO DE SERVIO................................................................... 106
6.5.1.1 Especificando o TOS para trfego de sada................................................... 107
6.5.1.2 Especificando o TOS para o trfego de entrada ............................................ 107
6.6 OUTROS MDULOS DO IPTABLES........................................................................ 107
6.6.1 CONFERINDO DE ACORDO COM O ESTADO DA CONEXO.................................... 108
6.6.2 LIMITANDO O NMERO DE VEZES QUE A REGRA CONFERE ................................. 108
6.6.3 PROTEO CONTRA PING DA MORTE.................................................................. 109
6.6.4 PROTEO CONTRA SYN FLOOD......................................................................... 109
6.6.5 PROTEO CONTRA IP SPOOFING ...................................................................... 109
6.6.6 ESPECIFICANDO MLTIPLAS PORTAS DE ORIGEM/DESTINO................................. 110
6.6.7 ESPECIFICANDO O ENDEREO MAC DA INTERFACE........................................... 110
6.6.8 CONFERINDO COM QUEM CRIOU O PACOTE ........................................................ 111
6.7 CAMINHO PERCORRIDO PELOS PACOTES NAS TABELAS E CHAINS .................... 111
6.7.1 PING DE 192.168.1.1 PARA 192.168.1.1............................................ 112
6.7.2 CONEXO FTP DE 192.168.1.1 PARA 192.168.1.1 ............................................ 112
6.7.3 CONEXO FTP DE 192.168.1.1 PARA 192.168.1.4 ............................................ 113
6.7.4 CONEXO FTP DE 200.217.29.67 PARA FTP.DEBIAN.ORG.BR ................. 114
6.7.5 PING DE 192.168.1.4 PARA 192.168.1.1 ............................................................ 115
6.7.6 CONEXO FTP DE 192.168.1.4 PARA 192.168.1.1 ............................................ 116
6.7.7 CONEXO FTP DE 192.168.1.4 PARA FTP.DEBIAN.ORG.BR................................ 117
6.7.8 CONEXO FTP DE 200.198.129.162 PARA 200.217.29.167 .............................. 118
6.7.9 GRFICO GERAL DA PASSAGEM DOS PACOTES ................................................... 118
6.8 EXEMPLOS DE CONFIGURAES DO IPTABLES................................................... 119
6.8.1 BLOQUEANDO CONEXES DE FORA PARA SUA MQUINA ................................... 119
6.8.2 MONITORANDO TENTATIVA DE CONEXO DE TROJANS EM SUA MQUINA......... 119
6.8.3 CONECTANDO SUA REDE INTERNA A INTERNET ................................................. 120
6.8.4 UM EXEMPLO DE FIREWALL SIMPLES ................................................................. 120
7 O PROXY SQUID................................................................................................ 125
7.1 INTRODUO....................................................................................................... 125
7.2 REQUISITOS BSICOS .......................................................................................... 125
7.3 O FEIJO COM ARROZ......................................................................................... 126
7.3.1 INSTALAO...................................................................................................... 126
7.3.2 CONFIGURAO ................................................................................................ 127
7.4 CONTROLANDO OS USURIOS ............................................................................. 128
10
7.5 EXEMPLOS DE CONFIGURAO .......................................................................... 130
7.5.1 PERMITIR HTTP_ACCESS PARA APENAS UMA MQUINA COM MAC ADDRESS IGUAL
A 00:08:C7:9F:34:41 :.................................................................................................... 130
7.5.2 PARA RESTRINGIR ACESSO NAS HORAS DE TRABALHO (9 HORAS - 17 HORAS, DE
SEGUNDA SEXTA) DA FAIXA DE IP 192.168.2.0 MSCARA 255.255.255.0 :................... 130
7.5.3 POSSO USAR UMA LISTA DE CONTROLE COM MULTIPLOS HORRIOS PARA
DIFERENTES USURIOS?................................................................................................. 130
7.5.4 QUERO CRIAR UMA ACL PARA BLOQUEAR SITES COM A PALAVRA SEXO POIS MEUS
FUNCIONRIOS FICAM BAIXANDO FILMES EM DIVX DE PORNOGRAFIA:.......................... 131
7.5.5 A IDIA ACIMA E TIMA, MAS EU TENHO UMA LISTA DE PALAVRAS PARA FAZER O
MESMO. TEREI QUE REPETIR ESSE COMANDO VRIAS VEZES?........................................ 131
7.5.6 AINDA EXISTEM SITES QUE ESCAPAM A ESSE CONTROLE. GOSTARIA DE BLOQUE-
LOS DIRETAMENTE. ........................................................................................................ 131
7.5.7 MEU DIRETOR RECLAMA QUE AGORA NO CONSEGUE MAIS LER AS ENTREVISTAS
NO SITE DA PLAYBOY..................................................................................................... 132
7.5.8 E UMA LISTA DE DIRETRIOS? ........................................................................... 132
7.6 RECURSOS NA INTERNET .................................................................................... 132
APNDICE A. LICENA DE PUBLICAO LIVRE...................................... 133
11
1 TCP/IP
O TCP/IP um protocolo que conecta redes LAN ou WAN, homogneas
ou heterogneas. Ele pode fazer tanto a comunicao entre hosts ponto-a-
ponto, como a comunicao entre cliente e servidor.
Existem dois tipos de interao entre aplicaes.
Comunicao Orientada Conexo apropriada quando as aplicaes
precisam de uma troca contnua de dados.
Em contraste, a Comunicao No Orientada Conexo apropriada
quando as aplicaes trocam mensagens isoladas, geralmente com
quantidades pequenas de dados.
Para conseguir uma troca de dados confivel entre os ns, so
necessrios vrios procedimentos: empacotamento dos dados, determinao
do caminho a ser seguido pelos pacotes, transmisso dos dados, adaptao da
taxa de transmisso de acordo com a capacidade do destino de receber dados,
gerenciamento de erros e retransmisso de dados.
Isso resulta em uma implementao complicada. Para facilitar essa
tarefa, pode se usar uma implementao modular, agrupando as tarefas
relacionadas em camadas distintas.
Para o TCP/IP foi adotado um modelo de comunicao dividido em
camadas, que depois viria a influenciar o modelo OSI que hoje considerado
padro.
Cada camada acrescenta informaes de controle ao pacote de dados e
transmite seu pacote para a camada inferior, que tambm adiciona seus dados.
1.1 A camada Fsica
A camada fsica trabalha com a mdia fsica, conectores, e os sinais que
representam 0 e 1. Por exemplo, um modem padro V.90 ou V.92
implementam as funes da camada fsica.
Aplicaes
e
Servios
UDP
IP
PPP
V.90
Transporte
Rede
Enlace
Fsico
Sesso
Apresentao
Aplicao
TCP
Ethernet
12
1.2 A camada de Enlace de Dados
A camada de enlace de dados usa a capacidade de transmisso de
dados brutos da camada fsica e transforma-a em uma linha que parea
camada de rede ser livre de erros de transmisso. O protocolo PPP um
exemplo de camada de enlace de dados.
Na camada de Enlace de Dados, os dados so organizados em quadros.
Cada quadro tem um cabealho que inclui o endereo e controla a
informao e um trailer que usado para deteco de erros.
Um cabealho de quadro de LAN contm a os endereos fsicos de
origem e destino, que identificam as placas de rede.
Note que o Enlace pode ser uma rede local ou uma conexo Ponto-a-
Ponto.
1.3 A camada de Rede
O IP (Internet Protocol) executa as funes da camada de rede. O IP
roteia os dados entre sistemas. Os dados podem atravessar um nico enlace
ou podem ser retransmitidos por vrios enlaces pela internet. As unidades de
dados so chamadas datagramas.
Os datagramas tm um cabealho IP que contm endereamento de
rede. Os roteadores examinam o endereo de destino no cabealho IP para
direcionar os datagramas para seu destino.
A camada IP dita No-Orientada Conexo porque cada datagrama
roteado independentemente e o IP no garante a entrega confivel ou em
seqncia dos datagramas.
Dados Header Trailer
Informao
Cabealho IP
Endereo IP Origem
Endereo IP Destino
13
1.3.1 O Datagrama IP
O cabealho de um datagrama IP pode ser visto na figura abaixo:
Os campos do cabealho tm o seguinte significado:
VERS: verso do protocolo IP que foi usada para criar o datagrama
(4bits)
HLEN: comprimento do cabealho, medido em palavras de 32 bits (4
bits)
TOTAL-LENGTH: este campo proporciona o comprimento do
datagrama medido em bytes, incluindo cabealho e dados.
SERVICE-TYPE: este campo especifica como o datagrama poderia
ser manejado
TTL(Time To Live): especifica o tempo que o datagrama est
permitido a permanecer no sistema Internet. Gateways e hosts que
processam o datagrama devem decrementar o campo TTL cada vez
que um datagrama passa por eles e devem remov-lo quando seu
tempo expirar.
PROTOCOL: especifica qual protocolo de alto nvel foi usado para
criar a mensagem que est sendo transportada na rea de dados do
datagrama.
HEADER-CHECKSUM: assegura integridade dos valores do
cabealho.
SOURCE AND DESTINATION IP ADDRESS: especifica o endereo
IP de 32 bits do remetente e receptor.
IDENTIFICATION, FLAGS e FRAGMENTS: estes trs campos
controlam a fragmentao e a unio dos datagramas. O campo de
Verso Header Precedncia Length of Datagram
Identificao
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 Cabealho
Endereo IP Origem
Endereo IP Destino
Opes
Dados
14
identificao contm um nico inteiro que identifica o datagrama,
um campo muito importante porque quando um gateway fragmenta
um datagrama, ele copia a maioria dos campos do cabealho do
datagrama em cada fragmento, ento a identificao tambm deve
ser copiada, com o propsito de que o destino saiba quais
fragmentos pertencem a quais datagramas. Cada fragmento tem o
mesmo formato que um datagrama completo.
FRAGMENT OFFSET: especifica o incio do datagrama original dos
dados que esto sendo transportados no fragmento. medido em
unidades de 8 bytes.
1.3.2 Fragmentao dos Datagramas
Ao realizar trocas de pacotes, os aplicativos da Internet se deparam com
um problema: A diferena do tamanho das mensagens nas diversas redes.
Nesse caso, o protocolo IP suporta o processo de fragmentao, onde os
datagramas so divididos em unidades menores.
O procedimento de fragmentao realizado por um gateway, onde as
mensagens so partidas em unidades menores e adequadamente
identificadas. a estao destino ento reagrupar as instrues baseado nas
identificaes do gateway.
Na identificao dos fragmentos o gateway cria um header para cada
fragmento.O header contm os endereos iniciais das redes e uma
identificao referente mensagem a qual faz parte.
J na fase de reagrupamento, a estao destino, ao receber o primeiro
fragmento, independentemente de estar na ordem correta, aciona um timer. Se
uma margem de tempo padro for ultrapassada e a mensagem no estiver
completamente recontituida, a estao destino descarta os fragmentos
recebidos e retorna origem uma mensagem de erro.
1.4 Camada de Transporte
1.4.1 TCP
O TCP (Transmission Control Protocol) proporciona conexes de dados
confiveis para as aplicaes. O TCP conta com mecanismos que garantem
que os dados so entregues s suas aplicaes locais:
ntegros
Em seqncia
Completos
Sem duplicatas
Os mecanismos bsicos que o TCP usa para conseguir isso so:
Numerao dos segmentos
15
Estabelecimento de Timeout
Retransmisso dos segmentos
O lado que recebe os dados deve coloc-los em na seqncia correta,
descartando duplicatas e confirmando o recebimento dos mesmos.
O TCP implementado apenas nos hosts. O TCP um protocolo full-
duplex, ou seja, ambos os lados podem enviar dados ao mesmo tempo.
O TCP adiciona um cabealho ao pacote de dados da aplicao,
formando um segmento.
O TCP passa os segmentos ao IP, que ento roteia os mesmos at seu
destino. O TCP aceita segmentos do IP, determina qual aplicao o destino,
e passa os dados para a aplicao apropriada.
1.4.1.1 O pacote TCP
Os campos do cabealho tm o seguinte significado:
Porta Origem e Destino: estes campos no cabealho TCP contm os
nmeros de portas TCP que identificam os programas de aplicao
dos extremos de uma conexo.
Nmero de sequncia (32 bits): identifica a posio no fluxo de bytes
do segmento enviado pelo transmissor.
Nmero de Reconhecimento (32 bits): este campo identifica a
posio do byte mais alto (ou ltimo byte) que o fonte recebeu.
Porta Origem Porta Destino
Nmero de Seqncia
Nmero de Reconhecimento
Window
Urgent Pointer Checksum
Opes
Flags Reservado Offset
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
16
Offset: contm um inteiro que especifica o incio da poro de dados
do segmento. Este campo necessrio j que o campo Options varia
em comprimento dependendo de quais opes tenham sido
includas.
Reserv: reservado para uso futuro.
Flags (6 bits): determina o propsito e contedo do segmento,
codificado assim:
o URG - Campo de ponteiro Urgente vlido
o ACK - Campo de Reconhecimento vlido
o PSH - Este segmento solicita um PUSH
o RST - Reset da conexo
o SYN - Sincroniza numeros de sequncias
o FIN - O transmissor chega ao fim do fluxo de bytes.
WINDOW: atravs deste campo o software TCP indica quantos
dados ele tem capacidade de receber em seu buffer.
URGENT POINTER: TCP atravs deste campo permite que o
transmissor especifique que alguns dados so urgentes, isto significa
que os dados sero expedidos to rpido quanto seja possvel.
OPTIONS: o software TCP usa este campo para se comunicar com o
software do outro extremo da conexo.
CHECKSUM: usado para verificar a integridade tanto do cabealho
como dos dados do segmento TCP.
1.4.2 UDP
O UDP no faz nenhuma garantia quanto entrega dos dados, e
dever da aplicao trocar informaes que confirmem a chegada dos dados. O
UDP implementado apenas nos hosts.
Com o UDP (User Datagram Protocol), uma aplicao manda uma
mensagem isolada para outra aplicao. O UDP adiciona um cabealho,
formando um datagrama UDP.
O UDP passa os segmentos ao IP, que ento roteia os mesmos at seu
destino. O UDP aceita segmentos do IP, determina qual aplicao o destino,
e passa os dados para a aplicao apropriada.
1.4.3 ICMP
O IP tem um projeto simples e elegante. Em condies normais, o IP faz
um uso muito eficiente da memria e recursos de transmisso.
Como IP prov um servio de expedio de datagramas sem conexo e
no confivel, e alm disso um datagrama viaja de um gateway a outro at
alcanar um gateway que possa exped-lo diretamente estao destino;
17
necessrio um mecanismo que emita informaes de controle e de erros
quando acontecerem problemas na rede. Alguns dos problemas tpicos que
podem acontecer so:
Um gateway no pode expedir ou rotear um datagrama;
Um gateway detecta uma condio no usual, tal como
congestionamento.
O mecanismo de controle que emite mensagens quando acontece algum
erro a funo principal do protocolo ICMP. O ICMP permite aos gateways
enviar mensagens de erros ou de controle a outros gateways ou hosts. ICMP
prov comunicao entre o software de IP numa mquina e o software de IP
numa outra mquina.
Tabela 1-1 Mensagens ICMP
Tipo Mensagem
0 Echo Reply
3 Destination Unreachable
4 Source Quench
5 Redirect
8 Echo
11 Time Exceeded
12 Parameter Problem
13 Time Stamp
14 Time Stamp Reply
ICMP somente reporta condies de erros fonte original. A fonte deve
relatar os erros aos programas de aplicao individuais e tomar ao para
corrigir o problema. Uma das mensagens que o ICMP pode enviar :
Destination Unreachable, o qual, por sua vez pode ser dos seguintes tipos:
Network Unreachable (rede no alcanvel)
Host Unreachable (mquina no alcanvel)
Port Unreachable (porta no alcanvel)
Destination Host Unknown (mquina destino desconhecido)
Destination Network Unknown (rede destino desconhecida)
1.5 Montagem dos pacotes
Na maioria das redes, a informao dividida em vrias partes,
chamadas de pacotes, por duas razes: compartilhamento de recursos e
deteco/correo de erros.
18
Obviamente no justo que um nico usurio da domine os recursos da
rede por muito tempo. Com a diviso da informao em pacotes, cada um dos
pacotes pode ser enviado/recebido individualmente, permitindo assim que
outros pacotes possam trafegar pela rede. Isso possibilita um
compartilhamento justo dos recursos.
Na maioria dos casos, os dispositivos so conectados atravs de cabos.
Em alguns casos, usa-se ondas de rdio ou mesmo luz infravermelha. Ambas
as formas de conexo fsica esto sujeitas a interferncias, que podem
corromper os dados que trafegam na rede. Grande parte do trabalho complexo
em redes detectar e solucionar os erros no trfego dos dados.
A maioria das tcnicas de deteco e correo de erros baseada no
uso de checksums. Quando a informao enviada, anexado em seu final
um nmero indicando a soma de todos os bytes da mesma. Na recepo, esse
nmero comparado com a soma dos dados recebidos. Se houver diferena,
a informao est corrompida e deve ser retransmitida.
Caso o bloco de dados seja muito grande, o reenvio vai tomar muito
tempo, degradando a performance da rede. Para minimizar este problema,
divide-se a informao em pacotes. Se houver algum erro, basta retransmitir
apenas os pacotes corrompidos.
1.6 Roteamento
O TCP/IP pode ser usado em redes locais e para interligao de redes.
As diversas redes locais conversam atravs dos roteadores. Pode haver mais
de um caminho entre dois pontos.
Dados
Frame
Trailer
TCP/UDP
Header
IP
Header
Frame
Header
Dados
TCP/UDP
Header
IP
Header
Dados
UDP
Header
Dados
Aplicaao
Dados
Transporte
Datagrama UDP
Rede
Datagrama
Enlace
Quadro
Dados
TCP
Header
Transporte
Segmento TCP
{
19
As redes isoladas so conectadas por meio de Roteadores IP.
Roteadores modernos so equipados com vrios slots que podem receber
diferentes tipos de adaptadores de rede: Ethernet, Token-Ring, FDDI, PPP, etc.
O software de IP roda nos hosts e nos roteadores.
Se o destino est no mesmo enlace, manda-se o datagrama
diretamente para ele;
Se o destino no est no mesmo enlace, manda-se o pacote para o
roteador local;
Se o destino no estiver no mesmo enlace do roteador, este ir
repass-lo ao prximo roteador. Este processo continua at que o
destino seja atingido.
Pode ser til ilustrar isto com um exemplo. Imagine um simples roteador
de escritrio, ele pode ter um link intermitente com a Internet, um nmero de
segmentos Ethernet alimentando as estaes de trabalho e outro link PPP
intermitente fora de outro escritrio. Quando o roteador recebe um datagrama
de qualquer de suas conexes de rede, o mecanismo que usa determina qual a
prxima interface deve enviar o datagrama. Computadores simples tambm
precisam rotear, todos os computadores na Internet tm dois dispositivos de
rede. Um a interface loopback (explicada acima), o outro usado para falar
com o resto da rede, talvez uma interface Ethernet, talvez uma interface serial
PPP ou SLIP.
Cada computador mantm uma lista de regras especiais de roteamento,
chamada tabela de roteamento. Esta tabela contm colunas que tipicamente
contm no mnimo trs campos, o primeiro o endereo de destino, o segundo
o nome da interface que o datagrama deve ser roteado e o terceiro
opcionalmente o endereo IP da outra mquina que levar o datagrama em
Rede
Local
Internet
Roteador
N
N
N
N
N
N
N
N
N
Roteador
Roteador
20
seu prximo passo atravs da rede. No GNU/Linux voc pode ver a tabela de
roteamento usando um dos seguintes comandos:
cat /proc/net/route
route -n
netstat -r
O processo de roteamento muito simples: um datagrama (pacote IP)
recebido, o endereo de destino (para quem ele ) examinado e comparado
com cada item da tabela de roteamento. O item que mais corresponder com o
endereo selecionado e o datagrama direcionado a interface especificada.
Se o campo gateway estiver preenchido, ento o datagrama
direcionado para aquele computador pela interface especificada, caso contrrio
o endereo de destino assumido sendo uma rede suportada pela interface.
Em uma LAN pequena, as tabelas de roteamento podem ser feitas
manualmente. Em redes maiores, os roteadores mantm suas tabelas
atualizadas trocando informaes entre si. Roteadores podem descobrir
eventos como:
Uma nova rede adicionada a internet;
Um caminho foi interrompido, e um destino no pode ser atingido;
Uma nova rota foi estabelecida para um destino.
No existe um padro nico para troca de informao entre roteadores.
A liberdade de escolha do protocolo estimulou a competio e levou a grandes
melhorias nos protocolos.
Os protocolos de roteamento mais usados so o RIP e o OSPF.
1.6.1 Reempacotamento
Existe um evento olmpico onde um competidor nada uma parte do
percurso, pega uma bicicleta e pedala outra parte, e corre uma terceira etapa.
O IP funciona da mesma maneira. O datagrama foi projetado para poder ser
mudado de uma mdia para outra at chegar ao seu destino.
Antes de um datagrama ser transmitido por um enlace, ele
empacotado em um quadro apropriado para o enlace. Quando um roteador
recebe o quadro:
O roteador desempacota o quadro e extrai o datagrama
O roteador analisa o endereo de destino e descobre a mdia do
prximo trecho
O roteador reempacota o datagrama em um novo quadro, apropriado
para o prximo lao
21
Exerccios
1. Em que nvel de TCP/IP rodam o telnet e o ftp?
a) Fsico
b) Sesso
c) Aplicao
d) Transporte
e) Enlace
2. Qual das seguintes aplicaes no usa o protocolo UDP?
a) TFTP
b) DNS
c) RPC
d) FTP
e) SNMP
22
2 ENDEREAMENTO
Em uma rede, o endereo de um dispositivo uma forma de identificar
esse dispositivo como sendo nico. Normalmente, os endereos de rede
possuem um formato padronizado e bem definido.
2.1 Endereamento de Enlace (MAC)
Os endereos MAC (Media Access Control) so atribudos aos
adaptadores de rede durante sua fabricao, sendo que cada adaptador tem
um endereo que o identifica como nico. Cada fabricante tem um cdigo que
o diferencia dos demais.
Os endereos MAC so escritos no seguinte formato:
00-c0-49-3f-c6-0c
Os primeiros bytes contm o cdigo do fabricante, os demais contm o
modelo e nmero serial do adaptador de rede.
2.2 Endereamento de Rede (IP)
O protocolo IP usa Endereos IP para identificar estaes e para rotear
os dados para elas. cada estao deve ser atribudo um endereo IP
exclusivo.
Um endereo IP um nmero de 32 bits. Este tamanho foi escolhido
para caber convenientemente em um registrador de 32 bits. O espao de
endereamento resultante possui 2
32
(ou 4.294.967.296) nmeros possveis.
A notao de ponto foi inventada para facilitar a leitura e escrita dos
nmeros IP. Cada octeto do endereo convertido para um nmero decimal, e
os nmeros so separados por pontos. Por exemplo, o endereo da estao
blintz.med.yale.edu 130.132.19.31.Em redes roteadas, o endereo
composto de pelo menos dois nmeros: o da rede e o do n. Se dois
dispositivos possurem endereos com o mesmo nmero de rede, ento eles
esto localizados na mesma rede. Do contrrio, esto em redes distintas, mas
unidas atravs de um roteador. O nmero que ir diferencia-los dentro desta
rede o nmero do n.
Os endereos IP so nmeros que identificam seu computador em uma
rede TCP/IP. Inicialmente voc pode imaginar o IP como um nmero de
telefone. O IP composto por quatro bytes e a conveno de escrita dos
nmeros chamada de "notao decimal pontuada". Por conveno, cada
interface (placa usada p/ rede) do computador ou roteador tem um endereo
IP. Tambm permitido que o mesmo endereo IP seja usado em mais de
uma interface de uma mesma mquina, mas normalmente cada interface tem
seu prprio endereo IP.
As Redes do Protocolo Internet so seqncias contnuas de endereos
IP. Todos os endereos dentro da rede tm um nmero de dgitos dentro dos
23
endereos em comum. A poro dos endereos que so comuns entre todos
os endereos de uma rede chamada de poro da rede. O conjunto dos
dgitos restantes chamado de poro dos hosts. O nmero de bits que so
compartilhados por todos os endereos dentro da rede chamado de netmask
(mscara da rede) e o papel da netmask determinar quais endereos
pertencem ou no a rede. Por exemplo, considere o seguinte:
Tabela 2-1 Formao de Endereos IP
Endereo do Host 192.168.110.23
Mscara da Rede 255.255.255.0
Poro da Rede 192.168.110.
Poro do Host .23
Endereo da Rede 192.168.110.0
Endereo Broadcast 192.168.110.255
Qualquer endereo que finalizado em zero em sua netmask revelar o
endereo da rede a que pertence. O endereo de rede ento sempre o
menor endereo numrico dentro da escalas de endereos da rede e sempre
possui a poro host dos endereos codificada como zeros.
O endereo de broadcast um endereo especial que cada computador
em uma rede "escuta" em adio a seu prprio endereo. Este um endereo
onde os datagramas enviados so recebidos por todos os computadores da
rede. Certos tipos de dados, como informaes de roteamento e mensagens
de alerta, so transmitidos para o endereo broadcast, assim todo computador
na rede pode receb-las simultaneamente.
Existem dois padres normalmente usados para especificar o endereo
de broadcast. O mais amplamente aceito para usar o endereo mais alto da
rede como endereo broadcast. No exemplo acima este seria
192.168.110.255. Por algumas razes outros sites tm adotado a conveno
de usar o endereo de rede como o endereo broadcast. Na prtica no
importa muito se usar este endereo, mas voc deve ter certeza que todo
computador na rede esteja configurado para escutar o mesmo endereo
broadcast.
2.2.1 Multihoming
Os sistemas no tem endereos IP, as suas interfaces que os tm.
Um roteador com quatro interfaces de rede precisa de quatro endereos IP.
Um sistema que est ligado a mais de uma sub-rede chamado de
multihomed.Classes de Rede IP
Por razes administrativas aps pouco tempo no desenvolvimento do
protocolo IP alguns grupos arbitrrios de endereos foram formados em redes
e estas redes foram agrupadas no que foram chamadas de classes. Estas
classes armazenam um tamanho padro de redes que podem ser usadas. As
faixas alocadas so:
24
Tabela 2-2 Classes de Endereamento
Classe
Bits Mais
Significativos
Mscara de
Rede
Endereos Possveis
na Rede
A
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 Endereos reservados para uso em Redes Privadas
Se voc estiver construindo uma rede privada que nunca ser conectada
a Internet, ento voc pode escolher qualquer endereo que quiser. No
entanto, para sua segurana e padronizao, existem alguns endereos IP's
que foram reservados especificamente para este propsito. Eles esto
especificados no RFC1597 e so os seguintes:
Tabela 2-3 Endereos IP Reservados Para Redes Privadas
Classe Mscara de Rede Endereos Possveis na Rede
A
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 ento
escolher a classe de rede que ser usada.
Pode-se obter um software de Proxy que repassa a informao entre os
computadores internos e o mundo exterior atravs do endereo de Classe C
registrado.
2.2.4 Endereos Especiais
Nem todos os nmeros podem ser atribudos a uma sub-rede ou
estao. Por exemplo, alguns endereos so reservados para broadcast,
outros so reservados para tabelas de roteamento.
2.2.4.1 O endereo de Rede
Se um nmero IP tiver todos os bits da estao em 0, ele se refere
rede, e no uma estao especfica. Por outro lado, se os bits da sub-rede
fossem todos 0, a identificao seria ambgua, por isso essa combinao
invlida.
25
2.2.4.2 O endereo de Broadcast
O endereo IP 255.255.255.255 reservado para broadcast para todos
os sistemas no link local.
Se os bits da estao forem todos 1, feito um broadcast para a sub-
rede correspondente. Por exemplo, o Endereo 192.18.7.255 significa um
broadcast para a rede 192.18.7.0.
Se os bits da estao e sub-rede forem todos 1, feito um broadcast
para todas as estaes da rede indicada.
Um boa regra nunca usar endereos de rede ou estao cujos bits
sejam todos iguais (0 ou 1). Da pode-se deduzir que um campo nunca pode ter
menos do que 2 bits.
2.2.4.3 O endereo de Loopback
No extremo oposto do broadcast, existem mensagens que nunca deixam
a estao local. Existem muitas estaes que contm processos clientes e
servidores. Os clientes locais comunicam-se com o servidor por IP. Para fazer
isso, eles geralmente usam um endereo especial chamado Endereo de
Loopback. Por conveno, qualquer endereo comeando com 127
reservado para esse propsito. Na prtica, apenas o endereo 127.0.0.1
usado.Diviso em sub-redes
Uma rede de Classe A tem 16.777.216 endereos, uma rede de Classe
B suporta 65.536 e uma de Classe C apenas 256. A grande diferena entre
esses nmeros levam uma alocao muito ineficiente dos blocos e contribui
para o esgotamento dos endereos IP.
Por outro lado, uma organizao com um endereo de classe C s tem
um espao de endereamento de 1 byte. Pode ser feito ento a diviso de 4
bits para o endereo de sub-rede e 4 bits para o endereo do
sistemaMscaras de Sub-Rede
O trfego roteado para uma estao olhando para as partes de rede e
sub-rede do seu endereo IP. Um endereo de Classe A, B ou C tem a parte
de rede com tamanho fixo. Mas em organizaes que escolhem os seus
campos de sub-rede, como as estaes e roteadores reconhecem o campo?
A resposta que os sistemas tem que ser configurados para conhecer o
tamanho da parte de sub-rede do endereo. O tamanho do campo da sub-rede
armazenado em um parmetro chamado Mscara de Sub-rede, ou Subnet
Mask. uma seqncia de 32 bits, onde os bits correspondentes rede e sub-
rede so setados em 1, e os bits do sistema so setados em 0.
Por exemplo, se quisermos usar o terceiro byte de um endereo classe
C para indicar a sub-rede, a mscara seria:
11111111 11111111 11111111 00000000
As mscaras geralmente so expressas usando a notao decimal,
ento a mscara acima seria escrita como 255.255.255.0.
J no caso de querermos dividir um endereo Classe C usando 4 bits
para o campo da sub-rede, a mscara ficaria assim:
26
11111111 11111111 11111111 11110000
Ou, na forma decimal, 255.255.255.240.
Bits de
Sub-Rede
Nmeros de
Sub-Rede
Bits da
Estao
Nmero de
Mquinas Mscara
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 - Invlido
A tabela acima mostra as vrias maneiras em que um endereo local de
classe C pode ser dividido. Ele tambm mostra o nmero de sub-redes e
estaes para cada partio. O nmero de sub-redes e estaes menor do
que o que se espera porque alguns endereos so reservados para propsitos
especficos.Super-Redes e CDIR
O mtodo de atribuir blocos de endereos de classe A, B e C era muito
ineficiente. Um bloco de Classe C proporciona 254 endereos, que pode ser
muito ou pouco, dependendo do tamanho da organizao. Pode haver
escassez ou desperdcio de endereos.
Faria mais sentido atribuir s organizaes o nmero de bits que elas
realmente precisam. Isso feito facilmente. Se uma organizao precisa de
4000 endereos, ela ganha 12 bits para usar como parte local de seu
endereamento. Os 20 bits restantes so o prefixo, usado como endereo de
super-rede ou prefixo. A maneira de nomear esse endereo sem classe
/20. Obter um prefixo de 20 bits equivalente a obter 16 blocos contnuos de
classe C.
Para rotear para uma organizao, o roteador precisa saber o nmero
de bits no prefixo e o padro de bits designado para o prefixo da organizao.
O roteador pode ento enviar trfego para a organizao com uma nica
entrada na tabela de roteamento. Isto chamado Classless Internet-Domain
Routing (CDIR).Referncia rpida de mscara de redes
A tabela abaixo faz referncia s mscaras de rede mais comuns e a
quantidade de mquinas mximas que ela atinge. Note que a especificao da
mscara tem influncia direta na classe de rede usada:
Mscara
(octal)
Mscara
(32 bits)
Nmero de
Mquinas
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
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,070
Classe 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 510
Classe C:
/24 /255.255.255.0 254
/25 /255.255.255.128 126
/26 /255.255.255.192 62
/27 /255.255.255.224 30
/28 /255.255.255.240 14
/29 /255.255.255.248 6
/30 /255.255.255.252 2
/32 /255.255.255.255 1
Qualquer outra mscara fora desta tabela (principalmente para a classe
A), dever ser redimensionada com uma calculadora de IP para chegar a um
nmero aproximado de redes/mquinas aproximados que deseja.
2.3 Endereamento de Sesso (Portas)
Todo processo que deseje estabelecer comunicao com outro processo
deve se identificar de alguma forma. O TCP/IP implementa essa comunicao
atravs do uso do conceito de portas (ou ports).
A porta um nmero de 16 bits que identifica processos (ou servios de
rede). O nmero da porta de origem e o nmero da porta de destino esto
IP
TCP UDP
Portas
Ap.
23
Ap.
53
Ap.
161
Ap.
80
28
includos no cabealho de cada segmento TCP ou pacote UDP.
Um socket uma combinao de um endereo IP com um nmero de
porta, e identifica um processo como nico na rede.
Exerccios
1. O que significa a sigla MAC?
a) Media Assynchronous Connection
b) Master Assynchronous Connection
c) Media Access Connection
d) Media Access Control
e) Master Access Control
2. Que endereo de rede no roteado na internet?
a) 128.9.0.0
b) 10.0.0.0
c) 191.168.72.0
d) 171.20.20.0
e) 8.0.0.0
3. So mscaras padro de redes classe A, B e C:
a) 0.0.0.255, 0.0.255.255, 0.255.255.255
b) 0.0.0.0, 0.0.0.255, 0.0.255.255
c) 255.0.0.0, 255.255.0.0, 255.255.255.0
d) 0.0.0.0, 255.0.0.0, 255.255.0.0
e) 255.255.255.0, 255.255.0.0, 255.0.0.0
29
3 CONECTANDO REDES
Adaptado de
http://www.conectiva.com/doc/livros/online/8.0/servidor/conectividade.html#CONECTANDO-
REDES
A criao de grandes redes de computadores possvel graas
interligao de pequenas redes de computadores. No entanto, essa diviso de
redes em pequenas unidades gera a necessidade de se criar meios que
permitam que essas unidades sejam capazes de se conectar e trocar
informaes.
Alm dos meios fsicos (cabos, hubs, roteadores, etc.) so necessrios
tambm os meios lgicos que permitam essa troca de informao. Sero
estudados a seguir os conceitos bsicos sobre roteamento, e em seguida ser
visto um tipo particular de roteamento chamado NAT (Network Address
Translation).
3.1 Roteamento
Para entender melhor como funciona o processo de transmisso de um
pacote de dados dentro de uma rede, pode ser feita uma analogia com o
processo de uma ligao telefnica. Ao se discar o nmero do telefone com
quem se deseja falar, a sua central telefnica verifica se o nmero est
conectado a ela, se no estiver ela "encaminha" a sua ligao para outra
central que por sua vez faz o mesmo teste, at chegar a central onde se
localiza o nmero de destino. Os cdigos de pas, rea e o prefixo do telefone
so utilizados para determinar para qual central sua ligao deve ser
encaminhada. Cada central por onde a ligao passa, alm de decidir para
onde encaminhar a ligao, funciona tambm como uma espcie de
retransmissora ao receber sua ligao de uma central e repass-la para outra.
Um processo bastante semelhante acontece em uma rede de
computadores, ou seja, quando um computador tenta se comunicar com outro
que no esteja diretamente ligado a ele (ou em sua sub-rede), ele deve enviar
seus datagramas para uma mquina especial, ligada a duas ou mais redes e
que encaminhar os datagramas para o destino. Essa mquina especial recebe
o nome de gateway ou roteador, e ao processo de decidir para onde repassar
os datagramas chamamos de roteamento.
A idia bsica do roteamento a criao de regras que estabeleam que
caminho um datagrama deve tomar baseado no endereo de destino dele. Em
uma mquina cliente essa regra bastante simples: tudo que no for para a
rede local deve ser enviado para a mquina gateway (essa regra chamada
rota padro). J em uma mquina gateway podem ser necessrias muito mais
regras, principalmente se essa mquina est conectada a um grande nmero
de redes.
3.1.1 Rotas estticas e dinmicas
Existem dois tipos de rotas que podem ser utilizadas por um roteador:
rotas estticas e dinmicas. As rotas estticas so explicitamente configuradas
30
pelo administrador, enquanto que as rotas dinmicas podem ser "aprendidas"
atravs da utilizao de um servio especial para esse fim.
As rotas dinmicas utilizam protocolos especiais como o RIP (Routing
Information Protocol), OSPF (Open Shortest Path First) e BGP (Border
Gateway Protocol) para divulgar e aprender rotas. O Linux possui o servio
routed que capaz de utilizar estes protocolos.
As rotas estticas podem ser configuradas com o auxlio do Linuxconf, e
no necessitam de nenhum servio adicional. Ser visto aqui apenas a
configurao de rotas estticas, j que a utilizao de rotas dinmicas
normalmente s necessria em grandes redes e Sistemas Autonmos (AS).
3.1.2 Gateway
Um gateway ou roteador funciona como uma porta de sada de uma
rede; ele um mquina equipada com duas ou mais interfaces ou dispositivos
de rede e capaz de fazer o repasse de datagramas para fora ou para dentro
da rede.
Essa mquina possui diferentes nmeros IPs associados a cada
interface. O Linux capaz de decidir automaticamente por qual interface de
rede ele deve enviar datagramas baseado nos IPs de cada interface e na
definio da rota padro.
Existem alguns casos nos quais necessrio informar ao seu gateway
como alcanar uma determinada rede, por exemplo, no caso dessa rede estar
por trs de um outro gateway. Para esses casos especiais necessrio inserir
uma rota esttica para esta rede (caso no se esteja usando um servio de
rotas dinmicas).
3.2 Netfilter
O kernel do Linux possui recursos bastante sofisticados para filtrar e
transformar pacotes IP. Esses recursos, agrupados sob o nome de netfilter,
podem ser configurados com o auxlio do comando iptables. O netfilter permite
a construo de firewalls e de gateways com NAT (Network Address
Translation). O site oficial do netfilter http://netfilter.gnumonks.org/.
Sero estudados aqui os conceitos bsicos do netfilter e como utilizar o
recurso de NAT.
31
3.2.1 Anatomia do netfilter
O netfilter possui um conjunto de ganchos (tambm chamados de
cadeias ou chain) em vrios pontos da pilha de um protocolo (ser considerado
aqui somente o protocolo IPv4). Cada gancho um ponto no caminho que um
pacote IP percorre ao entrar ou sair de uma mquina, conforme a figura abaixo:
O gancho PRE-ROUTING est ligado entrada de pacotes na mquina;
aps a deciso de roteamento os pacotes que no so destinados mquina
local atravessam o gancho FORWARD e finalmente saem da mquina
passando pelo gancho POST-ROUTING. O gancho INPUT atravessado pelos
pacotes que chegam com destino mquina local enquanto que o gancho
OUTPUT utilizado pelos pacotes originados na mquina local.
Para filtrar ou transformar pacotes IP, o netfilter possui estruturas
chamadas tabelas, que se ligam a conjuntos de ganchos. Essas tabelas so
implementadas atravs de mdulos do kernel. Por padro o kernel possui trs
tabelas: filter, nat e mangle.
Cada tabela possui regras ligadas a cada um dos ganchos usados por
ela. Estas regras podem ser criadas pelo administrador, de acordo com suas
necessidades (isto , um firewall, NAT, etc.). Cada regra especifica um padro
ou critrio a ser comparado com pacotes IPs e um alvo, ou o que fazer com
cada pacote que casa com o padro especificado. Os alvos podem ser aes
pr-definidas de cada tabela, como por exemplo, DROP ou MASQUERADE,
que, respectivamente, descartam ou mascaram um pacote, ou ainda uma outra
regra.
A tabela nat, que ser utilizada a seguir, est ligada aos ganchos PRE-
ROUTING, POST-ROUTING e OUTPUT.
3.2.2 NAT
Os nmeros IPs da Internet so finitos e cada nmero deve ser nico. O
crescimento explosivo da Internet tem transformado estes nmeros em um
Figura 3-1Estrutura do Netfilter
32
recurso escasso, e para se obter um nmero ou conjunto de IPs vlidos
necessrio requisit-los a um rgo regulador e pagar por eles. Logo, em
muitos casos no se justifica construir redes locais utilizando-se nmeros IPs
vlidos.
Como alternativa certos intervalos de nmeros IPs so considerados
invlidos, isto , no so utilizados na Internet, permitindo assim que eles
possam ser utilizados em intranets sem problemas, ou seja, vrias intranets
podem utiliz-los desde que no estejam diretamente conectadas umas s
outras. No entanto, isso cria um dilema: como conectar uma intranet que utiliza
nmeros IPs invlidos Internet?
A resposta a essa pergunta atravs da utilizao de um roteador que
possua um nmero IP vlido e que seja capaz de fazer uma traduo de
endereos de rede (NAT). Para entender melhor o que isso significa considere
o seguinte cenrio: uma rede local ligada Internet atravs de um roteador
com conexo discada. Ao se conectar na Internet, a mquina gateway recebe
um nmero IP vlido do provedor de acesso. Quando uma mquina da intranet
precisa se conectar a um site (por exemplo), ela envia seus pacotes IPs com a
requisio mquina gateway, que por sua vez altera os cabealhos destes
pacotes inserindo o nmero IP que ela recebeu do provedor e os envia atravs
de sua conexo. O site responde requisio enviando a resposta para a
mquina gateway que altera novamente os cabealhos dos pacotes e os envia
mquina que originalmente os requisitou. Dessa forma, cada mquina da
intranet se comporta como se estivesse ligada diretamente Internet, enquanto
que as vrias mquinas na Internet "enxergam" apenas a sua mquina
gateway.
3.2.2.1 Tipos de NAT
possvel dividir o NAT em dois tipos: o NAT de origem (SNAT) e o NAT
de destino (DNAT).
O NAT de origem quando voc altera o endereo de origem de um
pacote, isto , a conexo passa a ter um outro endereo de origem. Esse tipo
de NAT sempre criado utilizando-se o gancho POSTROUTING, logo antes do
pacote sair da mquina. O mascaramento (como tambm conhecido) uma
forma de SNAT.
O NAT de destino se caracteriza pela alterao do endereo de destino
do pacote, isto , alterando o destino de uma conexo que passa pela
mquina. Este tipo de NAT sempre criado utilizando-se o gancho PRE-
ROUTING. Balanceamento de carga, proxys transparentes e repasse de portas
so tipos de DNAT.
3.2.3 Implementao de um servio NAT
Um servio de NAT necessrio em solues de Conexo Discada,
mas pode ser utilizado tambm como uma forma de aumentar a segurana de
uma intranet, uma vez que ele "esconde" as mquinas da rede mostrando para
o resto do mundo apenas a mquina gateway.
33
4 VULNERABILIDADES NO PROTOCOLO TCP/IP
Ultimamente temos presenciado um novo fenmeno no underground
digital. O fenmeno em si no novo, mas tornou-se muito fcil acessar as
ferramentas necessrias para fazer ms aes, temos experimentado muitas
instncias.O fenmeno conhecido por diferentes nomes (Smurph, Land,
Bonk,etc). O intuito de todos, contudo, o mesmo: impedir computadores
desabilitando seu uso como pretendido.
Esse captulo tenta explicar esses ataques.
4.1 Disponibilidade dos dados
Podemos dividir a segurana dos dados em trs partes diferentes:
integridade, confidencialiade e disponibilidade. Se algum, que no
autorizado, gerencia e muda seus dados, a integridade comprometida. Voc
no poder mais acreditar que o valor dessa informao verdadeiro.
A confidencialidade da sua informao comprometida se uma pessoa
for capaz de entrar no seu computador. Se puder conhecer uma informao a
qual no se pretendia que essa pessoa conhecesse. Ela poder tambm
distribuir a informao.
A ltima categoria - disponibilidade - onde os ataques aqui discutidos
pertencem. A disponibilidade dos dados importante no decorrer dos negcios
e grandes perdas podem ocorrer se a informao importante no estiver
disponvel devido a um ataque contra um computador. Tais ataques so
frequentemente chamados de "Denial-of-Service" (DoS).
4.2 Sobre o protocolo TCP/IP
Todos os ataques discutidos aqui se beneficiam de vulnerabilidades na
implementao do protocolo TCP/IP visando a interrupo da atividade do
computador atacado. Para entender os ataques necessrio um
conhecimento bsico de como o protocolo foi projetado para funcionar.
TCP/IP uma abreviao de Transmission Control Protocol/Internet
Protocol e um dos vrios protocolos desenvolvidos pelo Departamento de
Defesa dos Estados Unidos no final da dcada de 70. A razo pela qual o
protocolo foi desenhado era a necessidade de construir uma rede de
computadores capaz de se conectar com outra rede do mesmo tipo
(roteamento). Essa rede chamou-se ARPANET (Advanced Research Project
Agency Internetwork), e a irm mais nova da Internet.
Antes de ler sobre os ataques, recomendo que voc leia a seo sobre
TCP/IP.
34
4.3 IP Spoofing
Um ataque spoofing envolve a falsificao do endereo de origem. o
ato de usar uma mquina para representar o papel de outra. A maioria das
aplicaes e ferramentas no UNIX baseam-se na autenticao do IP de origem.
Muitos programadores tm usado controle de acesso baseado na mquina
para segurana das suas redes. O endereo IP de origem um identificador
nico mas no fivel. Ele pode facilmente ser forjado (spoofed). Para
entender o processo de spoofing, Primeiro vou explicar o o processo de
autenticao do TCP e do IP e depois como um atacante pode enganar a
sua rede.
O sistema cliente comea por enviar uma mensagem SYN para o
servidor. O servidor ento confirma a mensagem SYN enviando uma
mensagem de SYN-ACK para o cliente. O cliente ento completa
estabelecendo a conexo respondendo com uma mensagem de ACK. A
conexo entre o cliente e o servidor ento aberta, e os dados especficos do
servio podem ser trocado entre o cliente e o servidor. Cliente e servidor
podem agora enviar dados especficos do servio.
O TCP usa nmeros seqenciais. Quando um circuito virtual
estabelecido entre duas mquinas, o TCP designa para cada pacote um
nmero com um ndice identificador. Amboa as mquinas usam este nmero
para verificarem erros e fazerem relatrios.
Rik Farrow, no seu artigo "Sequence Number Attacks", explica o sistema de
nmeros seqenciais como sendo o seguinte:
"Os nmeros seqenciais so usados para confirmar a
recepo de dados. No incio de uma ligao TCP, o cliente envia
um pacote TCP com uma nmero seqencial inicial, mas nenhum
reconhecimento. Se existir um servidor de aplicao a correr na
outra ponta da ligao, o servidor envia de volta um pacote TCP
com o seu prprio nmero seqencial, e o reconhecimento; o
nmero inicial do pacote do cliente mais um. Quando o sistema
cliente recebe este pacote, ele deve enviar de volta o seu prprio
reconhecimento; a sequncia de nmero inicial do servidor mais
um."
Desta forma um atacante tem dois problemas:
1) Ele deve falsificar o endereo origem.
2) Ele deve manter um nmero seqencial com o destino.
A segunda tarefa a mais complicada porque quando o destino ajusta o
nmero seqencial inicial, o agressor deve responder corretamente. Assim que
o agressor adivinhe o nmero seqencial correcto, pode ento sincronizar com
o destino e estabelecer uma sesso vlida.
4.3.1 Servios vulnerveis ao IP Spoofing:
Configuraes e servios que so vulnerveis ao IP spoofing :
RPC (Servios de Invocao Remota de Funes)
35
Qualquer servio que use autenticao de endereo IP
O sistema X Window
O conjunto de servios R (rlogin, rsh, etc.)
4.3.2 Medidas para se prevenir de ataques IP Spoofing:
Evite usar autenticao de endereo de origem. Implemente criptografia
na autenticao em todo o sistema.
Configure a sua rede para rejeitar pacotes de redes externas que
declaram ser de um endereo local. Isto geralmente feito com um
router.
Se voc permitir ligaes externas de mquinas seguras, possibilite
encriptao da sesso no router.
4.4 Sobre os ataques
Os ataques descritos nesse documento so apenas alguns dos que
esto disponveis na Internet. Seu denominador comum que todos usam
vulnerabilidades ou implementaes errneas do protocolo TCP/IP ou ainda,
vulnerabilidades na especificao do TCP/IP em si.
Qualquer um mais interessado pode dar uma olhada no site
www.rootshell.com que descreve vrios ataques. Esse site tambm tem
links para download de programas que protegem contra esses ataques.
Todos os ataques descritos abaixo funcionam em computadores com
Windows for Workgroups, Windows 95 ou Windows NT . Podem tambm
funcionar para outros sistemas operacionais. Uma vez mais indico
www.rootshell.com para uma lista completa de ataques que funcionam em
diferentes sistemas operacionais.
4.4.1 SYN Flooding
Esta a famlia dos ataques DoS (Denial-of-Service) que usa variaes
da mesma tcnica. O ataque realizado enviando uma stream de pacotes
para o computador alvo requisitando uma conexo (a flag SYN setada). A
cada vez que o computador alvo recebe tal requisio, recursos so alocados -
mas nenhuma conexo efetivada. Quando muitas requisies so recebidas
o computador alvo no pode mais alocar recursos para o trfego da rede -
como resultado o computador pode parar.
4.4.2 Land
Aqui o ataque acontece enviando-se um pacote com a flag SYN setada
(i.e. requisitando a abertura de uma conexo) para qualquer porta da mquina
36
alvo. O pacote modificado de tal maneira que os endereos de envio e de
recebimento do pacote so idnticos (spoofing). Essa situao no
corretamente manipulada por algumas implementaes do TCP/IP - o
computador pra. Esse ataque direcionado porta 139 de mquinas
rodando o sistema operacional Windows.
4.4.3 WinNuke
O nuke tem sido uma atividade popular, principalmente em escolas.
Esse tipo de ataque voltado principalmente para computadores rodando
Windows. O efeito principal o congelamento do computador, que precisa ser
reiniciado.
A razo pela qual o computador trava que a Microsoft no manipula
um flag especial de status no protocolo TCP - a flag URG(para urgente). Esse
flag setado em um pacote enviado para um computador rodando um sistema
operacional Windows. O computador ir esperar por uma stream (cadeia de
dados) da chamada Out-of-Band (OOB) banda de trfego do computador que
envia. Esse tipo de trfego tem prioridade mais alta que o trfego ordinrio da
rede. O problema surge quando tais mensagens no so enviadas: o
computador para. Parece que se trata de resultado de uma m implementao
do protocolo TCP/IP da Microsoft, onde essa situao no tratada
satisfatoriamente.
Esse ataque muito simples de ser realizado (utiliza um canal legtimo)-
tem sido at mesmo implementado com uma linha de cdigo na linguagem
Perl. Normalmente, o ataque direcionado contra a porta 139 (Servio
NetBIOS Session) do computador.
Por exemplo: suponhamos que um computador com IP 200.133.10.126
esteja com a porta 139 aceitando conexes. Na barra de endereos do
Browser, podemos digitar: http://200.133.10.126:139 e se ficarmos
atualizando a pgina, estaremos atacando essa mquina. Um simples
JavaScript pode automatizar essa tarefa.
Felizmente, fcil proteger um computador contra esse tipo de ataque.
A Microsoft desenvolveu patches para download. Quando esse patches so
instalados, voc est protegido contra esse tipo de ataque.
4.4.4 TearDrop
Esse ataque utiliza outra vulnerabilidade na implementao do protocolo
TCP/IP. O resultado desse ataque pode variar, mas, normalmente o
computador trava e precisa ser reiniciado. Os sistemas operacionais mais
vulnerveis so Windows(95/98/NT) e Linux.
A razo pela qual o ataque acontece deve-se a um erro em parte do
protocolo TCP/IP que toma conta de pacotes fragmentados. A fragmentao
do pacote pode ocorrer se o pacote que est sendo recebido for maior do que o
tamanho permitido pela rede. Caso positivo, o pacote dividido em pacotes
menores, consistindo em partes do pacote original. Quando os pacotes
37
menores chegam ao computador recipiente, ele tenta coloc-los juntos -aqui
ocorre o erro e o computador pra.
Tecnicamente, o ataque conduzido mandando uma combinao
especial de dois pacotes UDP/IP. O primeiro tem deslocamento 0, a flag MF
(mais fragmentos) setada para 1 e tamanho N. O segundo tem deslocamento
menor que N, flag MF resetada para 0 e tamanho menor que N. O segundo
pacote sobrepes-se ao primeiro. Uma implementao errnea do TCP/IP
interpreta o fim do pacote antes do seu comeo e o computador pra.
4.4.5 NewTear
Esse ataque parecido com o TearDrop. A diferena o tamanho da
sobreposio dos pacotes (20 bytes, enquanto o TearDrop usa 28) e a
manipulao do tamanho do UDP. Esse ataque funciona contra mquinas
rodando Windows95/98 e NT mesmo que o patch TearDrop esteja instalado, o
que demonstra que a Microsoft no levou as variaes do ataque em conta
quando o patch foi programado.
4.4.6 Bonk/Boink
Outra variao do ataque TearDrop. O deslocamento do fragmento do
segundo pacote ajustado para ser maior do que o comprimento do cabealho
IP. Semelhante aos outros ataques, o computador pra. No se sabe porqu
esse ataque funciona.
O Bonk ataca a porta 55 das mquinas. O Boink uma variao do
Bonk - a diferena que esse ltimo permite ataques em outras portas, alm
da 55.
4.4.7 Ssping
Uma variao do ataque chamado "Ping da Morte". Uma pessoa
manda um pacote ICMP (ECHO_REQUEST) com um tamanho anormal para a
mquina alvo. O tamanho mximo para datagramas TCP/IP 65536 octetos (1
octeto = 8 bits). Contudo, possvel mandar datagramas maiores do que o
tamanho mximo definido. Quando a mquina alvo recebe tal pacote pode
parar. Mais uma vez, o erro deve-se a m implementao na seco do
TCP/IP que manipula pacotes fragmentados. Um teste simples para testar se
voc vulnervel pingar seu prprio computador. Use o comando ping -s
65510 seu_ip. Se sua mquina parar voc vulnervel a esse tipo de
ataque.
4.4.8 Smurf
Smurfing outro tipo de ataque semelhante aos que foram discutidos
aqui. Esse tipo de ataque Smurf pode ser considerado mais perigoso que os
outros.
38
O ataque Smurf no tem inteno de parar um computador, mas sim
uma rede inteira. realizado enviando contnuas stream (cadeias) de pacote
ICMP modificados para a rede alvo.
Os pacotes so modificados de modo que o endereo da mquina que
envia os dados idntico ao endereo do alvo (spoofing). Alm disso, os
pacotes so enviados para os chamados endereos broadcast, o que resulta
em os pacotes modificados serem enviados para todos os computadores de
uma rede. Os computadores dessa rede iro responder enviando uma
mensagem de ICMP ECHO_RESPONSE para o computador que eles
assumem ter enviado a mensagem ( o computador alvo da rede).Se o atacante
tiver uma conexo rpida,no preciso ser um grande matemtico para saber
que a quantidade de dados gerados pode parar a rede atacada. A rede ir
parar at que o atacante pare de enviar os pacotes ou o trfego seja
bloqueado.
Esse tipo de ataque tem sido usado para parar vrios Provedores de
Acesso Internet e todos os seus usurios. Efetivamente, difcil se proteger
desse tipo de ataque.
39
5 FIREWALL IPCHAINS
Adaptado do Linux IPCHAINS-HOWTO, Paul Russell, <ipchains@rustcorp.com>,
v1.0.7, 12 March 1999
Traduo para o portugus por Gleydson Mazioli da Silva, <gleydson@linuxbr.com.br>
5.1 Introduo
Este o Linux IPCHAINS-HOWTO; Veja Onde? para o ver site
principal, que contm a ltima cpia. Voc tambm deve ler o Linux NET-3-
HOWTO. O IP-Masquerading HOWTO, o PPP-HOWTO, o Ethernet-HOWTO e
o Firewall HOWTO que podem ser uma leitura interessante. (Ento denovo a
FAQ alt.fan.bigfoot).
Se a filtragem de pacotes passado para voc, leia a seo Porque?,
Seo Como? e verifique os ttulos na seo IP Firewalling Chains.
Se voc esta convertendo atravs do ipfwadm, leia a secao Introduo,
Seo Como?, e os Apndices da seo Diferenas entre ipchains e
ipfwadm e a seo Usando o script ipfwadm-wrapper.
5.1.1 O que?
O ipchains do Linux uma regravao do codigo de firewall IPv4 do
linux (que foi originalmente roubado do BSD) e uma regravao do ipfwadm,
que foi uma regravao do ipfw dos BSDs, eu acho. requerido para
administrar os filtros de pacotes IP nos kernels do linux 2.1.102 e superiores.
5.1.2 Por que?
O antigo codigo do firewall do Linux no negociava com fragmentos,
tinha contadores de 32 bits (no Intel no mnimo), no permitia especificao de
outros protocolos seno TCP, UDP ou ICMP, no faziam grandes alteraes
dinmicamente, no especificava regras contrrias, possuia alguns truques, e
dificil de gerenciar ( podendo causar erros do usurio).
5.1.3 Como?
Atualmente o cdigo est no kernel em desenvolvimento do 2.1.192.
Para as sries do kernel 2.0, voc precisar fazer o download de um
patch da pgina Internet. Se seu kernel 2.0 mais recente que o patch
fornecido, o patch antigo ser OK; esta parte dos kernels 2.0 razoavelmente
estvel (eg. o patch do kernel 2.0.34 funciona perfeitamente com o kernel
2.0.35). Desde ento o patch 2.0 incompatvel com patches do ipportfw e
ipautofw, eu no recomendo aplica-los a no ser que voc ralmente necessita
da funcionalidade que o ipchains oferece.
40
5.1.4 Onde?
A pgina oficial The Linux IP Firewall Chains Page
http://www.rustcorp.com/linux/ipchains
L existe uma lista de discusso para relatar bugs, discusses,
desenvolvimento e uso. Entre na lista de discusso enviando uma mensagem
contendo a palavra subscribe para <ipchains-request@rustcorp.com>. Para
enviar E-Mails para a lista use ipchains ao invs de ipchains-request.
5.2 Bsico sobre a filtragem de pacotes
5.2.1 O que ?
Todo o trfego da rede enviado em forma de pacotes. Por exemplo,
copiando este pacote (digamos de 50k) pode fazer voc receber 36 ou assim
pacotes de 1460 bytes em cada um, (puxando nmeros ao acaso).
O inicio de cada pacote diz onde ele esta indo, de onde vem, o tipo do
pacote, e outros detalhes administrativos. Isto inicia o pacote e chamado de
cabealho (head). O resto do pacote que contm o dado atual sendo
transmitido, usualmente chamado de corpo (body).
Alguns protocolos, como TCP, que usado para o trafego na web, mail,
e logins remotos, usam o conceito de conexoantes de qualquer pacote
com os dados atuais serem enviados, vrios pacotes de configurao (com
cabealhos especiais) so trocados dizendo Eu desejo conectar, OK e
Obrigado. Ento os pacotes normais so trocados.
Uma filtragem de pacotes uma pea de software que olha no
cabealho do pacote quando eles passam, e decide o destino de todo o pacote.
Ele pode decidir negar o pacote (DENY - ie. descartar o pacote como se
ele nunca tivesse o recebido), aceita o pacote (ACCEPT - ie. deixar o pacote
seguir adiante), ou rejeitar o pacote (REJECT - como negar, mas avisa a
origem do pacote sobre o acontecido).
No Linux, a filtragem de pacotes embutida no kernel, e aqui esto
algumas coisas que ns podemos fazer com os pacotes, mas o principio geral
de olhar o cabealho dos pacotes e decidindo seu destino.
5.2.2 Por que?
Controle: quando voc est usando um computador linux para
conectar sua rede interna a outra rede (digo, a Internet) voc tem a
oportunidade de permitir certos tipos de trfego, e desativar outros.
Por exemplo, o cabealho do pacote contm o endereo de destino
do pacote, assim voc pode prevenir pacote de irem para certas
partes de fora da rede. Como outro exemplo, eu uso o Netscape
para acessar os arquivos Dilbert. L esto anncios da pgina
doubleclick.net, e o Netscape desperdia partes do meu tempo
41
copiando-a. Dizendo para o filtro de pacotes no permitir qualquer
pacotes para ou de o endereo conhecido por doubleclick.net resolve
este problema (l esto meios melhores de se fazer isto).
Segurana: quando um computador linux a nica coisa entre o
caos da Internet e sua bonita e organizada rede, maravilhoso
conhecer como voc pode restringir o que vem batendo em sua
porta. Por exemplo, voc pode permitir ir para fora de sua rede, mas
voc pode estar preocupado com os conhecidos Ping of Death
(ping da morte) que vem de computadores maliciosos de fora. Como
outro exemplo, voc pode no desejar que pessoas de fora
TELNETiando seu computador linux, embora mesmo que todas suas
contas tenham senhas; talvez voc deseja (como muitas pessoas)
ser um observador na Internet, e no um servidor (legando ou caso
contrrio) -- simplesmente no deixe ningum conectar em seu
computador, tendo filtros de pacotes rejeitando pacotes de entrada
usado para iniciar conexes.
Vigilncia: muitas vezes uma mquina mal configurada na rede
local pode decidir enviar pacotes para fora da rede. bom dizer ao
filtro de pacotes para avisa-lo se alguma coisa de anormal ocorre;
talvez voc pode fazer alguma coisa sobre isto, ou talvez voc est
simplesmente curioso por natureza.
5.2.3 Como?
5.2.3.1 Um kernel com filtragem de pacotes
Voc precisar de um kernel que tem o novo IP firewall chains nele.
Voc pode ver ser o kernel que est executando tem isto instalado verificando
pelo arquivo /proc/net/ip_FWchains. Se ele existe, seu kernel tem o
suporte.
Caso contrrio, voc precisar compilar um kernel com o IP firewall
chains. Primeiro copie o cdigo fonte do kernel que deseja. Se possui um
kernel nmerado 2.1.102 ou maior, voc no precisar aplicar o patch (est na
verso principal do kernel agora). Caso contrrio, aplique o patch da pgina
web listada acima, e ajuste a configurao como detalhado abaixo. Se voc
no sabe como fazer isto, sem pnico leia o Kernel-HOWTO.
As opes de configurao que precisa configurar para os kernels da
srie 2.0 so:
CONFIG_EXPERIMENTAL=y
CONFIG_FIREWALL=y
CONFIG_IP_FIREWALL=y
CONFIG_IP_FIREWALL_CHAINS=y
Para os kernels da srie 2.1 ou 2.2:
42
CONFIG_FIREWALL=y
CONFIG_IP_FIREWALL=y
A ferramenta ipchains fala com o kernel e diz a ele quais pacotes filtrar.
A no ser que voc seja um programador, ou curioso demais, assim voc
controlar a filtragem de pacotes.
5.2.3.2 O ipchains
A ferramenta ipchains insere ou deleta regras da seo de filtragem de
pacotes do kernel. Isto quer dizer que qualquer coisa que voc configurar, ser
perdida na reinicializao; veja Fazendo Regras Permanentes para como
fazer as regras serem restauradas quando o Linux iniciado.
O ipchains substitui o ipfwadm, que foi usado pelo antigo cdigo de
firewall de IP. H um conjunto de scripts teis disponveis no site ftp do
ipchains: ftp://ftp.rustcorp.com/ipchains/ipchains-scripts-1.1.2.tar.gz
Este contm um script shell chamado ipfwadm-wrapper que permite
fazer a filtragem de pacotes como fez antes. Voc provavelmente no deve
usar este script a no ser se deseje fazer um mtodo rpido de upgrade em um
sistema que usa o ipfwadm (ele lento, no checa argumentos, etc).
Neste caso, voc no precisa muito deste HOWTO.
Veja Apndice Diferenas entre ipchains e ipfwadm e Apndice
Usando o script ipfwadm-wrapper para um assunto mais detalhado sobre
ipfwadm.
5.2.3.3 Fazendo regras permanentes
Sua configurao atual do firewall armazenada no kernel, e assim ser
perdida na reinicialziao. Eu recomendo usar os scripts ipchains-save e
ipchains-restore para fazer estas regras permanentes. Para fazer isto,
configure suas regras, ento execute (como root):
# ipchains-save > /etc/ipchains.rules
Crie um script parecido com o seguinte:
#! /bin/sh
# Script para controlar a filtragem de pacotes.
# Se no existir regras, no faz nada.
[ -f /etc/ipchains.rules ] || exit 0
case $1 in
start)
echo -n Ativando a filtragem de pacotes: /sbin/ipchains-restore <
/etc/ipchains.rules || exit 1 echo 1 > /proc/sys/net/ipv4/ip_forward echo .
;;
stop)
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 ACCEPT
echo .
;;
*)
echo Use: /etc/init.d/packetfilter {start|stop}
exit 1
;;
esac
exit 0
Tenha certeza que isto est antes no processo de inicializao. No meu
caso (Debian 2.1), eu fiz um link simblico chamado S39packetfilter em
meu diretrio /etc/rcS.d (isto ser executado antes de S40network).
5.3 Roteamento, masquerading, portforwarding, ipautofw...
Este HOWTO sobre filtragem de pacotes. Isto quer dizer decidindo
que pacote ter permisso de passar ou no. No entanto, o Linux est sendo
um parque de diverses para hackers, voc provavelmente desejar mais do
que isso.
Um problema que a mesma ferramenta (ipchains) usada para
controlar tanto o masquerading e transparent proxy, embora estejam
nacionalmente separados da filtragem de pacotes (a implementao atual do
Linux obscurece estes junto no naturalmente, deixando a impresso que eles
foram descontinuados).
Masquerading e proxying so discutidos em HOWTOs separados, e as
caractersticas auto forwarding e port forwarding so controladas por
ferramentas separadas, mas mesmo assim muitas pessoas me perguntam
sobre elas, eu tambm vou incluir diversos cenrios comuns e indicar quando
cada um deve ser aplicado. Os mritos de segurana de cada configurao
no sero discutidos aqui.
5.3.1 Guia rpido de trs linhas para Masquerading
Isto assume que sua interface externa chamada ppp0. Use ifconfig
para acha-la, e ajuste ao guia.
# ipchains -P forward DENY
# ipchains -A forward -i ppp0 -j MASQ
# echo 1 > /proc/sys/net/ipv4/ip_forward
44
5.3.2 Configuraes de firewall simples
Voc trabalha na littlecorp.com. Voc tem uma rede interna, e uma
conexo dialup (PPP) simples com a Internet (firewall.littlecorp.com
que 1.2.3.4). Voc usa Ethernet em sua rede local, e sua mquina pessoal
chamada myhost.
Esta seo ilustrar os diferentes arranjos no qual so comuns. Leia
com ateno porque cada um sutilmente diferente.
5.3.2.1 Rede Pblica
Neste cenrio, sua rede pessoal uma parte da Internet:
pacotes pode seguir sem alteraes atravs de ambas as redes. O
endereo IP da rede interna deve ser escolhido aplicando por um bloco de
endereos IP, assim o resto da rede conhecer como obter pacotes para voc.
Isto implica em uma conexo permanente.
Neste cenrio, a filtragem de pacotes usada para que pacotes podem
ser direcionados entre sua rede e o resto da internet, eg. para restringir o resto
da internet para somente acessar seus servidores web internos.
Exemplo: Permitindo acesso web de sua rede privada para a Internet.
1. Sua rede interna configurada de acordo com os blocos de
endereos
IP que possui registrados, (digamos 1.2.3.*).
2. O firewall est configurado para permitir qualquer trfego.
3. Netscape est configurado para conectar diretamente.
4. DNS deve estar configurado corretamente em sua rede.
5. O firewall deve ser a rota padro (gateway) para sua rede privada.
Netscape em myhost l http://slashdot.org.
1. Netscape procura o nome slashdot.org, e obtm 207.218.152.131.
Ele ento abre uma conexo para aquele endereo IP, usando a porta
local 1050, e pergunta do servidor web (porta 80) pela pgina web.
2. Pacotes passam atravs do firewall, simplesmente como passam
atravs de diversos firewalls entre voc e slashdot.org.
3. Netscape desenha a pgina.
ie. Aqui existe somente uma conexo: de 1.2.3.100 (myhost) porta
1050, para 207.218.152.131 (slashdot.org) porta 80.
45
5.3.2.2 Rede Privada: Masquerading
Neste cenrio, pacotes da rede privada nunca atravessam a Internet
sem um tratamento especial, e vice versa. O endereo Ip da rede privada
devem ser escolhidos de acordo com o RFC1597 Private Network Allocations
(ie. 10.*.*.*, 172.16.*.* or 192.168.*.*).
Ao invs de usar um proxy, ns usamos facilidades especiais do kernel
chamadas masquerading. Masquerading regravam pacotes quando passam
atravs do firewall, assim eles sempre parecem vir do prprio firewall. Ele
ento re-escreve as respostas assim eles pareceram estar indo para o
recipiente original.
Masquerading possui mdulos separados para manipular protocolos
enganados, como FTP, RealAudio, Quake, etc. Para procolos realmente
difceis de manipular, a facilidade auto forwarding pode manipular muitos
destes configurando automticamente o forward de portas para configuraes
de portas relacionadas: procure por ipportfw (kernels 2.0) ou ipmasqadm
(kernels 2.1).
Quaisquer servios que voc deseja acessar na Internet deve estar no
firewall. (Mas veja Servios Internos Limitados abaixo).
Exemplo: Permitindo acesso web da rede privada com a Internet.
1. A rede privada possui endereos 192.168.1.*, com myhost sendo
192.168.1.100, e a interface Ethernet do firewall sendo 192.168.1.1.
2. O firewall configurado para masquerade (mascarar) qualquer
pacotes vindo da rede privada e indo para a porta 80 de um host da internet.
3. 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 obtm
207.218.152.131. Ele ento abre uma conexo para aquele endereo IP,
usando a porta local 1050, e pergunta ao servidor web (porta 80) pela pgina
web.
2. Como os pacotes de myhost (porta 1050) para slashdot.org (porta
80) passam atravs do firewall, eles so regravados para virem da interface
PPP do firewall, porta 65000. O firewall possui um endereo Internet vlido
(1.2.3.4) assim responde pacote de slashdot.org.
3. Como pacotes de slashdot.org (porta 80) para
firewall.littlecorp.com (port 65000) vem, eles so regravados para irem para
myhost, porta 1050. Esta a mgica real do masquerading: ele relembra
46
quando ele regravou pacotes enviados para regrar as respostas quando
retornarem.
4. Netscape desenha a pgina.
ie. Do ponto de vista de slashdot.org, a conexo feita de 1.2.3.4
(interface PPP do firewall) porta 65000 para 207.218.152.131 (slashdot.org)
porta 80. Do ponto de vista de myhost, a conexo feita de 192.168.1.100
(myhost) porta 1050, para 207.218.152.131 (slashdot.org) porta 80.
5.3.2.3 Rede Privada: Proxies Transparentes
Neste cenrio, pacotes da rede privada nunca atravessam a Internet e
vice versa. O endereo IP da rede privada deve ser escolhido de acordo com o
RFC1597 Private Network Allocations (ie. 10.*.*.*, 172.16.*.* or 192.168.*.*).
O nico meio de conectar com a internet conectando com o firewall,
que a nica mquina entre as duas redes e que conectam ambas. Voc
executa um programa (no firewall) chamando um proxy transparente para fazer
isto; o kernel envia pacotes de sada para o transparent proxy ao invs de
envia-los adiante (ie. ele abastarda o roteamento).
Proxyes transparentes querem dizer que o cliente no precisa saber que
h um proxy envolvido.
Qualquer servio que desejar acessar na Internet deve estar no firewall.
(Mas veja Servios Internos Limitados abaixo).
Exemplo: Permitindo acesso web da rede privada para a Internet.
1. A rede privada usa endereos 192.168.1.*, com myhost sendo
192.168.1.100, e a interface Ethernet do firewall sendo 192.168.1.1.
2. Um proxy web transparente (eu acredito que existem patches
para squid para permitir ele operar desta maneira, ou tente transproxy)
instalado e configurado no firewall, digo executando na porta 8080.
3. O kernel esta configurado para redirecionar conexo para a porta
80 do proxy, usando ipchains.
4. Netscape na rede privada est configurado para conectar
diretamente.
5. DNS precisa estar configurado na rede privada (ie. voc precisa
executar um servidor DNS como um proxy no firewall).
6. A rota default (gateway) precisa estar configurado na rede
privada, para enviar pacotes para o firewall.
Netscape em myhost l http://slashdot.org.
1. Netscape localiza o nome slashdot.org, e obtem
207.218.152.131.
47
Ele abre uma conexo para aquele endereo IP, usando a porta local
1050, e pergunta ao servidor web (porta 80) pela pgina web.
2. Como os pacotes de myhost (porta 1050) para slashdot.org (porta
80) passam pelo firewall, eles so direcionados para proxy transparente
aguardando na porta 8080. O proxy transparente abre uma conexo usando
(usando a porta local 1025) com 207.218.152.131 porta 80 (que aqui onde os
pacotes originais esto indo).
3. Como o proxy recebe a pgina web de sua conexo com o
servidor web, ele copia os dados para a conexo com o Netscape.
4. Netscape desenha a pgina.
ie. Do ponto de vista de slashdot.org, a conexo feita de 1.2.3.4
(interface PPP do firewall) porta 1025 para 207.218.152.131 (slashdot.org)
porta 80. Do ponto de vista de myhost, a conexo feita de 192.168.1.100
(myhost) porta 1050, para 207.218.152.131 (slashdot.org) porta 80, mas ele
est atualmente falando com o proxy transparente.
5.3.2.4 Rede Privada: Proxies Tradicionais
Neste cenrio, pacotes vindo da rede privada nunca atravessam para a
Internet, e vice versa. O endereo IP da rede privada usam os endereos de
acordo com o RFC1597 Private Network Allocations (ie. 10.*.*.*, 172.16.*.* or
192.168.*.*).
O nico meio de se conectar com a Internet conectando com o
firewall, que a nica mquina na rede que conectam ambas. Voc executa
um programa (no firewall) chamado proxy para fazer isto (h proxies para FTP,
acesso Web, telnet, RealAudio, Usenet News e outros servios). Veja o
Firewall HOWTO.
Qualquer servio que voc deseja acessar na Internet deve estar no
firewall (mas veja Servios Internos Limitados abaixo).
Exemplo: Permitindo acesso web da rede privada para a Internet.
1. A rede privada usa endereos 192.168.1.*, com myhost sendo
192.168.1.100, e a interface do firewall firewall sendo designada 192.168.1.1.
2. Um proxy web (eg. squid) est instalado e configurado no
firewall, digo executando na porta 8080.
3. Netscape na rede privada est configurado para usar a porta 8080
do firewall como um proxy.
4. DNS no precisa ser configurado na rede privada.
5. DNS no precisa estar configurado no firewall.
6. Sem rota padro (gateway) necessitando ser configurado na rede
privada.
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 pgina internet http://slashdot.org.
2. O proxy procura o nome slashdot.org, e obtm 207.218.152.131.
Ele abre uma conexo com aquele endereo IP (usando a porta 1025 na
interface externa do firewall), e pergunta ao servidor web (porta 80) pela pgina
web.
3. Como ele recebe a pgina web de sua prpria conexo com o
servidor web, ele copia os dados para a conexo do Netscape.
4. Netscape desenha a pgina.
ie. Do ponto de vista de slashdot.org, a conexo feita de 1.2.3.4
(interface PPP do firewall) porta 1025 para 207.218.152.131 (slashdot.org)
porta 80. Do ponto de vista de myhost, a conexo feita de 192.168.1.100
(myhost) porta 1050, para 192.168.1.1 (interface Ethernet do firewall) porta
8080.
5.3.2.5 Servios Internos Limitados
Existem alguns truques que voc pode usar para permitir a Internet
acessar seus servios internos, em lugar de executar servios no firewall.
Estes funcionaro com aproximao baseada em proxy ou masquerading para
conexes externas.
Uma simples aproximao executar um redirector, que um poor-
mans proxy que aguarda por uma conexo em uma determinada porta, e
ento abre uma conexo em um porta e host fixo, e copia os dados entre as
duas conexes. Um exemplo disto o programa redir. Do ponto de vista da
Internet, a conexo feita para seu firewall. Do ponto de vista de seu servidor
interno, a coneo feita da interface interna do firewall para o servidor.
Outra aproximao (que requer um kernel 2.0 com patch para ipportfw,
ou um kernel 2.1 ou superior) usar um port forwarding no kernel. Isto faz o
mesmo trabalho que o redir em um mtodo diferente: o kernel regrava os
pacotes enquanto passam, alterando seus endereos de destino e portas para
apontarem para hosts e portas internas. Do ponto de vista da da internet, a
conexo feita para seu firewall. Do ponto de vista de seu servidor interno,
uma conexo feita do host Internet para o servidor.
5.3.3 Mais detalhes sobre Masquerading
David Ranch escreveu um excelente novo HOWTO em Masquerading,
que tem uma larga quantidade de materiais com este HOWTO. Voc pode
atualmente encontrar ete HOWTO em
http://www.ecst.csuchico.edu/~dranch/LINUX/index-LINUX.html#ipmasq
Logo eu iria esperar que isto fosse encontrado em algum lugar do
Projeto de documentao do Linux, em http://www.metalab.unc.edu/LDP
49
A pgina oficial do Masquerading est disponvel em
http://ipmasq.cjb.net.
5.4 IP Firewalling Chains
Esta seo descreve tudo o que voc realmente precisa saber para
construir um filtro de pacotes que se encaixe em suas necessidades.
5.4.1 Como os pacotes atravessam os filtros
O kernel inicia com trs listas de regras; estas listas so chamadas
firewall chains ou simplesmente chains. Os trs chains so chamados input
output e forward. Quando um pacote entra (digo, atravs da placa Ethernet) o
kernel usa o chain de entrada e decide seu destino. Se ele sobrevive a este
passo, ento o prximo passo do kernel decidir onde enviar o pacote (isto
chamado roteamento). Se o seu destino for outra mquina, ele consultar o
chain forward. Finalmente, antes de simplesmente o pacote ir para fora da
rede, o kernel consulta o chain output.
Um chain uma lista de checagem de regras. Cada regra diz se o
cabealho do pacote parece com isto, ento aqui esta o que fazer com o
pacote. Se a regra no confere com o pacote, ento a prxima regra no chain
consultada. Finalmente, se no existem mais regras a consultar, ento o
kernel procura no policiamento do chains para decidir o que fazer. Em um
sistema consciente em segurana, este policiamento normalmente diz ao
kernel para rejeitar ou negar o pacote.
Para fans da arte em ASCII, isto mostra o caminho completo do pacote
entrando em uma mquina.
| ACEITAR/ interface lo |
v REDIRECIONAR _______ |
> 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 descrio passo a passo de cada estgio:
Checksum: Este um teste para verificar se o pacote no est
corrompido de alguma forma. Se estiver, ele negado.
Sanity: Esta atualmente um destas checagens de sanidade antes
de cada chain firewall, mas o chain input o mais importante. Muitos
50
pacotes malformados podem deixar o cdigo de checagem de regras
confuso, e estes so negados aqui (uma mensagem mostrada no
syslog se isto acontecer).
input chain: Este o primeiro chain firewall que ser testado
contra o pacote. Se a deciso do chain no for NEGAR ou
REJEITAR, o pacote passa.
Demasquerade: Se o pacote uma resposta de um pacote anterior
do masquerade, (mascaramento) ele desmascarado, e pula para o
chain output. Se voc no usa o IP masquerading, voc pode ignorar
esta parte no diagrama.
Routing decision (deciso do roteamento): O campo de destino
examinado pelo cdigo de roteamento, para decidir se o pacote deve
ir para um processo local (veja processos locais abaixo) ou
direcionado (forward) para uma mquina remota (veja forward chains
abaixo).
Local process (processo local): Um processo sendo executado
em uma mquina pode receber pacotes aps o passo de deciso do
roteamento, e pode enviar pacotes (que vo pelo passo de deciso
do reteamento, quando atravessam o chain output).
interface lo: Se pacotes de um processo locai so desinados a
um processo local, eles vo atravs do chain output com a interface
configurada para lo, ento retorna pelo chain input tambm com a
interface lo. A interface lo normalmente chamada de interface
loopback.
local: Se o pacote no foi criado por um processo local, ento o
chain forward checado, caso contrrio o pacote vai atravs do
chain output.
forward chain: Este chain usado para qualquer pacote que est
tentando passar entre esta mquina para outra.
output chain: Este chain usado para todos os pacotes antes de
serem enviados para fora.
5.4.1.1 Usando ipchains
Primeiro, verifique se voc tem a verso do ipchains que este
documento se refere:
$ ipchainsversion
ipchains 1.3.9, 17-Mar-1999
Note que eu recomendo 1.3.4 (que no possui opes longas, como
sport), ou 1.3.8 ou superior; estes so muito estveis.
ipchains tem uma pgina de manual razoavelmente detalhada (man
ipchains), e se voc precisa de mais detalhes em particularidades, voc deve
51
checar a interface de programao (man 4 ipfw), ou o arquivo net/ipv4/ip_fw.c
no cdigo fonte do kernel 2.1.x, que (obviamente) autoritativo.
Tambm existem um excelente guia de referncia rpida por Scott
Bronson no pacote fonte, em ambas A4 e US Letter PosScript.
Existem diferentes outras coisas que voc pode fazer com ipchains.
Primeiro operaes para gerenciar chains completos. Voc inicia com trs
chains input, output e forward que voce no pode apagar.
1. Criar um novo chain (-N).
2. Deletar um chain vazio (-X).
3. Alterar a poltica 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 posio no chain (-I).
3. Substitui uma regra na mesma posio no chain (-R).
4. Deleta uma regra na mesma posio no chain (-D).
5. Deleta a primeira regra que confere no chain (-D).
Existem poucas operaes para masquerading, que esto no ipchains
que um bom lugar para coloca-las:
1. Lista de conexes atuais do masquerade (-M -L).
2. Configura os valores de tempo mximo (timeout) do masquerade
(-M -S).
(Mas veja Eu no posso configurar tempo mximo no masquerade)
O funo final (e talvez a mais til) permite a voc checar o que
aconteceu com o dado pacote se ele atravessou o chain.
5.4.1.2 Operaes em uma regra Simples
Este o po-e-manteiga do ipchains; manipulando regras. Mas
especificamente voc ira provavelmene usar os comandos append (-A) e delete
52
(-D). os outros (-I para inserir e -R para substituir) so simples extenses
nestes conceitos.
Cada regra especifica uma cofigurao de condies em que o pacote
se encontra, e o que fazer quando a encontra (um alvo). Por exemplo,
voc pode desejar negar todos os pacotes ICMP vindo do endereo IP
127.0.0.1. Assim neste caso nossas condies so que o protocolo
deve ser ICMP e que o endereo de origem deve ser 127.0.0.1. Nosso alvo
NEGAR.
127.0.0.1 a interface loopback, que voc tem mesmo se no
possuir uma conexo real da rede. Voc pode usar o programa ping para
gerar tais pacotes (ele simplesmente envia um ICMP tipo 8 (echo request) com
todos os hosts cooperativos que devem servialmente responder com o pacote
ICMP tipo 0 (echo reply). Isto til para testes.
# ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.2 ms
# ipchains -A input -s 127.0.0.1 -p icmp -j DENY
# ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss
Voc pode ver aqui que o primeiro ping se sucede( o -c 1que dizer para
o ping enviar somente um pacote simples)
Ento ns adicionamos (-A) um chain input, uma regra especificando
que para pacotes vindo de 127.0.0.1 (-s 127.0.0.1) com o protocolo ICMP (-p
ICMP) devem ser negados (-j DENY).
Quando ns testamos nossa regra, usando o segundo ping, Existe uma
pausa antes do programa aguardar a resposta que nunca vem.
Ns podemos apagar uma regra em um dos dois meios. Primeiro ns
conhecemos que esta a nica regra no chain input, ns podemos usar um
nmero para apagar, como em:
# ipchains -D input 1
Para apagar a regra nmero 1 no chain input.
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 no deseja
conta-las para retirar a regra 37. Neste caso, ns podemos usar:
# ipchains -D input -s 127.0.0.1 -p icmp -j DENY
A sintaxe de -D deve ter exatamente as mesmas opes que os
comandos -A (ou -I ou -R). Se existem mltiplas regras idnticas no mesmo
chain, somente a primeira ser apagada.
5.4.1.3 Especificaes de Filtragem
Voc deve sempre usar -p para especificar um protocolo, e -s para
especificar um endereo de origem, mas existem outras opes que ns
podemos usar para especificar caractersticas do pacote. O que segue um
compndio exaustivo.
5.4.1.3.1 Especificando o endereo IP de origem e Destino
Endereos IPs de origem (-s) e destino (-d) podem ser especificados em
quatro meios. O meio mais comum usar o nome completo, como localhost
ou www.linuxhq.com. O segundo mtodo especificar o endereo IP como
127.0.0.1.
O terceiro e quarto meio permite especificar um grupo de endereos IPs,
como 199.95.207.0/24 ou 199.95.207.0/255.255.255.0. Estes dois
especificam qualquer endereos IP de 192.95.207.0 para 192.95.207.255
inclusive; os digitos depois da / dizem dizem que a parte do endereo IP
significante. /32 ou /255.255.255.255 o padro (abrange todos os
endereos IPs). Para especificar qualquer endereo IP, deve ser usado /0,
como no exemplo:
# ipchains -A input -s 0/0 -j DENY
Isto raramente usado, como o efeito acima o mesmo como no
especificar a opo -s.
5.4.1.3.2 Especificando Inverso
Muitas opes, incluindo a -s e -d podem ter seus argumentos
seguidos de ! (que significa no) para atingirem endereos NO iguais ao
especificado. Por exemplo, -s ! localhost atinge qualquer pacote menos de
localhost.
5.4.1.3.3 Especificando o Protocolo
O protocolo pode ser especificado com a opo -p. O protocolo pode
ser um nmero (se conhecer os valores numricos dos protocolos para IP) ou
um nome para casos especiais de TCP, UDP ou ICMP. Caso especificar
tcp tambm funcinar como TCP.
O nome do protcolo pode usar o prefixo !, para inverter a regra, como -
p ! TCP.
54
5.4.1.3.3.1 Especificando portas UDP e TCP
Para casos especiais onde um protocolo TCP ou UDP especificado,
existem argumentos extras indicando a porta TCP ou UDP, ou um (exclusivo)
faixa de portas (mas veja Dirigindo Fragmentos abaixo). Uma faixa
representada pelo caracter :, como 6000:6010, que abrange 11 nmeros de
portas, de 6000 para 6010. Se o menor nmero omitido, o padro ser 0. Se
o maior nmero for omitido, o padro ser 65535. Assim para especificar
conexes TCP vindo de portas abaixo de 1024, a sintaxe deve ser como -p
TCP -s 0.0.0.0/0 :1023. Nmeros de portas podem ser especificadas por
nomes, eg. www.
Note que a especificao de portas devem ser precedidas por uma !,
que inverte a regra. Assim para especificar qualquer pacote TCP menos uma
pacote WWW, voc deve especificar p TCP -d 0.0.0.0/0 ! www
importante realizar aquela especificao
p TCP -d ! 192.168.1.1 www
muito diferente de
p TCP -d 192.168.1.1 ! www
A primeira especifica qualquer pacote TCP para a porta WWW em
qualquer mquina menos 192.168.1.1. O segundo especifica qualquer
conexo TCP para qualquer porta em 192.168.1.1 menos a porta WWW.
Finalmente, este caso significa no para a porta WWW e no para
192.168.1.1:
p TCP -d ! 192.168.1.1 ! www
5.4.1.3.3.2 Especificando tipo do ICMP Type e Code
ICMP tambm permite um argumento opcional, mas como ICMP no
possui portas, (ICMP possui tipo e cdigo) eles possuem diferentes
significados.
Voc pode especifica-los como nomes ICMP (use ipchains -h icmp para
listar os nomes) aps a opo -s, ou como um tipo e cdigo ICMP numrico,
onde os tipos seguem a opco -s e o cdigo segue a opo -d.
Os nomes ICMP so razoavelmente logos: voc somente precisa usar
bastante letras para fazer um nome se distinguir de outros.
Aqui est um pequena tabela de alguns dos pacotes ICMP mais
comuns:
Nmero Nome Requerido por
0 echo-reply pong
3 destination-unreachable Qualquer trfego TCP/UDP.
55
5 redirect se no estiver executando
um daemon de roteamento
8 echo-request ping
11 time-exceeded traceroute
Note que os nomes ICMP no podem ser precedidos de ! no momento.
Ateno: NO, bloqueie as mensagems ICMP do tipo 3! (Veja Pacotes
ICMP abaixo)
5.4.1.3.4 Especificando a Interface
A opo -i especifica o nome de uma interface para atingir. Uma
interface o dispositivo fsico onde o pacote vem, ou onde vai. Voc pode usar
o comando ifconfig para listas as interfaces que esto em up (ie. trabalhando
no momento).
A interface para pacotes de entrada (ie. pacotes atravessando as regras
de entrada) considerada sendo uma interface onde eles vem. Logicamente,
a interface para pacotes enviados (pacotes atravessando as regras de sada)
a interface onde eles vo. A interface para pacotes atravessando os chains
forward tambm a interface onde eles sero enviados para fora; me parece
uma deciso bastante arbitrria.
perfeitamente legal especificar uma interface que atualmente no
existe; a regra no atingir nada at que a interface seja iniciada. Isto
extremamente til para conexes PPP dialup (normalmente a interface ppp0).
Como um caso especial, um nome de interface finalizando com um +
atinge todas as interfaces (at mesmo se existem atualmente ou no) que
comeam com aquele string. Por exemplo, para especificar uma regra que
atinge todas as interfaces PPP, a opo -i ppp+ pode ser usada.
O nome da interface pode ser precedida por uma ! para no atingir
pacotes que NO conferem com a interface especificada.
5.4.1.3.5 Especificando somente pacotes TCP SYN
muitas vezes til permitir conexes TCP em uma direo, mas no em
outra. Por exemplo, voc pode desejar permitir conexes para uma servidor
WWW externo, mas no conexes daquele servidor.
Uma aproximao ingnua pode ser bloquear pacotes TCP vindo do
servidor. Infelizmente, conexes TCP requerem pacotes indo em ambas
direes para funcionarem corretamente.
A soluo bloquear somente os pacotes usados para requisitar uma
conexo. Estes pacotes so chamados SYN (ok, tcnicamente eles so
pacotes com a flag SYN configurada, e as flags FIN e ACK limpas, mas ns os
chamamos de pacotes SYN). Desativando somente estes pacotes, ns
podemos parar tentativas de conexes em seus rastros.
A flag -y usada para isto: somente vlida para regras que
especificam TCP como seu protocolo. Por exemplo, para especificar tentativas
de conexo TCP de 192.168.1.1:
p TCP -s 192.168.1.1 -y
56
Mais uma vez, esta opo pode ser invertida se for precedida de um !,
que diz que cada pacote sem ser a inicializao da conexo.
5.4.1.3.6 Dirigindo Fragmentos
As vezes um pacote muito grande para passar de uma s vez.
Quando isto acontece, o pacote dividido em framentos, e enviado como
mltiplos pacotes. O outro lado remonta os fragmentos para reconstruir o
pacote inteiro.
O problema com fragmentos que muitas das especificaess listadas
acima (em particular, porta de origem, porta de destino, tipo ICMP, cdigo
ICMP, ou opo TCP SYN) requerem que o kernel verifique no inicio do pacote,
que o nico que contm o primeiro fragmento.
Se sua mquina a nica conectada a uma rede externa, ento voc
pode dizer para o kernel do linux para remontar todos os fragmentos dos
pacotes que passam atravs dele, compilando o kernel com IP: always
defragment (sempre desfragmentar) configurado para Y. Isto ntidamente
evita isto.
Caso contrrio, importante entender como os fragmentos so tratados
pelas regras de filtragem. O primeiro fragmento tratado como qualquer outro
pacote. O segundo e os fragmentos seguintes no so. Assim uma regra -p
TCP -s 192.168.1.1 www (especificando uma porta de origem de www) nunca
atingir um fragmento (do segundo em diante). Nem ser o oposto a regra -p
TCP -s 192.168.1.1 ! www.
No entanto, voc pode especificar uma regra especificamente para o
segundo e outros fragmentos, usando a opo -f. Obviamente, ilegal
especificar uma porta TCP ou UDP, tipo ICMP, cdigo ICMP ou a opo TCP
SYN em tal regra de fragmento.
tambm permitido especificar que uma regra que no se aplica ao
segundo e fragmentos seguintes, procedendo -f com !.
Normalmente considerado como seguro deixar o segundo e outros
fragmentos atravessarem, desde que a filtragem afetar o primeiro fragmento,
e assim previne a remontagem no computador de destino, porm, tem sido
conhecido bugs para permitir o travamento de mquinas simplesmente
enviando fragmentos.
Nota para cabeas de rede: pacotes mal formados (TCP, UDP e pacotes
ICMP muitos curtos para o cdigo de firewall ler as portas ou cdigo e tipo
ICMP) so tratados como fragmentos tambm. Sometne fragmentos TCP
iniciando na posio 8 so explicitamente derrubados pelo cdigo do firewall
(uma mensagem aparecer no syslog se isto ocorrer).
Como um exemplo, a seguinte regra derrubar quaisquer fragmentos
indo para 192.168.1.1:
# ipchains -A output -f -d 192.168.1.1 -j DENY
57
5.4.1.4 Efeitos do Lado da Filtragem
OK, agora ns conhecemos todos os mtodos que podemos atingir um
pacote usando uma regra. Se um pacote confere com a regra, as seguintes
coisas podem acontecer:
1. O contador de byte para aquela regra aumentado pelo tamando
do pacote (cabealho e tudo).
2. 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 (no em kernels da
srie 2.0).
6. O alvo da regra examinado para decidir o que fazer com o
prximo pacote.
Para variedade, todos estas regras esto em ordem de importncia.
5.4.1.4.1 Especificando um alvo
Um alvo diz ao kernel o que fazer com um pacote que confere cum uma
regra. ipchains usa -j (pense como jump-to - pular para) para a
especificao do alvo. O nome do alvo deve ser menor que 8 letras, e case
sensitive: RETURN e return so completamente diferentes.
O caso mais simples quando no h um alvo especificado. Este tipo
de regra (muitas vezes chamado de uma regra de contagem) til para uma
contagem simples de certos tipos de pacotes. Se esta regra confere ou no, o
kernel simplesmente examina a prxima regra no chain. Por exemplo, para
contar o nmero de pacotes de 192.168.1.1, ns podemos fazer isto:
# ipchains -A input -s 192.168.1.1
(Usando ipchains -L -v ns podemos ver os contadores e bytes
associados com cada regra).
Existem seis alvos especiais. Os primeiros trs, ACCEPT, REJECT e
DENY so muito simples. ACCEPT aceita o pacote, DENY bloqueia o pacote,
como se nunca o tivesse recebido. REJECT rejeita o pacote, mas (se ele
no um pacote ICMP) gera uma resposta ICMP para a origem para dizer que
o destino est inalcanavel.
A prxima, MASQ diz ao kernel mascarar (masquerade) o pacote. Para
isto funcionar, seu kernel precisa estar compilado com IP Masquerading
ativado. Para detalhes sobre isto, veja Masquerading_HOWTO e o apndice
Diferenas ente ipchains e ipfwadm. Este alvo somente vlido para pacotes
atravessando o chain forward.
O alvo mais especial REDIRECT que diz ao kernel para enviar um
pacote para uma porta local em vez de onde tivesse vindo.
58
Isto pode ser somente especificado por regras especificando TCP ou
UDP como seus protocolos. Opcionalmente, uma porta (nome ou nmero)
podem ser especificadas seguidas de -j REDIRECT que causar o
redirecionamento do pacote para uma porta particular, at mesmo se for
endereado para outra porta. Este alvo somente vlido para pacotes
atravessando a regra de entrada.
O alvo final especial RETURN que idntico a cair fora do final da
regra imediatamente. (Veja Configurando o Policiamento abaixo).
Qualquer outro alvo indica uma regra definida pelo usurio (como
descrita em Operaes em todo o Chain abaixo). O pacote comear
atravessando as regras naquele chain. Se aquele chain no decide o destino
do pacote, ento uma vez passam por aquele chain como finalizado, passar se
resume na prxima regra no chain atual.
Hora de mais arte ASCII. Considere dois (tolos) chains: input (o chain
embutido) e Test (um chain definido pelo usurio).
input 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. A
regra 2 bate, e seu alvo Test, assim a prxima regra examinada o inicio do
teste. Regra 1 em test confere, mas no especifica um alvo, assim a prxima
regra examinada, Regra 2. Isto no confere, assim ns atingimos o final do
chain. Ns retornamos ao chain de entrada, onde ns simplesmente
examinamos a Regra 2, assim ns agora examinamos Regra3, que no
confere.
Assim o caminho do pacote :
V __________________________
input | / Test V
------------------------|--/ -----------------------|----
| Rule1 | /| | Rule1 | |
|-----------------------|/-| |----------------------|---|
| Rule2 / | | Rule2 | |
|--------------------------| -----------------------V----
| Rule3 /--+___________________________/
------------------------|---
V
Veja a seo Como organizar suas regras de Firewall para meios para
usar regras definidas pelo usurios efetivamente.
5.4.1.4.2 Registrando pacotes
Este o lado do efeito que confere com uma regra que possui; voc
pode ter o pacote que bateu com a regra registrado com a opo -l. Voc
59
normalmente no precisar disto para pacotes rotineiros, mas ela uma
caracterstica til se voc deseja verificar por eventos excepcionais.
O kernel registra esta informao parecida como:
Packet log: input DENY eth0 PROTO=17 192.168.2.1:53 192.168.1.1:1025
L=34 S=0x00 I=18 F=0x0000 T=254
Esta mensagem de registro designada para ser concisa, e contm
informaes tcnicas teis somente para gurus de rede, mas ela pode ser til
para o resto de ns. Cada uma que dizer o seguinte:
1. input este o chain que contm a regra que confere com o
pacote, causando a mensagem de registro.
2. DENY o que a regra disse fazer com o pacote. Se isto -
ento a regra no afetou o pacote (uma regra de registro).
3. eth0 o nome da interface. Porque isto foi o chain de entrada,
ela significa que o pacote veio de eth0.
4. PROTO=17 significa que o pacote foi protocolo 17. Uma lista de
nmeros de protocolos esta disponvel em etc/prococols. Os mais comuns
so 1 (ICMP), 6(TCP) e 17(UDP).
5. 192.168.2.1 significa que o endereo IP de origem do pacote foi
192.168.2.1.
6. :53 significa que a porta de origem foi 53. Olhando em
/etc/services verificado que esta uma porta domnio (ie. esta
provavelmente a resposta do DNS). Para UDP e TCP, este nmero a porta
de origem. Para ICMP, ele o tipo ICMP. Para outros, ele ser 65535.
7. 192.168.0.1 o IP de destino.
8. :1025 significa que a porta de destino foi 1025. Para UDP e
TCP, este nmero a porta de destino. Para ICMP, ele o cdigo ICMP.
Para outros, ele ser 65535.
9. L=34 significa que o pacote teve um total de 34 bytes.
10. S=0x00 campo que significa o tipo do servio (dividido por 4
para obter o tipo do servio com usado pelo ipchains).
11. I=18 a identificao do IP.
12. F=0x0000 os fragmentos 16-bits offset plus flags. Um valor
iniciando com 0x4 ou 0x5 significa que o bit de fragmento no esta
configurado. 0x2 ou 0x3 significa que o bit mais fragmentos esta
configurado; espere mais fragmentos aps isto. O resto dos nmeros so o
offset deste fragmento, dividido por 8.
13. T=254 o tempo de vida do pacote. Um subtrado deste valor
para cada ciclo, e normalmente iniciam em 15 ou 255.
14. (#5) este pode ser um nmero final em parnteses em kernels
mais recentes (talvez aps 2.2.9). Este um nmero de regra que causa o
registro do pacotes.
60
Em sistemas linux padres, esta sada do kernel capturada por klogd
(o daemon de registro do kernel) que o envia para o syslogd (o daemon de
registro do sistema). O arquivo /etc/syslog.conf controla o funcionamento de
syslogd, especificando um destino para cada facilidade (facility - em nosso
caso, a facilidade kernel) e nvel (para ipchains, o nvel usado info).
Por exemplo, meu (Debian) /etc/syslog.conf contm duas linhas que
conferem kern.info:
kern.* -/var/log/kern.log
.=info;.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
Estas significam que as mensagem so duplicadas em /var/log/kern.log
e /var/log/messages. Para mais detalhes, veja man syslog.conf.
5.4.1.4.3 Manipulando o tipo do Servio
Existem quatro bits raramente usados no cabealho IP, chamaos de bits
de tipo do servio (TOS). Eles afetam o mtodo como os pacotes so tratados;
os quatros bits so Minima Espera, Mximo processamento, Mxima
Confiabilidade e Mnimo Custo. Somente um destes bits permitido ser
configurado. Rob van Nieuwkerk, o autor do TOS-mangling code, colocou o
que segue:
Especialmente o Minimo de Espera importante para mim. Eu deixo
ele ligado para pacotes interativos em meu roteador (Linux). Eu uso um
modem de 33k6. O linux inicializa pacotes em 3 meios. Deste meio eu tenho
performance interativa aceitvel enquando fao downloads grandes ao mesmo
tempo. (Ele pode at mesmo ser melhor se l no tiver tal bit no driver serial,
mas a latencia mantida agora por 1.5 segundos).
Nota: Obviamente, voc tem o controle atravs de pacotes de entrada:
voc pode somente controlar a prioridade dos pacotes deixando seu
computador. Para negociar prioridades com o outro computador, um protocolo
como RSVP (que no conheo nada sobre ele, no me pergunte sobre isto)
deve ser usado.
O uso mais comum configurar telnet e conexes de controle FTP para
o Minima Espera e dados FTP para Mximo Processamento. Isto pode ser
feito como segue:
ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10
ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10
ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08
A opo -t pede dois parmetros extras, ambos em hexadecimal.
Estes permitem giros complexos dos bitos TOS: o primeira mascara ANDed
com o pacote atual TOS, e ento a segunda mscara XORed com ele.
Se isto muito confuso, apenas use a seguinte tabela:
61
TOS Name Value Typical Uses
Minimum Delay 0x01 0x10 ftp, telnet
Maximum Throughput 0x01 0x08 ftp-data
Maximum Reliability 0x01 0x04 snmp
Minimum Cost 0x01 0x02 nntp
Andi Klenn foi ao ponto fora dos seguintes (tambm editado para
postaridade):
Talvez ele possa ser til para incluir uma referncia para de ifconfig para
a discusso sobre bits TOS. O tamanho do dispositivo padro afinado para
placas ethernet, em modems ele muito grande e faz os 3 agendamentos das
bandas (que possui canais baseados no TOS) funcionarem subtimamente.
uma boa idia configura-lo para um valor entre 4-10 no modem ou simples
canal b para links ISDN: em dispositivos empacotados necessrio um grande
canal.
Este uma problema 2.0 e no 2.1, mas em 2.1 ele um opo do
ifconfig (com nettools recentes), enquanto em 2.0 ele requer patches fontes nos
controladores de dispositivos para alterar.
Assim, para ver mximos beneficios da manipulao TOS para links de
modems PPP, faa ifconfig $1 txqueuelen em seu /etc/ppp/ip-up script. O
nmero usado depende da velocidade do modem e da quantidade de buffer no
modem; aqui configuraes que Andi me passou denovo:
O melhor valor para dadas configuraes precisam ser testadas. Se os
canais so muito pequenos em um roteador ento os pacotes sero
derrubados. Tambm claro que um obtm o benefcio at mesmo sem
regravao TOS, apenas aquela regravao TOS ajuda obter benefcios para
programas no coperativos (mas todos os programas padres do linux so
coperativos).
5.4.1.4.4 Marcando um Pacote
Isto permite complexas e poderosas interaes com Alexey Kuznetsovs
nova Qualidade de implementaes de Servio, tambm como forwarding
baseado em marcas em kernels da srie 2.1. Esta opo no entanto
ignorada em kernels da srie 2.0.
5.4.1.4.5 Operaes em todo o chain
Uma caracterstica muito til do ipchains a abilidade de agrupar regras
relacionadas em chains. Voc pode chamar chains do que quiser, desde que
no sejam nomes utilizados pelos chains embutidos (input, output e forward) ou
os alvos (MASQ, REDIRECT, ACCEPT, DENY, REJECT ou RETURN). Eu
sugiro evitar totalmente identificaes em maisculas, porque que eu posso
usar estas para futura extenso. O nome do chain pode ser maior que 8
caracteres.
5.4.1.4.6 Criando um novo chain
Vou criar um novo chain. Porque eu sou como um imaginador da
mesma categoria, eu chamarei isto de test.
62
# ipchains -N test
muito simples. Agora voc pode colocar regras nele como detalhado
acima.
5.4.1.4.7 Apagando um chain
Apagar um chain tambm simples.
# ipchains -X test
Porque -X? Bem, todas as boas letras foram usadas.
Existem um par de restries para apagar chains: elas devem ser vazias
(veja Limpando um Chain abaixo) e eles no devem ser o alvo de qualquer
regra. Voc no pode deletar qualquer destes trs chains embutidos.
5.4.1.4.8 Limpando um Chain
Existe um mtodo simples de esvaziar todas as regras fora do chain,
usando o comando -F.
# ipchains -F forward
Se voc no especificar um chain, ento todos os chains sero limpos.
5.4.1.4.9 Listando um chain
Voc pode listar todas as regras em um chain usando o comando -L.
# ipchains -L input
Chain input (refcnt = 1): (policy ACCEPT)
target prot opt source destination ports
ACCEPT icmp ----- anywhere anywhere any
# ipchains -L test
Chain test (refcnt = 0):
target prot opt source destination ports
DENY icmp ----- localnet/24 anywhere any
#
O refcnt listado para test o nmero de regras que tem test como seu
alvo. Este pode ser zero (e o chain ser vazio) antes deste chain ser apagado.
Se o nome do chain omitido, todos os chains so listados.
Existem trs opes que podem acompanhar -L. A -n (numrica)
opo muito til porque ela previne ipchains de tentar localizar endereos IP,
que (se voc esta usando DNS como muitas pessoas) causa larga espera se
seu DNS se no estiver configurado corretamente, ou se voc filtrar suas
requisies DNS. Ele faz as portas serem listadas como nmeros ao invs de
nomes.
63
A opo -v mostra os detalhes das regras, como o pacote e contadores
de byes, as mscaras TOS, a interface, e a marca do pacote. Caso contrrio
estes valores so omitidos. Por exemplo:
# ipchains -v -L input
Chain input (refcnt = 1): (policy ACCEPT)
pkts bytes target prot opt tosa tosx ifname mark source
destination ports
10 840 ACCEPT icmp ----- 0xFF 0x00 lo anywhere
anywhere any
Note que o pacote e o contador do byte so mostrados usando os
sufixos K, M ou G para 100, 1,000,000 e 1,000,000,000 respectivamente.
Usando a opo -x (nmeros expandidos) so mostrados nmeros
completos, no discutirei como eles so grandes.
5.4.1.4.10 Resetando (Zerando) Contadores
Isto til para permitir resetar os contadores. Isto pode ser feito com a
opo -Z (zero counters). Por exemplo:
# ipchains -v -L input
Chain input (refcnt = 1): (policy ACCEPT)
pkts bytes target prot opt tosa tosx 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 valores
do contador imediatamente antes dele ser resetado. No exemplo acima,
muitos pacotes pode passar entre os comandos -L e -Z. Por esta razo,
voc pode usar -L e -Z juntos, para resetar os contadores enquando os l.
Infelizmene, se voc fizer isto, voc no poder operar em um chain simples:
voc ter que listar e zerar todos os chains imediatamente.
# ipchains -L -v -Z
Chain input (policy ACCEPT):
pkts bytes target 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
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 Poltica
Ns mostramos o que acontece quando um pacote atinge o final do
chain de entrada embutido quando ns discutimos como um pacote anda
atravs dos chains em Especificando um Alvo acima. Neste caso, o
policiamento do chain determina o destino do pacote. Somente chains
embutidos (input output e forward) tem policiamento, porque se um pacote cai
no final de um chain definido pelo usurio, a passagem resumida no chain
anterior.
O policiamento pode ser qualquer dos primeiros quatro alvos especiais:
ACCEPT, DENY, REJECT, MASQ. MASQ somente vlido para o
chain forward.
tambm importante notar que o alvo RETURN em uma regra em um
dos chains embutidos til para acertar o policiamento de um chain quando o
pacote se encaixa em uma regra.
5.4.1.5 Operaes em Masquerading
Existem diversos parmetros que voc pode usar para IP Masquerading.
Eles esto empacotados com ipchains porque no compensa fazer uma
ferramenta separada para eles (no entanto isto pode mudar).
O comando IP Masquerading -M, e ele pode ser combinado com -L
para listar conexes Masquerade atuais, ou -S para configurar parmetros
masquerade.
O comando -L pode ser acompanhado por -n (mostar nmeros ao
invs de nomes dos hosts e nomes das portas) ou -v (mostra deltas em
nmeros sequenciais para conexo masquerade, apenas em caso de
preocupao).
O comando -S deve ser seguido de trs valores de timeout, cada um
em segundos: para sees TCP, para sees TCP aps um pacote FIN, e para
pacotes UDP. Se voc no desejar alterar um destes valores, simplesmente
passe um valor 0.
Os valores padres esto listados em
/usr/src/linux/include/net/ip_masq.h, atualmente 15 minutos, 2 minutos e
5 minutes respectivamente.
O valor mais comum para ser alterado o primeiro, para FTP (veja
Pesadelos FTP abaixo).
Note os problemas com as configuraes de timeout listados em Eu no
posso configurar timeouts em masquerade!.
65
5.4.1.6 Checando um Pacote
Muitas vezes voc deseja ver o que esta acontecendo quando um certo
pacote entra em sua mquina, tal como para verificar seus chains de entrada.
ipchains tem o comando -C para permitir isto, usando exatamente as mesmas
rotinas que o kernel usa para diagnosticar pacotes reais.
Voc especifica que chain testar o pacote seguido do argumento -C
com seu nome. Considerando que o kernel sempre inicia atravessando os
chains input, output e forward, voc est permitido o inicio da travessia em
qualquer chain para fins de testes.
Os detalhes do pacote so especificados usando a mesma sintaxe
usada para expecificar regras do firewall. Em particular, um protocolo (-p),
endereo de origem (-s), endereo de destino (-d) e interface (-i) so
compulsrios. Se o protoclo TCP ou UDP, ento uma porta simples de
origem e destino devem ser especificadas, e um tipo ICMP e um cdigo devem
ser especificados para o protocolo ICMP (a no ser que a opo -f
espeficada para indicar uma regra de fragmento, em tal caso estas opes so
ilegais).
Se o protocolo TCP (e a opo -f no especificada), a opo -y
deve ser especificada, para indicar que o pacote test deve ter o bit SYN
ajustado.
Aqui est um exemplo de teste de um pacote TCP SYN de 192.168.1.1
porta 60000 para 192.168.1.2 porta www, vindo na interface eth0, entrando no
chain input. Isto uma clssica inicializao de conexo WWW.
# ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 www
packet accepted
5.4.1.7 Multiplas Regras at Once and Watching What Happens
Muitas vezes uma simples linha de comando pode resultar em mltiplas
regras sendo afetadas. Isto feito em duas maneiras. Primeiro, se voc
especificar um hostname que resolve (usando DNS) mltiplos endereos IPs,
ipchains pode atuar como se voc tivesse digitado mltiplos comandos com
cada combinao de endereos.
Assim se o hostname www.foo.com resolve trs endereos IPs, e o
hostname www.bar.com resolve dois endereos IPs, ento o comando
ipchains -A input -j reject -s www.bar.com -d www.foo.com acumula seis
regras para o chain de entrada.
O outro meio de ter o ipchains fazendo mltiplas aes usar a opo
bidirecional (-b). Esta opo faz o ipchains se comportar como se voc
tivesse digitado o comando duas vezes, a segunda vez com os argumentos -s
e -d invertidos. Assim, para evitar forwarding para ou de 192.168.1.1, voc
deve fazer o seguinte:
# ipchains -b -A forward -j reject -s 192.168.1.1
66
Pessoalmente, eu no gosto muito da opo -b; se voc deseja
convenincia, veja Usando ipchains-save abaixo.
A opo -b pode ser usada com insert (-I), delete (-D) (mas no com
variaes que pegam regras numricas), comando append (-A) e comando
check (-C).
Outra opo til -v (verbose) que mostra exatamente o que o
ipchains est fazendo com seus comandos. Isto til se voc est negociando
com comandos que podem afetar multiplas regras. Por exemplo, aqui ns
checamos a ao dos fragmentos entre 192.68.1.1 e 192.168.1.2.
# ipchains -v -b -C input -p tcp -f -s 192.168.1.1 -d 192.168.1.2 -i lo
tcp opt ---f- tos 0xFF 0x00 via lo 192.168.1.1 -> 192.168.1.2 *
-> *
packet accepted
tcp opt ---f- tos 0xFF 0x00 via lo 192.168.1.2 -> 192.168.1.1 *
-> *
packet accepted
5.4.2 Exemplos teis
Eu tenho uma conexo dialup PPP (-i ppp0). Eu pego news (-p TCP -s
news.virtual.net.au nntp) e mail (-p TCP -s mail.virtual.net.au pop-3) a toda hora
que disco. Eu uso o mtodo FTP da Debian para atualizar minha mquina
regularmente (-p TCP -y -s ftp.debian.org.au ftp-data).
Eu surfo na WEB atravs do meu proxy ISP enquando isto est sendo
feito (-p TCP -d proxy.virtual.net.au 8080), mas odeio os anncios de
doubleclick.net dos arquivos Dilbert (-p TCP -y -d 199.95.207.0/24 e p TCP -y -
d 199.95.208.0/24).
Eu no noto pessoas tentando entrar pelo ftp em minha mquina
enquando eu estou online (-p TCP -d $LOCALIP ftp), mas no desejo qualquer
um de fora pretendendo ter um endereo IP de minha rede interna (-s
192.168.1.0/24).Isto normalmente chamado de IP spoofing, e aqui est um
belo meio de proteger voc dele em kernels 2.1.x e superiores: veja Como eu
configuro a proteo IP spoof?.
A configurao razoavelmente simples, porque no existe atualmente
nenhuma outra mquina na minha rede interna.
Eu no desejo que nenhum processo local (ie. Netscape, linx etc...) se
conecte em doubleclick.net:
# ipchains -A output -d 199.95.207.0/24 -j REJECT
# ipchains -A output -d 199.95.208.0/24 -j REJECT
Agora eu desejo configurar prioridades em varios pacotes de sada (no
existe muitos motivos de se fazer isto em pacotes que entram). Desde que eu
67
tenho diversos nmeros destas regras, sensato colocar todas elas em um
simples chain, chamado ppp-out.
# ipchains -N ppp-out
# ipchains -A output -i ppp0 -j ppp-out
Minimo de espera para trfego WEB e telnet.
# ipchains -A ppp-out -p TCP -d proxy.virtual.net.au 8080 -t 0x01 0x10
# ipchains -A ppp-out -p TCP -d 0.0.0.0 telnet -t 0x01 0x10
Baixo custo para dados ftp, nntp, pop-3:
# ipchains -A ppp-out -p TCP -d 0.0.0.0/0 ftp-data -t 0x01 0x02
# ipchains -A ppp-out -p TCP -d 0.0.0.0/0 nntp -t 0x01 0x02
# ipchains -A ppp-out -p TCP -d 0.0.0.0/0 pop-3 -t 0x01 0x02
Existem algumas restries em pacotes vindo da inteface ppp0:
deixe criar um chain chamado ppp-in
# ipchains -N ppp-in
# ipchains -A input -i ppp0 -j ppp-in
Agora, nenhum pacote vindo de ppp0 deve reivindicar um endereo de
origem de 192.168.1.*, assim ns registramos e negamos todos eles:
# ipchains -A ppp-in -s 192.168.1.0/24 -l -j DENY
Eu permito pacotes UDP para DNS (eu executo um programa de cache
de nomes que redireciona todas as requisies para 203.29.16.1, assim eu
espero respostas DNS somente dele), entrada FTP, e somente retorno de
dados ftp(ftp-data) (que deve somente estar indo para uma porta acima de
1023, e no 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 esto OK:
# ipchains -A input -i lo -j ACCEPT
Agora, meu policiamento padro no chain de entrada DENY, assim
qualquer outra coisa derrubada:
# ipchains -P input DENY
68
NOTA: Eu no configurei meus chains nesta ordem, como os pacotes
podem ir atravs da minha configurao. Seguramente normalmente feito o
DENY (bloqueio) primeiro, ento inseridas as regras. claro, se suas regras
requerem chamadas DNS para resolver nomes de hosts, voc ter problemas.
5.4.2.1 Usando ipchains-save
Configurar regras de firewall simplesmente do jeito que desejar, e ento
tente se lembrar dos comandos que usou assim voc pode estar na prxima
hora em pane.
Assim ipchains-save um script que l sua configurao atual dos
chains e salva em um arquivo. No momento eu mantenho seu suspense sobre
o que o ipchains-restore faz.
ipchains-save pode salvar uma simples regra, ou todas as regras (se
nenhum nome de regra especificada). A nica opo atualmente permitida
-v que mostra as regras (para stderr) quando so salvas. O policiamento do
chain tambm salvo para as regras input, output e forward.
# ipchains-save > my_firewall
Saving input.
Saving output.
Saving forward.
Saving ppp-in.
Saving ppp-out.
5.4.2.2 Usando ipchains-restore
O ipchains-restore restaura chains que foram salvos com ipchains-
save. Ele pode usar duas opes -v que descreve cada resgra sendo
includa, e -f que fora a limpeza de regras definidas pelo usurio se elas
existem, como descrito abaixo.
Se uma regra definida pelo usurio encontrada em input, ipchains-
restore checa se aquele chain realmente existe. Se existir, ento voc ser
perguntado se os chains devem ser limpos (limpeza de todas as regras) ou se
a restaurao deste chain deve ser ignorada. Se voc especificar -f na linha
de comando, voc no ser perguntado; a regra ser limpa.
Por exemplo:
# ipchains-restore < my_firewall
Restoring input.
Restoring output.
Restoring forward.
Restoring ppp-in.
Chain ppp-in already exists. Skip or flush? [S/f]? s Skipping ppp-in.
Restoring ppp-out.
69
Chain ppp-out already exists. Skip or flush? [S/f]? f Flushing ppp-out.
5.5 Diversos
Esta seo contm todas as informaes e FAQs que eu pude colocar
dentro da estrutura do arquivo abaixo.
5.5.1 Como organizar suas regras de firewall
Esta questo requer muita concentrao. Voc pode tentar organiza-las
para melhorar a velocidade (minimizar o nmeros de checagem de regras para
os pacotes mais comuns) ou para diminuir o gerenciamento.
Se voc tiver um link intermitente, digamos PPP, voc pode desejar
configurar a primeira regra do chain de entrada para -i ppp0 -j DENY na
inicializao, ento tendo qualquer coisa como esta em seu script ip-up:
# Re-create the ppp-in chain.
ipchains-restore -f < ppp-in.firewall
# Replace DENY rule with jump to ppp-handling chain.
ipchains -R input 1 -i ppp0 -j ppp-in
Seu script ip-down deve se parecer com isto:
ipchains -R input 1 -i ppp0 -j DENY
5.5.2 O que no filtrar
Existem muitas coisa que voc deve estar atento antes de iniciar a
filtragem de tudo o que no desejar.
5.5.2.1 Pacotes ICMP
Pacotes ICMP so usados (entre outras coisas) para indicar falhas de
outros protocolos (tal como TCP e UDP). Pacotes destination-unreachable
em particular. Bloqueando estes pacotes significa que voc nunca obter erros
Host unreachable ou No route to host; qualquer conexo simplesmente
aguardar por uma resposta que nunca vir. Isto irritante, mas raramente
fatal.
Um problema pior o papel de pacotes ICMP em na descoberta MTU.
Todas as boas implementaes TCP (incluindo o Linux) usa a descoberta MTU
para tentar entender qual pacote grande que pode ir para um destino sem ser
fragmentado (fragmentao diminui a performance, especialmente quando
fragmentos ocasionais so perdidos). Descoberta MTU funciona enviando
70
pacotes com o bit Dont Fragment ajustado, e ento enviando pacotes
pequenos se ele obter um pacote ICMP indicando Fragmentao necessria
mas DF ajustado (fragmentao necessria). Este um tipo de pacote
destination-unreachable, e se ele nunca recebido, o host local no reduzir
o MTU, e a performance ser abismal ou no existente. Note que comum ele
bloquear todas as mensagens de redirecionamento ICMP (tipo 5); estas podem
ser usados para manipular roteamento (embora boas stacks IP tem protees),
e assim so frequentemente vistas como ligeiramente ariscadas.
5.5.2.2 Conexes TCP para DNS (servidores de nomes)
Se estiver tentando bloquear conexes TCP de sada, se lembre que
DNS nem sempre usa UDP; se a resposta do servidor excede, 512 bytes, o
cliente usa uma conexo TCP (ainda indo para o nmero de porta 53) para
obter a resposta.
Isto pode ser uma armadilha porque DNS sempre trabalha mais ou
menos se voc bloquear tais transferncias TCP; voc pode experimentar
esperas longas e estranhas ou outros problemas DNS ocasionais se voc o
fizer.
Se suas requisies DNS sempre so direcionadas para a mesma
origem externa (ou diretamente usando a linha nameserver em /etc/resolv.conf
ou usando um servidor de nomes cache no modo forward), ento voc
precisar somente permitir conexes TCP para a porta domnio naquele
servidor de nomes da porta de domnio local (se usando um servidor de nomes
cache) ou de uma porta alta (>1023) se estiver usando /etc/resolv.conf.
5.5.2.3 Pesadelos FTP
O problema clssico de filtragem de pacotes o FTP. FTP tem dois
modos; um o tradicional que chamado modo ativo e o mais recente
chamado de modo passivo. Navegadores Web normalmente usam o modo
passivo, mas programas FTP de linha de comando normalmente usam o modo
ativo.
No modo ativo, quando o computador remoto tenta enviar um arquivo
(ou at mesmo o resultado de um comando ls ou dir) ele tenta abrir uma
conexo TCP com a mquina local. Isto significa que voc no pode filtrar
estas conexes TCP sem bloquear o FTP ativo.
Se voc tem a opo de usar o modo passivo, ento bem; modo passivo
faz as conexes de dados de cliente para servidor, at mesmo para dados de
entrada. Caso contrrio, recomendado que voc somente permita conexes
TCP para portas acima de 1024 e no entre 6000 e 6010 (6000 usada pelo
X-Window).
71
5.5.3 Filtrando o Ping of Death (ping da morte)
Computadores Linux so agora imunes aos famosos Ping of Death, que
envolve o envio de grandes pacotes ICMP ilegais que sobrecarrega os buffers
na pilha TCP no receptor e causa destruio.
Se voc est protegendo computadores que podem ser vulnerveis,
voc deve simplesmente bloquear fragmentos ICMP. Pacotes normais ICMP
no so grandes o bastante para requerer fragmentao, assim voc no deve
bloquear nada exceto grandes pings. Eu tenho ouvido (no confirmados)
relatos que muitos sistemas requerem somente o ltimo fragmento de um
pacote ICMP acima de seu tamanho para o corromper, assim bloquear
somente o primeiro fragmento no recomendado.
Sobre os programas exploit e tenho sempre visto que todos usam ICMP,
no existem razes que fragmentos TCP ou UDP (ou um protocolo
desconhecido) possa ser usado neste ataque, assim bloqueando fragmentos
ICMP somente uma soluo temporria.
5.5.4 Filtrando o Teardrop e Bonk
Teardrop e Bonk so dois ataques (principalmente sobre mquinas
Microsoft Windows NT) que confiam em fragmentos sobrepostos. Tendo seu
roteador Linux fazendo desfragmentao, ou no permitindo todos os
fragmentos para suas mquinas vulnerveis so as outras opes.
5.5.5 Filtrando Bombas de Fragmento
Algumas pilhas TCP so comentadas por ter problemas negociando com
grandes nmeros de fragmentos de pacotes quando eles no recebem todos
os fragmentos. Linux no tem este problema. Voc pode filtrar fora
fragmentos (que podem interromper legitimos usurios) ou compilar seu kernel
com IP: always defragment ajustado para Y (somente se seu computador
linux o roteador para estes pacotes).
5.5.6 Modificando regras do firewall
Existem alguns assuntos cronometrados envolvidos em alterar regras do
firewall. Se voc no cuidadoso, voc pode deixar pacotes passarem
enquanto estiver fazendo suas alteraes. Uma soluo simplssima fazer o
seguinte:
# ipchains -I input 1 -j DENY
# ipchains -I output 1 -j DENY
# ipchains -I forward 1 -j DENY
... faz alteraes ...
# ipchains -D input 1
72
# ipchains -D output 1
# ipchains -D forward 1
Isto bloqueia todos os pacotes durante as alteraes.
Se suas alteraes so restritas para um chain simples, voc deve criar
um novo chain com novas regras, e ento trocar (-R) a regra que aponta para
o antigo chain para a nova que aponta para o novo chain: ento voc pode
apagar o antigo chain. Esta substituio ocorrer atomicamente.
5.5.7 Como eu configuro a proteo IP Spoof?
IP spoofing uma tcnica onde um host envia pacotes que parecem ser
de outro host. Desde que a filtragem de pacotes faz decises baseadas no
endereo de origem, IP spoofing usado para filtros de pacotes bobos. Ele
tambm usado para ocultar a identidade de atacantes usando ataques SYN,
Teardrop, Ping of Death e outros (no se preocupe se no sabe o que eles
fazem).
O melhor meio para proteger de IP spoofing chamado Verificao do
endereo de Origem, e feito pelo cdigo de roteamento, e no o firewall
completamente. Procure por um arquivo chamado
/proc/sys/net/ipv4/conf/all/rp_filter. Se ele existe, ento ligando a Verificao do
Endereo de Origem (Source Address Verification) em cada inicializao a
soluo certa para voc. Para fazer isto, insira as seguintes linhas em
qualquer lugar de seus scripts init, antes de qualquer placa de rede ser
inicializada:
# This is the best method: turn on Source Address Verification and get
# spoof protection on all current and future interfaces.
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
echo -n Setting up IP spoofing protection...
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f done echo done.
else
echo PROBLEMS SETTING UP IP SPOOFING PROTECTION. BE WORRIED. echo CONTROL-D
will exit from this shell and continue system startup.
echo
# Start a single user shell on the console
/sbin/sulogin $CONSOLE
fi
Se voc no puder fazer isto, voc pode inserir manualmente regras
para proteger cada interface. Isto requer conhecimento de cada interface. Os
kernels 2.1 automticamente rejeitam pacotes dizendo vir de endereos 127.*
(reservados para a interfaceloopback local, lo).
Por exemplo, digamos que temos trs interfaces, eth0, eth1 e ppp0. Ns
podemos usar ifconfig para nos dizer o endereo e netmask das interfaces.
Digamos eth0 foi ligada a rede 192.168.1.0 com a netmasq 255.255.255.0, eth1
foi ligada a rede 10.0.0.0 com a netmask 255.0.0.0, e ppp0 conectado com a
73
internet (onde qualquer endereo exceto endereos IP privados so
permitodos), ns 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 idia no to boa como a Verificao do endereo de origem,
porque se sua rede muda, voc deve mudar suas regras de firewall para
prevenila.
Se voc est executando um kernel da srie 2.0, voc pode desejar
proteger a interface loopback tambm, usando uma regra como esta:
# ipchains -A input -i ! lo -s 127.0.0.0/255.0.0.0 -j DENY
5.6 Problemas comuns
5.6.1 ipchains -L Trava!
Voc est provavelmente bloqueando chamada DNS; e eventualmente o
time out. Tente usar a opo -n (nmerico) com ipchains, que no mostra
nomes.
5.6.2 Masquerading/Forwarding no funciona!
Certifique-se que o forward de pacotes est ativado (em kernels
recentes desativado por padro, dizendo que pacotes nunca tentam
atravessar o chain forward). Voc pode alterar isto (como root) digitando:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Se isto funciona para voc, coloque isto em algum lugar em seus scripts
de inicializao assim ele ser ativado toda hora; voc deve configurar seu
firewall antes de executar este comando, caso contrrio existe uma
oportunidade de pacotes escaparem.
5.6.3 -j REDIR no funciona!
Voc deve permitir pacotes forward (veja acima) para o
redirecionamento funcionar; caso contrrio o cdigo de roteamento bloqueia o
pacote. Assim se voc est simplesmente usando o redirecionamento, e no
tem qualquer forward, voc dever estar atento a isto.
74
Note que REDIR (sendo no chain input) no afeta conexes de um
processo local.
5.6.4 Coringas nas Interfaces no funcinam!
Existe um bug nas verses 2.1.102 e 2.1.103 do kernel (e alguns
patches antigos que produzi) que fazem comandos ipchains falharem ao
especificar uma inteface com coringas (tal como -i ppp+).
Isto est corrigido nos kernels mais recentes, e no patch 2.0.34 do web
site. Voc pode tambm pode corrigir alterando o fonte do kernel alterando a
linha 63 ou assim em include/linu/ip_fw.h
#define IP_FW_F_MASK 0x002F /* All possible flag bits mask */
Isto deve ser lido como 0x003F. Corrija isto e recompile o kernel.
5.6.5 TOS no funciona!
Isto foi meu erro: configurando o campo tipo do servio no configurava
atualmente o tipo do servio nos kernels verses 2.1.102 entre 2.1.111. Este
problema foi corrigido em 2.1.112.
5.6.6 ipautofw e ipportfw no funcionam!
Para o kernel 2.0.x, isto verdade: eu no tenho tempo para criar e
manter um patch gigantesco para ipchains e ipautofw/ipportfw.
Para o kernel 2.1.x, copie Juan Ciarlantes ipmasqadm de
http://juanjox.linuxhq.com/ e use-o exetamente como usaria como ipautofw ou
ipportfw, exceto ao invs de ipportfw voc digita ipmasqadm portfw, e ao invs
de ipautofw voc deve digitar ipmasqadm autofw.
5.6.7 xosview est quebrado!
Atualize para a verso 1.6.0 ou superior, que no requerem qualquer
regra de firewall para kernels 2.1.x. Isto parece ter quebrado denovo no
lanamento 1.6.1; por favor fale sobre o erro para o autor (este erro no
meu).
5.6.8 Falta de Segmentao com -j REDIRECT!
Este foi um bug no ipchains verso 1.3.3. Por favor atualize.
5.6.9 Eu no posso configurar tempo limite no masquerade!
Verdadeiro (para kernels 2.1.x) at 2.1.123. Em 2.1.124, tentando
configurar o tempo limite no masquerading causava uma chamada no kernel
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 cdigo somente cobre IP,
infelizmente. Do lado bom, todos os ganchos esto l para IPX! Voc apenas
precisa re-escrever o cdigo; Eu ficaria feliz em ajudar onde for possvel.
76
6 FIREWALL IPTABLES
Adaptado do Guia Foca GNU/Linux Avanado Captulo 9.
Este captulo documenta o funcionamento do firewall iptables que
acompanha a srie do kernel 2.4, opes usadas, e aponta alguns pontos
fundamentais para iniciar a configurao e construo de bons sistemas de
firewall.
6.1 Introduo
O Firewall um programa que como objetivo proteger a mquina contra
acessos indesejados, trfego indesejado, proteger servios que estejam
rodando na mquina e bloquear a passagem de coisas que voc no deseja
receber (como conexes vindas da Internet para sua segura rede local,
evitando acesso aos dados corporativos de uma empresa ou a seus dados
pessoais). No kernel do Linux 2.4, foi introduzido o firewall iptables (tambm
chamado de netfilter) que substitui o ipchains dos kernels da srie 2.2. Este
novo firewall tem como vantagem ser muito estvel (assim como o ipchains e
ipfwadm), confivel, permitir muita flexibilidade na programao de regras pelo
administrador do sistema, mais opes disponveis ao administrador para
controle de trfego, controle independente do trfego da rede local/entre
redes/interfaces devido a nova organizao das etapas de roteamento de
pacotes.
O iptables um firewall a nvel de pacotes e funciona baseado no
endereo/porta de origem/destino do pacote, prioridade, etc. Ele funciona
atravs da comparao de regras para saber se um pacote tem ou no
permisso para passar. Em firewalls mais restritivos, o pacote bloqueado e
registrado para que o administrador do sistema tenha conhecimento sobre o
que est acontecendo em seu sistema.
Ele tambm pode ser usado para modificar e monitorar o trfego da
rede, fazer NAT (masquerading, source nat, destination nat), redirecionamento
de pacotes, marcao de pacotes, modificar a prioridade de pacotes que
chegam/saem do seu sistema, contagem de bytes, dividir trfego entre
mquinas, criar protees anti-spoofing, contra syn flood, DoS, etc. O trfego
vindo de mquinas desconhecidas da rede pode tambm ser
bloqueado/registrado atravs do uso de simples regras. As possibilidades
oferecidas pelos recursos de filtragem iptables como todas as ferramentas
UNIX maduras dependem de sua imaginao, pois ele garante uma grande
flexibilidade na manipulao das regras de acesso ao sistema, precisando
apenas conhecer quais interfaces o sistema possui, o que deseja bloquear, o
que tem acesso garantido, quais servios devem estar acessveis para cada
rede, e iniciar a construo de seu firewall.
O iptables ainda tem a vantagem de ser modularizvel, funes podem
ser adicionadas ao firewall ampliando as possibilidades oferecidas. Usei por 2
anos o ipchains e afirmo que este um firewall que tem possibilidades de
gerenciar tanto a segurana em mquinas isoladas como roteamento em
77
grandes organizaes, onde a passagem de trfego entre redes deve ser
minuciosamente controlada.
Um firewall no funciona de forma automtica (instalando e esperar que
ele faa as coisas por voc), necessrio pelo menos conhecimentos bsicos
de rede tcp/ip, roteamento e portas para criar as regras que faro a segurana
de seu sistema. A segurana do sistema depende do controle das regras que
sero criadas por voc, as falhas humanas so garantia de mais de 95% de
sucesso nas invases.
Enfim o iptables um firewall que agradar tanto a pessoas que
desejam uma segurana bsica em seu sistema, quando administradores de
grandes redes que querem ter um controle minucioso sobre o trfego que
passam entre suas interfaces de rede (controlando tudo o que pode passar de
uma rede a outra), controlar o uso de trfego, monitorao, etc.
6.1.1 Verso
assumido que esteja usando a verso 1.2.3 do iptables e baseadas
nas opes do kernel 2.4.16 (sem o uso de mdulos experimentais). As
explicaes contidas aqui podem funcionar para verses posteriores, mas
recomendvel que leia a documentao sobre modificaes no programa
(changelog) em busca de mudanas que alterem o sentido das explicaes
fornecidas aqui.
6.1.2 Um resumo da histria do iptables
O iptables um cdigo de firewall das verses 2.4 do kernel, que
substituiu o ipchains (presente nas sries 2.2 do kernel). Ele foi includo no
kernel da srie 2.4 em meados de Junho/Julho de 1999.
A histria do desenvolvimento (desde o porte do ipfw do BSD para o
Linux at o iptables (que a quarta gerao de firewalls do kernel) est
disponvel no documento, Netfilter-howto.
6.1.3 Caractersticas do firewall iptables
Especificao de portas/endereo de origem/destino
Suporte a protocolos TCP/UDP/ICMP (incluindo tipos de mensagens
icmp)
Suporte a interfaces de origem/destino de pacotes
Manipula servios de proxy na rede
Tratamento de trfego dividido em chains (para melhor controle do
trfego que entra/sai da mquina e trfego redirecionado.
Permite um nmero ilimitado de regras por chain
Muito rpido, estvel e seguro
Possui mecanismos internos para rejeitar automaticamente pacotes
duvidosos ou mal formados.
78
Suporte a mdulos externos para expanso das funcionalidades padres
oferecidas pelo cdigo de firewall
Suporte completo a roteamento de pacotes, tratadas em uma rea
diferente de trfegos padres.
Suporte a especificao de tipo de servio para priorizar o trfego de
determinados tipos de pacotes.
Permite especificar excees para as regras ou parte das regras
Suporte a deteco de fragmentos
Permite enviar alertas personalizados ao syslog sobre o trfego
aceito/bloqueado.
Redirecionamento de portas
Masquerading
Suporte a SNAT (modificao do endereo de origem das mquinas
para um nico IP ou faixa de IP's).
Suporte a DNAT (modificao do endereo de destino das mquinas
para um nico IP ou fixa de IP's)
Contagem de pacotes que atravessaram uma interface/regra
Limitao de passagem de pacotes/conferncia de regra (muito til para
criar protees contra, syn flood, ping flood, DoS, etc).
6.1.4 Ficha tcnica
Pacote: iptables
iptables - Sistema de controle principal para protocolos ipv4
ip6tables - Sistema de controle principal para protocolos ipv6
iptables-save - Salva as regras atuais em um arquivo especificado como
argumento. Este utilitrio pode ser dispensado por um shell script
contendo as regras executado na inicializao da mquina.
iptables-restore - Restaura regras salvas pelo utilitrio iptables-save.
6.1.5 Requerimentos
necessrio que o seu kernel tenha sido compilado com suporte ao
iptables (veja Habilitando o suporte ao iptables no kernel, Section 9.1.15. O
requerimento mnimo de memria necessria para a execuo do iptables o
mesmo do kernel 2.4 (4MB). Dependendo do trfego que ser manipulado
pela(s) interface(s) do firewall ele poder ser executado com folga em uma
mquina 386 SX com 4MB de RAM.
79
Como as configuraes residem no kernel no necessrio espao
extra em disco rgido para a execuo deste utilitrio.
6.1.6 Arquivos de logs criados pelo iptables
Todo trfego que for registrado pelo iptables registrado por padro no
arquivo /var/log/kern.log.
6.1.7 Instalao
apt-get install iptables
O pacote iptables contm o utilitrio iptables (e ip6tables para redes
ipv6) necessrios para inserir suas regras no kernel. Se voc no sabe o que
ipv6, no precisar se preocupar com o utilitrio ip6tables por enquanto.
6.1.8 Enviando Correes/Contribuindo com o projeto
A pgina principal do projeto http://netfilter.filewatcher.org. Sugestes
podem ser enviadas para a lista de desenvolvimento oficial do iptables:
http://lists.samba.org.
6.1.9 O que aconteceu com o ipchains e ipfwadm?
O iptables faz parte da nova gerao de firewalls que acompanha o
kernel 2.4, mas o suporte ao ipchains e ipfwadm ainda ser mantido no kernel
at 2004. Seria uma grande falta de considerao retirar o suporte a estes
firewalls do kernel como forma de obrigar a "aprenderem" o iptables (mesmo o
suporte sendo removido aps este perodo, acredito que criaro patches
"externos" para futuros kernels que no traro mais este suporte). Se precisa
do suporte a estes firewalls antes de passar em definitivo para o iptables leia
Habilitando o suporte ao iptables no kernel, Section 9.1.15.
Se voc um administrador que gosta de explorar todos os recursos de
um firewall, usa todos os recursos que ele oferece ou mantm uma complexa
rede corporativa, tenho certeza que gostar do iptables.
6.1.10 Tipos de firewalls
Existem basicamente dois tipos de firewalls:
nvel de aplicao - Este tipo de firewall analisam o contedo do pacote
para tomar suas decises de filtragem. Firewalls deste tipo so mais
intrusivos (pois analisam o contedo de tudo que passa por ele) e
permitem um controle relacionado com o contedo do trfego. Alguns
firewalls a nvel de aplicao combinam recursos bsicos existentes em
firewalls a nvel de pacotes combinando as funcionalidade de controle de
trfego/controle de acesso em uma s ferramenta. Servidores proxy,
como o squid, so um exemplo deste tipo de firewall.
80
nvel de pacotes - Este tipo de firewall toma as decises baseadas nos
parmetros do pacote, como porta/endereo de origem/destino, estado
da conexo, e outros parmetros do pacote. O firewall ento pode
negar o pacote (DROP) ou deixar o pacote passar (ACCEPT). O
iptables um excelente firewall que se encaixa nesta categoria.
Firewall a nvel de pacotes o assunto explicado nesta seo do guia.
Os dois tipos de firewalls podem ser usados em conjunto para fornecer
uma camada dupla de segurana no acesso as suas mquinas/mquinas
clientes.
6.1.11 O que proteger?
Antes de iniciar a construo do firewall bom pensar nos seguintes
pontos:
Quais servios precisa proteger. Servios que devem ter acesso
garantido a usurios externos e quais sero bloqueados a
todas/determinadas mquinas. recomendvel bloquear o acesso a
todas portas menores que 1024 por executarem servios que rodam
com privilgio de usurio root, e autorizar somente o acesso as portas
que realmente deseja (configurao restritiva nesta faixa de portas).
Que tipo de conexes eu posso deixar passar e quais bloquear.
Servios com autenticao em texto plano e potencialmente inseguros
como rlogin, telnet, ftp, NFS, DNS, LDAP, SMTP RCP, X-Window so
servios que devem ser ter acesso garantido somente para
mquinas/redes que voc confia. Estes servios podem no ser s
usados para tentativa de acesso ao seu sistema, mas tambm como
forma de atacar outras pessoas aproveitando-se de problemas de
configurao.
A configurao do firewall ajuda a prevenir isso, mesmo se um servio
estiver mal configurado e tentando enviar seus pacotes para fora, ser
impedido. Da mesma forma se uma mquina Windows de sua rede for
infectada por um trojan no haver pnico: o firewall poder estar
configurado para bloquear qualquer tentativa de conexo vinda da
internet (cracker) para as mquinas de sua rede.
Para cpia de arquivos via rede insegura (como atravs da
Internet), recomendado o uso de servios que utilizam criptografia para
login e cpia de arquivos (veja Servidor ssh, Chapter 14).
Que mquinas tero acesso livre e quais sero restritas.
Que servios devero ter prioridade no processamento.
Que mquinas/redes NUNCA devero ter acesso a certas/todas
mquinas.
O volume de trfego que o servidor manipular. Atravs disso voc
pode ter que balancear o trfego entre outras mquinas, configurar
protees contra DoS, syn flood, etc.
81
O que tem permisso de passar de uma rede para outra (em mquinas
que atuam como roteadores/gateways de uma rede interna).
Etc.
A anlise destes pontos pode determinar a complexidade do firewall,
custos de implementao, prazo de desenvolvimento e tempo de maturidade
do cdigo para implementao. Existem muitos outros pontos que podem
entrar na questo de desenvolvimento de um sistema de firewall, eles
dependem do tipo de firewall que est desenvolvendo e das polticas de
segurana de sua rede.
6.1.12 O que so regras?
As regras so como comandos passados ao iptables para que ele
realize uma determinada ao (como bloquear ou deixar passar um pacote) de
acordo com o endereo/porta de origem/destino, interface de origem/destino,
etc. As regras so armazenadas dentro dos chains e processadas na ordem
que so inseridas.
As regras so armazenadas no kernel, o que significa que quando o
computador for reiniciado tudo o que fez ser perdido. Por este motivo elas
devero ser gravadas em um arquivo para serem carregadas a cada
inicializao.
Um exemplo de regra: iptables -A INPUT -s 123.123.123.1 -j
DROP.
6.1.13 O que so chains?
Os Chains so locais onde as regras do firewall definidas pelo usurio
so armazenadas para operao do firewall. Existem dois tipos de chains: os
embutidos (como os chains INPUT, OUTPUT e FORWARD) e os criados pelo
usurio. Os nomes dos chains embutidos devem ser especificados sempre em
maisculas (note que os nomes dos chains so case-sensitive, ou seja, o chain
input completamente diferente de INPUT).
6.1.14 O que so tabelas?
Tabelas so os locais usados para armazenar os chains e conjunto de
regras de um mesmo conjunto que cada um possui. As tabelas podem ser
referenciadas com a opo -t tabela e existem 3 tabelas disponveis no
iptables:
filter - Esta a tabela padro, contm 3 chains padres:
o INPUT - Consultado para dados que chegam a mquina
o OUTPUT - Consultado para dados que saem da mquina
o FORWARD - Consultado para dados que so redirecionados para
outra interface de rede ou outra mquina.
82
Os chains INPUT e OUTPUT somente so atravessados por conexes
indo/se originando de localhost. OBS: Para conexes locais, somente
os chains INPUT e OUTPUT so consultados na tabela filter.
nat - Usada para dados que gera outra conexo (masquerading, source
nat, destination nat, port forwarding, proxy transparente so alguns
exemplos). Possui 3 chains padres:
o PREROUTING - Consultado quando os pacotes precisam ser
modificados logo que chegam. o chain ideal para realizao de
DNAT e redirecionamento de portas (Fazendo DNAT, Section
9.4.4).
o OUTPUT - Consultado quando os pacotes gerados localmente
precisam ser modificados antes de serem roteados. Este chain
somente consultado para conexes que se originam de IPs de
interfaces locais.
o POSTROUTING - Consultado quando os pacotes precisam ser
modificados aps o tratamento de roteamento. o chain ideal
para realizao de SNAT e IP Masquerading (Fazendo SNAT,
Section 9.4.3).
mangle - Utilizada para alteraes especiais de pacotes (como modificar
o tipo de servio (TOS) ou outros detalhes que sero explicados no
decorrer do captulo. Possui 2 chains padres:
o PREROUTING - Consultado quando os pacotes precisam ser
modificados logo que chegam.
o OUTPUT - Consultado quando pacotes gerados localmente
precisam ser modificados antes de serem roteados.
Veja A tabela mangle, Section 9.5 para mais detalhes sobre a tabela
mangle.
6.1.15 Habilitando o suporte ao iptables no kernel
Para usar toda a funcionalidade do firewall iptables, permitindo fazer o
controle do que tem ou no permisso de acessar sua mquina, fazer
Masquerading/NAT em sua rede, etc., voc precisar dos seguintes
componentes compilados em seu kernel (os mdulos experimentais fora
ignorados intencionalmente):
*
* Network Options:
*
Network packet filtering (replaces ipchains) [Y/m/n/?]
Network packet filtering debugging [Y/m/n/?]
e na Subseo:
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 configurao permite que voc no tenha problemas para iniciar o
uso e configurao do seu firewall iptables, ela ativa os mdulos necessrios
para utilizao de todos os recursos do firewall iptables. Quando conhecer a
funo de cada um dos parmetros acima (durante o decorrer do texto), voc
poder eliminar muitas das opes desnecessrias para seu estilo de firewall
ou continuar fazendo uso de todas ;-)
OBS1: A configurao acima leva em considerao que voc NO
executar os cdigos antigos de firewall ipfwadm e ipchains. Caso deseje
utilizar o ipchains ou o ipfwadm, ser preciso responder com "M" a questo "IP
tables support (required for filtering/masq/NAT) (CONFIG_IP_NF_IPTABLES)".
Ser necessrio carregar manualmente o mdulo correspondente ao firewall
que deseja utilizar (modprobe iptables_filter.o no caso do iptables).
No execute mais de um tipo de firewall ao mesmo tempo!!!
OBS2: recomendvel ativar o daemon kmod para carga automtica de
mdulos, caso contrrio ser necessrio compilar todas as partes necessrias
embutidas no kernel, carregar os mdulos necessrios manualmente ou pelo
iptables (atravs da opo --modprobe=mdulo).
84
6.1.16 Ligando sua rede interna a Internet
Se a sua inteno (como da maioria dos usurios) conectar sua rede
interna a Internet de forma rpida e simples, leia Fazendo IP masquerading
(para os apressados), Section 9.4.2 ou Fazendo SNAT, Section 9.4.3. Um
exemplo prtico de configurao de Masquerading deste tipo encontrado em
Conectando sua rede interna a Internet, Section 9.8.3.
Aps configurar o masquerading, voc s precisar especificar o
endereo IP da mquina masquerading (servidor) como Gateway da rede. No
Windows 9x/NT/2000 isto feito no Painel de Controle/Rede/Propriedades de
Tcp/IP. No Linux pode ser feito com route add default gw IP_do_Servidor.
6.2 Manipulando chains
As opes passadas ao iptables usadas para manipular os chains so
SEMPRE em maisculas. As seguintes operaes podem ser realizadas com
os chains:
6.2.1 Adicionando regras - A
Como exemplo vamos criar uma regra que bloqueia o acesso a nosso
prpria mquina (127.0.0.1 - loopback). Primeiro daremos um ping para
verificar seu funcionamento:
#ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.6 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.5 ms
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.5/0.5/0.6 ms
Ok, a mquina responde, agora vamos incluir uma regra no chain INPUT
(-A INPUT) que bloqueie (-j DROP) qualquer acesso indo ao endereo
127.0.0.1 (-d 127.0.0.1):
iptables -t filter -A INPUT -d 127.0.0.1 -j DROP
Agora verificamos um novo ping:
#ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss
Desta vez a mquina 127.0.0.1 no respondeu, pois todos os pacotes
com o destino 127.0.0.1 (-d 127.0.0.1) so rejeitados (-j DROP). A opo -A
usada para adicionar novas regras no final do chain. Alm de -j DROP que
serve para rejeitar os pacotes, podemos tambm usar -j ACCEPT para aceitar
85
pacotes. A opo -j chamada de alvo da regra ou somente alvo pois define o
destino do pacote que atravessa a regra (veja Especificando um alvo, Section
9.3.6). Bem vindo a base de um sistema de firewall :-)
OBS1: - O acesso a interface loopback no deve ser de forma alguma
bloqueado, pois muitos aplicativos utilizam soquetes tcp para realizarem
conexes, mesmo que voc no possua uma rede interna.
OBS2: - A tabela filter ser usada como padro caso nenhuma tabela
seja especificada atravs da opo -t.
6.2.2 Listando regras - L
A seguinte sintaxe usada para listar as regras criadas:
iptables [-t tabela] -L [chain] [opes]
Onde:
tabela
uma das tabelas usadas pelo iptables. Se a tabela no for
especificada, a tabela filter ser usada como padro. Veja O que so
tabelas?, Section 9.1.14 para detalhes.
chain
Um dos chains disponveis na tabela acima (veja O que so
tabelas?, Section 9.1.14) ou criado pelo usurio (Criando um novo chain
- N, Section 9.2.6). Caso o chain no seja especificado, todos os chains
da tabela sero mostrados.
opes
As seguintes opes podem ser usadas para listar o contedo de
chains:
-v - Exibe mais detalhes sobre as regras criadas nos chains.
-n - Exibe endereos de mquinas/portas como nmeros ao invs
de tentar a resoluo DNS e consulta ao /etc/services. A
resoluo de nomes pode tomar muito tempo dependendo da
quantidade de regras que suas tabelas possuem e velocidade de
sua conexo.
-x - Exibe nmeros exatos ao invs de nmeros redondos.
Tambm mostra a faixa de portas de uma regra de firewall.
--line-numbers - Exibe o nmero da posio da regra na primeira
coluna da listagem.
Para listar a regra criada anteriormente usamos o comando:
#iptables -t filter -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere localhost
86
O comando iptables -L INPUT -n tem o mesmo efeito, a diferena que
so mostrados nmeros ao invs de nomes:
#iptables -L INPUT -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 0.0.0.0/0 127.0.0.1
#iptables -L INPUT -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- 0.0.0.0/0 127.0.0.1
#iptables -L INPUT -n -v
Chain INPUT (policy ACCEPT 78 packets, 5820 bytes)
pkts bytes target prot opt in out source
destination
2 194 DROP icmp -- * * 0.0.0.0/0
127.0.0.1
Os campos assim possuem o seguinte significado:
Chain INPUT
Nome do chain listado
(policy ACCEPT 78 packets, 5820 bytes)
Policiamento padro do chain (veja Especificando o policiamento
padro de um chain - P, Section 9.2.11).
pkts
Quantidade de pacotes que atravessaram a regra (veja Zerando
contador de bytes dos chains - Z, Section 9.2.10).
bytes
Quantidade de bytes que atravessaram a regra. Pode ser
referenciado com K (Kilobytes), M (Megabytes), G (Gigabytes).
target
O alvo da regra, o destino do pacote. Pode ser ACCEPT, DROP
ou outro chain. Veja Especificando um alvo, Section 9.3.6 para detalhes
sobre a especificao de um alvo.
prot
Protocolo especificado pela regra. Pode ser udp, tcp, icmp ou all.
Veja Especificando um protocolo, Section 9.3.3 para detalhes.
opt
87
Opes extras passadas a regra. Normalmente "!" (veja
Especificando uma exceo, Section 9.3.5) ou "f" (veja Especificando
fragmentos, Section 9.3.4).
in
Interface de entrada (de onde os dados chegam). Veja
Especificando a interface de origem/destino, Section 9.3.2.
out
Interface de sada (para onde os dados vo). Veja Especificando
a interface de origem/destino, Section 9.3.2.
source
Endereo de origem. Veja Especificando um endereo de
origem/destino, Section 9.3.1.
destination
Endereo de destino. Veja Especificando um endereo de
origem/destino, Section 9.3.1.
outras opes
Estas opes normalmente aparecem quando so usadas a
opo -x:
dpt ou dpts - Especifica a porta ou faixa de portas de destino.
reject-with icmp-port-unreachable - Significa que foi usado o alvo
REJECT naquela regra (veja Alvo REJECT, Section 9.3.6.1).
6.2.3 Apagando uma regra - D
Para apagar um chain, existem duas alternativas:
1. Quando sabemos qual o nmero da regra no chain (listado com a
opo -L) podemos referenciar o nmero diretamente. Por exemplo,
para apagar a regra criada acima:
iptables -t filter -D INPUT 1
Esta opo no boa quando temos um firewall complexo com
um grande nmero de regras por chains, neste caso a segunda opo
a mais apropriada.
2. Usamos a mesma sintaxe para criar a regra no chain, mas trocamos -A
por -D:
iptables -t filter -D INPUT -d 127.0.0.1 -j DROP
Ento a regra correspondentes no chain INPUT ser
automaticamente apagada (confira listando o chain com a opo "-L").
Caso o chain possua vrias regras semelhantes, somente a primeira
ser apagada.
88
6.2.4 Inserindo uma regra - I
Precisamos que o trfego vindo de 192.168.1.15 no seja rejeitado pelo
nosso firewall. No podemos adicionar uma nova regra (-A) pois esta seria
includa no final do chain e o trfego seria rejeitado pela primeira regra (nunca
atingindo a segunda). A soluo inserir a nova regra antes da regra que
bloqueia todo o trfego ao endereo 127.0.0.1 na posio 1:
iptables -t filter -I INPUT 1 -s 192.168.1.15 -d 127.0.0.1 -j ACCEPT
Aps este comando, temos a regra inserida na primeira posio do chain
(repare no nmero 1 aps INPUT) e a antiga regra nmero 1 passa a ser a
nmero 2. Desta forma a regra acima ser consultada, se a mquina de
origem for 192.168.1.15 ento o trfego estar garantido, caso contrrio o
trfego com o destino 127.0.0.1 ser bloqueado na regra seguinte.
6.2.5 Substituindo uma regra - R
Aps criar nossa regra, percebemos que a nossa inteno era somente
bloquear os pings com o destino 127.0.0.1 (pacotes ICMP) e no havia
necessidade de bloquear todo o trfego da mquina. Existem duas
alternativas: apagar a regra e inserir uma nova no lugar ou modificar
diretamente a regra j criada sem afetar outras regras existentes e mantendo a
sua ordem no chain (isso muito importante). Use o seguinte comando:
iptables -R INPUT 2 -d 127.0.0.1 -p icmp -j DROP
O nmero 2 o nmero da regra que ser substituda no chain INPUT, e
deve ser especificado. O comando acima substituir a regra 2 do chain INPUT
(-R INPUT 2) bloqueando (-j DROP) qualquer pacote icmp (-p icmp) com o
destino 127.0.0.1 (-d 127.0.0.1).
6.2.6 Criando um novo chain - N
Em firewalls organizados com um grande nmero de regras,
interessante criar chains individuais para organizar regras de um mesmo tipo
ou que tenha por objetivo analisar um trfego de uma mesma categoria
(interface, endereo de origem, destino, protocolo, etc) pois podem consumir
muitas linhas e tornar o gerenciamento do firewall confuso (e
conseqentemente causar srios riscos de segurana). O tamanho mximo de
um nome de chain de 31 caracteres e podem conter tanto letras maisculas
quanto minsculas.
iptables [-t tabela] [-N novochain]
Para criar o chain internet (que pode ser usado para agrupar as regras
de internet) usamos o seguinte comando:
iptables -t filter -N internet
Para inserir regras no chain internet basta especifica-lo aps a opo -A:
iptables -t filter -A internet -s 200.200.200.200 -j DROP
E ento criamos um pulo (-j) do chain INPUT para o chain internet:
89
iptables -t filter -A INPUT -j internet
OBS: O chain criando pelo usurio pode ter seu nome tanto em
maisculas como minsculas.
Se uma mquina do endereo 200.200.200.200 tentar acessar sua
mquina, o iptables consultar as seguintes regras:
`INPUT' `internet'
---------------------------- -----------------------------
| Regra1: -s 192.168.1.15 | | Regra1: -s 200.200.200.200|
|--------------------------| |---------------------------|
| Regra2: -s 192.168.1.1 | | Regra2: -d 192.168.1.1 |
|--------------------------| -----------------------------
| Regra3: -j DROP |
----------------------------
O pacote tem o endereo de origem
200.200.200.200, ele passa pela
primeira e segunda regras do chain
INPUT, a terceira regra direciona
para o chain internet _______________________________________
v / v
/-------------------------|-\ / /-------------------------------------|-\
| Regra1: -s 192.168.1.15 | | / | Regra1: -s 200.200.200.200 -j DROP \_____\
|-------------------------|-| / |---------------------------------------| /
| Regra2: -s 192.168.1.1 | | / | Regra2: -d 200.200.200.202 -j DROP |
|-------------------------|-|/ \---------------------------------------/
| Regra3: -j internet /|
|---------------------------| No chain internet, a primeira regra confere
| Regra4: -j DROP | com o endereo de origem 200.200.200.200 e
\---------------------------/ o pacote bloqueado.
Se uma mquina com o endereo de origem 200.200.200.201 tentar
acessar a mquina, ento as regra consultadas sero as seguintes:
O pacote tem o endereo de origem
200.200.200.201, ele passa pela
primeira e segunda regras do chain
INPUT, a terceira regra direciona
para o chain internet ______________________________________
v / v
/-------------------------|-\ / /-------------------------------------|-\
| Regra1: -s 192.168.1.15 | | / | Regra1: -s 200.200.200.200 -j DROP | |
|-------------------------|-| / |-------------------------------------|-|
| Regra2: -s 192.168.1.1 | | / | Regra2: -s 200.200.200.202 -j DROP | |
|-------------------------|-|/ \-------------------------------------|-/
| Regra3: -j internet /| v
|---------------------------| /
| Regra4: -j DROP --+-------------------------------------------
\------------------------/-/ O pacote passa pelas regras 1 e 2 do chain
| internet, como ele no confere com nenhuma
v das 2 regras ele retorna ao chain INPUT e
Esta regra a nmero 4 analisado pela regra seguinte.
que diz para rejeitar o
pacote.
90
6.2.7 Listando os nomes de todos os chains atuais
Use o comando cat /proc/net/ip_tables_names para fazer isto.
interessante dar uma olhada nos arquivos dentro do diretrio /proc/net, pois
podem lhe ser interessantes.
6.2.8 Limpando as regras de um chain - F
Para limpar todas as regras de um chain, use a seguinte sintaxe:
iptables [-t tabela] [-F chain]
Onde:
tabela
Tabela que contm o chain que desejamos zerar.
chain
Chain que desejamos limpar. Caso um chain no seja
especificado, todos os chains da tabela sero limpos.
iptables -t filter -F INPUT
iptables -t filter -F
6.2.9 Apagando um chain criado pelo usurio - X
Para apagarmos um chain criado pelo usurio, usamos a seguinte
sintaxe:
iptables [-t tabela] [-X chain]
Onde:
tabela
Nome da tabela que contm o chain que desejamos excluir.
chain
Nome do chain que desejamos apagar. Caso no seja
especificado, todos os chains definidos pelo usurio na tabela
especificada sero excludos.
OBS: - Chains embutidos nas tabelas no podem ser apagados pelo
usurio. Veja os nomes destes chains em 6.1.14 O que so tabelas?.
iptables -t filter -X internet
iptables -X
6.2.10 Zerando contador de bytes dos chains - Z
Este comando zera o campo pkts e bytes de uma regra do iptables.
Estes campos podem ser visualizados com o comando iptables -L -v. A
seguinte sintaxe usada:
iptables [-t tabela] [-Z chain] [-L
Onde:
tabela
91
Nome da tabela que contm o chain que queremos zerar os
contadores de bytes e pacotes.
chain
Chain que deve ter os contadores zerados. Caso no seja
especificado, todos os chains da tabela tero os contadores zerados.
Note que as opes -Z e -L podem ser usadas juntas, assim o chain
ser listado e imediatamente zerado. Isto evita a passagem de pacotes
durante a listagem de um chain.
iptables -t filter -Z INPUT
6.2.11 Especificando o policiamento padro de um chain - P
O policiamento padro determina o que acontecer com um pacote
quando ele chegar ao final das regras contidas em um chain. O policiamento
padro do iptables "ACCEPT" mas isto pode ser alterado com o comando:
iptables [-t tabela] [-P chain] [ACCEPT/DROP]
Onde:
tabela
Tabela que contm o chain que desejamos modificar o
policiamento padro.
chain
Define o chain que ter o policiamento modificado. O chain deve
ser especificado.
ACCEPT/DROP
ACCEPT aceita os pacotes caso nenhuma regra do chain conferir
(usado em regras permissivas). DROP rejeita os pacotes caso nenhuma
regra do chain conferir (usado em regras restritivas).
O policiamento padro de um chain mostrado com o comando iptables
-L:
# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- anywhere localhost
No exemplo acima, o policiamento padro de INPUT ACCEPT (policy
ACCEPT), o que significa que qualquer pacote que no seja rejeitado pela
regra do chain, ser aceito. Para alterar o policiamento padro deste chain
usamos o comando:
iptables -t filter -P INPUT DROP
92
OBS: Note que policiamentos PERMISSIVOS (ACCEPT) normalmente
so usados em conjunto com regras restritivas no chain correspondentes (tudo
bloqueado e o que sobrar liberado) e policiamentos RESTRITIVOS (DROP)
so usados em conjunto com regras permissivas no chain correspondente
(tudo liberado e o que sobrar bloqueado pelo policiamento padro).
6.3 Outras opes do iptables
6.3.1 Especificando um endereo de origem/destino
As opes -s (ou --src/--source)e -d (ou --dst/--destination) servem para
especificar endereos de origem e destino respectivamente. permitido usar
um endereo IP completo (como 192.168.1.1), um hostname (debian), um
endereo fqdn (www.debian.org) ou um par rede/mscara (como
200.200.200.0/255.255.255.0 ou 200.200.200.0/24).
Caso um endereo/mscara no sejam especificados, assumido 0/0
como padro (todos as mquinas de todas as redes). A interpretao dos
endereos de origem/destino dependem do chain que est sendo especificado
(como INPUT e OUTPUT por exemplo).
OBS: Caso seja especificado um endereo fqdn e este resolver mais de
um endereo IP, sero criadas vrias regras, cada uma se aplicando a este
endereo IP especfico. recomendvel sempre que possvel a especificao
de endereos IP's nas regras, pois alm de serem muito rpidos (pois no
precisar de resoluo DNS) so mais seguros para evitar que nosso firewall
seja enganado por um ataque de IP spoofing.
# Bloqueia o trfego vindo da rede 200.200.200.*:
iptables -A INPUT -s 200.200.200.0/24 -j DROP
# Bloqueia conexes com o destino 10.1.2.3:
iptables -A OUTPUT -d 10.1.2.3 -j DROP
# Bloqueia o trfego da mquina www.dominio.teste.org a rede 210.21.1.3
# nossa mquina possui o endereo 210.21.1.3
iptables -A INPUT -s www.dominio.teste.org -d 210.21.1.3 -j DROP
6.3.2 Especificando a interface de origem/destino
As opes -i (ou --in-interface) e -o (ou --out-interface) especificam as
interfaces de origem/destino de pacotes. Nem todos as chains aceitam as
interfaces de origem/destino simultaneamente, a interface de entrada (-i) nunca
poder ser especificada em um chain OUTPUT e a interface de sada (-o)
nunca poder ser especificada em um chain INPUT. Abaixo uma rpida
referncia:
+---------------------+--------------------------------+
TABELA | CHAIN | INTERFACE |
| +----------------+---------------+
93
| | ENTRADA (-i) | SADA (-o) |
+---------+---------------------+----------------+---------------+
| | INPUT | SIM | NO |
| filter | OUTPUT | NO | SIM |
| | FORWARD | SIM | SIM |
+---------+---------------------+----------------+---------------+
| | PREROUTING | SIM | NO |
| nat | OUTPUT | NO | SIM |
| | POSTROUTING | NO | SIM |
+---------+---------------------+----------------+---------------+
| | PREROUTING | SIM | NO |
| mangle | | | |
| | OUTPUT | NO | SIM |
+---------+---------------------+----------------+---------------+
A definio de qual interface permitida em qual chain determinada
pela posio dos chains nas etapas de roteamento do pacote. O chain
OUTPUT da tabela filter somente poder conter a interface de sada (veja a
tabela acima). O chain FORWARD da tabela filter o nico que aceita a
especificao de ambas as interfaces, este um timo chain para controlar o
trfego que passa entre interfaces do firewall.
Por exemplo para bloquear o acesso do trfego de qualquer mquina
com o endereo 200.123.123.10 vinda da interface ppp0 (uma placa de fax-
modem):
iptables -A INPUT -s 200.123.123.10 -i ppp0 -j DROP
A mesma regra pode ser especificada como
iptables -A INPUT -s 200.123.123.10 -i ppp+ -j DROP
O sinal de "+" funciona como um coringa, assim a regra ter efeito em
qualquer interface de ppp0 a ppp9. As interfaces ativas no momento podem
ser listadas com o comando ifconfig, mas permitido especificar uma regra que
faz referncia a uma interface que ainda no existe, isto interessante para
conexes intermitentes como o PPP. Para bloquear qualquer trfego local para
a Internet:
iptables -A OUTPUT -o ppp+ -j DROP
Para bloquear a passagem de trfego da interface ppp0 para a interface
eth1 (de uma de nossas redes internas):
iptables -A FORWARD -i ppp0 -o eth1 -j DROP
94
6.3.3 Especificando um protocolo
A opo -p (ou --protocol) usada para especificar protocolos no
iptables. Podem ser especificados os protocolos tcp, udp e icmp. Por
exemplo, para rejeitar todos os pacotes UDP vindos de 200.200.200.200:
iptables -A INPUT -s 200.200.200.200 -p udp -j DROP
OBS1: Tanto faz especificar os nomes de protocolos em maisculas ou
minsculas.
6.3.3.1 Especificando portas de origem/destino
As portas de origem/destino devem ser especificadas aps o protocolo e
podem ser precedidas por uma das seguintes opes:
--source-port ou --sport - Especifica uma porta ou faixa de portas de
origem.
--destination-port ou --dport - Especifica uma porta ou faixa de portas de
destino.
Uma faixa de portas pode ser especificada atravs de
PortaOrigem:PortaDestino:
# Bloqueia qualquer pacote indo para 200.200.200.200 na faixa de
# portas 0 a 1023
iptables -A OUTPUT -d 200.200.200.200 -p tcp --dport :1023 -j DROP
Caso a PortaOrigem de uma faixa de portas no seja especificada, 0
assumida como padro, caso a Porta Destino no seja especificada, 65535
assumida como padro. Caso precise especificar diversas regras que
envolvam o tratamento de portas diferentes, recomendo da uma olhada em
6.6.6 Especificando mltiplas portas de origem/destino, antes de criar um
grande nmero de regras.
6.3.3.2 Especificando mensagens do protocolo ICMP
O protocolo ICMP no possui portas, mas possvel fazer um controle
maior sobre o trfego ICMP que entra/sai da rede atravs da especificao dos
tipos de mensagens ICMP. Os tipos de mensagens devem ser especificados
com a opo "--icmp-type CdigoICMP" logo aps a especificao do protocolo
icmp:
iptables -A INPUT -s 200.123.123.10 -p icmp --icmp-type time-exceeded -i ppp+ -j DROP
A regra acima rejeitar mensagens ICMP do tipo "time-exceeded"
(tempo de requisio excedido) que venham do endereo 200.123.123.10
atravs da interface ppp+.
Alguns tipos de mensagens ICMP so classificados por categoria (como
o prprio "time-exceeded"), caso a categoria "time-exceeded" seja
especificada, todas as mensagens daquela categoria (como "ttl-zero-during-
95
transit", "ttl-zero-during-reassembly") conferiro na regra especificada.Os tipos
de mensagens ICMP podem ser obtidos com o comando iptables -p icmp -h:
echo-reply (pong)
destination-unreachable
network-unreachable
host-unreachable
protocol-unreachable
port-unreachable
fragmentation-needed
source-route-failed
network-unknown
host-unknown
network-prohibited
host-prohibited
TOS-network-unreachable
TOS-host-unreachable
communication-prohibited
host-precedence-violation
precedence-cutoff
source-quench
redirect
network-redirect
host-redirect
TOS-network-redirect
TOS-host-redirect
echo-request (ping)
router-advertisement
router-solicitation
time-exceeded (ttl-exceeded)
ttl-zero-during-transit
ttl-zero-during-reassembly
parameter-problem
ip-header-bad
required-option-missing
timestamp-request
timestamp-reply
address-mask-request
address-mask-reply
OBS1: No bloqueie mensagens do tipo "host-unreachable" seno ter
srios problemas no controle de suas conexes.
6.3.3.3 Especificando pacotes syn
Pacotes syn so usados para iniciarem uma conexo, o uso da opo --
syn serve para especificar estes tipos de pacotes. Desta maneira possvel
bloquear somente os pacotes que iniciam uma conexo, sem afetar os pacotes
restantes. Para que uma conexo ocorra necessrio que a mquina obtenha
96
a resposta a pacotes syn enviados, caso ele seja bloqueado a resposta nunca
ser retornada e a conexo no ser estabelecida.
iptables -A INPUT -p tcp --syn --dport 23 -i ppp+ -j DROP
A regra acima bloqueia (-j DROP) qualquer tentativa de conexo (--syn)
vindas da interface ppp+ ao telnet (--dport 23) da mquina local, conexes j
efetuadas o so afetadas por esta regra. A opo --syn somente pode ser
especificada para o protocolo tcp.
ATENO: - A situao de passagem de pacotes durante deve ser
levada em conta durante a inicializao do firewall, bloqueando a passagem de
pacotes durante o processo de configurao, criando regras que bloqueiam a
passagem de pacotes (exceto para a interface loopback) at que a
configurao do firewall esteja completa, pode ser uma soluo eficiente.
Outra alternativa segura configurar as regras de firewall antes das
interfaces de rede se tornarem ativas (usando a opo "pre-up
comando_firewall" no arquivo de configurao /etc/network/interfaces em
sistemas Debian.
6.3.4 Especificando fragmentos
A opo "-f" (ou --fragment) permite especificar regras que confiram com
fragmentos. Fragmentos so simplesmente um pacote maior dividido em
pedaos para poder ser transmitido via rede TCP/IP para remontagem do
pacote pela mquina de destino.
Somente o primeiro fragmento possui detalhes de cabealho para ser
processado, os segundos e seguintes somente possuem alguns cabealhos
necessrios para dar continuidade ao processo de remontagem do pacote no
destino.
Uma regra como
iptables -A INPUT -s 200.200.200.1 -f -j DROP
derrubar os fragmentos de 200.200.200.1 que cheguem at ns.
OBS1: Note que se o cabealho do pacote no tiver detalhes suficientes
para checagem de regras no iptables, a regra simplesmente no ira conferir.
OBS2: No preciso especificar a opo "-f" para conexes NAT, pois
os pacotes so remontados antes de entrarem no cdigo de filtragem.
OBS3: A opo "-f" tambm pode ser usada para evitar o flood por
fragmentos (bomba de fragmentos) que, dependendo da intensidade, podem
at travar a mquina.
6.3.5 Especificando uma exceo
Muitos parmetros como o endereo de origem/destino, protocolo, porta,
mensagens ICMP, fragmentos, etc) podem ser precedidos pelo sinal "!" que
significa exceo. Por exemplo:
iptables -t filter -A INPUT ! -s 200.200.200.10 -j DROP
97
Diz para rejeitar todos os pacotes EXCETO os que vem do endereo
200.200.200.10.
iptables -A INPUT -p tcp ! --syn -s 200.200.200.10 ! -i eth0 -j DROP
Diz para bloquear todos os pacotes EXCETO os que iniciam conexes (!
--syn), EXCETO para pacotes vindos na interface eth0 (! -i eth0).
iptables -A INPUT -s 200.200.200.10 ! -p tcp -j DROP
Bloqueia todos os pacotes vindos de 200.200.200.10, EXCETO os do
protocolo tcp.
6.3.6 Especificando um alvo
O alvo (-j) o destino que um pacote ter quando conferir com as
condies de uma regra, um alvo pode dizer para bloquear a passagem do
pacote (-j DROP), aceitar a passagem do pacote (-j ACCEPT), registrar o
pacote no sistema de log (-j LOG), rejeitar o pacote (-j REJECT), redirecionar
um pacote -j REDIRECT, retornar ao chain anterior sem completar o
processamento no chain atual (-j RETURN), passar para processamento de
programas externos (-j QUEUE), fazer source nat (-j SNAT), destination nat (-j
DNAT), etc. Podem existir mais alvos, pois o iptables modularizvel, e
mdulos que acrescentam mais funes podem ser carregados em adio aos
j existentes no kernel.
Nos exemplos anteriores vimos o uso de diversos alvos como o DROP e
o ACCEPT. Apenas farei uma breve referncia sobre os alvos mais usados em
operaes mais comuns dos chains. Os alvos REDIRECT, SNAT e DNAT
sero explicados em uma seo seguinte:
ACCEPT: O pacote ACEITO e o processamento das regras
daquele chains concludo. Pode ser usado como alvo em todos os
chains de todas as tabelas do iptables e tambm pode ser
especificado no policiamento padro das regras do firewall (veja
6.2.11 Especificando o policiamento padro de um chain - P).
DROP: Rejeita o pacote e o processamento das regras daquele
chain concludo. Pode ser usado como alvo em todos os chains de
todas as tabelas do iptables e tambm pode ser especificado no
policiamento padro das regras do firewall (veja 6.2.11
Especificando o policiamento padro de um chain - P).
REJECT: Este um mdulo opcional que faz a mesma funo do
alvo DROP com a diferena de que uma mensagem ICMP do tipo
"icmp-port-unreachable" retornada para a mquina de origem.
Pode ser usado como alvo somente nos chains da tabela filter.
LOG: Este mdulo envia uma mensagem ao syslog caso a
regra confira, o processamento continua normalmente para a prxima
regra (o pacote no nem considerado ACEITO ou REJEITADO).
RETURN: Retorna o processamento do chain anterior sem
processar o resto do chain atual.
98
QUEUE: Passa o processamento para um programa a nvel de
usurio.
6.3.6.1 Alvo REJECT
Para ser usado, o mdulo ipt_REJECT deve ser compilado no kernel ou
como mdulo. Este alvo rejeita o pacote (como o DROP) e envia uma
mensagem ICMP do tipo "icmp-port-unreachable" para a mquina de origem.
um alvo interessante para bloqueio de portas TCP, pois em alguns
casos da a impresso que a mquina no dispe de um sistema de firewall (o
alvo DROP causa uma parada de muito tempo em alguns portscanners e
tentativas de conexo de servios, revelando imediatamente o uso de um
sistema de firewall pela mquina). O alvo REJECT vem dos tempos do
ipchains e somente pode ser usado na tabela filter. Quando um pacote
confere, ele rejeitado com a mensagem ICMP do tipo "port unreachable",
possvel especificar outro tipo de mensagem ICMP com a opo --reject-with
tipo_icmp.
OBS: REJECT pode ser usado somente como alvo na tabela filter e no
possvel especifica-lo como policiamento padro do chain filter (como
acontecia no ipchains. Uma forma alternativa inserir como ltima regra uma
que pegue todos os pacotes restantes daquele chain e tenha como alvo
REJECT (como iptables -A INPUT -j REJECT), desta forma ele nunca atingir o
policiamento padro do chain.
# Rejeita pacotes vindos de 200.200.200.1 pela interface ppp0:
iptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT
6.3.6.2 Especificando LOG como alvo
Este alvo usado para registrar a passagem de pacotes no syslog do
sistema. um alvo muito interessante para ser usado para regras que
bloqueiam determinados trfegos no sistema (para que o administrador tome
conhecimento sobre tais tentativas), para regras de fim de chain (quando voc
tem um grande conjunto de regras em um firewall restritivo e no sabe onde
suas regras esto sendo bloqueadas), para satisfazer sua curiosidade, etc.
# Para registrar o bloqueio de pacotes vindos de 200.200.200.1 pela interface ppp0
iptables -A INPUT -s 200.200.200.1 -i ppp+ -j LOG
# Para efetuar o bloqueio
iptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT
Note que a regra que registra o pacote (-j LOG) deve aparecer antes da
regra que REJEITA (-j REJECT), caso contrrio a regra de LOG nunca
funcionar. A nica coisa que muda nas regras de log o alvo da regra, isto
facilita a implementao de grandes conjuntos de regras de firewall.
A regra acima mostrar a seguinte sada no syslog do sistema:
Aug 25 10:08:01 debian kernel: IN=ppp0 OUT= MAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00
SRC=200.200.200.1 DST=200.210.10.10 LEN=61 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP
SPT=1031 DPT=53 LEN=41
99
Os campos possuem o seguinte significado:
Aug 25 10:08:01
Ms, dia e hora do registro do pacote.
debian
Nome do computador que registrou o pacote.
kernel:
Daemon que registrou a mensagem, no caso o iptables faz parte
do prprio kernel.
IN=ppp0
Especifica a interface de entrada (de onde o pacote veio).
OUT=
Especifica a interface de sada (para onde o pacote foi).
MAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00
Endereo mac da interface de rede (pode ser obtido com arp
interface).
SRC=200.200.200.1
Endereo de origem do pacote.
DST=200.210.10.10
Endereo de destino do pacote.
LEN=61
Tamanho do pacote.
TOS=0x00
Prioridade do cabealho TOS (prioridade normal neste caso).
Veja a seo Especificando o tipo de servio, Section 9.5.1 para mais
detalhes.
PROTO=UDP
Nome do protocolo. Pode ser TCP, UDP ou ICMP
SPT=1031
Porta de origem da requisio.
DPT=53
Porta de destino da requisio.
LEN=41
Tamanho do pacote.
O log acima mostra uma consulta DNS (porta destino 53) para nossa
mquina (INPUT) de 200.200.200.1 para 200.210.10.10.
O problema que em um grande nmero de regras ser difcil saber
qual regra conferiu (pois teramos que analisar o endereo/porta
100
origem/destino) e o destino do pacote (se ele foi ACEITO ou BLOQUEADO)
pois voc pode ter regras para ambas as situaes. Por este motivo existem
algumas opes teis que podemos usar com o alvo LOG:
--log-prefix "descrio"
Permite especificar uma descrio para a regra do firewall de at
29 caracteres. Caso tiver espaos, devem ser usadas "aspas".
--log-level nvel
Especifica o nvel da mensagem no syslog.
--log-tcp-options
Registra campos do cabealho TCP nos logs do sistema.
--log-ip-options
Registra campos do cabealho IP nos logs do sistema
--log-tcp-sequence
Registra os nmeros de seqencia TCP. Evite ao mximo o uso
desta opo, pois a seqencia de nmeros TCP pode ser a chave para
um seqestro de seo ou IP spoofing em seu sistema caso algum
usurio tenha acesso a estes logs.
Lembre-se que estas opes so referentes ao alvo LOG, e devem ser
usadas aps este, caso contrrio voc ter um pouco de trabalho para analisar
e consertar erros em suas regras do firewall.
# Complementando o exemplo anterior:
# Para registrar o bloqueio de pacotes vindos de 200.200.200.1 pela interface ppp0
iptables -A INPUT -s 200.200.200.1 -i ppp+ -j LOG --log-prefix "FIREWALL: Rejeitado "
# Para efetuar o bloqueio
iptables -A INPUT -s 200.200.200.1 -i ppp+ -j REJECT
Retornar a seguinte mensagem no syslog:
Aug 25 10:08:01 debian kernel: FIREWALL: Rejeitado IN=ppp0 OUT=
MAC=10:20:30:40:50:60:70:80:90:00:00:00:08:00 SRC=200.200.200.1 DST=200.210.10.10 LEN=61
TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=1031 DPT=53 LEN=41
Agora voc sabe o que aconteceu com o pacote (Rejeitado). A
padronizao de mensagens de firewall tambm importante para a criao de
scripts de anlise que podero fazer a anlise dos logs do seu firewall (para
criao de estatsticas que podem servir como base para a criao de novas
regras de firewall ou eliminao de outras).
OBS: Se voc sente falta da funo "-l" do ipchains que combina o alvo
e log na mesma regra voc pode criar um alvo como o seguinte:
iptables -N log-drop
iptables -A log-drop -j LOG
iptables -A log-drop -j DROP
101
E usar "log-drop" como alvo em suas regras. Mesmo assim esta soluo
"limitada" em relao a "-l" do ipchains porque o iptables no inclui detalhes
de qual chain bloqueou o pacote/qual pacote foi bloqueado, assim necessrio
a especificao da opo --log-prefix para as mensagens se tornarem mais
compreensveis. Infelizmente o iptables no aceita variveis, seno esta
limitao seria facilmente contornada.
6.3.6.3 Especificando RETURN como alvo
O alvo RETURN diz ao iptables interromper o processamento no chain
atual e retornar o processamento ao chain anterior. Ele til quando criamos
um chain que faz um determinado tratamento de pacotes, por exemplo
bloquear conexes vindas da internet para portas baixas, exceto para um
endereo IP especfico. Como segue:
iptables -t filter -A INPUT -i ppp0 -j internet
iptables -t filter -j ACCEPT
iptables -t filter -N internet
iptables -t filter -A internet -s www.debian.org -p tcp --dport 80 -j RETURN
iptables -t filter -A internet -p tcp --dport 21 -j DROP
iptables -t filter -A internet -p tcp --dport 23 -j DROP
iptables -t filter -A internet -p tcp --dport 25 -j DROP
iptables -t filter -A internet -p tcp --dport 80 -j DROP
Quando um pacote com o endereo www.debian.org tentando acessar a
porta www (80) de nossa mquina atravs da internet (via interface ppp0), o
chain nmero 1 confere, ento o processamento continua no chain nmero 4, o
chain nmero 4 confere ento o processamento volta para a regra nmero 2,
que diz para aceitar o pacote.
Agora se um pacote vem com o endereo www.dominio.com.br tentando
acessar a porta www *80) de nossa mquina atravs da internet (via interface
ppp0), o chain nmero 1 confere, ento o processamento continua no chain
nmero 4, que no confere. O mesmo acontece com os chains 5, 6 e 7. O
chain nmero 8 confere, ento o acesso bloqueado.
Como pode ter notado, o alvo RETURN pode facilitar bastante a
construo das regras do seu firewall, caso existam mquinas/redes que sejam
excees as suas regras. Se ela no existisse, seria necessrio especificar
diversas opes -s, -d, etc para poder garantir o acesso livre a determinadas
mquinas.
6.4 A tabela nat (Network Address Translation) - fazendo nat
A tabela nat serve para controlar a traduo dos endereos que
atravessam o cdigo de roteamento da mquina Linux. Existem 3 chains na
tabela nat: PREROUTING, OUTPUT e POSTROUTING (veja 6.1.14 O que
so tabelas? para maiores detalhes).
A traduo de endereos tem inmeras utilidades, uma delas o
Masquerading, onde mquinas de uma rede interna podem acessar a Internet
atravs de uma mquina Linux, redirecionamento de porta, proxy transparente,
102
etc. Esta seo abordar os tipos de NAT, exemplos de como criar
rapidamente uma conexo IP masquerading e entender como a traduo de
endereos funciona no iptables.
Se sua inteno ligar sua rede a Internet existem duas opes:
Voc possui uma conexo que lhe oferece um endereo IP dinmico (a
cada conexo dado um endereo IP - como uma conexo PPP) ento
o IP masquerading o que precisa (veja 6.4.2 Fazendo IP
masquerading (para os apressados) ou 6.4.3.1 Fazendo IP
Masquerading).
Voc tem uma conexo que lhe oferece um endereo IP permanente
(ADSL, por exemplo) ento o SNAT o que precisa (veja 6.4.3
Fazendo SNAT).
6.4.1 Criando um novo chain na tabela NAT
O procedimento para criao de um novo chain nesta tabela o mesmo
descrito em 6.2.6 Criando um novo chain - N ser necessrio somente
especificar a tabela nat (-t nat) para que o novo chain no seja criado na tabela
padro (-t filter).
iptables -t nat -N intra-inter
Que criar o chain chamado intra-inter na tabela nat. Para inserir regras
neste chain ser necessrio especificar a opo "-t nat".
6.4.2 Fazendo IP masquerading (para os apressados)
Voc precisar de um kernel com suporte ao iptables (veja 6.1.15
Habilitando o suporte ao iptables no kernel e ip_forwarding e ento digitar os
dois comandos abaixo para habilitar o masquerading para todas as mquinas
da rede 192.168.1.*:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
echo "1" >/proc/sys/net/ipv4/ip_forwarding
A configurao do servidor Linux est completa, agora os clientes da
rede precisaro ser configurados para usar o endereo IP do servidor Linux
como gateway. recomendvel instalar um servidor proxy e DNS na mquina
Linux para acelerar o desempenho das requisies/resoluo de nomes das
mquinas em rede. A utilizao de bits TOS tambm pode trazer um grande
aumento de velocidade para os diferentes servios da rede (veja 6.5.1
Especificando o tipo de servio).
6.4.3 Fazendo SNAT
SNAT (source nat - nat no endereo de origem) consiste em modificar o
endereo de origem das mquinas clientes antes dos pacotes serem enviados.
A mquina roteadora inteligente o bastante para lembrar dos pacotes
103
modificados e reescrever os endereos assim que obter a resposta da mquina
de destino, direcionando os pacotes ao destino correto. Toda operao de
SNAT feita no chain POSTROUTING.
permitido especificar endereos de origem/destino, protocolos, portas
de origem/destino, interface de entrada/sada (dependendo do chain), alvos,
etc. desnecessrio especificar fragmentos na tabela nat, pois eles sero
remontados antes de entrar no cdigo de roteamento.
O SNAT a soluo quando voc tem acesso a internet atravs de um
nico IP e deseja fazer que sua rede tenha acesso a Internet atravs da
mquina Linux. Nenhuma mquina da Internet poder ter acesso direto as
mquinas de sua rede interna via SNAT.
OBS: A observao acima no leva em conta o controle de acesso
externo configurado na mquina que estiver configurando o iptables, uma
configurao mau realizada pode expor sua mquina a acessos externos
indesejados e comprometer sua rede interna caso algum consiga acesso
direto ao servidor.
necessrio especificar SNAT como alvo (-j SNAT) quando desejar que
as mquinas de sua rede interna tenha acesso a Internet atravs do IP fixo da
mquina Linux (para conexes intermitentes como PPP, veja 6.4.3.1 Fazendo
IP Masquerading). O parmetro --to IP:portas deve ser usado aps o alvo
SNAT. Ele serve para especificar um endereo IP, faixa de endereos e
opcionalmente uma porta ou faixa de portas que ser substituda. Toda a
operao de SNAT realizada atravs do chain POSTROUTING:
# Modifica o endereo IP dos pacotes vindos da mquina 192.168.1.2 da rede interna
# que tem como destino a interface eth1 para 200.200.217.40 (que o nosso endereo
# IP da interface ligada a Internet).
iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth1 -j SNAT --to 200.200.217.40
Os pacotes indo para a Internet (nossa conexo feita via eth1, nossa
interface externa) vindo do endereo 192.168.1.2, so substitudos por
200.241.200.40 e enviados para fora. Quando a resposta a requisio
retornada, a mquina com iptables recebe os pacotes e faz a operao inversa,
modificando o endereo 200.241.200.40 novamente para 192.168.1.2 e
enviando a resposta a mquina de nossa rede interna. Aps definir suas
regras de NAT, execute o comando echo "1" >/proc/sys/net/ipv4/ip_forward
para habilitar o suporte a redirecionamento de pacotes no kernel.
Tambm possvel especificar faixas de endereos e portas que sero
substitudas:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to
200.200.217.40-200.200.217.50
Modifica o endereo IP de origem de todas as mquinas da rede
192.168.1.0/24 que tem o destino a interface eth0 para 200.241.200.40 a
200.241.200.50. O endereo IP selecionado escolhido de acordo com o
ltimo IP alocado. # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o
eth1 \ -j SNAT --to 1.2.3.0-1.2.3.4 --to 1.2.3.6-1.2.3.254
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to
200.200.217.40-200.200.217.50:1-1023
104
Idntico ao anterior, mas faz somente substituies na faixa de portas de
origem de 1 a 1023.
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to
200.200.217.40-200.200.217.50 --to 200.200.217.70-200.200.217.73
Faz o mapeamento para a faixa de portas 200.200.217.40 a
200.200.217.50 e de 200.200.217.70 a 200.200.217.73.
OBS1: Se por algum motivo no for possvel mapear uma conexo NAT,
ela ser derrubada. OBS2: Tenha certeza que as respostas podem chegar at
a mquina que fez o NAT. Se estiver fazendo SNAT em um endereo livre em
sua rede (como 200.200.217.73).
OBS2: Como notou acima, o SNAT usado quando temos uma
conexo externa com um ou mais IP's fixos. O Masquerading uma forma
especial de SNAT usada para funcionar em conexes que recebem endereos
IP aleatrios (PPP).
OBS3: No se esquea de habilitar o redirecionamento de pacotes aps
fazer suas regra de NAT com o comando: echo "1"
>/proc/sys/net/ipv4/ip_forward, caso contrrio o redirecionamento de
pacotes no funcionar.
6.4.3.1 Fazendo IP Masquerading
O IP Masquerading um tipo especial de SNAT usado para conectar a
sua rede interna a internet quando voc recebe um IP dinmico de seu
provedor (como em conexes ppp). Todas as operaes de IP Masquerading
so realizadas no chain POSTROUTING. Se voc tem um IP fixo, deve ler
6.4.3 Fazendo SNAT.
Para fazer IP Masquerading de uma mquina com o IP 192.168.1.2 para
ter acesso a Internet, use o comando:
iptables -t nat -A POSTROUTING -s 192.168.1.2/32 -o ppp0 -j MASQUERADE
A diferena que o alvo -j MASQUERADE. O comando acima faz IP
Masquerading de todo o trfego de 192.168.1.2 indo para a interface ppp0: O
endereo IP dos pacotes vindos de 192.168.1.2 so substitudos pelo IP
oferecido pelo seu provedor de acesso no momento da conexo, quando a
resposta retornada a operao inversa realizada para garantir que a
resposta chegue ao destino. Nenhuma mquina da internet poder ter acesso
direto a sua mquina conectava via Masquerading.
Para fazer o IP Masquerading de todas as mquinas da rede
192.168.1.*:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
Aps definir a regra para fazer Masquerading (SNAT), execute o
comando echo "1" >/proc/sys/net/ipv4/ip_forward para habilitar o
suporte a redirecionamento de pacotes no kernel.
105
6.4.4 Fazendo DNAT
DNAT (Destination nat - nat no endereo de destino) consiste em
modificar o endereo de destino das mquinas clientes. O destination nat
muito usado para fazer redirecionamento de pacotes, proxyes transparentes e
balanceamento de carga.
Toda operao de DNAT feita no chain PREROUTING. As demais
opes e observaes do SNAT so tambm vlidas para DNAT (com exceo
que somente permitido especificar a interface de origem no chain
PREROUTING).
# Modifica o endereo IP destino dos pacotes de 192.168.1.2 vindo da interface eth0
# para 200.200.217.40.
iptables -t nat -A PREROUTING -s 192.168.1.2 -i eth0 -j DNAT --to 200.200.217.40
Tambm possvel especificar faixas de endereos e portas que sero
substitudas no DNAT:
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 200.200.217.40-200.200.217.50
Modifica o endereo IP de destino do trfego vindos da interface
192.168.1.0/24 para um IP de 200.241.200.40 a 200.241.200.50. Este um
excelente mtodo para fazer o balanceamento de carga entre servidores. O
endereo IP selecionado escolhido de acordo com o ltimo IP alocado.
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 200.200.217.40-
200.200.217.50:1024:5000
Idntico ao anterior, mas faz somente substituies na faixa de portas de
destino de 1024 a 5000. A operao acima a mesma realizada pelo
ipmasqadm dos kernels da srie 2.2.
OBS: Se por algum motivo no for possvel mapear uma conexo NAT,
ela ser derrubada.
6.4.4.1 Redirecionamento de portas
O redirecionamento de portas permite a voc repassar conexes com
destino a uma porta para outra porta na mesma mquina. O alvo REDIRECT
usado para fazer esta operao, junto com o argumento --to-port especificando
a porta que ser redirecionada. Este o mtodo DNAT especfico para se para
fazer proxy transparente (para redirecionamento de endereos/portas, veja
6.4.4 Fazendo DNAT). Todas as operaes de redirecionamento de portas
realizada no chain PREROUTING.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 81
Redireciona as conexes indo para a porta 80 para a porta 81 (rodando
squid) no firewall.
ATENO: O squid possui suporte a proxy transparente, e poder
atender as requisies acima da regra acima.
106
6.4.5 Monitorando conexes feitas na tabela nat
Use o comando cat /proc/net/ip_conntrack para listar todas as
conexes atuais tratadas pelo mdulo nat.
6.5 A tabela mangle
A tabela mangle serve para especificar aes especiais para o
tratamento do trfego que atravessa os chains. Nesta tabela existem dois
chains: PREROUTING e OUTPUT (veja 6.1.14 O que so tabelas? para
maiores detalhes).
Opes com o Tipo de Servio (TOS) especificada nesta tabela para
classificar e aumentar consideravelmente a velocidade de trfego considerados
em tempo real.
6.5.1 Especificando o tipo de servio
O tipo de servio um campo existente no cabealho de pacotes do
protocolo ipv4 que tem a funo especificar qual a prioridade daquele pacote.
Uma das vantagens da utilizao do tipo de servio dar prioridade ao trfego
de pacotes interativos (como os do ICQ, IRC, servidores de chat), etc. Com o
TOS especificado, mesmo que esteja fazendo um download consumindo toda a
banda de sua interface de rede, o trfego com prioridade interativa ser
enviado antes, aumentando a eficincia dos servios em sua mquina.
Em testes realizados em minha conexo de 56K, o uso de regras TOS
aumentou bastante o desempenho em trfego interativo (em torno de 300%),
durante o uso total da banda da interface ppp em um grande download.
Usamos o alvo TOS (-j TOS) para especificar a modificao do tipo de
servio nos pacotes que atravessam as regras do firewall, acompanhada do
argumento --set-tos TOS que define a nova prioridade dos pacotes. Os valores
aceitos so os seguintes:
Espera Mnima
especificado atravs de Minimize-Delay, 16 ou 0x10
Mximo Processamento
especificado atravs de Maximize-Throughput, 8, ou 0x08.
Mxima Confiana
especificado atravs de Maximize-Reliability, 4 ou 0x04.
Custo mnimo
Especificado atravs de Minimize-Cost, 2 ou 0x02.
Prioridade Normal
Especificado atravs de Normal-Service, 0 ou 0x00.
Os pacotes vem por padro com o valor TOS ajustado como prioridade
normal (bits tos ajustados para 0x00). O tipo Mnima Espera o mais usado,
pois prioriza o trfego em servios interativos.
107
6.5.1.1 Especificando o TOS para trfego de sada
Este o mais usado, pois prioriza o trfego que sai da mquina (com
destino a Internet, por exemplo). Sua operao realizada atravs do chain
OUTPUT.
Para priorizar todo o trfego de IRC de nossa rede interna indo para a
interface ppp0:
iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 6666-6668 -j TOS --set-tos 16
O bit TOS ajustado para Espera mnima e ser enviado antes dos
pacotes com prioridade normal para fora. Para priorizar a transmisso de
dados ftp saindo da rede:
iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 20 -j TOS --set-tos 8
Para priorizar o trfego de ICQ da rede:
iptables -t mangle -A OUTPUT -o ppp0 -p udp --dport 4000 -j TOS --set-tos 16
Existem muitas outras otimizaes que podem ser feitas, s depende
dos requerimentos e anlise de cada servio da rede pelo administrador.
OBS: - Os pacotes que atravessam o alvo TOS somente tem os bits tipo
do servio modificados, eles no sero de qualquer forma rejeitados.
6.5.1.2 Especificando o TOS para o trfego de entrada
Este prioriza o trfego que entra da mquina. Sua operao realizada
no chain PREROUTING. No faz muito sentido o uso deste chain dentro de
uma rede pequena/mdia, pois o trfego que recebermos ser priorizado pelo
sada de outras mquinas da internet/outras redes antes de chegar a nossa.
Para priorizar o processamento do trfego interativo vindo de servidores
IRC para nossa rede:
iptables -t mangle -A PREROUTING -i eth0 -p tcp --sport 6666-6668 -j TOS --set-tos 0x10
Modifica o tipo de servio para mnima espera de todo o trfego enviado
por servidores de IRC vindo da interface eth0.
OBS: - Os pacotes que atravessam o alvo TOS somente tem os bits tipo
do servio modificados, eles no sero de qualquer forma rejeitados.
6.6 Outros mdulos do iptables
Os mdulos do iptables so especificados com a opo -m mdulo ou --
match mdulo e permitem expandir a funcionalidade do firewall atravs de
novas conferncias e recursos de filtragem adicionais, como limitar a
conferncia de regras do firewall (um mtodo til de limitar ping floods, syn
floods, etc).
108
6.6.1 Conferindo de acordo com o estado da conexo
Este mdulo permite especificar regras de acordo com o estado da
conexo do pacote, isto feito atravs da interpretao da sada do mdulo
ip_conntrack. O parmetro --state OPES deve acompanhar este mdulo.
As opes permitidas so as seguintes:
NEW - Confere com pacotes que criam novas conexes
ESTABLISHED - Confere com conexes j estabelecidas
RELATED - Confere com pacotes relacionados indiretamente a uma
conexo, como mensagens de erro icmp, etc.
INVALID - Confere com pacotes que no puderam ser identificados por
algum motivo. Como respostas de conexes desconhecidas.
Caso seja necessrio especificar mais de uma opes estas devem ser
separadas por vrgulas.
iptables -A INPUT -m state --state NEW -i ppp0 -j DROP
Bloqueia qualquer tentativa de nova conexo vindo da interface ppp0.
iptables -A INPUT -m state --state NEW,INVALID -i ppp0 -j LOG
Permite registrar novas conexes e pacotes invlidos vindos da interface
ppp0.
6.6.2 Limitando o nmero de vezes que a regra confere
A opo -m limit permite especificar o nmero de vezes que uma regra
conferir quando todas as outras condies forem satisfeitas. O nmero
padro de conferncia de 3 por hora, a no ser que seja modificado atravs
dos argumentos aceitos pelo limit:
--limit num/tempo - Permite especificar a taxa de conferncias do limit.
O parmetro num especifica um nmero e tempo pode ser
o s - Segundo
o m - Minuto
o h - Hora
o d - Dia
Assim uma regra como iptables -A INPUT -m limit --limit 5/m -j ACCEPT
permitir que a regra acima confira apenas 5 vezes por minuto (--limit
2/s). Este limite pode ser facilmente adaptado para uma regra de log
que confere constantemente no causar uma avalanche em seus logs.
O valor padro 3/h.
--limit-burst num - Especifica o nmero inicial mximo de pacotes que
iro conferir, este nmero aumentado por 1 a cada vez que o
parmetro --limit acima no for atingido. O valor padro 5.
109
6.6.3 Proteo contra ping da morte
A regra abaixo pode tomada como base para proteo contra ping flood:
iptables -t filter -A ping-chain -p icmp --icmp-type echo-request -m limit --
limit 1/s -j ACCEPT
iptables -t filter -A ping-chain -j DROP
A regra acima limita em 1 vez por segundo (--limit 1/s) a passagem de
pings (echo requests) para a mquina Linux.
iptables -t filter -A ping-chain -i ppp0 -p icmp --icmp-type echo-reply -m limit
--limit 1/s -j RETURN
iptables -t filter -A ping-chain -j DROP
Limita respostas a pings (echo reply) vindos da interface ppp0 (-i ppp0) a
1 por segundo.
ATENO: Os exemplos acima devem so somente exemplos para
criao de suas prprias regras com limitaes, caso um pacote no confira
com a regra ele ser bloqueado pela prxima regra. Se uma regra como for
colocada no chain INPUT sem modificaes obviamente colocar em risco a
segurana de seu sistema.
6.6.4 Proteo contra syn flood
A regra abaixo uma boa proteo para os ataques syn floods:
iptables -t filter -A syn-chain -p tcp --syn -m limit --limit 2/s -j ACCEPT
iptables -t filter -A syn-chain -j DROP
Esta regra limita o atendimento de requisies de conexes a 2 por
segundo.
ATENO: Os exemplos acima devem so somente exemplos para
criao de suas prprias regras com limitaes, caso um pacote no confira
com a regra ele ser bloqueado pela prxima regra. Se uma regra como for
colocada no chain INPUT sem modificaes obviamente colocar em risco a
segurana de seu sistema.
6.6.5 Proteo contra IP spoofing
A especificao de endereos de origem/destino junto com a interface
de rede pode ser usado como um detector de ataques spoofing. A lgica que
todos os endereos que NUNCA devem vir da interface X devem ser negados
imediatamente. As regras abaixo so colocadas no inicio do chain INPUT para
detectar tais ataques:
iptables -A INPUT -s 192.168.1.0/24 -i ! eth0 -j DROP
iptables -A INPUT ! -s 192.168.1.0/24 -i eth0 -j DROP
A primeira regra diz para bloquear todos os endereos da faixa de rede
192.168.1.* que NO vem da interface eth0, a segunda regra diz para bloquear
110
todos os endereos que no sejam 192.168.1.* vindos da interface eth0. O
smbolo "!" serve para especificar excees (veja 6.3.5 Especificando uma
exceo). O kernel do Linux automaticamente bloqueia a passagem de
pacotes que dizem ser de 127.0.0.1 e no est vindo da interface loopback.
O mtodo preferido para controlar o ip spoofing atravs do cdigo de
roteamento do kernel (a no ser que esteja usando algum tipo de roteamento
assimtrico):
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 >$i
done
Desta forma qualquer endereo dizendo ser 192.168.1.5 vindo de ppp0
ser imediatamente rejeitado. Uma checagem adicional contra IP spoofing
pode ser feita no arquivo /etc/host.conf.
6.6.6 Especificando mltiplas portas de origem/destino
O mdulo multiport permite que seja especificado mltiplas portas para
um alvo. Podem ser especificadas at 15 portas em um nico parmetro e
basta que uma porta confira para que a regra entre em ao, pois a
comparao feita usando condies "or". O parmetro multiport deve ser
acompanhado de um dos argumentos abaixo:
--source-port [porta1, porta2...] - Faz a regra conferir se a porta de
origem estiver presente entre as portas especificadas.
--destination-port [porta1, porta2...] - Faz a regra conferir se a porta de
destino estiver presente entre as portas especificadas.
--port [porta1, porta2...] - Faz a regra conferir caso a porta de origem ou
destino esteja presente no parmetro.
Este mdulo pode eliminar muitas regras de firewall que fazem o mesmo
tratamento de pacotes para diversas portas diferentes.
iptables -A INPUT -p tcp -i ppp0 -m multiport --destination-port
21,23,25,80,110,113,6667 -j DROP
Bloqueia todos os pacotes vindo de ppp0 para as portas 21 (ftp), 23
(telnet), 25 (smtp), 80 (www), 110 (pop3), 113 (ident), 6667 (irc).
6.6.7 Especificando o endereo MAC da interface
O mdulo mac serve para conferir com o endereo Ethernet dos pacotes
de origem. Somente faz sentido se usado nos chains de PREROUTING (da
tabela nat) ou INPUT (da tabela filter). Aceita como argumento a opo --mac-
source endereo. O smbolo "!" pode ser usado para especificar uma exceo.
iptables -t filter -A INPUT -m mac --mac-source 00:80:AD:B2:60:0B -j DROP
111
Confere com a mquina com endereo ethernet igual a
00:80:AD:B2:60:0B.
6.6.8 Conferindo com quem criou o pacote
Este mdulo confere com o usurio que iniciou a conexo. somente
vlido no chain OUTPUT da tabela filter. Os seguintes argumentos so vlidas
para este mdulo:
--uid-owner UID - Confere se o pacote foi criado por um processo com o
UID especificado. At o momento somente UID numricos so aceitos.
--gid-owner GID - Confere se o pacote foi criado por um usurio
pertencente ao grupo GID. At o momento somente GID numricos so
aceitos.
--pid-owner PID - Confere se o pacote foi criado por um processo com o
PID especificado.
--sid-owner ID - Confere se o pacote foi criado por um processo no
grupo de seo especificado.
OBS: - Lembre-se que pacotes que no possuem detalhes suficientes
de cabealho nunca conferiro!
iptables -A OUTPUT -m owner --gid-owner 100 -p udp -j DROP
Rejeita um conexes indo para portas UDP de pacotes criados pelo
usurios pertencentes ao grupo 100.
6.7 Caminho percorrido pelos pacotes nas tabelas e chains
MUITO importante entender a funo de cada filtro e a ordem de
acesso dos chains de acordo com o tipo de conexo e interface de
origem/destino. Esta seo explica a ordem que as regra so atravessadas,
isso lhe permitir planejar a distribuio das regras nos chains, e evitar erros de
localizao de regras que poderia deixar seu firewall com srios problemas de
segurana, ou um sistema de firewall totalmente confuso e sem lgica.
Nos exemplos abaixo assumirei a seguinte configurao:
A mquina do firewall com iptables possui o endereo IP 192.168.1.1 e
conecta a rede interna ligada via interface eth0 a internet via a interface
ppp0.
Rede interna com a faixa de endereos 192.168.1.0 conectada ao
firewall via interface eth0
Interface ppp0 fazendo conexo com a Internet com o endereo IP
200.217.29.67.
A conexo das mquinas da rede interna (eth0) com a rede externa
(ppp0) feita via Masquerading.
112
Tambm utilizarei a sintaxe CHAIN-tabela para fazer referncia aos
chains e tabelas dos blocos ASCII: INPUT-filter - chain INPUT da tabela filter.
ATENO: A ordem de processamento das regras do iptables,
diferente do ipchains devido a incluso do novo sistema de nat e da tabela
mangle.
6.7.1 ping de 192.168.1.1 para 192.168.1.1
Endereo de Origem: 192.168.1.1
Endereo de Destino: 192.168.1.1
Interface de Entrada: lo
Interface de Sada: lo
Protocolo: ICMP
Descrio: Ping para o prprio firewall
SADA DE PACOTES (envio do ping para 192.168.1.1):
+-------------+ +----------+ +-------------+ +----------------+
|OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat |
+-------------+ +----------+ +-------------+ +----------------+
ENTRADA DOS PACOTES (Retorno da resposta ping acima):
+-----------------+ +------------+
|PREROUTING-mangle| => |INPUT-filter|
+-----------------+ +------------+
Quando damos o ping (echo request) os pacotes seguem o caminho em
SADA DE PACOTES percorrendo os chains na ordem especificada e retornam
via ENTRADA DOS PACOTES (echo reply).
OBS1: Para conexes com destinos na prpria mquina usando um
endereo IP das interfaces locais, a interface ser ajustada sempre para lo
(loopback).
OBS2: Em qualquer operao de entrada/sada de pacotes, os dois
chains da tabela mangle so sempre os primeiros a serem acessados. Isto
necessrio para definir a prioridade e controlar outros aspectos especiais dos
pacotes que atravessam os filtros.
OBS3: O chain OUTPUT da tabela filter consultado sempre quando
existem conexes se originando em endereos de interfaces locais.
6.7.2 Conexo FTP de 192.168.1.1 para 192.168.1.1
Endereo de Origem: 192.168.1.1
Endereo de Destino: 192.168.1.1
Interface de Origem: lo
Interface de Destino: lo
113
Porta Origem: 1404
Porta Destino: 21
Protocolo: TCP
Descrio: Conexo ftp (at o prompt de login, sem transferncia de
arquivos).
SADA DOS PACOTES (envio da requisio para 192.168.1.1):
+-------------+ +----------+ +-------------+ +---------------+
|OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat|
+-------------+ +----------+ +-------------+ +---------------+
ENTRADA DE PACOTES (respostas da requisio vindas de 192.168.1.1):
+-----------------+ +------------+
|PREROUTING-mangle| => |INPUT-filter|
+-----------------+ +------------+
A requisio ftp passa atravs dos chains especificados em SADA DOS
PACOTES e retorna por ENTRADA DE PACOTES. Aps a conexo ser
estabelecida, o caminho de SADA DE PACOTES ser:
+-------------+ +-------------+
|OUTPUT-mangle| => |OUTPUT-filter|
+-------------+ +-------------+
pois os dados de entrada que vem da interface externa, so passados
diretamente a mquina do firewall, no necessitando de tratamento SNAT (os
chains OUTPUT-nat e POSTROUTING-nat so processado somente uma vez
a procura de regras que conferem, principalmente para fazer SNAT).
OBS1: Para conexes com destinos na prpria mquina usando um
endereo IP das interfaces locais, a interface ser ajustada sempre para lo
(loopback).
OBS2: Em qualquer operao de entrada/sada de pacotes, os dois
chains da tabela mangle so sempre os primeiros a serem acessados. Isto
necessrio para definir a prioridade e controlar outros aspectos especiais dos
pacotes que atravessam os filtros.
6.7.3 Conexo FTP de 192.168.1.1 para 192.168.1.4
Endereo de Origem: 192.168.1.1
Endereo de Destino: 192.168.1.4
Interface de Origem: eth0
Interface de Destino: eth0
Porta Origem: 1405
Porta Destino: 21
Protocolo: TCP
114
Descrio: Conexo ftp (at o prompt de login, sem transferncia de
arquivos).
SADA DOS PACOTES (envio da requisio para 192.168.1.4):
+-------------+ +----------+ +-------------+ +---------------+
|OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat|
+-------------+ +----------+ +-------------+ +---------------+
ENTRADA DE PACOTES (respostas da requisio de 192.168.1.4):
+-----------------+ +------------+
|PREROUTING-mangle| => |INPUT-filter|
+-----------------+ +------------+
A requisio ftp passa atravs dos chains especificados em SADA DOS
PACOTES com o destino 192.168.1.4 porta 21 e retorna por ENTRADA DE
PACOTES para 192.168.1.1 porta 1405. Aps a conexo ser estabelecida, o
caminho de SADA DE PACOTES ser:
+-------------+ +-------------+
|OUTPUT-mangle| => |OUTPUT-filter|
+-------------+ +-------------+
pois os dados no precisam de tratamento SNAT (os chains OUTPUT-
nat e POSTROUTING-nat so processado somente uma vez a procura de
regras que conferem, principalmente para fazer SNAT).
OBS: Em qualquer operao de entrada/sada de pacotes, os dois
chains da tabela mangle so sempre os primeiros a serem acessados. Isto
necessrio para definir a prioridade e controlar outros aspectos especiais dos
pacotes que atravessam os filtros.
6.7.4 Conexo FTP de 200.217.29.67 para ftp.debian.org.br
Endereo de Origem: 200.217.29.67
Endereo de Destino: 200.198.129.162
Interface de Origem: ppp0
Interface de Destino: ppp0
Porta Origem: 1407
Porta Destino: 21
Protocolo: TCP
Descrio: Conexo ftp (at o prompt de login, sem transferncia de
arquivos).
115
SADA DOS PACOTES (envio da requisio para 200.198.129.162):
+-------------+ +----------+ +-------------+ +---------------+
|OUTPUT-mangle| => |OUTPUT-nat| => |OUTPUT-filter| => |POSTROUTING-nat|
+-------------+ +----------+ +-------------+ +---------------+
ENTRADA DE PACOTES (respostas da requisio vindas de 200.198.129.162):
+-----------------+ +--------------+ +------------+
|PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter|
+-----------------+ +--------------+ +------------+
A requisio ftp passa atravs dos chains especificados em SADA DOS
PACOTES com o destino 200.198.129.162 porta 21 (aps a resoluo DNS de
www.debian.org.br) e retorna por ENTRADA DE PACOTES para 200.217.29.67
porta 1407. Aps a conexo ser estabelecida, o caminho de sada de pacotes
:
+-------------+ +-------------+
|OUTPUT-mangle| => |OUTPUT-filter|
+-------------+ +-------------+
pois os dados no precisam de tratamento SNAT (os chains OUTPUT-
nat e POSTROUTING-nat so processado somente uma vez a procura de
regras que conferem, principalmente para fazer SNAT).
E aps a conexo estabelecida, o caminho de entrada de pacotes passa
a ser:
+-----------------+ +-------------+
|PREROUTING-mangle| => |INPUT-filter |
+-----------------+ +-------------+
pois os dados no precisam de tratamento DNAT (o chain
PREROUTING-nat processado somente uma vez a procura de regras que
conferem, principalmente para fazer DNAT).
OBS: Para qualquer operao de entrada/sada de pacotes, os dois
chains da tabela mangle so sempre os primeiros a serem acessados. Isto
necessrio para definir a prioridade e controlar outros aspectos especiais dos
pacotes que atravessam os filtros.
6.7.5 Ping de 192.168.1.4 para 192.168.1.1
Endereo de Origem: 192.168.1.4
Endereo de Destino: 192.168.1.1
Interface de Entrada: eth0
Interface de Sada: eth0
Protocolo: ICMP
Descrio: Ping de 192.168.1.4 para a mquina do firewall.
116
ENTRADA DE PACOTES (recebimento da requisio, vinda de 192.168.1.4):
+-----------------+ +--------------+ +------------+
|PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter|
+-----------------+ +--------------+ +------------+
SADA DE PACOTES (envio da resposta a 192.168.1.4)
+-------------+ +-------------+
|OUTPUT-mangle| => |OUTPUT-filter|
+-------------+ +-------------+
Quando damos o ping (echo request) os pacotes seguem o caminho em
ENTRADA DE PACOTES percorrendo os chains na ordem especificada e
retornam via SADA DOS PACOTES (echo reply).
OBS1: Para qualquer operao de entrada/sada de pacotes, os dois
chains da tabela mangle so sempre os primeiros a serem acessados. Isto
necessrio para definir a prioridade e controlar outros aspectos especiais dos
pacotes que atravessam os filtros.
6.7.6 Conexo FTP de 192.168.1.4 para 192.168.1.1
Endereo de Origem: 192.168.1.4
Endereo de Destino: 192.168.1.1
Interface de Origem: eth0
Interface de Destino: eth0
Porta Origem: 1030
Porta Destino: 21
Protocolo: TCP
Descrio: Conexo ftp (at o prompt de login, sem transferncia de
dados).
ENTRADA DOS PACOTES (envio da requisio vindas de 192.168.1.4):
+-----------------+ +--------------+ +------------+
|PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter|
+-----------------+ +--------------+ +------------+
SADA DE PACOTES (respostas da requisio acima para 192.168.1.4):
+-------------+ +-------------+
|OUTPUT-mangle| => |OUTPUT-filter|
+-------------+ +-------------+
A requisio ftp passa atravs dos chains especificados em ENTRADA
DOS PACOTES com o destino 192.168.1.1 porta 21 e retorna por SADA DE
PACOTES para 192.168.1.4 porta 1030. Aps a conexo ser estabelecida, o
caminho de entrada de pacotes :
+-----------------+ +------------+
|PREROUTING-mangle| => |INPUT-filter|
+-----------------+ +------------+
117
pois os dados no precisam de tratamento DNAT (o chain
PREROUTING-nat processado somente uma vez a procura de regras que
conferem, principalmente para fazer DNAT).
OBS: O roteamento sempre realizado aps o processamento do chain
PREROUTING da tabela nat.
6.7.7 Conexo FTP de 192.168.1.4 para ftp.debian.org.br
Endereo de Origem: 192.168.1.4
Endereo de Destino: 200.198.129.162
Interface de Origem: eth0
Interface de Destino: ppp0
Porta Origem: 1032
Porta Destino: 21
Protocolo: TCP
Descrio: Conexo ftp (at o prompt de login, sem transferncia de
dados).
SADA DOS PACOTES (requisio vindas de 192.168.1.4):
+-----------------+ +--------------+ +--------------+ +---------------+
|PREROUTING-mangle| => |PREROUTING-nat| => |FORWARD-filter| => |POSTROUTING-nat|
+-----------------+ +--------------+ +--------------+ +---------------+
ENTRADA DE PACOTES (respostas da requisio acima, enviadas para 192.168.1.4):
+-----------------+ +--------------+
|PREROUTING-mangle| => |FORWARD-filter|
+-----------------+ +--------------+
A requisio ftp passa atravs dos chains especificados em SADA DOS
PACOTES com o destino 200.198.129.162 porta 21 (aps a resoluo DNS de
ftp.debian.org.br) e retorna por ENTRADA DE PACOTES para 192.168.1.4
porta 1032.
Note que o Masquerading regrava os pacotes; para a mquina
200.198.129.162 a conexo est sendo feita para 200.217.29.67. As respostas
de conexes vindas de 200.198.129.162 e indo para 200.217.29.67 so
regravadas no firewall com o destino 192.168.1.4 e enviadas para a mquina
correspondente. Aps a conexo ser estabelecida, o caminho de sada de
pacotes :
+-----------------+ +--------------+
|PREROUTING-mangle| => |FORWARD-filter|
+-----------------+ +--------------+
Isto acontece porque aps feita a conexo Masquerading (via
PREROUTING-nat), o firewall j sabe como reescrever os pacotes para realizar
a operao de Masquerading, reescrevendo todos os pacotes que chegam de
www.debian.org.br para 192.168.1.4.
OBS: As conexes Masquerading feitas atravs da rede interna, so
enviadas para 200.198.129.162 tem o endereo de origem ajustado para
118
200.217.29.67 que o IP de nossa interface ppp0. Quando as respostas
atravessam o firewall, os pacotes so checados pra saber se so uma resposta
a uma conexo masquerading e far a regravao dos pacotes substituindo o
endereo de destino para 192.168.1.4. Caso uma operao de Masquerading
falhe, os pacotes sero Bloqueados.
6.7.8 Conexo FTP de 200.198.129.162 para 200.217.29.167
Endereo de Origem: 200.198.129.162
Endereo de Destino: 200.217.29.67
Interface de Origem: ppp0
Interface de Destino: ppp0
Porta Origem: 3716
Porta Destino: 21
Protocolo: TCP
Descrio: Conexo ao servio ftp do firewall
ENTRADA DOS PACOTES (envio da requisio vindas de 200.198.129.162):
+-----------------+ +--------------+ +------------+
|PREROUTING-mangle| => |PREROUTING-nat| => |INPUT-filter|
+-----------------+ +--------------+ +------------+
SADA DE PACOTES (respostas da requisio de 200.198.129.162):
+-------------+ +-------------+
|OUTPUT-mangle| => |OUTPUT-filter|
+-------------+ +-------------+
A requisio ftp passa atravs dos chains especificados em ENTRADA
DOS PACOTES com o destino 200.217.29.67 (nossa interface ppp0 local)
porta 21 e retorna por SADA DE PACOTES para 200.198.129.162 porta 3716
(tambm via ppp0). Aps a conexo ser estabelecida, o caminho de entrada
de pacotes :
+-----------------+ +------------+
|PREROUTING-mangle| => |INPUT-filter|
+-----------------+ +------------+
Isto acontece porque aps feita a anlise do chain PREROUTING (para
necessidade de DNAT), a mquina j saber tomar a deciso apropriada para
gerenciar aquela conexo.
6.7.9 Grfico geral da passagem dos pacotes
Este grfico foi retirado do documento netfilter-hacking-HOWTO.txt e
mostra a estrutura geral de passagem dos pacotes nas tabelas/chains. Os
exemplos de passagem de pacotes acima podero ser facilmente comparados
com as etapas abaixo para compreender a estrutura do iptables.
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 configuraes do iptables
Em construo. Exemplo de como bloquear todas as conexes para a
mquina do firewall permitindo somente conexes da mquina Linux para fora.
6.8.1 Bloqueando conexes de fora para sua mquina
As regras a seguir servem para bloquear tentativas de conexes da
interface de Internet (ppp0) a sua rede sem bloquear o trfego de conexes j
iniciadas. O trfego de outras interfaces no afetado com as regras a seguir:
iptables -A INPUT -i ppp0 -m state --state ! ESTABLISHED,RELATED -j DROP
Todas as conexes vindas de ppp0 de estado diferente de
ESTABLISHED e RELATED (NEW e INVALID) sero derrubadas. Veja 6.6.1
Conferindo de acordo com o estado da conexo para detalhes.
iptables -A INPUT -i ppp0 --syn -j DROP
Este acima mais simples e possui o mesmo efeito: Pacotes SYN so
usados para iniciar conexes, derrubando pacotes deste tipo significa bloquear
novas conexes. Pacotes de conexes j estabelecidas ainda so permitidos.
Estas regras acima servem para quem no deseja NENHUM acesso
indevido a sua mquina. Existem outras formas de bloquear conexes de
modo mais seletivo usando chains especficos, endereos de origem/destino,
portas, etc., este tipo de configurao muito usada caso precise fornecer
algum tipo de servio que seja acessvel externamente e protegendo outros.
6.8.2 Monitorando tentativa de conexo de trojans em sua mquina
As regras abaixo alertam sobre a tentativa de conexo dos trojans "For
Win" mais conhecidos. Coloquei isto aqui por curiosidade de algumas pessoas,
pois mquinas Linux so imunes a este tipo de coisa:
#!/bin/sh
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 DROP
done
iptables -t filter -A INPUT -i ppp0 -j trojans-in
A primeira linha do iptables cria o chain trojans-in dentro da tabela filter
que usaremos para armazenar nossas regras de firewall. A segunda (dentro
do lao for) faz uma regra de LOG para registrar as tentativas de acesso de
trojans em nosso sistema, a terceira rejeita o acesso. A quarta regra do
iptables cria de todo o trfego vindo da interface ppp0 pra o chain trojans-in
(queremos que s o trfego vindo da internet seja analisado pelo chain trojans-
in).
Muitas das portas especificadas na varivel TROJAN_PORTS so
antigas conhecidas de quem j brincou ou sofreram com o Back Orifice, Win
Crack, NetBus (quem nunca passou pela fase de ter uma lista com mais de 100
netmasks e conseguir encontrar centenas de mquinas por dia infectadas pelo
BO? :-).
No cdigo acima a nica coisa que precisa fazer para adicionar mais
portas inseri-las na varivel TROJAN_PORTS e executar o programa. O lao
do for executar as 2 regras para cada porta processada (economizando linhas
e linhas de regras, me livrando de uma LER e poupando muitos bytes neste
guia ;-).
Dependendo do nmero de portas alvo, este cdigo pode ser muito
simplificado usando o recurso multiport do iptables (veja 6.6.6 Especificando
mltiplas portas de origem/destino para detalhes).
6.8.3 Conectando sua rede interna a Internet
O seguinte exemplo permite ligar sua rede interna com a faixa de IP's
192.168.1.* a internet (usando uma conexo discada do tipo ppp):
iptables -A nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -j MASQUERADE
echo "1" >/proc/sys/net/ipv4/ip_forward
6.8.4 Um exemplo de firewall simples
Esta seo possui um exemplo mais elaborado de firewall que servir
para mquinas conectadas via ppp com uma rede interna conectada via
Masquerading. Este exemplo no to complexo e cobre as expectativas mais
comuns de pessoas que gostam de explorar os potenciais de rede no Linux ou
satisfazer sua curiosidade. Ele poder ser facilmente adaptado para atender
outro tipo de necessidade. A configurao assumida a seguinte:
121
1. Mquina do firewall com 2 interfaces de rede, uma eth0 com o IP
192.168.1.1 que serve de ligao a sua rede Interna, a outra ppp0 que
a interface Internet.
2. Qualquer acesso externo a mquinas da rede interna bloqueado.
3. Os usurios da rede local tem acesso livre ao servidor Linux.
4. Qualquer acesso externo a mquina do firewall bloqueado, exceto
conexes para o servio Apache (httpd). Outras tentativas de conexes
devem ser explicitamente registradas nos logs do sistema para
conhecimento do administrador.
5. Todos os usurios possuem acesso livre a Internet via Masquerading,
exceto que o acesso para o servio www deve ser obrigatoriamente feito
via squid, e o servidor smtp a ser usado dever ser o do firewall Linux.
6. Prioridades sero estabelecidas para os servios de telnet, IRC,talk e
DNS.
#!/bin/sh
# Modelo de configurao de firewall
# Autor: Gleydson M. Silva
# Data: 05/09/2001
# Descrio: Produzido para ser distribudo livremente, acompanha o guia
# Foca GNU/Linux. http://focalinux.cipsga.org.br
#
# assumido um sistema usando kmod para carga automtica dos mdulos usados por
# esta configurao do firewall:
# ipt_filter
# ipt_nat
# ipt_conntrack
# ipt_mangle
# ipt_TOS
# ipt_MASQUERADE
# ipt_LOG
# Se voc tem um kernel modularizado que no utiliza o kmod, ser necessrio
# carregar estes mdulos via modprobe, insmod ou iptables --modprobe=modulo
##### Definio de Polticas #####
# Tabela filter
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD DROP
# Tabela nat
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING DROP
122
# Tabela mangle
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
##### Proteo contra IP Spoofing #####
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 >$i
done
##### Ativamos o redirecionamento de pacotes (requerido para NAT) #####
echo "1" >/proc/sys/net/ipv4/ip_forward
# O iptables define automaticamente o nmero mximo de conexes simultneas
# com base na memria do sistema. Para 32MB = 2048, 64MB = 4096, 128MB = 8192,
# sendo que so usados 350 bytes de memria residente para controlar
# cada conexo.
# Quando este limite excedido a seguinte mensagem mostrada:
# "ip_conntrack: maximum limit of XXX entries exceed"
#
# Como temos uma rede simples, vamos abaixar este limite. Por outro lado isto
# criar uma certa limitao de trfego para evitar a sobrecarga do servidor.
echo "2048" > /proc/sys/net/ipv4/ip_conntrack_max
###############################################################
# Tabela filter #
###############################################################
##### Chain INPUT #####
# Criamos um chain que ser usado para tratar o trfego vindo da Internet e
iptables -N ppp-input
# Aceita todo o trfego vindo do loopback e indo pro loopback
iptables -A INPUT -i lo -j ACCEPT
# Todo trfego vindo da rede interna tambm aceito
iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
# Conexes vindas da interface ppp0 so tratadas pelo chain ppp-input
iptables -A INPUT -i ppp+ -j ppp-input
# Qualquer outra conexo desconhecida imediatamente registrada e derrubada
iptables -A INPUT -j LOG --log-prefix "FIREWALL: INPUT "
iptables -A INPUT -j DROP
##### Chain FORWARD ####
# Permite redirecionamento de conexes entre as interfaces locais
# especificadas abaixo. Qualquer trfego vindo/indo para outras
123
# interfaces ser bloqueado neste passo
iptables -A FORWARD -d 192.168.1.0/24 -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -o ppp+ -j ACCEPT
iptables -A FORWARD -j LOG --log-prefix "FIREWALL: FORWARD "
iptables -A FORWARD -j DROP
##### Chain ppp-input ####
# Aceitamos todas as mensagens icmp vindas de ppp0 com certa limitao
iptables -A ppp-input -p icmp -m limit --limit 2/s -j ACCEPT
# Primeiro aceitamos o trfego vindo da Internet para o servio www (porta 80)
iptables -A ppp-input -p tcp --dport 80 -j ACCEPT
# A tentativa de acesso externo a estes servios sero registrados no syslog
# do sistema e sero bloqueados pela ltima regra abaixo.
iptables -A ppp-input -p tcp --dport 21 -j LOG --log-prefix "FIREWALL: ftp "
iptables -A ppp-input -p tcp --dport 25 -j LOG --log-prefix "FIREWALL: smtp "
iptables -A ppp-input -p udp --dport 53 -j LOG --log-prefix "FIREWALL: dns "
iptables -A ppp-input -p tcp --dport 110 -j LOG --log-prefix "FIREWALL: pop3 "
iptables -A ppp-input -p tcp --dport 113 -j LOG --log-prefix "FIREWALL: identd "
iptables -A ppp-input -p udp --dport 111 -j LOG --log-prefix "FIREWALL: rpc"
iptables -A ppp-input -p tcp --dport 111 -j LOG --log-prefix "FIREWALL: rpc"
iptables -A ppp-input -p tcp --dport 137:139 -j LOG --log-prefix "FIREWALL: samba
"
iptables -A ppp-input -p udp --dport 137:139 -j LOG --log-prefix "FIREWALL: samba
"
# Bloqueia qualquer tentativa de nova conexo de fora para esta mquina
iptables -A ppp-input -m state --state ! ESTABLISHED,RELATED -j LOG --log-prefix
"FIREWALL: ppp-in "
iptables -A ppp-input -m state --state ! ESTABLISHED,RELATED -j DROP
# Qualquer outro tipo de trfego aceito
iptables -A ppp-input -j ACCEPT
#######################################################
# Tabela nat #
#######################################################
##### Chain POSTROUTING #####
# Permite qualquer conexo vinda com destino a lo e rede local para eth0
iptables -t nat -A POSTROUTING -o lo -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j ACCEPT
# No queremos que usurios tenham acesso direto a www e smtp da rede externa, o
# squid e smtpd do firewall devem ser obrigatoriamente usados. Tambm
registramos
# as tentativas para monitorarmos qual mquina est tentando conectar-se
diretamente.
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 -j
DROP
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -p tcp --dport 80 -j
DROP
# feito masquerading dos outros servios da rede interna indo para a interface
# ppp0
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -j MASQUERADE
# Qualquer outra origem de trfego desconhecida indo para eth0 (conexes vindas
# de ppp+) so bloqueadas aqui
iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.0/24 -j LOG --log-prefix
"FIREWALL: SNAT unknown"
iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.0/24 -j DROP
# Quando iniciamos uma conexo ppp, obtermos um endereo classe A (10.x.x.x) e
aps
# estabelecida a conexo real, este endereo modificado. O trfego indo para
# a interface ppp no dever ser bloqueado. Os bloqueios sero feitos no
# chain INPUT da tabela filter
iptables -t nat -A POSTROUTING -o ppp+ -j ACCEPT
# Registra e bloqueia qualquer outro tipo de trfego desconhecido
iptables -t nat -A POSTROUTING -j LOG --log-prefix "FIREWALL: SNAT "
iptables -t nat -A POSTROUTING -j DROP
###############################################
# Tabela mangle #
###############################################
##### Chain OUTPUT #####
# Define mnimo de espera para os servios ftp, telnet, irc e DNS, isto
# dar uma melhor sensao de conexo em tempo real e diminuir o tempo
# de espera para conexes que requerem resoluo de nomes.
iptables -t mangle -A OUTPUT -o ppp+ -p tcp --dport 21 -j TOS --set-tos 0x10
iptables -t mangle -A OUTPUT -o ppp+ -p tcp --dport 23 -j TOS --set-tos 0x10
iptables -t mangle -A OUTPUT -o ppp+ -p tcp --dport 6665:6668 -j TOS --set-tos
0x10
iptables -t mangle -A OUTPUT -o ppp+ -p udp --dport 53 -j TOS --set-tos 0x10
125
7 O PROXY SQUID
Adaptado de O Squidnomicon, por <arfreitas@ig.com.br>,Verso 1.21
http://www.alceujun.hpg.ig.com.br/linux/squidnomicon.html
O Squid amplamente utilizado como servidor cache e servidor de proxy
transparente http.
O Squid como PROXY HTTP aberto uma porta em TCP, onde o cliente
ir configurar o seu navegador para requisitar pacotes da mquina servidora. O
Proxy http est configurado com algumas protees de segurana de acesso
pginas. Algumas pginas sero bloqueadas por conterem em seu link
palavras que esto catalogadas no arquivo blacklist. As pginas que o
administrador quiser liberar o acesso basta colocar a palavra no arquivo
whitelist.
O Squid como CACHE utilizado para armazenar contedos de pginas
para que os clientes da rede interna no precisem buscar os dados na internet,
mas primeiro vo buscar as pginas no servidor cache. O Squid faz uma
verificao do contedo do cache com o contedo da pgina real e executa
uma atualizao automtica.
7.1 Introduo
Resolvi escrever esse manual principalmente porque ningum o havia
feito antes. Dentre todos os inmeros documentos sobre Linux e software livre
em http://www.linuxdoc.org no h nenhum que fale sobre Squid, mesmo em
ingls, quem diria em portugus.
Voc poder encontrar maiores informaes sobre o Squid no seu
website (http://www.squid-cache.org) e ainda poder recorrer a FAQS e a lista
de discusso para dvidas.
Squidnomicon significa manual do Squid. Eu achei divertido fazer uma
relao com o Necronomicon (Livro dos Mortos). Mas no espere encontrar
nenhuma outra semelhana alm desta. Talvez eu use um desenho do grande
Cthullu como logo do manual, mas tenho receio dos direitos autorais.
Este manual livre e est sobre a licena Free GNU Documentation.
Qualquer ajuda (dicas, comentrios) e/ou modificaes so muito bem-vindas.
7.2 Requisitos bsicos
Voc ter que ter:
um UNIX: o tutorial tem seu foque em Linux, mas com algum esforo
voc pode utilizar o mesmo tutorial em FreeBSD, SUN Solaris, etc.;
o pacote/fonte do Squid;
126
um computador: para testes qualquer um serve, mas para entrar em
operao voc ter que ter pelo menos um Pentium 2 com 128MB e
um HD de 4 Gb. Isto aproximado, e pode variar muito conforme o
nmero de usurios X requisies. Basta saber que os requisitos de
hardware de um servidor proxy so muito maiores em relao
quantidade de memria e velocidade do disco do que para um
firewall, principalmente devido ao cache; velocidade de
processamento tambm influir na performance do proxy.
conhecimento bsico sobre protocolo TCP-IP e Internet;
conhecer o UNIX no qual voc quer instalar o Squid!
7.3 O feijo com arroz
O Squid um webproxy que suporta proxying para DNS e FTP, alem do
tradicional HTTP. Ele permite tambm a criao de rvores de cache via
HTCP, load balance para servidores HTTP (vide http_accelerator) e diversos
modos de autentificao de usurio, o que tambm inclui a possibilidade de
criao de listas de sites e/ou palavras proibidas para acesso.
Neste capitulo irei mostrar apenas o bsico para voc ter o Squid
rodando. Com essas configuraes, voc ir ter o Squid como proxy e
efetuando cache das pginas visitadas.
7.3.1 Instalao
A instalao poder depender de qual distribuio voc estiver usando.
Normalmente voc encontrara o Squid nos CDROM de distribuio em
formatos RPM, DEB ou TGZ. Voc tambm pode usar o fonte do Squid e
compilar os binrios usando somente as funes que voc precisar.
Para distribuies que trabalham com pacotes a instalao muito
simples:
rpm -ivh squid-versao.rpm (para distribuies baseadas em RPM)
ou
apt-get install squid (para o Debian)
O Conectiva (verso 6 e posteriores) tambm podem usar as mesmas
facilidades do apt-get.
Para instalar a partir do fonte, faca o download do Squid em
http://www.squid-cache.org na seo de downloads. Depois execute:
tar -xzvf squid-versao.tar.gz/
cd /diretorio_criado
./configure
make
make install
Ler o arquivo README que acompanha o arquivo fonte tambm e
essencial para obter os detalhes.
A verso termina em nmeros pares (para verses estveis) e impares (para
127
verses de teste) ento escolha a ultima de acordo com seus interesses.
Procure sempre pelos arquivos com o RELEASE incluso.
7.3.2 Configurao
Depois de instalado voc provavelmente (espero!) ter os binrios e
arquivos de configurao, muitos deles comentados e precedidos de
comentrios sobre as funes que exercem. O arquivo de configurao do
Squid fica em /etc/squid.conf. Inicialmente voc deve configurar apenas 3
parmetros para que tenha o Squid ao menos respondendo a requisies e
criando cache das pginas requisitadas:
http_port 3128
cache_mem 8Mb
http_access allow all
Com exceo do ultimo parmetro (que deve ser inserido) esses
parmetros esto apenas comentados (com um sinal "#"). Depois disso voc
pode iniciar o Squid usando o script de inicializao que fica dentro do diretrio
/etc/rc.d/init.d (ou /etc/init.d para o Debian):
# cd /etc/rc.d/init.d
#./squid start
Na maioria das distribuies o cache criado quando o Squid iniciado
pela primeira vez (pelo menos para sistemas Linux). Voc ainda pode forar a
criao de cache digitando:
# squid -z
Ainda possvel fazer com que o Squid interprete novos parmetros no
arquivo de configurao sem interromper os processos atuais:
# squid -k reconfigure
O Squid j est rodando e aceitando conexes. Agora vamos explicar
melhor os parmetros utilizados:
http_port 3128: Este parmetro indica em que porta o Squid
estar aceitando requisies de pginas Web. Vrias portas
diferentes podem ser listadas simultaneamente, desde que estejam
livres.
cache_mem 8Mb: Este parmetro especifica a quantidade ideal de
memria a ser usada pelo Squid, mas isso no significa um limite. O
Squid ir ultrapassar o valor estipulado se assim for necessrio.
http_access allow all: Inicialmente o Squid estar recusando
o servio de proxy para qualquer requisio que no tenha sido feita
a partir do localhost (127.0.0.1). Essa diretriz, pelo contrrio, esta
permitindo que qualquer um requisite qualquer pgina.
O Squid permite uma grande flexibilidade sobre o que permitido ou no
que o cliente requisite (conforme voc poder acompanhar mais frente).
Agora voc pode fazer um teste com um navegador qualquer, como o
Netscape ou o Internet Explorer. Para isso, configure (na parte referente a
servidor proxy) o endereo IP do proxy Squid sem esquecer de indicar a porta
3128.
128
As solicitaes agora sero atendidas pelo Squid, que ir fazer cache
das requisies, como pginas html e figuras, o que aumenta
consideravelmente a rapidez de navegao e diminui a ocupao de banda do
link.
7.4 Controlando os usurios
Usurios costumam dar dores de cabea horrveis a um administrador
de redes, mas tambm sem eles como voc justificaria seu salrio?
O Squid fornece meios de evitar que voc tenha (muitos) problemas com
seus usurios acessando a Internet para fins no muito ortodoxos. Voc pode
bloquear acesso a algum tipo de recurso ou a um site inteiro.
No arquivo /etc/squid.conf existem definies de listas de controle
(ACL em ingls) e como feito o acesso a recursos definidos
nestas listas.
Antes de mostrar como a lista feita, procure ter antes em mente a
seguinte idia:
1 - As regras so interpretadas na ordem que aparecem: quando voc
define regras, a primeira interpretada. Se a regra descrita
no combinar com a requisio a mesma ser comparada com a prxima
regra, e assim por diante.
2 - Sempre, SEMPRE coloque como ltima regra uma ACL que bloqueie
tudo. Se voc no fizer isso, seu controle vai para o espao.
3 - No crie regras demais e desnecessrias! Procure evitar
redundncias e regras de controle que exijam resoluo de nomes. Isso pode
atrasar muita a resposta do Squid para requisies.
Existem diversos critrios/tipos de listas. Acompanhe abaixo:
SCR A lista baseada no endereo IP do cliente (requisitante).
DST A lista baseada no endereo IP do servidor (que ser
requisitado).
SCRDOMAIN O domnio da mquina cliente. O domnio sero
obtido por resoluo reversa de IP o que pode causar atrasos para a
requisio ter resposta.
DSTDOMAIN Mtodo de controle sobre um domnio especifico.
SRCDOM_REGEX Expresso regular que e avaliada para tentar
marcar um domnio requisitante; esse parmetro pode causar atrasos
por usar resoluo reversa de endereo IP.
DSTDOM_REGEX O mesmo que srcdom_regex s que para o
domnio de destino.
TIME Dia da semana e hora da semana.
URL_REGEX Essa ACL ir procura em na URL uma expressa
regular que voc especificar.
129
URLPATH_REGEX Semelhante ao url_regex s que ira procurar
a expresso na url toda exceto no nome do protocolo e domnio. Isso
ira tentar combinar com o nome do diretrio ao longo da url.
PORT O acesso pode ser controlado pela porta do endereo do
servidor requisitado.
PROTO Especifica o protocolo de transferncia.
METHOD Especifica o tipo de mtodo da requisio.
BROWSER expresso regular cujo padro tentara combinar com
o contido no caberio HTTP de requisio do cliente.
IDENT Seqncia de caracteres que combinam com o nome do
usurio. Requer um servidor Ident rodando na mquina do cliente.
IDENT_REGEX O mesmo que ident, mas utilizando-se de uma
expresso regular.
PROXY_AUTH Permite a autentificao de usurios atravs do
envio de usurio/senha. Requer um programa externo para realizar
essa autentificao.
PROXY_AUTH_REGEX O mesmo que proxy_auth, s que ira
tentar combinar o nome do usurio fornecido pelo programa de
autentificao atravs de uma expresso regular.
SNMP_COMMUNITY Seqncia de caracteres que tentaro
combinar com o nome da comunidade SNMP.
REQ_MIME_TYPE Expresso regular que tentara combinar com
o tipo de contedo contido no caberio de requisio.
ARP Tenta combinar o MAC ADDRESS.
Como voc pode ter notado, existe uma quantidade bem grande de
facilidades com as quais voc pode construir uma ACL, ate mais do que voc
provavelmente ira precisar (eu me pergunto se algum usa ident).
Depois de definir as listas de controle voc precisa definir para cada
linha da acl o que ela poder ter como permitido (ou negado). A lista de regras
j um pouco menor.
HTTP_ACCESS
sintaxe: http_access allow | deny [!] acl descrio: permite ou nega acesso ao
servio http baseado na lista de acesso (acl) definida. O uso de "!" indica
inverso (diferente de).
Eu coloquei uma observao um pouco acima de que voc sempre tem
de ter como ltima regra uma regra de bloqueie tudo, a fim de evitar brechas no
conjunto de acl's que voc tenha criado. Voc pode usar o http_access para
bloquear acesso a http dessa forma:
acl all src 0.0.0.0/0 http_access deny all
Isso diz ao Squid "qualquer requisitante". No final das contas, se um
requisitante no tiver seu pedido encaixado em alguma acl anterior, ele ter
seu pedido negado.
130
ICP_ACCESS
sintaxe: icp_access allow | deny [!] acl descrio: use para forar
seus vizinhos a usarem voc como um <sibling> ao invs de pai. Isso
e utilizado quando se trabalha com arvores de cache.
MISS_ACCESS
sintaxe: miss_access allow | deny [!] acl descrio: limita os domnios
que podem fazer requisies ao cache do servidor utilizando os
recursos acl.
PROXY_AUTH_REALM
sintaxe: proxy_auth_realm seqncia de caracteres descrio: na
realidade esse comando no exerce nenhum tipo de controle, apenas
informa ao cliente (atravs da seqncia de caracteres) aonde ele
esta realizando o logon. No essencial, mas o padro aparece
como "Squid proxy"? e voc pode mudar isso sem problemas.
IDENT_LOOKUP_ACCESS
sintaxe: ident_lookup_access allow | deny acl descrio: se a acl
combinar com a requisio do cliente, este cliente ser autentificado
por uma procura ident.
7.5 Exemplos de configurao
Agora que todos os itens foram discutidos vou mostrar alguns exemplos
prticos de configurao para controle de acesso.
7.5.1 Permitir http_access para apenas uma mquina com MAC
address igual a 00:08:c7:9f:34:41 :
acl all src 0.0.0.0
acl pl800_arp arp 00:08:c7:9f:34:41
http_access allow pl800_arp
http_access deny all
7.5.2 Para restringir acesso nas horas de trabalho (9 horas - 17
horas, de segunda sexta) da faixa de IP 192.168.2.0 mscara
255.255.255.0 :
acl all src 0.0.0.0
acl ip_acl src 192.168.2.0/24
acl time_acl time M T W H F 9:00-17:00
http_access allow ip_acl time_acl
http_access deny all
7.5.3 Posso usar uma lista de controle com multiplos horrios para
diferentes usurios?
Se voc pensou em algo assim:
131
acl carlos src 192.168.10.1
acl davi src 192.168.10.2
acl cleusa src 192.168.10.3
acl manh time 06:00-11:00
acl tarde time 14:00-14:30
acl noite time 16:25-23:59
http_access allow carlos manh almoo
http_access allow davi manh almoo
http_access allow cleusa noite
voc errou !
O Squid interpreta regras desta forma:
http_access REGRA definio1 E definio 2 E definio3
OU
http_access AO definio1 E definio 2 E definio3
Ateno porque esses E e OU so operadores lgicos! Portanto a acl:
http_access allow carlos manh almoo
nunca ir funcionar porque manh E almoo sero sempre falsos, uma
vez que nunca sero verdadeiros na mesma hora. Como falso (de acordo
com a lgica booleana):
0/1 E 1 = 0 (falso)
http_access allow carlos E manh OU
http_access allow carlos almoo
7.5.4 Quero criar uma acl para bloquear sites com a palavra sexo
pois meus funcionrios ficam baixando filmes em Divx de
pornografia:
acl porno url_regex sexo
http_access deny porno
Isso tem algumas conseqncias. Primeiro que essa regra deve
encabear a lista para voc no correr o risco de liberar o acesso antes de
bloque-lo. Segundo que um site http://www.sexoesaude.com.br estaria
encaixado na lista de bloqueio, apesar do contedo no ser o mesmo.
7.5.5 A idia acima e tima, mas eu tenho uma lista de palavras
para fazer o mesmo. Terei que repetir esse comando vrias
vezes?
De forma alguma:
acl porno url_regex "/etc/squid/porno.txt"
http_access deny porno
No arquivo texto, inclua uma palavra sobre a outra, como uma coluna.
7.5.6 Ainda existem sites que escapam a esse controle. Gostaria de
bloque-los diretamente.
acl porno2amissao dstdomain playboy.com
132
ou
acl porno2amissao dstdomain "/etc/squid/pornosites.txt"
http_access deny porno2
7.5.7 Meu diretor reclama que agora no consegue mais ler as
entrevistas no site da Playboy.
Chefe chefe. Antes que ele deixe de pagar seu salrio, inclua no
arquivo /etc/squid.conf :
acl entrevistas urlpath_regex entrevistas
http_access allow entrevistas
Essa regra deve vir ANTES do bloqueio do site da Playboy.
7.5.8 E uma lista de diretrios?
Insira esse contedo dentro de um arquivo texto:
batepapo$
batepapo/$
sexo/$
fofoca/$
chat/$
O smbolo de $ indica que a o Squid deve combinar as ocorrncias
quando estas palavras aparecerem no final da URL. O smbolo usado em
expresses regulares e pode ajudar a marcar casos bem especficos.
A essa altura voc j sabe como proceder em seguida.
7.6 Recursos na Internet
O site do Squid possui muito mais documentao que esse pequeno
tutorial e ponto obrigatrio de passagem se voc entende ingls:
http://www.squid-cache.org
Outro site interessante e o ORSO
(http://web.onda.com.br/orso/index.html) pois contem contedo interessante
sobre o Squid, incluindo o SARG, script para gerar pginas html dos arquivos
de log do Squid. No site voc tambm encontrara listas de palavras para
bloqueios de sites pornogrficos.
Voc poder encontrar verses novas desse manual no website
http://www.imortais.cjb.net/linux/
133
APNDICE A. LICENA DE PUBLICAO LIVRE
Esta uma traduo no-oficial da Open Publication License verso 1.0,
de 8 de junho de 1999, e no substituto legal para a Licena original,
disponvel em http://www.opencontent.org/openpub. Entretanto, esta traduo
poder auxiliar pessoas que falem Portugus a entender melhor a licena.
permitido a qualquer pessoa copiar e distribuir cpias desse documento de
licena, desde que sem a implementao de qualquer mudana.
OPEN PUBLIC LICENSE
Draft v1.0, 8 june 1999
I. Requisitos comuns s verses modificadas e no
modificadas
Os trabalhos protegidos pela Licena de Livre Publicao (Open
Publication License) podem ser reproduzidos e distribudos no todo ou em
parte, em qualquer meio fsico ou eletrnico, desde que os termos desta
licena estejam includos, e que esta licena ou uma incorporao dela por
referncia (com quaisquer das opes escolhidas pelo autor ou editor) estejam
presentes na reproduo.
A forma apropriada para uma incorporao por referncia deste livro :
Copyright 2002 Alfamdia Ltda. Este material somente poder ser
distribudo se sujeito aos termos e condies firmados na Licena
de Livre Publicao (Open Publication License), verso 1.0 ou
superior (a verso mais atual encontra-se disponvel em
http://www.opencontent.org/openpub/).
Esta referncia, devidamente preenchida com os dados da publicao,
deve ser seguida imediatamente com quaisquer opes escolhidas pelos
autores ou editor do documento (consultar a seo Termos opcionais).
permitida a redistribuio comercial de material licenciado pela
Licena de Livre Publicao (Open Publication License).
Qualquer publicao no formato livro padro (papel) requer
obrigatoriamente a citao dos autores e editor originais. Os nomes dos
autores e do editor devem aparecer em todas as superfcies externas do livro.
Em todas as faces externas do livro, o nome do editor original deve estar
impresso em tamanho to grande quanto o ttulo do trabalho, e citado como
proprietrio em relao quele ttulo.
II. Copyright
O copyright de todo trabalho protegido pela Licena de Livre Publicao
(Open Publication License) pertence aos autores ou proprietrios.
134
III. Escopo da licena
Os termos de licena a seguir aplicam-se a todos os trabalhos
protegidos pela Licena de Livre Publicao (Open Publication License), a no
ser que explicitamente indicado no trabalho.
A mera adio de trabalhos protegidos pela Licena de Livre Publicao
(Open Publication License) ou partes de trabalhos protegidos pela Licena de
Livre Publicao (Open Publication License) em uma mesma mdia que
contenha outros trabalhos ou programas no protegidos por essa licena no
decorre em aplicao da Licena de Livre Publicao (Open Publication
License) para esses outros trabalhos. O trabalho resultante deve explicitamente
conter uma nota especificando a incluso do material protegido pela Licena de
Livre Publicao (Open Publication License) e o aviso de copyright apropriado.
APLICABILIDADE. Se alguma parte desta licena no puder ser
aplicada em alguma jurisdio, as partes restantes deste documento continuam
sendo aplicadas.
AUSNCIA DE GARANTIA. Os trabalhos protegidos pela Licena de
Livre Publicao (Open Publication License) so fornecidos "como esto", sem
garantias de qualquer tipo, explcita ou implcita, incluindo, mas no limitado a,
as garantias implcitas de comercializao e convenincia para um propsito
particular, ou garantia de no-infrao.
IV. Requisitos para trabalhos modificados
Todas as verses modificadas de documentos cobertos por esta licena,
incluindo tradues, antologias, compilaes e documentao parcial, deve
seguir os requisitos abaixo:
A verso modificada deve ser indicada como tal.
As pessoas que fizerem as modificaes e as datas de modificao
devem ser identificadas.
O reconhecimento dos autores e editor originais (se aplicvel) deve ser
mantido de acordo com as prticas acadmicas usuais de citao.
O local da verso no-modificada do documento deve ser indicado.
Os nomes originais dos autores no devem ser utilizados para indicar ou
garantir seu endosso ao documento resultante sem a autorizao expressa dos
autores.
V. Prticas recomendadas
Em adio aos requisitos desta licena, solicitado e extremamente
recomendado aos redistribuidores que:
Se os trabalhos protegidos pela Licena de Livre Publicao (Open
Publication License) estiverem sendo distribudos em impressos ou CD-ROM,
os autores sejam informados por email, ao menos trinta dias antes, para que os
autores tenham tempo de providenciar documentao atualizada. Esta
notificao deve descrever as modificaoes introduzidas no documento, se
existirem.
135
Todas as modificaes substanciais (incluindo excluses) devem ser
marcadas claramente no documento, ou ento descritas em um anexo ao
documento.
Finalmente, mesmo no sendo obrigatrio sob esta licena,
considerado de bom tom oferecer uma cpia sem nus de todo o material
modificado (impresso e CD-ROM) para os autores originais.
VI. Termos opcionais
Os autores e editores de documentos protegidos pela Licena de Livre
Publicao (Open Publication License) podem escolher certas opes de
licena simplesmente incluindo alguns pargrafos aps a cpia da licena ou
sua referncia. Estas opes so consideradas parte da licena e devem ser
includas com ela (ou com a referncia a ela) nos trabalhos derivados.
As opes que se aplicam a este trabalho so:
A: vedada a distribuio de verses com modificaes substanciais
deste documento sem a expressa permisso dos proprietrios do direito
autoral.
B: vedada a distribuio deste trabalho ou qualquer derivado seu em
qualquer formato de livro padro (papel) sem a prvia autorizao dos
proprietrios do direito autoral.
Polticas de Publicao Livre
(O texto a seguir no considerado parte da licena.)
Os trabalhos protegidos pela Licena de Livre Publicao (Open
Publication License) esto disponveis e podem ser acessados na home page
da Open Publication http://works.opencontent.org/ .
Os autores de trabalhos protegidos pela Licena de Livre Publicao
(Open Publication License) podem incluir suas prprias licenas nesses
trabalhos, desde que os termos dessa licena no sejam mais restritrivos que
os da Licena de Livre Publicao (Open Publication License).
Em caso de dvidas sobre a Licena de Livre Publicao (Open
Publication License), contactar David Wiley <dw2@opencontent.org> ou a lista de
autores de publicaes <opal@opencontent.org> via email.
Para se inscrever na lista de autores de publicaes livres (Open
Publication Author's List), mande um email para <opal-request@opencontent.org>
com a palavra subscribe no corpo da mensagem.
Para enviar mensagens para a lista de autores de publicaes livres
(Open Publication Author's List), mande um email para
opal@opencontent.org ou simplesmente responda a uma mensagem
postada.
Para se desinscrever na lista de autores de publicaes livres (Open
Publication Author's List), mande um email para opal-
request@opencontent.org com a palavra unsubscribe no corpo da
mensagem.