[OpenBSD]

[Anterior: Listas y macros] [Contenidos] [Siguiente: Filtrado de paquetes]

PF: Tablas


Índice de contenidos


Introducción

Una tabla se usa para contener un grupo de direcciones de IPv4 y/o IPv6. Las búsquedas (lookups) en una tabla son muy rápidas y consumen menos memoria y recursos del procesador que las listas. Por ello, una tabla es ideal para contener un grupo grande de direcciones, ya que el tiempo que tarda una búsqueda en una tabla con 50.000 direcciones es poco más que el tiempo que se tarda para otra con 50 direcciones. Las tablas se pueden usar de las siguientes formas:

Las tablas se crean bien en pf.conf o bien mediante la orden pfctl(8).

Configuración

En pf.conf, las tablas se crean usando la directiva table. Se pueden especificar los siguientes atributos para cada tabla:

Ejemplo:

table <goodguys> { 192.0.2.0/24 }
table <rfc1918> const { 192.168.0.0/16, 172.16.0.0/12, \
   10.0.0.0/8 }
table <spammers> persist

block in on fxp0 from { <rfc1918>, <spammers> } to any
pass  in on fxp0 from <goodguys> to any

También se pueden especificar direcciones usando el modificador de negación, "!" (o "not"), como:

table <goodguys> { 192.0.2.0/24, !192.0.2.5 }

Ahora, en la tabla goodguys concordarán todas las direcciones en la red 192.0.2.0/24 excepto la dirección 192.0.2.5.

Nótese que los nombres de las tablas siempre van entre < >.

En las tablas también se pueden incluir ficheros de texto que contengan una lista de direcciones IP y redes:

table <spammers> persist file "/etc/spammers"

block in on fxp0 from <spammers> to any

El fichero /etc/spammers contendría una lista de direcciones IP y/o de bloques de red CIDR, una/o por línea. Cualquier línea que empiece con un carácter # se tratará como un comentario y no se procesará.

Manipulación de tablas con pfctl

Las tablas se pueden manipular al vuelo usando pfctl(8). Por ejemplo, para añadir entradas a la tabla <spammers> que se ha creado antes:

# pfctl -t spammers -T add 218.70.0.0/16

Esto también creará la tabla <spammers> si no existía anteriormente. Para ver un listado de las direcciones en una tabla:

# pfctl -t spammers -T show

El argumento -v también se puede usar con -Tshow para mostrar estadísticas por cada entrada de la tabla. Para eliminar direcciones de una tabla:

# pfctl -t spammers -T delete 218.70.0.0/16

Para más información sobre la manipulación de tablas con pfctl, por favor lea la página del manual pfctl(8).

Especificación de direcciones

Además de especificarse por la dirección IP, los anfitriones (hosts) también se pueden especificar por su nombre de anfitrión (hostname). Cuando el nombre de anfitrión se resuelve en una dirección IP, todas las direcciones IPv4 y IPv6 resultantes se introducen en la tabla. Las direcciones IP también se pueden introducir en una tabla especificando un nombre de interfaz válido o la clave self. La tabla contendrá todas las direcciones IP asignadas a esa interfaz o grupo, o a la máquina (incluyendo direcciones de loopback), respectivamente.

Una limitación al especificar direcciones es que 0.0.0.0/0 y 0/0 no funcionan en tablas. La alternativa consiste en escribir esa dirección manualmente o usar una macro.

Concordancia de direcciones

La búsqueda de una dirección en una tabla devolverá la entrada que concuerde con más precisión. Esto permite la creación de tablas como:

table <goodguys> { 172.16.0.0/16, !172.16.1.0/24, 172.16.1.100 }

block in on dc0
pass  in on dc0 from <goodguys>

La dirección de origen de cualquier paquete que entre a través de dc0 tendrá una concordancia en la tabla <goodguys>:

[Anterior: Listas y macros] [Contenidos] [Siguiente: Filtrado de paquetes]


[back] www@openbsd.org
$OpenBSD: tables.html,v 1.9 2011/02/20 10:08:24 ajacoutot Exp $