Перейти к содержимому
Калькуляторы

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: нет ли решения, не связанного с патчем на ядро?

Изменено пользователем Ilya Evseev

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В итоге помогла правка /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: Вы дали неумный совет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.