[Anterior: Scrub (Normalização de Pacotes)] [Conteúdo] [Próximo: Fila de Pacotes e Priorização]
Subconjuntos de regras são vinculados ao conjunto principal utilizando-se de âncoras. Existem quatro tipos de regras anchor:
Por exemplo:
ext_if = "fxp0"
block on $ext_if all
pass out on $ext_if all keep state
anchor goodguys
Estas regras definem uma política "negar por padrão" na interface fxp0 para tráfego entrando e saindo. O tráfego é então aceito e uma regra anchor é criada com nome goodguys. Regras podem ser inseridas na âncora de duas maneiras:
load instrui pfctl a inserir na âncora especificada regras carregadas de um arquivo texto. A regra load deve ser colocada depois da regra anchor. Exemplo:
anchor goodguys
load anchor goodguys:ssh from "/etc/anchor-goodguys-ssh"
Para adicionar regras a uma âncora usando pfctl, o seguinte tipo de comando pode ser usado:
# echo "pass in proto tcp from 192.0.2.3 to any port 22" \
| pfctl -a goodguys -f -
Regras podem ser salvas e carregadas de arquivos texto:
# cat >> /etc/anchor-goodguys-www
pass in proto tcp from 192.0.2.3 to any port 80
pass in proto tcp from 192.0.2.4 to any port { 80 443 }
# pfctl -a goodguys -f /etc/anchor-goodguys-www
Regras de filtragem e tradução podem ser carregadas no conjunto principal usando-se a mesma sintaxe e opções que as regras do arquivo principal. Uma diferença porém, é que as macros usadas também devem estar definidas na âncora, macros definidas no arquivo pai não são visíveis na âncora.
Uma vez que âncoras podem ser aninhadas, é possível especificar que todas as âncoras filho dentro de uma âncora especificada sejam avaliadas:
anchor "spam/*"
Esta sintaxe faz com que cada regra dentro de cada âncora anexada a âncora spam seja avaliada. As âncoras filho serão avaliadas em ordem alfabética mas não são recursivas. Âncoras são avaliadas sempre relativamente a âncora em que estão definidas.
Cada âncora, bem como o arquivo principal, existem separados dos outros subconjuntos de regras. Operações executadas num grupo de regras, como remover as regras, não afetam regras agrupadas em outros subconjuntos. Além disso, remover um ponto de âncoramento do conjunto principal de regras não causa destruição da âncora ou qualquer âncora filho vìnculado a ela. Uma âncora não é destruída até que seja removida usando pfctl(8) e que não tenha âncoras filho dentro da âncora.
ext_if = "fxp0"
block on $ext_if all
pass out on $ext_if all keep state
anchor ssh in on $ext_if proto tcp from any to any port 22
Regras na âncora ssh somente são avaliadas para pacotes TCP com destino a porta 22 vindos da interface fxp0. Regras são então adicionadas à anchor assim:
# echo "pass in from 192.0.2.10 to any" | pfctl -a ssh -f -
Portando, mesmo que a regra de filtragem não especifique interface, protocolo ou porta, o host 192.0.2.10 só poderá se conectar com SSH por causa da definição na regra anchor.
Para listar todas regras na âncora nomeada ssh:
# pfctl -a ssh -s rules
Para remover todas regras de filtragem da mesma âncora:
# pfctl -a ssh -F rules
Para uma listagem completa de comandos, por favor consulte pfctl(8).
[Anterior: Scrub (Normalização de Pacotes)] [Conteúdo] [Próximo: Fila de Pacotes e Priorização]