>Если все фильтры вкомпилированы в ядро, то порядок следующий:
>interface in->bpf->ipnat->ipfilter->ipfw->pkt
>pkt->ipfilter->ipnat->ipfw->bpf->interface out
>Если фильтры подгружаются модулями, то порядок прохождения зависит от
>порядка загрузки.
>
>Интересует где в этой цепочке будет размещаться pf, если его тоже заюзать? При использовании модулей, как вы уже сказали, порядок будет определяться порядком загрузки модулей. Причина здесь в том, что пакетные фильтры регистрируют себя в pfil(9).
При включении всех фильтров в ядро порядок будет определять SYSINIT.
Чтобы определить порядок, нужно открыть файл sys/kernel.h. В нём определён порядок инициализации определённых подсистем. Теперь, простейшее:
# grep DECLARE_MODULE netinet/ip_fw_pfil.c
DECLARE_MODULE(ipfw, ipfwmod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY);
# grep DECLARE_MODULE contrib/pf/net/pf_ioctl.c
DECLARE_MODULE(pf, pf_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_FIRST);
# grep DECLARE_MODULE contrib/ipfilter/netinet/mlfk_ipl.c
DECLARE_MODULE(ipfilter, ipfiltermod, SI_SUB_PROTO_DOMAIN, SI_ORDER_ANY);
От сюда следует: первым будет ipfilter, затем pf, затем ipfw.
PS. IMHO.