[OpenBSD]

[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:

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]


[voltar] www@openbsd.org
$OpenBSD: scrub.html,v 1.8 2009/10/17 15:58:26 ajacoutot Exp $