[Anterior: Começando] [Conteúdo] [Próximo: Tabelas]
Quando o pfctl(8) encontra uma lista ao carregar as 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
Várias listas podem ser especificadas numa regra e não estão limitadas apenas às regras de filtragem:
rdr on fxp0 proto tcp from any to any port { 22 80 } -> \
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 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 é casar com "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 casa com qualquer endereço possível. Neste caso, uma tabela deve ser usada.
Nomes de macro devem começar com uma letra e pode conter letras, dígitos e underscore. 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
Isto cria a macro nomeada ext_if. Quando a macro é referenciada após sua criação, seu nome deve ser precedido pelo caracter $.
Macros também podem expandir em listas como:
friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"
Macros podem ser definias 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: Começando] [Conteúdo] [Próximo: Tabelas]