nat-to и rdr-to правилах
route-to,
reply-to и dup-to
Таблицы можно создавать либо в pf.conf(5), либо при помощи pfctl(8).
table в файле
pf.conf. Следующие атрибуты можно использовать для таблиц:
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 -t spammers -T add 203.0.113.0/24Это также создаст таблицу <spammers>, если её ещё нет. Вывести список адресов таблицы можно при помощи этой команды:
# pfctl -t spammers -T showАргумент
-v можно использовать и совместно с
-T show, чтобы вывести статистику для каждой записи
таблицы. Удалить адреса из таблицы можно при помощи этой команды:
# pfctl -t spammers -T delete 203.0.113.0/24Более подробное описание работы с таблицами при помощи
pfctl находится в man-странице
pfctl(8).
self.
Таблица будет содержать все IP-адреса, назначенные этому интерфейсу или
группе или же машине (включая loopback адреса) соответственно.
Одно ограничение при указании адресов состоит в том, что
0.0.0.0/0 и 0/0 не будут работать в таблицах.
Альтернативой является hard-code-указание этого адреса или же использование
макроса.
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>
Любой входящий через dc0 пакет, будет иметь свой source-адрес,
совпадающий с таблицей <goodguys>: