Якорь — это место куда подгружается поднабор правил и одновременно якорь это имя поднабора.
Поднаборы правил можно объявлять при помощи «якорей», — anchor Существует четыре типа anchor’ов:
- anchor name — выполняются все правила фильтра из набора name;
- binat-anchor name — выполняются все правила binat трансляции из набора name;
- nat-anchor name — выполняются все правила nat трансляции из набора name;
- rdr-anchor name — выполняются все правила перенаправления из набора name;
Поднаборы могут быть вложенными и вызывать друг друга по цепочке. Правила anchor обрабатываются в том месте, где они вызываются. Например, правило anchor в основном конфигурационном файле создаёт поднабор, родителем которого являентся главный набор правил, другие поднаборы загружаемые в данном поднаборе при помощи директивы load anchor являются его потомками.
Пример:
rdr-anchor merdr #объявляем тип якоря load anchor merdr from "/etc/pf.rdr" #фаил откуда загружаются правил
Все макросы и объявления переменных действуют в рамках одного конфига, что бы переменные работали в файле якоря необходимо их заново определить.
Так же якоря позволяют добавлять правила динамически:
# echo 'rdr on tun0 proto tcp from any to (tun0) port 80 \ -> 192.168.0.2 port 80' | pfctl -a merdr:1 -f "" -
Что бы добавить еще правило в якорь merdr нужно указать новый набор
# pfctl -a merdr:2
Поскольку правила хранятся не в основном списке что бы посмотреть их нужно указать имя якоря и набор
#
pfctl -a merdr:1 -s nat#
pfctl -a merdr:2 -s nat