У pf есть некоторые особенности использования ключевых слов при составлении правил. Ими пользоваться достаточно просто. Основное преимущество заключается в том, что мы не привязывается к IP адресу, а это очень удобно
– один и тот же конфиг можно использовать на многих машинах, без изменений
– при смене IP адреса нет надобности редактировать правила
Разберём ключевые слова. $int_name – означает имя интерфейса
($int_name) – скобки в имени интерфейса означают, что PF будет отслеживать изменения IP адреса. Очень удобно использовать, если у вас динамический адрес
$int_name:network – Замещается сетью CIDR закреплённой за данным интерфейсом
$int_name:broadcast – Замещается широковещательным адресом закреплённым за данным интерфейсом
$int_name:peer – Замещается адресом партнёра для point-to-point интерфейса. То есть эту конструкцию можно использовать как адрес шлюза при подключении через pptp
self – разворачивается в список IP-адресов данного сервера, включая loopback
(self) – это примерно тоже самое, что “{ (первый_интерфейс) (второй_интерфейс) … (последний_интерфейс) }”, т.е. динамически меняющийся список адресов всех интерфейсов.
:0 (цифра ноль) – может быть добавлен к любому интерфейсу или к любому из вышеуказанных модификаторов, для указания, что PF не должен затрагивать alias IP адреса. Этот модификатор может использоваться, при указании интерфейса в круглых скобках. Пример: fxp0:network:0
tun – означает группу интерфейсов tun1, …, tunN
Примеры
pass in on ($int_name)
block in proto icmp on $int_name:network
pass in on $int_name proto tcp from $int_name:peer to $int_name port www
block in on $int_name:broadcast