Ну, я точно не знал, как задать этот вопрос, но я знаю, что вы можете использовать ключевое слово flags, чтобы указать, какие флаги вы хотите отфильтровать.
Согласно документации Пакетного фильтра:
Чтобы PF проверял флаги TCP во время оценки правила, используется ключевое слово flags со следующим синтаксисом:
flags check/mask
помечает любыеЧасть маски указывает PF проверять только указанные флаги, а часть проверки указывает, какие флаги должны быть включены в заголовке, чтобы произошло совпадение. Использование ключевого слова any позволяет установить любую комбинацию флагов в заголовке.
передача на fxp0 proto tcp с любого на любой порт ssh flags S/SA
передача на fxp0 proto tcp с любого на любой порт sshПоскольку флаги S/SA установлены по умолчанию, приведенные выше правила эквивалентны. Каждое из этих правил пропускает TCP-трафик с установленным флагом SYN, при этом рассматривая только флаги SYN и ACK. Пакет с флагами SYN и ECE будет соответствовать приведенным выше правилам, а пакет с SYN и ACK или просто ACK — нет.
Итак, на примере я понял, почему пакет с флагами S и E может пройти (потому что флаг E не считается из-за маски SA) и почему пакет только с флагом Ack не может пройти фаервол.
Чего я не понял, так это почему пакет с флагами S и A не может пройти правило S/SA, если флаг S в заголовке пакета "включен". Может быть, документация неоднозначна? Извините, если это глупый вопрос или неправильное понимание английского языка.
Я предполагаю, что он может пройти, только если он ДОЛЖЕН ИМЕТЬ ТОЛЬКО флаг S. В арифметике набора будет что-то вроде этого:
флаги должны быть включены в заголовке -> флаги относятся к замаскированному подмножеству [pf doc]
только флаг (s) должен быть включен в заголовке -> флаг(ы) эквивалентен замаскированному подмножеству [что я понял из приведенного примера]
Заранее спасибо!