[OpenBSD]

[Anterior: Começando] [Conteúdo] [Próximo: Tabelas]

PF: Listas e Macros


Conteúdo


Listas

Uma lista permite a especificação de múltiplas informações similares numa regra. Por exemplo, vários protocolos, números de portas, endereços, etc. Portando, ao invés de escrever uma regra de filtragem para cada endereço IP a ser bloqueado, pode-se escrever apenas uma regra especificando uma lista de endereços IP. Listas são definidas colocando seus itens entre chaves { }.

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.

Macros

Macros são varíaveis definidas pelo usuário e podem conter endereços IP, números de portas, nomes de interfaces, etc. O uso de macros pode reduzir em muito a complexidade de um arquivo de regras PF além de facilitar bastante sua manutenção.

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]


[voltar] www@openbsd.org
$OpenBSD: macros.html,v 1.7 2007/12/01 10:39:11 tobias Exp $