[OpenBSD]

[Anterior: Primeiros Passos] [Conteúdo] [Próximo: Tabelas]

PF: Listas e Macros


Conteúdo


Listas

Uma lista permite a especificação de múltiplas informações similares dentro de uma regra. Por exemplo, múltiplos protocolos, números de portas, endereços, etc. Portanto, em vez de escrever uma regra de filtragem para cada endereço IP a ser bloqueado, pode-se escrever apenas uma regra especificando os endereços IP em uma lista. Listas são definidas colocando seus itens entre chaves { }.

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.

Macros

Macros são variáveis definidas pelo usuário que 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 conjunto de regras PF, além de facilitar bastante sua manutenção.

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]


[voltar] www@openbsd.org
$OpenBSD: macros.html,v 1.16 2012/11/07 09:26:25 ajacoutot Exp $