>Когда что правильно применять? keep-state создает динамическое правило, в котором сохраняются ип получателя/отправителя, порты, протокол и т.п. Если при проверке ответного пакета встречается правило check-state, то происходит поиск по атрибутам среди всех динамических правил. При этом считается что ответный пакет проходит через правило с keep-state, которое создало динамическую запись и таким образом счетчики в нем увеличатся. Пример
add 100 check-state
add 110 permit udp from 10.0.0.0/24 to any 53 out via ext-intf keep-state
Исходящие запросы ДНС будут матчиться по 110-му правилу и пропускаться наружу, одновременно будет создаваться динамическая запись о пропущенном пакете.
Когда прийдет ответ, при проверке check-state будет найдена динамическая запись с соотв. ип/портами и пакет будет пропущен внутрь.
setup применяется только для протокола tcp и, фактически, идентифицирует первый пакет в устанавливаемом соединениии. Дальше все пакеты идут с флагом established. Пример - разрешить установку соединений наружу на порт 80, а входящие соединения запретить.
add 100 permit tcp from any to any established
add 110 permit tcp from any to any 80 setup out via ext-intf
add 120 deny tcp from any to any 80 setup in via ext-intf
еще плюс established в том, что его можно расположить максимально вверху таблицы и сократить кол-во проверок по правилам.