[Anterior: Listas y macros] [Contenidos] [Siguiente: Filtrado de paquetes]
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).
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á.
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).
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.
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]