[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 de saída é aceito e uma regra anchor é criada com nome goodguys. Regras podem ser inseridas na âncora de três maneiras:
load instrui o pfctl a inserir, na âncora especificada, as 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 o 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-wwwPara carregar regras diretamente do conjunto principal, coloque as regras anchor em um bloco delimitado por parênteses:
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
anchor "goodguys" {
pass in proto tcp from 192.168.2.3 to port 22
}
Regras anchor inline também podem conter mais âncoras.
allow = "{ 192.0.2.3 192.0.2.4 }"Com âncoras inline, o nome da âncora se torna opcional. Note que a âncora aninhada no exemplo acima não tem um nome. Também note que a macro $allow é criada fora da âncora (no conjunto principal) e é usada dentro da âncora.
anchor "goodguys" {
anchor {
pass in proto tcp from 192.0.2.3 to port 80
}
pass in proto tcp from $allow to port 22
}
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, a não ser que esteja usando âncoras inline, 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 ancoramento 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.
A mesma sintaxe pode ser aplicada para âncoras inline.
allow = "{ 192.0.2.3 192.0.2.4 }"
anchor "goodguys" in proto tcp {
anchor proto tcp to port 80 {
pass from 192.0.2.3
}
anchor proto tcp to port 22 {
pass from $allow
}
}
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]