[Anterior: Primeiros Passos] [Conteúdo] [Próximo: Tabelas]
Quando o pfctl(8) encontra uma lista durante o carregamento do conjunto de regras, ele cria várias regras, uma para cada item na lista. Por exemplo:
block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any
é expandida para:
block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any
Múltiplas listas podem ser especificadas em uma regra:
match in on fxp0 proto tcp to port { 22 80 } rdr-to 192.168.0.6
block out on fxp0 proto { tcp udp } from { 192.168.0.1, \
10.5.32.6 } to any port { ssh telnet }
Perceba que as vírgulas entre os elementos da lista são opcionais.
As listas também podem conter listas aninhadas:
trusted = "{ 192.168.1.2 192.168.5.36 }"
pass in inet proto tcp from { 10.10.0.0/24 $trusted } to port 22
Tome cuidado com construções do tipo "lista negada", um erro comum é:
pass in on fxp0 from { 10.0.0.0/8, !10.1.2.3 }
Enquanto a intenção geralmente é corresponder a "qualquer endereço em 10.0.0.0/8, exceto 10.1.2.3", na verdade a regra expande para:
pass in on fxp0 from 10.0.0.0/8
pass in on fxp0 from !10.1.2.3
que corresponde a qualquer endereço possível. Nesse caso, uma tabela deve ser usada.
Nomes de macro devem começar com uma letra e podem conter letras, dígitos e sublinhados. Não se pode utilizar palavras reservadas como pass, out ou queue como nomes de macros.
ext_if = "fxp0"
block in on $ext_if from any to any
Isso cria a macro nomeada ext_if. Quando a macro é referenciada após sua criação, seu nome deve ser precedido pelo caractere $.
Macros também podem expandir para listas, como:
friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"
Macros podem ser definidas recursivamente. Como macros não são expandidas entre aspas, a seguinte sintaxe deve ser usada:
host1 = "192.168.1.1"
host2 = "192.168.1.2"
all_hosts = "{" $host1 $host2 "}"
A macro $all_hosts agora expande para 192.168.1.1, 192.168.1.2.
[Anterior: Primeiros Passos] [Conteúdo] [Próximo: Tabelas]