[Anterior: Opções em Tempo de Execução]
[Conteúdo]
[Próximo: Âncoras]
PF: Scrub (Normalização de Pacotes)
Conteúdo
Introdução
"Scrubbing" é o processo de normalização de pacotes para que não haja
ambiguidades na interpretação pelo destino final do pacote. A diretiva
scrub também remonta pacotes fragmentados, protegendo alguns sistemas
operacionais de algumas formas de ataque, e descarta pacotes TCP que
possuam combinações de
sinalizadores inválidas.
Uma forma simples de uso da diretiva scrub:
scrub in all
Isso normaliza todos os pacotes chegando em todas as interfaces.
Uma razão para não fazer scrub em uma interface é no caso de haver
tráfego NFS atravessando-a. Algumas plataformas não-OpenBSD enviam
(e esperam) pacotes estranhos -- pacotes fragmentados com o bit
"do not fragment" marcado, que são (devidamente) rejeitados pelo
scrub. Isso pode ser resolvido através do uso da opção
no-df. Outra razão é que alguns jogos multijogadores
apresentam problemas de conexão ao passar por um firewall PF com
scrub ativado. Fora esses casos, o uso de scrub em todos
os pacotes é uma prática altamente recomendada.
A sintaxe da diretiva scrub é muito similar à sintaxe
das regras de filtragem, o que torna
fácil usar scrub de maneira seletiva em alguns tipos de pacotes
e outros não.
A palavra-chave no pode ser usada na frente de scrub
para especificar que pacotes não devem passar por scrub.
Assim como regras nat,
a primeira regra que corresponder vence.
Mais informações sobre os princípios e conceitos de scrub podem ser
encontradas no artigo científico
Network Intrusion Detection: Evasion, Traffic Normalization, and
End-to-End Protocol Semantics.
Opções
Scrub possui as seguintes opções:
- no-df
- Desmarca o bit don't fragment no cabeçalho IP do pacote.
Alguns sistemas operacionais são conhecidos por gerar pacotes
fragmentados com o bit don't fragment marcado. Isso é
particularmente verdadeiro no NFS. Scrub descarta
esses pacotes a não ser que a opção no-df
seja especificada. Pelo fato de alguns sistemas operacionais gerarem
pacotes don't fragment com campo de identificação
IP zero no cabeçalho, é recomendado o uso de
no-df em conjunto com random-id.
- random-id
- Substitui o campo de identificação IP de pacotes com
valores aleatórios para compensar sistemas operacionais que usam
valores previsíveis. Essa opção somente se aplica a pacotes
que não estão fragmentados após a reconstrução opcional de pacotes.
- min-ttl num
- Força um valor mínimo de "Time To Live" (TTL)
nos cabeçalhos de pacotes IP.
- max-mss num
- Força um tamanho máximo para o "Maximum Segment Size" (MSS)
nos cabeçalhos de pacotes TCP.
- fragment reassemble
- Armazena em buffer os pacotes que chegam fragmentados e os
reconstrói em pacotes completos antes de passá-los para o sistema de
filtragem. A vantagem é que as regras de filtragem têm que lidar apenas
com pacotes completos e podem ignorar fragmentos. A desvantagem é o
aumento do uso de memória para armazenar os fragmentos. Esse é o
comportamento padrão quando nenhuma opção fragment for
especificada. Essa também é a única opção fragment que funciona
com NAT.
- fragment crop
- Descarta fragmentos duplicados e elimina sobreposições.
Diferentemente de fragment reassemble, os fragmentos não
são armazenados em buffer, mas passados adiante assim que chegam.
- fragment drop-ovl
- Similar a fragment crop,
exceto que todos os fragmentos duplicados e sobrepostos serão
descartados assim como quaisquer fragmentos subsequentes.
- reassemble tcp
- Normaliza de maneira "stateful" as conexões TCP.
Ao usar scrub reassemble tcp, uma direção ("in"/"out") não deve
ser especificada. As seguintes normalizações são realizadas:
- Nenhum lado da conexão pode reduzir seu TTL de IP. Isso
é feito para a proteção contra um atacante enviando pacotes
que atinjam o firewall, afetando a informação de
estado da conexão, e expire antes de atingir a máquina de
destino. O TTL de todos pacotes é aumentado para o maior
valor possível para a conexão.
- Modula marcas temporais TCP
(RFC1323)
em cabeçalhos de pacotes para um número aleatório. Isso
pode impedir um observador de deduzir a quanto tempo a
máquina está ligada ou saber quantas máquinas existem
atrás de um gateway NAT.
Exemplos:
scrub in on fxp0 all fragment reassemble min-ttl 15 max-mss 1400
scrub in on fxp0 all no-df
scrub on fxp0 all reassemble tcp
[Anterior: Opções em Tempo de Execução]
[Conteúdo]
[Próximo: Âncoras]
www@openbsd.org
$OpenBSD: scrub.html,v 1.8 2009/10/17 15:58:26 ajacoutot Exp $