[OpenBSD]

[Anterior: Primeros pasos] [Contenido] [Siguiente: Tablas]

PF: Listas y Macros


Índice de Contenidos


Listas

Una lista permite especificar múltiples criterios similares dentro de una misma regla, como puedan ser múltiples protocolos, números de puertos, direcciones, etc. De este modo, en lugar de escribir una regla de filtrado para cada dirección IP que haya que bloquear, se puede escribir una sola regla e indicar las direcciones IP en una lista aparte. Las listas se definen especificando los componentes dentro de { } llaves.

Así, cuando pfctl(8) está cargando el grupo de reglas y se encuentra con una lista, crea automáticamente múltiples reglas, una para cada uno de los componentes. Por ejemplo:

block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any

sería una contracción de:

block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any

Además, se pueden incluir varias listas dentro de una misma regla, y estas listas no se limitan sólo a reglas de filtrado:

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 }

Nótese que las comas entre los componentes de las listas son opcionales.

Macros

Las macros son variables definidas por el usuario que pueden contener direcciones IP, números de puertos, nombres de interfaces, etc. Las macros reducen la complejidad de un grupo de reglas de PF, y también facilitan mucho el mantenimiento de un grupo reglas.

Los nombres de las macros deben empezar con una letra y pueden contener letras, dígitos y guiones bajos. Los nombres de las macros no pueden ser palabras reservadas (como pass, out, o queue).

ext_if = "fxp0"

block in on $ext_if from any to any

Con la primera línea se ha creado una macro llamada ext_if. Cuando se hace referencia a una macro después de que ésta haya sido creada, su nombre debe ir precedido por el carácter $, como en la segunda línea del ejemplo.

Las macros también se pueden expandir mediante el uso de listas, como por ejemplo:

friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"

Las macros se pueden definir de forma recursiva, como componentes de una lista. Pero hay que tener en cuenta que las macros, si van entrecomilladas, no se expanden, por lo que hay que usar la siguiente sintaxis:

host1 = "192.168.1.1"
host2 = "192.168.1.2"
all_hosts = "{" $host1 $host2 "}"

Ahora, la macro $all_hosts se expandiría a 192.168.1.1, 192.168.1.2.

[Anterior: Primeros pasos] [Contenido] [Siguiente: Tablas]


[Índice] www@openbsd.org
Originally [OpenBSD: macros.html,v 1.9 ]
$OpenBSD: macros.html,v 1.8 2004/01/04 22:29:12 horacio Exp $
$Translation: macros.html,v 1.9 2004/01/04 21:32:07 horacio Exp $