[Предыдущая: Списки и Макросы]
[Содержание]
[Следующая: Фильтрация пакетов]
PF: Таблицы
Содержание
Вступление
Таблицы используются для хранения групп IPv4 и/или IPv6 адресов.
Поиск по таблице осуществляется очень быстро и потребляет меньше памяти и
процессорного времени, чем поиск по спискам.
По этой причине таблица является идеальным местом для хранения больших
групп адресов, поскольку поиск по таблице содержащей 50,000 адресов
занимает не на много больше времени, чем поиск по таблице содержащей 50 адресов.
Таблицы могут использоваться, как:
Таблицы создаются либо в файле
pf.conf, либо с помощью
pfctl(8).
Настройка
В pf.conf, таблицы создаются с помощью директивы table.
Следующие атрибуты могут быть определены для каждой таблицы:
- const - содержимое таблицы не может быть изменено, после того,
как таблица была создана. Когда этот атрибут не указан,
pfctl(8) может быть использован для добавления или удаления адресов из таблицы,
в любое время, даже при
securelevel(7) равному двум или больше.
- persist - заставляет ядро держать таблицу в памяти, даже
когда к ней не применено никаких правил. Без этого атрибута, ядро
автоматически удалит таблицу, когда последнее правило ссылающееся
на таблицу будет очищено.
Пример:
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>:
- 172.16.50.5 - входит в блок адресов 172.16.0.0/16; пакет соответствует
таблице и будет пропущен
- 172.16.1.25 - входит в блок адресов !172.16.1.0/24; пакет соответствует
записи в таблице, но запись отрицательная (используется модификатор "!");
пакет не соответствует таблице и будет блокирован
- 172.16.1.100 - соответствует записи 172.16.1.100; пакет соответствует
таблице и будет пропущен
- 10.1.4.55 - не соответствует таблице и будет блокирован
[Предыдущая: Списки и Макросы]
[Содержание]
[Следующая: Фильтрация пакетов]
www@openbsd.org
$OpenBSD: tables.html,v 1.4 2009/08/01 21:41:39 tobias Exp $