Jump to content
Калькуляторы

FreeBSD 8.1: pf не удаётся загрузить после ipfw

Имеется шлюз на FreeBSD.

Для фильтрации используется ipfw, для nat - pf.

Пакеты на внешнем интерфейсе ходили по цепочке

input => pf => ipfw => routing => ipfw => pf => output.

Чтобы pf регистрировался после ipfw, в заголовок /etc/rc.d/ipfw добавлялась строка "BEFORE: pf"

На FreeBSD 6.x и 7.x это работало нормально.

 

В 8.x: pf всегда регистрируется первым, даже если ipfw вкомпилирован в ядро, а pf собран модулем.

"/etc/rc.d/pf restart" или "pfctl -d; pfctl -e" не помогает - исходящие пакеты всё равно вначале попадут в pf nat (до фильтрации в ipfw), а входящие - в ipfw (до NAT в pf).

 

http://cebka.pp.ru/blog/2007/10/24/определ...рохождения-пак/

описывает, как оно было раньше, но в 8.x порядок загрузки стал таким:

#define  IPFW_MODEVENT_ORDER  (SI_ORDER_ANY - 255)  /* On boot slot in here. */
DECLARE_MODULE(ipfw, ipfwmod, IPFW_SI_SUB_FIREWALL, IPFW_MODEVENT_ORDER);
DECLARE_MODULE(pf, pf_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_FIRST);

Штатные гуры ЖЖ ru_freebsd ничего путного не сказали:

http://community.livejournal.com/ru_freebsd/201631.html

 

Вопрос 1: решит ли проблему подгрузка pf с флагом SI_ORDER_ANY вместо SI_ORDER_FIRST?

Вопрос 2: нет ли решения, не связанного с патчем на ядро?

Edited by Ilya Evseev

Share this post


Link to post
Share on other sites
Вопрос 2: нет ли решения, не связанного с патчем на ядро?

Переписать фильтры с ipfw на pf.

Share this post


Link to post
Share on other sites

В итоге помогла правка /usr/src/sys/contrib/pf/net/pf_ioctl.c:

в строке "DECLARE_MODULE(pf, pf_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_FIRST);"

последний аргумент заменён на SI_ORDER_ANY.

 

2jab: Вы дали неумный совет.

Share this post


Link to post
Share on other sites

 

Мой совет удовлетворяет условиям исходной задачи, а Ваше решение - нет.

Share this post


Link to post
Share on other sites

Как минимум некоторые фичи ipfw жёстко зашиваются в код ядра при включении опций во время сборки и им плевать на порядок загрузки и всё остальное.

 

Если ipfw только фильтрует, без всяких фич типа диверта и прочего, то смысла его держать нет, производительности это не добавить ни чуть.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this