Escolar Documentos
Profissional Documentos
Cultura Documentos
Linux Firewall
Linux Firewall
Paul Russell
Gleydson Mazioli da Silva
Alexandre Folle de Menezes
Linux IPCHAINS-HOWTO
Copyright © 1999 - Paul Russell, <ipchains@rustcorp.com
<mailto:ipchains@rustcorp.com>>
Tradução para o português por Gleydson Mazioli da Silva, <gleydson@linuxbr.com.br
<mailto:gleydson@linuxbr.com.br>>
Esta apostila é uma coletânea de textos com licença GNU ou livres encontrados
na Internet, conforme referências acima.
Este material foi totalmente montado com fins didáticos, sem objetivo
comercial. Foram acrescentados exemplos e exercícios desenvolvidos pela
Alfamídia Ltda.
CONTEÚDO
CONTEÚDO ................................................................................................................... 5
1 TCP/IP ..................................................................................................................... 11
1.1 A CAMADA FÍSICA ................................................................................................. 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 FRAGMENTAÇÃO 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
EXERCÍCIOS.................................................................................................................... 20
2 ENDEREÇAMENTO............................................................................................. 21
2.1 ENDEREÇAMENTO DE ENLACE (MAC) ................................................................ 21
2.2 ENDEREÇAMENTO DE REDE (IP) .......................................................................... 21
2.2.1 MULTIHOMING .................................................................................................... 22
2.2.2 CLASSES DE REDE IP ........................................................................................... 22
2.2.3 ENDEREÇOS RESERVADOS PARA USO EM REDES PRIVADAS ................................. 23
2.2.4 ENDEREÇOS ESPECIAIS ........................................................................................ 23
2.2.4.1 O endereço de Rede......................................................................................... 23
2.2.4.2 O endereço de Broadcast................................................................................. 23
2.2.4.3 O endereço de Loopback ................................................................................. 24
2.2.5 DIVISÃO EM SUB-REDES ....................................................................................... 24
2.2.5.1 Máscaras de Sub-Rede .................................................................................... 24
2.2.6 SUPER-REDES E CDIR......................................................................................... 25
2.2.7 REFERÊNCIA RÁPIDA DE MÁSCARA DE REDES ...................................................... 25
2.3 ENDEREÇAMENTO DE SESSÃO (PORTAS) ............................................................. 26
EXERCÍCIOS.................................................................................................................... 27
5 FIREWALL IPCHAINS........................................................................................ 38
5.1 INTRODUÇÃO ......................................................................................................... 38
5.1.1 O QUE? ................................................................................................................ 38
5.1.2 POR QUE? ............................................................................................................ 38
5.1.3 COMO? ................................................................................................................ 38
5.1.4 ONDE? ................................................................................................................. 39
5.2 BÁSICO SOBRE A FILTRAGEM DE PACOTES........................................................... 39
5.2.1 O QUE É? ............................................................................................................. 39
5.2.2 POR QUE? ............................................................................................................ 39
5.2.3 COMO? ................................................................................................................ 40
5.2.3.1 Um kernel com filtragem de pacotes............................................................... 40
5.2.3.2 O ipchains .................................................................................................. 41
5.2.3.3 Fazendo regras permanentes............................................................................ 41
5.3 ROTEAMENTO, MASQUERADING, PORTFORWARDING, IPAUTOFW...................... 42
5.3.1 GUIA RÁPIDO DE TRÊS LINHAS PARA MASQUERADING ......................................... 42
5.3.2 CONFIGURAÇÕES DE FIREWALL SIMPLES ............................................................. 42
5.3.2.1 Rede Pública .................................................................................................... 43
5.3.2.2 Rede Privada: Masquerading........................................................................... 43
5.3.2.3 Rede Privada: Proxies Transparentes .............................................................. 44
5.3.2.4 Rede Privada: Proxies Tradicionais................................................................. 46
5.3.2.5 Serviços Internos Limitados ............................................................................ 46
5.3.3 MAIS DETALHES SOBRE MASQUERADING ............................................................ 47
5.4 IP FIREWALLING CHAINS ..................................................................................... 47
5.4.1 COMO OS PACOTES ATRAVESSAM OS FILTROS...................................................... 47
5.4.1.1 Usando ipchains......................................................................................... 49
5.4.1.2 Operações em uma regra Simples ................................................................... 50
5.4.1.3 Especificações de Filtragem ............................................................................ 51
5.4.1.4 Efeitos do Lado da Filtragem .......................................................................... 55
5.4.1.5 Operações em Masquerading .......................................................................... 62
5.4.1.6 Checando um Pacote ....................................................................................... 62
5.4.1.7 Multiplas Regras at Once and Watching What Happens ................................ 63
5.4.2 EXEMPLOS ÚTEIS ................................................................................................. 64
5.4.2.1 Usando ipchains-save............................................................................. 65
5.4.2.2 Usando ipchains-restore...................................................................... 66
5.5 DIVERSOS .............................................................................................................. 66
5.5.1 COMO ORGANIZAR SUAS REGRAS DE FIREWALL ................................................... 67
5.5.2 O QUE NÃO FILTRAR ............................................................................................ 67
5.5.2.1 Pacotes ICMP .................................................................................................. 67
5.5.2.2 Conexões TCP para DNS (servidores de nomes)............................................ 68
5.5.2.3 Pesadelos FTP ................................................................................................. 68
5.5.3 FILTRANDO O PING OF DEATH (PING DA MORTE) ................................................. 68
5.5.4 FILTRANDO O TEARDROP E BONK........................................................................ 69
5.5.5 FILTRANDO BOMBAS DE FRAGMENTO ................................................................. 69
5.5.6 MODIFICANDO REGRAS DO FIREWALL ................................................................. 69
5.5.7 COMO EU CONFIGURO A PROTEÇÃO IP SPOOF?.................................................... 69
5.6 PROBLEMAS COMUNS ............................................................................................ 71
5.6.1 IPCHAINS -L TRAVA! ........................................................................................... 71
5.6.2 MASQUERADING/FORWARDING NÃO FUNCIONA!................................................. 71
5.6.3 -J REDIR NÃO FUNCIONA!.............................................................................. 71
5.6.4 CORINGAS NAS INTERFACES NÃO FUNCINAM! ..................................................... 71
5.6.5 TOS NÃO FUNCIONA! .......................................................................................... 71
5.6.6 IPAUTOFW E IPPORTFW NÃO FUNCIONAM! ........................................................... 72
5.6.7 XOSVIEW ESTÁ QUEBRADO! ................................................................................. 72
5.6.8 FALTA DE SEGMENTAÇÃO COM “-J REDIRECT”! ............................................ 72
5.6.9 EU NÃO POSSO CONFIGURAR TEMPO LIMITE NO MASQUERADE! ........................... 72
5.6.10 EU DESEJO PROTEGER IPX! ............................................................................... 72
6 FIREWALL IPTABLES........................................................................................ 73
6.1 INTRODUÇÃO ......................................................................................................... 73
6.1.1 VERSÃO ............................................................................................................... 74
6.1.2 UM RESUMO DA HISTÓRIA DO IPTABLES............................................................... 74
6.1.3 CARACTERÍSTICAS DO FIREWALL IPTABLES ......................................................... 74
6.1.4 FICHA TÉCNICA .................................................................................................... 75
6.1.5 REQUERIMENTOS ................................................................................................. 75
6.1.6 ARQUIVOS DE LOGS CRIADOS PELO IPTABLES ...................................................... 75
6.1.7 INSTALAÇÃO ........................................................................................................ 75
6.1.8 ENVIANDO CORREÇÕES/CONTRIBUINDO COM O PROJETO .................................... 76
6.1.9 O QUE ACONTECEU COM O IPCHAINS E IPFWADM? ............................................... 76
6.1.10 TIPOS DE FIREWALLS ......................................................................................... 76
6.1.11 O QUE PROTEGER?............................................................................................. 77
6.1.12 O QUE SÃO REGRAS?.......................................................................................... 78
6.1.13 O QUE SÃO CHAINS? .......................................................................................... 78
6.1.14 O QUE SÃO TABELAS?........................................................................................ 78
6.1.15 HABILITANDO O SUPORTE AO IPTABLES NO KERNEL .......................................... 79
6.1.16 LIGANDO SUA REDE INTERNA A INTERNET ......................................................... 80
6.2 MANIPULANDO CHAINS ......................................................................................... 80
6.2.1 ADICIONANDO REGRAS - A.................................................................................. 81
6.2.2 LISTANDO REGRAS - L ......................................................................................... 81
6.2.3 APAGANDO UMA REGRA - D ................................................................................ 84
6.2.4 INSERINDO UMA REGRA - I................................................................................... 84
6.2.5 SUBSTITUINDO UMA REGRA - R ........................................................................... 84
6.2.6 CRIANDO UM NOVO CHAIN - N ............................................................................ 85
6.2.7 LISTANDO OS NOMES DE TODOS OS CHAINS ATUAIS ............................................. 86
6.2.8 LIMPANDO AS REGRAS DE UM CHAIN - F.............................................................. 86
6.2.9 APAGANDO UM CHAIN CRIADO PELO USUÁRIO - X............................................... 86
6.2.10 ZERANDO CONTADOR DE BYTES DOS CHAINS - Z ............................................... 87
6.2.11 ESPECIFICANDO O POLICIAMENTO PADRÃO DE UM CHAIN - P............................. 87
6.3 OUTRAS OPÇÕES DO IPTABLES ............................................................................. 88
6.3.1 ESPECIFICANDO UM ENDEREÇO DE ORIGEM/DESTINO .......................................... 88
6.3.2 ESPECIFICANDO A INTERFACE DE ORIGEM/DESTINO ............................................. 89
6.3.3 ESPECIFICANDO UM PROTOCOLO ......................................................................... 90
6.3.3.1 Especificando portas de origem/destino .......................................................... 90
6.3.3.2 Especificando mensagens do protocolo ICMP................................................ 91
6.3.3.3 Especificando pacotes syn............................................................................... 92
6.3.4 ESPECIFICANDO FRAGMENTOS ............................................................................. 92
6.3.5 ESPECIFICANDO UMA EXCEÇÃO ........................................................................... 93
6.3.6 ESPECIFICANDO UM ALVO.................................................................................... 93
6.3.6.1 Alvo REJECT .................................................................................................. 94
6.3.6.2 Especificando LOG como alvo ....................................................................... 94
6.3.6.3 Especificando RETURN como alvo................................................................ 97
6.4 A TABELA NAT (NETWORK ADDRESS TRANSLATION) - FAZENDO NAT ............... 98
6.4.1 CRIANDO UM NOVO CHAIN NA TABELA NAT....................................................... 98
6.4.2 FAZENDO IP MASQUERADING (PARA OS APRESSADOS) ........................................ 98
6.4.3 FAZENDO SNAT.................................................................................................. 99
6.4.3.1 Fazendo IP Masquerading ............................................................................. 100
6.4.4 FAZENDO DNAT ............................................................................................... 101
6.4.4.1 Redirecionamento de portas .......................................................................... 101
6.4.5 MONITORANDO CONEXÕES FEITAS NA TABELA NAT .......................................... 102
6.5 A TABELA MANGLE ............................................................................................. 102
6.5.1 ESPECIFICANDO O TIPO DE SERVIÇO ................................................................... 102
6.5.1.1 Especificando o TOS para tráfego de saída................................................... 103
6.5.1.2 Especificando o TOS para o tráfego de entrada ............................................ 103
6.6 OUTROS MÓDULOS DO IPTABLES ........................................................................ 104
6.6.1 CONFERINDO DE ACORDO COM O ESTADO DA CONEXÃO .................................... 104
6.6.2 LIMITANDO O NÚMERO DE VEZES QUE A REGRA CONFERE ................................. 104
6.6.3 PROTEÇÃO CONTRA PING DA MORTE .................................................................. 105
6.6.4 PROTEÇÃO CONTRA SYN FLOOD ......................................................................... 105
6.6.5 PROTEÇÃO CONTRA IP SPOOFING ...................................................................... 106
6.6.6 ESPECIFICANDO MÚLTIPLAS PORTAS DE ORIGEM/DESTINO................................. 106
6.6.7 ESPECIFICANDO O ENDEREÇO MAC DA INTERFACE........................................... 107
6.6.8 CONFERINDO COM QUEM CRIOU O PACOTE ........................................................ 107
6.7 CAMINHO PERCORRIDO PELOS PACOTES NAS TABELAS E CHAINS .................... 107
6.7.1 PING DE 192.168.1.1 PARA 192.168.1.1 ............................................ 108
6.7.2 CONEXÃO FTP DE 192.168.1.1 PARA 192.168.1.1 ............................................ 109
6.7.3 CONEXÃO FTP DE 192.168.1.1 PARA 192.168.1.4 ............................................ 109
6.7.4 CONEXÃO FTP DE 200.217.29.67 PARA FTP.DEBIAN.ORG.BR ................. 110
6.7.5 PING DE 192.168.1.4 PARA 192.168.1.1 ............................................................ 111
6.7.6 CONEXÃO FTP DE 192.168.1.4 PARA 192.168.1.1 ............................................ 112
6.7.7 CONEXÃO FTP DE 192.168.1.4 PARA FTP.DEBIAN.ORG.BR ................................ 113
6.7.8 CONEXÃO FTP DE 200.198.129.162 PARA 200.217.29.167 .............................. 114
6.7.9 GRÁFICO GERAL DA PASSAGEM DOS PACOTES ................................................... 114
6.8 EXEMPLOS DE CONFIGURAÇÕES DO IPTABLES ................................................... 115
6.8.1 BLOQUEANDO CONEXÕES DE FORA PARA SUA MÁQUINA ................................... 115
6.8.2 MONITORANDO TENTATIVA DE CONEXÃO DE TROJANS EM SUA MÁQUINA ......... 115
6.8.3 CONECTANDO SUA REDE INTERNA A INTERNET ................................................. 116
6.8.4 UM EXEMPLO DE FIREWALL SIMPLES ................................................................. 116
1.3.1
O Datagrama IP
O cabeçalho de um datagrama IP pode ser visto na figura abaixo:
1.4.1 TCP
O TCP (Transmission Control Protocol) proporciona conexões de dados
confiáveis para as aplicações. O TCP conta com mecanismos que garantem que
os dados são entregues às suas aplicações locais:
• Íntegros
• Em seqüência
• Completos
• Sem duplicatas
Os mecanismos básicos que o TCP usa para conseguir isso são:
• Numeração dos segmentos
• Estabelecimento de Timeout
• Retransmissão dos segmentos
O lado que recebe os dados deve colocá-los em na seqüência correta,
descartando duplicatas e confirmando o recebimento dos mesmos.
O TCP é implementado apenas nos hosts. O TCP é um protocolo full-
duplex, ou seja, ambos os lados podem enviar dados ao mesmo tempo.
O TCP adiciona um cabeçalho ao pacote de dados da aplicação, formando
um segmento.
O TCP passa os segmentos ao IP, que então roteia os mesmos até seu
destino. O TCP aceita segmentos do IP, determina qual aplicação é o destino, e
passa os dados para a aplicação apropriada.
1.4.3 ICMP
O IP tem um projeto simples e elegante. Em condições normais, o IP faz
um uso muito eficiente da memória e recursos de transmissão.
Como IP provê um serviço de expedição de datagramas sem conexão e
não confiável, e além disso um datagrama viaja de um gateway a outro até
alcançar um gateway que possa expedí-lo diretamente à estação destino; é
necessário um mecanismo que emita informações de controle e de erros quando
acontecerem problemas na rede. Alguns dos problemas típicos que podem
acontecer são:
• Um gateway não pode expedir ou rotear um datagrama;
• Um gateway detecta uma condição não usual, tal como
congestionamento.
O mecanismo de controle que emite mensagens quando acontece algum
erro é a função principal do protocolo ICMP. O ICMP permite aos gateways enviar
mensagens de erros ou de controle a outros gateways ou hosts. ICMP provê
comunicação entre o software de IP numa máquina e o software de IP numa outra
máquina.
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 condições de erros à fonte original. A fonte deve
relatar os erros aos programas de aplicação individuais e tomar ação 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 não alcançável)
• Host Unreachable (máquina não alcançável)
• Port Unreachable (porta não alcançável)
• Destination Host Unknown (máquina destino desconhecido)
• Destination Network Unknown (rede destino desconhecida)
1.6 Roteamento
O TCP/IP pode ser usado em redes locais e para interligação de redes. As
diversas redes locais conversam através dos roteadores. Pode haver mais de um
caminho entre dois pontos.
As redes isoladas são conectadas por meio de Roteadores IP. Roteadores
modernos são equipados com vários 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 não está no mesmo enlace, manda-se o pacote para o
roteador local;
• Se o destino não estiver no mesmo enlace do roteador, este irá repassá-
lo ao próximo roteador. Este processo continua até que o destino seja
atingido.
Pode ser útil ilustrar isto com um exemplo. Imagine um simples roteador de
escritório, ele pode ter um link intermitente com a Internet, um número de
segmentos Ethernet alimentando as estações de trabalho e outro link PPP
intermitente fora de outro escritório. Quando o roteador recebe um datagrama de
qualquer de suas conexões de rede, o mecanismo que usa determina qual a
próxima interface deve enviar o datagrama. Computadores simples também
precisam rotear, todos os computadores na Internet têm 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.
cat /proc/net/route
route -n
netstat -r
1.6.1 Reempacotamento
Existe um evento olímpico onde um competidor nada uma parte do
percurso, pega uma bicicleta e pedala outra parte, e corre uma terceira etapa. O
IP funciona da mesma maneira. O datagrama foi projetado para poder ser
mudado de uma mídia para outra até chegar ao seu destino.
Antes de um datagrama ser transmitido por um enlace, ele é empacotado
em um quadro apropriado para o enlace. Quando um roteador recebe o quadro:
• O roteador desempacota o quadro e extrai o datagrama
• O roteador analisa o endereço de destino e descobre a mídia do
próximo trecho
• O roteador reempacota o datagrama em um novo quadro, apropriado
para o próximo laço
Exercícios
1. Em que nível de TCP/IP rodam o telnet e o ftp?
a) Físico
b) Sessão
c) Aplicação
d) Transporte
e) Enlace
2. Qual das seguintes aplicações não usa o protocolo UDP?
a) TFTP
b) DNS
c) RPC
d) FTP
e) SNMP
2 ENDEREÇAMENTO
Em uma rede, o endereço de um dispositivo é uma forma de identificar esse
dispositivo como sendo único. Normalmente, os endereços de rede possuem um
formato padronizado e bem definido.
2.2.1 Multihoming
Os sistemas não tem endereços IP, as suas interfaces é que os têm. Um
roteador com quatro interfaces de rede precisa de quatro endereços IP.
Um sistema que está ligado a mais de uma sub-rede é chamado de
multihomed.
Você deve decidir primeiro qual será a largura de sua rede e então escolher
a classe de rede que será usada.
Pode-se obter um software de Proxy que repassa a informação entre os
computadores internos e o mundo exterior através do endereço de Classe C
registrado.
Exercícios
1. O que significa a sigla MAC?
a) Media Assynchronous Connection
b) Master Assynchronous Connection
c) Media Access Connection
d) Media Access Control
e) Master Access Control
3.1 Roteamento
Para entender melhor como funciona o processo de transmissão de um
pacote de dados dentro de uma rede, pode ser feita uma analogia com o processo
de uma ligação telefônica. Ao se discar o número do telefone com quem se deseja
falar, a sua central telefônica verifica se o número está conectado a ela, se não
estiver ela "encaminha" a sua ligação para outra central que por sua vez faz o
mesmo teste, até chegar a central onde se localiza o número de destino. Os
códigos de país, área e o prefixo do telefone são utilizados para determinar para
qual central sua ligação deve ser encaminhada. Cada central por onde a ligação
passa, além de decidir para onde encaminhar a ligação, funciona também como
uma espécie de retransmissora ao receber sua ligação 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
não esteja diretamente ligado a ele (ou em sua sub-rede), ele deve enviar seus
datagramas para uma máquina especial, ligada a duas ou mais redes e que
encaminhará os datagramas para o destino. Essa máquina especial recebe o
nome de gateway ou roteador, e ao processo de decidir para onde repassar os
datagramas chamamos de roteamento.
A idéia básica do roteamento é a criação de regras que estabeleçam que
caminho um datagrama deve tomar baseado no endereço de destino dele. Em
uma máquina cliente essa regra é bastante simples: tudo que não for para a rede
local deve ser enviado para a máquina gateway (essa regra é chamada rota
padrão). Já em uma máquina gateway podem ser necessárias muito mais regras,
principalmente se essa máquina está conectada a um grande número de redes.
3.1.2 Gateway
Um gateway ou roteador funciona como uma porta de saída de uma rede;
ele é um máquina equipada com duas ou mais interfaces ou dispositivos de rede e
é capaz de fazer o repasse de datagramas para fora ou para dentro da rede.
Essa máquina possui diferentes números 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 definição da rota
padrão.
Existem alguns casos nos quais é necessário informar ao seu gateway
como alcançar uma determinada rede, por exemplo, no caso dessa rede estar por
trás de um outro gateway. Para esses casos especiais é necessário inserir uma
rota estática para esta rede (caso não se esteja usando um serviço de rotas
dinâmicas).
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 auxílio do comando iptables. O netfilter permite a
construção de firewalls e de gateways com NAT (Network Address Translation). O
site oficial do netfilter é <http://netfilter.gnumonks.org/>.
• Serão estudados aqui os conceitos básicos do netfilter e como utilizar o
recurso de NAT.
3.2.1
Anatomia do netfilter
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 razão pela qual o computador trava é que a Microsoft não 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 tráfego do computador que
envia. Esse tipo de tráfego tem prioridade mais alta que o tráfego ordinário da
rede. O problema surge quando tais mensagens não são enviadas: o computador
para. Parece que se trata de resultado de uma má implementação do protocolo
TCP/IP da Microsoft, onde essa situação não é tratada satisfatoriamente.
Esse ataque é muito simples de ser realizado (utiliza um canal legítimo)-
tem sido até mesmo implementado com uma linha de código na linguagem Perl.
Normalmente, o ataque é direcionado contra a porta 139 (Serviço NetBIOS
Session) do computador.
Por exemplo: suponhamos que um computador com IP 200.133.10.126
esteja com a porta 139 aceitando conexões. Na barra de endereços do Browser,
podemos digitar: <http://200.133.10.126:139> e se ficarmos atualizando a
página, estaremos atacando essa máquina. Um simples JavaScript pode
automatizar essa tarefa.
Felizmente, é fácil proteger um computador contra esse tipo de ataque. A
Microsoft desenvolveu patches para download. Quando esse patches são
instalados, você está protegido contra esse tipo de ataque.
4.4.4 TearDrop
Esse ataque utiliza outra vulnerabilidade na implementação do protocolo
TCP/IP. O resultado desse ataque pode variar, mas, normalmente o computador
trava e precisa ser reiniciado. Os sistemas operacionais mais vulneráveis são
Windows(95/98/NT) e Linux.
A razão pela qual o ataque acontece deve-se a um erro em parte do
protocolo TCP/IP que toma conta de pacotes fragmentados. A fragmentação do
pacote pode ocorrer se o pacote que está sendo recebido for maior do que o
tamanho permitido pela rede. Caso positivo, o pacote é dividido em pacotes
menores, consistindo em partes do pacote original. Quando os pacotes menores
chegam ao computador recipiente, ele tenta colocá-los juntos -aqui ocorre o erro e
o computador pára.
Tecnicamente, o ataque é conduzido mandando uma combinação 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
sobrepões-se ao primeiro. Uma implementação errônea do TCP/IP interpreta o
fim do pacote antes do seu começo e o computador pára.
4.4.5 NewTear
Esse ataque é parecido com o TearDrop. A diferença é o tamanho da
sobreposição dos pacotes (20 bytes, enquanto o TearDrop usa 28) e a
manipulação do tamanho do UDP. Esse ataque funciona contra máquinas
rodando Windows95/98 e NT mesmo que o patch TearDrop esteja instalado, o que
demonstra que a Microsoft não levou as variações do ataque em conta quando o
patch foi programado.
4.4.6 Bonk/Boink
Outra variação do ataque TearDrop. O deslocamento do fragmento do
segundo pacote é ajustado para ser maior do que o comprimento do cabeçalho IP.
Semelhante aos outros ataques, o computador pára. Não se sabe porquê esse
ataque funciona.
O Bonk ataca a porta 55 das máquinas. O Boink é uma variação do Bonk -
a diferença é que esse último permite ataques em outras portas, além da 55.
4.4.7 Ssping
Uma variação do ataque chamado "Ping da Morte". Uma pessoa manda
um pacote ICMP (ECHO_REQUEST) com um tamanho anormal para a máquina
alvo. O tamanho máximo para datagramas TCP/IP é 65536 octetos (1 octeto = 8
bits). Contudo, é possível mandar datagramas maiores do que o tamanho máximo
definido. Quando a máquina alvo recebe tal pacote pode parar. Mais uma vez, o
erro deve-se a má implementação na secção do TCP/IP que manipula pacotes
fragmentados. Um teste simples para testar se você é vulnerável é pingar seu
próprio computador. Use o comando ping -s 65510 seu_ip. Se sua
máquina parar você é vulnerável a esse tipo de ataque.
4.4.8 Smurf
Smurfing é outro tipo de ataque semelhante aos que foram discutidos aqui.
Esse tipo de ataque Smurf pode ser considerado mais perigoso que os outros.
O ataque Smurf não tem intenção de parar um computador, mas sim uma
rede inteira. É realizado enviando contínuas stream (cadeias) de pacote ICMP
modificados para a rede alvo.
Os pacotes são modificados de modo que o endereço da máquina que
envia os dados é idêntico ao endereço do alvo (spoofing). Além disso, os pacotes
são enviados para os chamados endereços broadcast, o que resulta em os
pacotes modificados serem enviados para todos os computadores de uma rede.
Os computadores dessa rede irão responder enviando uma mensagem de ICMP
ECHO_RESPONSE para o computador que eles assumem ter enviado a
mensagem ( o computador alvo da rede).Se o atacante tiver uma conexão
rápida,não é preciso ser um grande matemático 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 tráfego seja bloqueado.
Esse tipo de ataque tem sido usado para parar vários Provedores de
Acesso à Internet e todos os seus usuários. Efetivamente, é difícil se proteger
desse tipo de ataque.
5 FIREWALL IPCHAINS
Adaptado do Linux IPCHAINS-HOWTO, Paul Russell, <ipchains@rustcorp.com
<mailto:ipchains@rustcorp.com>>, v1.0.7, 12 March 1999
Tradução para o português por Gleydson Mazioli da Silva, <gleydson@linuxbr.com.br
<mailto:gleydson@linuxbr.com.br>>
5.1 Introdução
Este é o Linux IPCHAINS-HOWTO; Veja “Onde?” para o ver site principal,
que contém a última cópia. Você também deve ler o Linux NET-3-HOWTO. O IP-
Masquerading HOWTO, o PPP-HOWTO, o Ethernet-HOWTO e o Firewall
HOWTO que podem ser uma leitura interessante. (Então denovo a FAQ
alt.fan.bigfoot).
Se a filtragem de pacotes é passado para você, leia a seção “Porque?”,
Seção “Como?” e verifique os títulos na seção “IP Firewalling Chains”.
Se você esta convertendo através do ipfwadm, leia a secao “Introdução”,
Seção “Como?”, e os Apêndices da seção “Diferenças entre ipchains e ipfwadm” e
a seção “Usando o script ipfwadm-wrapper”.
5.1.1 O que?
O ipchains do Linux é uma regravação do codigo de firewall IPv4 do linux
(que foi originalmente roubado do BSD) e uma regravação do ipfwadm, que foi
uma regravação do ipfw dos BSD’s, eu acho. É requerido para administrar os
filtros de pacotes IP nos kernels do linux 2.1.102 e superiores.
5.1.3 Como?
Atualmente o código está no kernel em desenvolvimento do 2.1.192.
Para as séries do kernel 2.0, você precisará fazer o download de um patch
da página Internet. Se seu kernel 2.0 é mais recente que o patch fornecido, o
patch antigo ser OK; esta parte dos kernels 2.0 é razoavelmente estável (eg. o
patch do kernel 2.0.34 funciona perfeitamente com o kernel 2.0.35). Desde então
o patch 2.0 é incompatível com patches do ipportfw e ipautofw, eu não recomendo
aplica-los a não ser que você ralmente necessita da funcionalidade que o ipchains
oferece.
5.1.4 Onde?
A página oficial é The Linux IP Firewall Chains Page
<http://www.rustcorp.com/linux/ipchains>
Lá existe uma lista de discussão para relatar bugs, discussões,
desenvolvimento e uso. Entre na lista de discussão enviando uma mensagem
contendo a palavra “subscribe” para <<ipchains-request@rustcorp.com>>. Para
enviar E-Mails para a lista use “ipchains” ao invés de “ipchains-request”.
5.2.1 O que é?
Todo o tráfego da rede é enviado em forma de pacotes. Por exemplo,
copiando este pacote (digamos de 50k) pode fazer você receber 36 ou assim
pacotes de 1460 bytes em cada um, (puxando números ao acaso).
O inicio de cada pacote diz onde ele esta indo, de onde vem, o tipo do
pacote, e outros detalhes administrativos. Isto inicia o pacote e é chamado de
cabeçalho (head). O resto do pacote que contém 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 “conexão”-antes de qualquer pacote com os
dados atuais serem enviados, vários pacotes de configuração (com cabeçalhos
especiais) são trocados dizendo “Eu desejo conectar”, “OK” e “Obrigado”. Então
os pacotes normais são trocados.
Uma filtragem de pacotes é uma peça de software que olha no cabeçalho
do pacote quando eles passam, e decide o destino de todo o pacote.
Ele pode decidir negar o pacote (DENY - ie. descartar o pacote como 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 estão
algumas coisas que nós podemos fazer com os pacotes, mas o principio geral é
de olhar o cabeçalho dos pacotes e decidindo seu destino.
5.2.2 Por que?
• Controle: quando você está usando um computador linux para
conectar sua rede interna a outra rede (digo, a Internet) você tem a
oportunidade de permitir certos tipos de tráfego, e desativar outros. Por
exemplo, o cabeçalho do pacote contém o endereço 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á estão anúncios da página doubleclick.net, e o
Netscape desperdiça partes do meu tempo copiando-a. Dizendo para o
filtro de pacotes não permitir qualquer pacotes para ou de o endereço
conhecido por doubleclick.net resolve este problema (lá estão meios
melhores de se fazer isto).
• Segurança: 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 não 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 não um servidor (legando ou caso contrário) --
simplesmente não deixe ninguém conectar em seu computador, tendo
filtros de pacotes rejeitando pacotes de entrada usado para iniciar
conexões.
• Vigilância: muitas vezes uma máquina 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?
CONFIG_EXPERIMENTAL=y
CONFIG_FIREWALL=y
CONFIG_IP_FIREWALL=y
CONFIG_IP_FIREWALL_CHAINS=y
CONFIG_FIREWALL=y
CONFIG_IP_FIREWALL=y
A ferramenta ipchains fala com o kernel e diz a ele quais pacotes filtrar. A
não ser que você seja um programador, ou curioso demais, assim você controlará
a filtragem de pacotes.
5.2.3.2 O ipchains
A ferramenta ipchains insere ou deleta regras da seção de filtragem de
pacotes do kernel. Isto quer dizer que qualquer coisa que você configurar, será
perdida na reinicialização; 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 código de
firewall de IP. Há um conjunto de scripts úteis disponíveis no site ftp do ipchains:
<ftp://ftp.rustcorp.com/ipchains/ipchains-scripts-1.1.2.tar.gz>
Este contém um script shell chamado ipfwadm-wrapper que permite fazer a
filtragem de pacotes como fez antes. Você provavelmente não deve usar este
script a não ser se deseje fazer um método rápido de upgrade em um sistema que
usa o ipfwadm (ele é lento, não checa argumentos, etc).
Neste caso, você não precisa muito deste HOWTO.
Veja Apêndice “Diferenças entre ipchains e ipfwadm” e Apêndice “Usando o
script ipfwadm-wrapper” para um assunto mais detalhado sobre ipfwadm.
case “$1” in
start)
echo -n “Ativando a filtragem de pacotes:” /sbin/ipchains-restore <
/etc/ipchains.rules || exit 1 echo 1 > /proc/sys/net/ipv4/ip_forward echo “.”
;;
stop)
echo -n “Desativando a filtragem de pacotes:”
echo 0 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -X
/sbin/ipchains -F
/sbin/ipchains -P input ACCEPT
/sbin/ipchains -P output ACCEPT
/sbin/ipchains -P forward ACCEPT
echo “.”
;;
*)
echo “Use: /etc/init.d/packetfilter {start|stop}”
exit 1
;;
esac
exit 0
ie. Aqui existe somente uma conexão: de 1.2.3.100 (myhost) porta 1050,
para 207.218.152.131 (slashdot.org) porta 80.
$ ipchains-version
ipchains 1.3.9, 17-Mar-1999
Note que eu recomendo 1.3.4 (que não possui opões longas, como “-
sport”), ou 1.3.8 ou superior; estes são muito estáveis.
ipchains tem uma página de manual razoavelmente detalhada (man
ipchains), e se você precisa de mais detalhes em particularidades, você deve
checar a interface de programação (man 4 ipfw), ou o arquivo net/ipv4/ip_fw.c no
código fonte do kernel 2.1.x, que é (obviamente) autoritativo.
Também existem um excelente guia de referência rápida por Scott Bronson
no pacote fonte, em ambas A4 e US Letter PosScript™.
Existem diferentes outras coisas que você pode fazer com ipchains.
Primeiro operações para gerenciar chains completos. Você inicia com três chains
input, output e forward que voce não pode apagar.
# 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
Você pode ver aqui que o primeiro ping se sucede( o “-c 1”que dizer para o
ping enviar somente um pacote simples)
Então nós adicionamos (-A) um chain “input”, 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 nós testamos nossa regra, usando o segundo ping, Existe uma
pausa antes do programa aguardar a resposta que nunca vem.
Nós podemos apagar uma regra em um dos dois meios. Primeiro nós
conhecemos que esta é a única regra no chain input, nós podemos usar um
número para apagar, como em:
# ipchains -D input 1
é muito diferente de
p TCP -s 192.168.1.1 -y
Mais uma vez, esta opção pode ser invertida se for precedida de um “!”, que
diz que cada pacote sem ser a inicialização da conexão.
5.4.1.3.6 Dirigindo Fragmentos
As vezes um pacote é muito grande para passar de uma só vez. Quando
isto acontece, o pacote é dividido em framentos, e enviado como múltiplos
pacotes. O outro lado remonta os fragmentos para reconstruir o pacote inteiro.
O problema com fragmentos é que muitas das especificaçõess listadas
acima (em particular, porta de origem, porta de destino, tipo ICMP, código ICMP,
ou opção TCP SYN) requerem que o kernel verifique no inicio do pacote, que é o
único que contém o primeiro fragmento.
Se sua máquina é a única conectada a uma rede externa, então você pode
dizer para o kernel do linux para remontar todos os fragmentos dos pacotes que
passam através dele, compilando o kernel com IP: always defragment (sempre
desfragmentar) configurado para “Y”. Isto nítidamente evita isto.
Caso contrário, é importante entender como os fragmentos são tratados
pelas regras de filtragem. O primeiro fragmento é tratado como qualquer outro
pacote. O segundo e os fragmentos seguintes não são. 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 opção “-f”. Obviamente, é ilegal
especificar uma porta TCP ou UDP, tipo ICMP, código ICMP ou a opção TCP SYN
em tal regra de fragmento.
É também permitido especificar que uma regra que não 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, porém, tem sido
conhecido bugs para permitir o travamento de máquinas simplesmente enviando
fragmentos.
Nota para cabeças de rede: pacotes mal formados (TCP, UDP e pacotes
ICMP muitos curtos para o c¢digo de firewall ler as portas ou código e tipo ICMP)
são tratados como fragmentos também. Sometne fragmentos TCP iniciando na
posição 8 são explicitamente derrubados pelo código do firewall (uma mensagem
aparecerá no syslog se isto ocorrer).
Como um exemplo, a seguinte regra derrubará quaisquer fragmentos indo
para 192.168.1.1:
kern.* -/var/log/kern.log
.=info;.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
Andi Klenn foi ao ponto fora dos seguintes (também editado para
postaridade):
Talvez ele possa ser útil para incluir uma referência para de ifconfig para a
discussão sobre bits TOS. O tamanho do dispositivo padrão é afinado para placas
ethernet, em modems ele é muito grande e faz os 3 agendamentos das bandas
(que possui canais baseados no TOS) funcionarem subótimamente. É uma boa
idéia configura-lo para um valor entre 4-10 no modem ou simples canal b para
links ISDN: em dispositivos empacotados é necessário um grande canal.
Este é uma problema 2.0 e não 2.1, mas em 2.1 ele é um opção do ifconfig
(com nettools recentes), enquanto em 2.0 ele requer patches fontes nos
controladores de dispositivos para alterar.
Assim, para ver máximos beneficios da manipulação TOS para links de
modems PPP, faça “ifconfig $1 txqueuelen” em seu /etc/ppp/ip-up script. O
número usado depende da velocidade do modem e da quantidade de buffer no
modem; aqui configurações que Andi me passou denovo:
O melhor valor para dadas configurações precisam ser testadas. Se os
canais são muito pequenos em um roteador então os pacotes serão derrubados.
Também é claro que um obtém o benefício até mesmo sem regravação TOS,
apenas aquela regravação TOS ajuda obter benefícios para programas não
coperativos (mas todos os programas padrões do linux são coperativos).
5.4.1.4.4 Marcando um Pacote
Isto permite complexas e poderosas interações com Alexey Kuznetsov’s
nova Qualidade de implementações de Serviço, também como forwarding
baseado em marcas em kernels da série 2.1. Esta opção é no entanto ignorada
em kernels da série 2.0.
5.4.1.4.5 Operações em todo o chain
Uma característica muito útil do ipchains é a abilidade de agrupar regras
relacionadas em chains. Você pode chamar chains do que quiser, desde que não
sejam nomes utilizados pelos chains embutidos (input, output e forward) ou os
alvos (MASQ, REDIRECT, ACCEPT, DENY, REJECT ou RETURN). Eu sugiro
evitar totalmente identificações em maiúsculas, porque que eu posso usar estas
para futura extensão. O nome do chain pode ser maior que 8 caracteres.
5.4.1.4.6 Criando um novo chain
Vou criar um novo chain. Porque eu sou como um imaginador da mesma
categoria, eu chamarei isto de test.
# ipchains -N test
É muito simples. Agora você pode colocar regras nele como detalhado
acima.
5.4.1.4.7 Apagando um chain
Apagar um chain também é simples.
# ipchains -X test
# ipchains -F forward
# 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 número 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 são listados.
Existem três opções que podem acompanhar “-L”. A “-n” (numérica) opção
é muito útil porque ela previne ipchains de tentar localizar endereços IP, que (se
você esta usando DNS como muitas pessoas) causa larga espera se seu DNS se
não estiver configurado corretamente, ou se você filtrará suas requisições DNS.
Ele faz as portas serem listadas como números ao invés de nomes.
A opção “-v” mostra os detalhes das regras, como o pacote e contadores de
byes, as máscaras TOS, a interface, e a marca do pacote. Caso contrário estes
valores são 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
# 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
# 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
# ipchains -N ppp-out
# ipchains -A output -i ppp0 -j ppp-out
# ipchains -N ppp-in
# ipchains -A input -i ppp0 -j ppp-in
5.5 Diversos
Esta seção contém todas as informações e FAQs que eu pude colocar
dentro da estrutura do arquivo abaixo.
# ipchains -D input 1
# ipchains -D output 1
# ipchains -D forward 1
# 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ê não puder fazer isto, você pode inserir manualmente regras para
proteger cada interface. Isto requer conhecimento de cada interface. Os kernels
2.1 automáticamente rejeitam pacotes dizendo vir de endereços 127.* (reservados
para a interfaceloopback local, lo).
Por exemplo, digamos que temos três interfaces, eth0, eth1 e ppp0. Nós
podemos usar ifconfig para nos dizer o endereço e netmask das interfaces.
Digamos eth0 foi ligada a rede 192.168.1.0 com a netmasq 255.255.255.0, eth1 foi
ligada a rede 10.0.0.0 com a netmask 255.0.0.0, e ppp0 conectado com a internet
(onde qualquer endereço exceto endere‡os IP privados são permitodos), nós
devemos inserir as seguintes regras:
Esta idéia não é tão boa como a Verificação do endereço de origem, porque
se sua rede muda, você deve mudar suas regras de firewall para prevenila.
Se você está executando um kernel da série 2.0, você pode desejar
proteger a interface loopback também, usando uma regra como esta:
Se isto funciona para você, coloque isto em algum lugar em seus scripts de
inicialização assim ele será ativado toda hora; você deve configurar seu firewall
antes de executar este comando, caso contrário existe uma oportunidade de
pacotes escaparem.
Isto deve ser lido como “0x003F”. Corrija isto e recompile o kernel.
5.6.5 TOS não funciona!
Isto foi meu erro: configurando o campo tipo do serviço não configurava
atualmente o tipo do serviço nos kernels versões 2.1.102 entre 2.1.111. Este
problema foi corrigido em 2.1.112.
6.1 Introdução
O Firewall é um programa que como objetivo proteger a máquina contra
acessos indesejados, tráfego indesejado, proteger serviços que estejam rodando
na máquina e bloquear a passagem de coisas que você não deseja receber (como
conexões vindas da Internet para sua segura rede local, evitando acesso aos
dados corporativos de uma empresa ou a seus dados pessoais). No kernel do
Linux 2.4, foi introduzido o firewall iptables (também chamado de netfilter) que
substitui o ipchains dos kernels da série 2.2. Este novo firewall tem como
vantagem ser muito estável (assim como o ipchains e ipfwadm), confiável, permitir
muita flexibilidade na programação de regras pelo administrador do sistema, mais
opções disponíveis ao administrador para controle de tráfego, controle
independente do tráfego da rede local/entre redes/interfaces devido a nova
organização das etapas de roteamento de pacotes.
O iptables é um firewall a nível de pacotes e funciona baseado no
endereço/porta de origem/destino do pacote, prioridade, etc. Ele funciona através
da comparação de regras para saber se um pacote tem ou não permissão 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 também pode ser usado para modificar e monitorar o tráfego da rede,
fazer NAT (masquerading, source nat, destination nat), redirecionamento de
pacotes, marcação de pacotes, modificar a prioridade de pacotes que
chegam/saem do seu sistema, contagem de bytes, dividir tráfego entre máquinas,
criar proteções anti-spoofing, contra syn flood, DoS, etc. O tráfego vindo de
máquinas desconhecidas da rede pode também ser bloqueado/registrado através
do uso de simples regras. As possibilidades oferecidas pelos recursos de
filtragem iptables como todas as ferramentas UNIX maduras dependem de sua
imaginação, pois ele garante uma grande flexibilidade na manipulação das regras
de acesso ao sistema, precisando apenas conhecer quais interfaces o sistema
possui, o que deseja bloquear, o que tem acesso garantido, quais serviços devem
estar acessíveis para cada rede, e iniciar a construção de seu firewall.
O iptables ainda tem a vantagem de ser modularizável, funções 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 segurança em máquinas isoladas como roteamento em grandes organizações,
onde a passagem de tráfego entre redes deve ser minuciosamente controlada.
Um firewall não funciona de forma automática (instalando e esperar que ele
faça as coisas por você), é necessário pelo menos conhecimentos básicos de rede
tcp/ip, roteamento e portas para criar as regras que farão a segurança de seu
sistema. A segurança do sistema depende do controle das regras que serão
criadas por você, as falhas humanas são garantia de mais de 95% de sucesso nas
invasões.
Enfim o iptables é um firewall que agradará tanto a pessoas que desejam
uma segurança básica em seu sistema, quando administradores de grandes redes
que querem ter um controle minucioso sobre o tráfego que passam entre suas
interfaces de rede (controlando tudo o que pode passar de uma rede a outra),
controlar o uso de tráfego, monitoração, etc.
6.1.1 Versão
É assumido que esteja usando a versão 1.2.3 do iptables e baseadas nas
opções do kernel 2.4.16 (sem o uso de módulos experimentais). As explicações
contidas aqui podem funcionar para versões posteriores, mas é recomendável que
leia a documentação sobre modificações no programa (changelog) em busca de
mudanças que alterem o sentido das explicações fornecidas aqui.
6.1.5 Requerimentos
É necessário que o seu kernel tenha sido compilado com suporte ao
iptables (veja Habilitando o suporte ao iptables no kernel, Section 9.1.15
<http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>. O requerimento
mínimo de memória necessária para a execução do iptables é o mesmo do kernel
2.4 (4MB). Dependendo do tráfego que será manipulado pela(s) interface(s) do
firewall ele poderá ser executado com folga em uma máquina 386 SX com 4MB de
RAM.
Como as configurações residem no kernel não é necessário espaço extra
em disco rígido para a execução deste utilitário.
6.1.7 Instalação
*
* Network Options:
*
e na Subseção:
*
* IP: Netfilter Configuration
*
Connection tracking (required for masq/NAT) (CONFIG_IP_NF_CONNTRACK) [M/n/y/?]
FTP protocol support (CONFIG_IP_NF_FTP) [M/n/?]
IRC protocol support (CONFIG_IP_NF_IRC) [M/n/?]
IP tables support (required for filtering/masq/NAT) (CONFIG_IP_NF_IPTABLES)
[Y/m/n/?]
limit match support (CONFIG_IP_NF_MATCH_LIMIT) [Y/m/n/?]
MAC address match support (CONFIG_IP_NF_MATCH_MAC) [M/n/y/?]
netfilter MARK match support (CONFIG_IP_NF_MATCH_MARK) [M/n/y/?]
Multiple port match support (CONFIG_IP_NF_MATCH_MULTIPORT) [M/n/y/?]
TOS match support (CONFIG_IP_NF_MATCH_TOS) [M/n/y/?]
LENGTH match support (CONFIG_IP_NF_MATCH_LENGTH) [M/n/y/?]
TTL match support (CONFIG_IP_NF_TTL) [M/n/y/?]
tcpmss match support (CONFIG_IP_NF_MATCH_TCPMSS) [M/n/y/?]
Connection state match support (CONFIG_IP_NF_MATCH_STATE) [M/n/?]
Packet filtering (CONFIG_IP_NF_FILTER) [M/n/y/?]
REJECT target support (CONFIG_IP_NF_TARGET_REJECT) [M/n/?]
Full NAT (CONFIG_IP_NF_NAT) [M/n/?]
MASQUERADE target support (CONFIG_IP_NF_TARGET_MASQUERADE) [M/n/?]
REDIRECT target support (CONFIG_IP_NF_TARGET_REDIRECT) [M/n/?]
Packet mangling (CONFIG_IP_NF_MANGLE) [M/n/y/?]
TOS target support (CONFIG_IP_NF_TARGET_TOS) [M/n/?]
MARK target support (CONFIG_IP_NF_TARGET_MARK) [M/n/?]
LOG target support (CONFIG_IP_NF_TARGET_LOG) [M/n/y/?]
TCPMSS target support (CONFIG_IP_NF_TARGET_TCPMSS) [M/n/y/?]
Esta configuração permite que você não tenha problemas para iniciar o uso
e configuração do seu firewall iptables, ela ativa os módulos necessários para
utilização de todos os recursos do firewall iptables. Quando conhecer a função de
cada um dos parâmetros acima (durante o decorrer do texto), você poderá
eliminar muitas das opções desnecessárias para seu estilo de firewall ou continuar
fazendo uso de todas ;-)
OBS1: A configuração acima leva em consideração que você NÃO
executará os códigos antigos de firewall ipfwadm e ipchains. Caso deseje utilizar
o ipchains ou o ipfwadm, será preciso responder com "M" a questão "IP tables
support (required for filtering/masq/NAT) (CONFIG_IP_NF_IPTABLES)". Será
necessário carregar manualmente o módulo correspondente ao firewall que deseja
utilizar (modprobe iptables_filter.o no caso do iptables).
Não execute mais de um tipo de firewall ao mesmo tempo!!!
OBS2: É recomendável ativar o daemon kmod para carga automática de
módulos, caso contrário será necessário compilar todas as partes necessárias
embutidas no kernel, carregar os módulos necessários manualmente ou pelo
iptables (através da opção --modprobe=módulo).
#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
Ok, a máquina responde, agora vamos incluir uma regra no chain INPUT (-
A INPUT) que bloqueie (-j DROP) qualquer acesso indo ao endereço 127.0.0.1 (-d
127.0.0.1):
Desta vez a máquina 127.0.0.1 não respondeu, pois todos os pacotes com
o destino 127.0.0.1 (-d 127.0.0.1) são rejeitados (-j DROP). A opção -A é usada
para adicionar novas regras no final do chain. Além de -j DROP que serve para
rejeitar os pacotes, podemos também usar -j ACCEPT para aceitar pacotes. A
opção -j é chamada de alvo da regra ou somente alvo pois define o destino do
pacote que atravessa a regra (veja Especificando um alvo, Section 9.3.6
<http://focalinux.cipsga.org.br/guia/avancado/ch-fw-iptables.htm>). Bem vindo a
base de um sistema de firewall :-)
OBS1: - O acesso a interface loopback não deve ser de forma alguma
bloqueado, pois muitos aplicativos utilizam soquetes tcp para realizarem
conexões, mesmo que você não possua uma rede interna.
OBS2: - A tabela filter será usada como padrão caso nenhuma tabela seja
especificada através da opção -t.
#iptables -L INPUT -n
Para criar o chain internet (que pode ser usado para agrupar as regras de
internet) usamos o seguinte comando:
Para inserir regras no chain internet basta especifica-lo após a opção -A:
iptables -t filter -A internet -s 200.200.200.200 -j DROP
# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- anywhere localhost
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
Note que a regra que registra o pacote (-j LOG) deve aparecer antes da
regra que REJEITA (-j REJECT), caso contrário a regra de LOG nunca funcionará.
A única coisa que muda nas regras de log é o alvo da regra, isto facilita a
implementação de grandes conjuntos de regras de firewall.
A regra acima mostrará a seguinte saída no syslog do sistema:
iptables -N log-drop
iptables -A log-drop -j LOG
iptables -A log-drop -j DROP
E usar "log-drop" como alvo em suas regras. Mesmo assim esta solução é
"limitada" em relação a "-l" do ipchains porque o iptables não inclui detalhes de
qual chain bloqueou o pacote/qual pacote foi bloqueado, assim é necessário a
especificação da opção --log-prefix para as mensagens se tornarem mais
compreensíveis. Infelizmente o iptables não aceita variáveis, senão esta limitação
seria facilmente contornada.
Que criará o chain chamado intra-inter na tabela nat. Para inserir regras
neste chain será necessário especificar a opção "-t nat".
Os pacotes indo para a Internet (nossa conexão é feita via eth1, nossa
interface externa) vindo do endereço 192.168.1.2, são substituídos por
200.241.200.40 e enviados para fora. Quando a resposta a requisição é
retornada, a máquina com iptables recebe os pacotes e faz a operação inversa,
modificando o endereço 200.241.200.40 novamente para 192.168.1.2 e enviando
a resposta a máquina de nossa rede interna. Após 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.
Também é possível especificar faixas de endereços e portas que serão
substituídas:
O bit TOS é ajustado para Espera mínima e será enviado antes dos pacotes
com prioridade normal para fora. Para priorizar a transmissão de dados ftp saindo
da rede:
Existem muitas outras otimizações que podem ser feitas, só depende dos
requerimentos e análise de cada serviço da rede pelo administrador.
OBS: - Os pacotes que atravessam o alvo TOS somente tem os bits tipo do
serviço modificados, eles não serão de qualquer forma rejeitados.
iptables -t mangle -A PREROUTING -i eth0 -p tcp --sport 6666-6668 -j TOS --set-tos 0x10
Modifica o tipo de serviço para mínima espera de todo o tráfego enviado por
servidores de IRC vindo da interface eth0.
OBS: - Os pacotes que atravessam o alvo TOS somente tem os bits tipo do
serviço modificados, eles não serão de qualquer forma rejeitados.
6.6 Outros módulos do iptables
Os módulos do iptables são especificados com a opção -m módulo ou --
match módulo e permitem expandir a funcionalidade do firewall através de novas
conferências e recursos de filtragem adicionais, como limitar a conferência de
regras do firewall (um método útil de limitar ping floods, syn floods, etc).
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 não causar uma avalanche em seus logs. O valor padrão
é 3/h.
• --limit-burst num - Especifica o número inicial máximo de pacotes que irão
conferir, este número é aumentado por 1 a cada vez que o parâmetro --limit
acima não for atingido. O valor padrão é 5.
A regra acima limita em 1 vez por segundo (--limit 1/s) a passagem de pings
(echo requests) para a máquina Linux.
Limita respostas a pings (echo reply) vindos da interface ppp0 (-i ppp0) a 1
por segundo.
ATENÇÃO: Os exemplos acima devem são somente exemplos para
criação de suas próprias regras com limitações, caso um pacote não confira com a
regra ele será bloqueado pela próxima regra. Se uma regra como for colocada no
chain INPUT sem modificações obviamente colocará em risco a segurança de seu
sistema.
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 >$i
done
Desta forma qualquer endereço 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.
Este acima é mais simples e possui o mesmo efeito: Pacotes SYN são
usados para iniciar conexões, derrubando pacotes deste tipo significa bloquear
novas conexões. Pacotes de conexões já estabelecidas ainda são permitidos.
Estas regras acima servem para quem não deseja NENHUM acesso
indevido a sua máquina. Existem outras formas de bloquear conexões de modo
mais seletivo usando chains específicos, endereços de origem/destino, portas,
etc., este tipo de configuração é muito usada caso precise fornecer algum tipo de
serviço que seja acessível externamente e protegendo outros.
#!/bin/sh
TROJAN_PORTS="12345 31336 31337 31338 3024 4092 5714 5742 2583 8787 5556 5557"
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 laço
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 tráfego vindo da interface ppp0 pra o chain trojans-in (queremos que só o tráfego
vindo da internet seja analisado pelo chain trojans-in).
Muitas das portas especificadas na variável TROJAN_PORTS são 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 máquinas por dia infectadas pelo BO? :-).
No código acima a única coisa que precisa fazer para adicionar mais portas
é inseri-las na variável TROJAN_PORTS e executar o programa. O laço 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 número de portas alvo, este código pode ser muito
simplificado usando o recurso multiport do iptables (veja “6.6.6 Especificando
múltiplas portas de origem/destino” para detalhes).
#!/bin/sh
# Modelo de configuração de firewall
# Autor: Gleydson M. Silva
# Data: 05/09/2001
# Descrição: Produzido para ser distribuído livremente, acompanha o guia
# Foca GNU/Linux. http://focalinux.cipsga.org.br
#
# É assumido um sistema usando kmod para carga automática dos módulos usados por
# esta configuração do firewall:
# ipt_filter
# ipt_nat
# ipt_conntrack
# ipt_mangle
# ipt_TOS
# ipt_MASQUERADE
# ipt_LOG
# Se você tem um kernel modularizado que não utiliza o kmod, será necessário
# carregar estes módulos via modprobe, insmod ou iptables --modprobe=modulo
###############################################################
# Tabela filter #
###############################################################
# Primeiro aceitamos o tráfego vindo da Internet para o serviço www (porta 80)
iptables -A ppp-input -p tcp --dport 80 -j ACCEPT
#######################################################
# Tabela nat #
#######################################################
# Não queremos que usuários tenham acesso direto a www e smtp da rede externa, o
# squid e smtpd do firewall devem ser obrigatoriamente usados. Também registramos
# as tentativas para monitorarmos qual máquina está tentando conectar-se
diretamente.
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp+ -p tcp --dport 80 -j LOG --
log-prefix "FIREWALL: SNAT-www "
iptables -t nat -A POSTROUTING -s 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 serviços 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 tráfego desconhecida indo para eth0 (conexões vindas
# de ppp+) são bloqueadas aqui
iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.0/24 -j LOG --log-prefix
"FIREWALL: SNAT unknown"
iptables -t nat -A POSTROUTING -o eth0 -d 192.168.1.0/24 -j DROP
# Quando iniciamos uma conexão ppp, obtermos um endereço classe A (10.x.x.x) e após
# estabelecida a conexão real, este endereço é modificado. O tráfego indo para
# a interface ppp não deverá ser bloqueado. Os bloqueios serão feitos no
# chain INPUT da tabela filter
iptables -t nat -A POSTROUTING -o ppp+ -j ACCEPT
###############################################
# Tabela mangle #
###############################################
7.1 Introdução
Resolvi escrever esse manual principalmente porque ninguém o havia feito
antes. Dentre todos os inúmeros documentos sobre Linux e software livre em
<http://www.linuxdoc.org> não há nenhum que fale sobre Squid, mesmo em
inglês, quem diria em português.
Você poderá encontrar maiores informações sobre o Squid no seu website
(<http://www.squid-cache.org>) e ainda poderá recorrer a FAQS e a lista de
discussão para dúvidas.
Squidnomicon significa manual do Squid. Eu achei divertido fazer uma
relação com o Necronomicon (Livro dos Mortos). Mas não espere encontrar
nenhuma outra semelhança além 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 licença Free GNU Documentation.
Qualquer ajuda (dicas, comentários) e/ou modificações são muito bem-vindas.
7.3.1 Instalação
A instalação poderá depender de qual distribuição você estiver usando.
Normalmente você encontrara o Squid nos CDROM de distribuição em formatos
RPM, DEB ou TGZ. Você também pode usar o fonte do Squid e compilar os
binários usando somente as funções que você precisar.
Para distribuições que trabalham com pacotes a instalação é muito simples:
rpm -ivh squid-versao.rpm (para distribuições baseadas em RPM)
ou
apt-get install squid (para o Debian)
O Conectiva (versão 6 e posteriores) também podem usar as mesmas
facilidades do apt-get.
Para instalar a partir do fonte, faca o download do Squid em
<http://www.squid-cache.org> na seção de downloads. Depois execute:
tar -xzvf squid-versao.tar.gz <http://squid-versao.tar.gz>/
cd /diretorio_criado
./configure
make
make install
Ler o arquivo README que acompanha o arquivo fonte também e
essencial para obter os detalhes.
A versão termina em números pares (para versões estáveis) e impares (para
versões de teste) então escolha a ultima de acordo com seus interesses. Procure
sempre pelos arquivos com o RELEASE incluso.
7.3.2 Configuração
Depois de instalado você provavelmente (espero!) terá os binários e
arquivos de configuração, muitos deles comentados e precedidos de comentários
sobre as funções que exercem. O arquivo de configuração do Squid fica em
/etc/squid.conf. Inicialmente você deve configurar apenas 3 parâmetros para que
tenha o Squid ao menos respondendo a requisições e criando cache das páginas
requisitadas:
http_port 3128
cache_mem 8Mb
http_access allow all
Com exceção do ultimo parâmetro (que deve ser inserido) esses
parâmetros estão apenas comentados (com um sinal "#"). Depois disso você pode
iniciar o Squid usando o script de inicialização que fica dentro do diretório
/etc/rc.d/init.d (ou /etc/init.d para o Debian):
# cd /etc/rc.d/init.d
#./squid start
Na maioria das distribuições o cache é criado quando o Squid é iniciado
pela primeira vez (pelo menos para sistemas Linux). Você ainda pode forçar a
criação de cache digitando:
# squid -z
Ainda é possível fazer com que o Squid interprete novos parâmetros no
arquivo de configuração sem interromper os processos atuais:
# squid -k reconfigure
O Squid já está rodando e aceitando conexões. Agora vamos explicar
melhor os parâmetros utilizados:
• http_port 3128: Este parâmetro indica em que porta o Squid estará
aceitando requisições de páginas Web. Várias portas diferentes podem
ser listadas simultaneamente, desde que estejam livres.
• cache_mem 8Mb: Este parâmetro especifica a quantidade ideal de
memória a ser usada pelo Squid, mas isso não significa um limite. O
Squid irá ultrapassar o valor estipulado se assim for necessário.
• http_access allow all: Inicialmente o Squid estará recusando o
serviço de proxy para qualquer requisição que não tenha sido feita a
partir do localhost (127.0.0.1). Essa diretriz, pelo contrário, esta
permitindo que qualquer um requisite qualquer página.
O Squid permite uma grande flexibilidade sobre o que é permitido ou não
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
endereço IP do proxy Squid sem esquecer de indicar a porta 3128.
As solicitações agora serão atendidas pelo Squid, que irá fazer cache das
requisições, como páginas html e figuras, o que aumenta consideravelmente a
rapidez de navegação e diminui a ocupação de banda do link.
7.5.3 Posso usar uma lista de controle com multiplos horários para
diferentes usuários?
Se você pensou em algo assim:
acl carlos src 192.168.10.1
acl davi src 192.168.10.2
acl cleusa src 192.168.10.3
acl manhã time 06:00-11:00
acl tarde time 14:00-14:30
acl noite time 16:25-23:59
http_access allow carlos manhã almoço
http_access allow davi manhã almoço
http_access allow cleusa noite
você errou !
O Squid interpreta regras desta forma:
http_access REGRA definição1 E definição 2 E definição3
OU
http_access AÇÃO definição1 E definição 2 E definição3
Atenção porque esses E e OU são operadores lógicos! Portanto a acl:
http_access allow carlos manhã almoço
nunca irá funcionar porque manhã E almoço serão sempre falsos, uma vez
que nunca serão verdadeiros na mesma hora. Como é falso (de acordo com a
lógica booleana):
0/1 E 1 = 0 (falso)
http_access allow carlos E manhã OU
http_access allow carlos almoço
7.5.4 Quero criar uma acl para bloquear sites com a palavra sexo pois
meus funcionários ficam baixando filmes em Divx de
pornografia:
acl porno url_regex sexo
http_access deny porno
Isso tem algumas conseqüências. Primeiro que essa regra deve encabeçar
a lista para você não 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 conteúdo não ser o mesmo.
7.5.5 A idéia acima e ótima, mas eu tenho uma lista de palavras para
fazer o mesmo. Terei que repetir esse comando várias 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.7 Meu diretor reclama que agora não consegue mais ler as
entrevistas no site da Playboy.
Chefe é chefe. Antes que ele deixe de pagar seu salário, inclua no arquivo
/etc/squid.conf :
acl entrevistas urlpath_regex entrevistas
http_access allow entrevistas
Essa regra deve vir ANTES do bloqueio do site da Playboy.