[OpenBSD]

[Предыдущая: Списки и Макросы] [Содержание] [Следующая: Фильтрация пакетов]

PF: Таблицы


Содержание


Вступление

Таблицы используются для хранения групп IPv4 и/или IPv6 адресов. Поиск по таблице осуществляется очень быстро и потребляет меньше памяти и процессорного времени, чем поиск по спискам. По этой причине таблица является идеальным местом для хранения больших групп адресов, поскольку поиск по таблице содержащей 50,000 адресов занимает не на много больше времени, чем поиск по таблице содержащей 50 адресов. Таблицы могут использоваться, как:

Таблицы создаются либо в файле pf.conf, либо с помощью pfctl(8).

Настройка

В pf.conf, таблицы создаются с помощью директивы table. Следующие атрибуты могут быть определены для каждой таблицы:

Пример:

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

Адреса также могут быть заданы используя модификатор отрицания (или "не"):

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

Таблица goodguys будет соответствовать всем адресам в сети 192.0.2.0/24 кроме 192.0.2.5.

Обратите внимание, что название таблицы всегда должно быть заключено в треугольные < > скобки.

Таблицы также могут быть заполнены из текстовых файлов, содержащих список IP адресов и сетей:

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

block in on fxp0 from <spammers> to any

Файл /etc/spammers будет содержать список IP адресов и/или CIDR блоки сетей, по одному в каждой строке. Любые строки начинающиеся с # будут читаться, как комментарий и будут игнорироваться.

Управление через pfctl

Редактирование таблицы может происходить на лету, используя pfctl(8). Например для добавление записей в таблицу <spammers>, созданную выше:
# pfctl -t spammers -T add 218.70.0.0/16

Также эта команда создаст таблицу <spammers> если она ещё не существует. Вывод списка адресов в таблице:

# pfctl -t spammers -T show
Аргумент -v также может быть использован с аргументом -Tshow для отображения статистики для каждой записи в таблице. Удаление адресов из таблицы:
# pfctl -t spammers -T delete 218.70.0.0/16

Для получения более подобной информации по управлению таблицами через pfctl, читайте страницу руководства pfctl(8).

Указание адресов

Помимо указания IP адресов, хосты могут быть указаны через их имена(hostname). Когда имя преобразовывается в IP адрес, IPv4 и IPv6 адреса кладутся в таблицу. IP адреса также могут быть занесены в таблицу указанием точного названия интерфейса. Таблица будет содержать все IP адреса принадлежащие интерфейсу или машине(включая loopback адреса).

Одно ограничение, адреса 0.0.0.0/0 и 0/0 не будут работать в таблице. Альтернативой является жёсткое указание этих адресов, или использовать макросы.

Соответствие адресов

При поиске адресов в таблице, вернётся соответствующая запись. Это позволяет создавать такие таблицы, как:
table <goodguys> { 172.16.0.0/16, !172.16.1.0/24, 172.16.1.100 }

block in on dc0 all
pass  in on dc0 from <goodguys> to any

Исходные адреса любых пакетов входящих через интерфейс dc0 будут сравниваться с таблицей <goodguys>:

[Предыдущая: Списки и Макросы] [Содержание] [Следующая: Фильтрация пакетов]


[back] www@openbsd.org
$OpenBSD: tables.html,v 1.4 2009/08/01 21:41:39 tobias Exp $