URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 3927
[ Назад ]

Исходное сообщение
"Загрузка правил pf при включении"

Отправлено bga83 , 13-Авг-08 23:58 
Доброго всем времени суток.
В общем ситуация такая: есть работающий сервер на FreeBSD 6.3, в качестве фаервола используется pf. Появилась необходимость перенести систему на другое железо. При помощи dump/restore перенес все разделы, подправил fstab и сделал диск загрузочным. Система запускается, все сервисы вроде бы нормально запускаются и работают, только с pf непонятные проблемы: сам pf работает, а вот правил загруженных у него нет (то есть pfctl -e выдает что pf запущен, а pfctl -sa никаких правил не показывает). После pfctl -f /etc/pf.conf все правила загружаются без проблем. При этом на старом железе таких проблем не возникало. В rc.conf проверял запускающие строки есть:
# firewall
pf_enable="YES"                 # Enable PF (load module if required)
pf_rules="/etc/pf.conf"         # rules definition file for pf
pf_flags=""                     # additional flags for pfctl startup

В логах на первый взгляд ничего криминального нет. Какие есть идеи? Вариант с установкой системы с нуля просьба не прелагать - не подходит по ряду причин.


Содержание

Сообщения в этом обсуждении
"Загрузка правил pf при включении"
Отправлено aurved , 14-Авг-08 10:56 
А названия сетевых интерфейсов не поменялись случаем?
Скорее всего сетевые карты ведь другого производителя.

"Загрузка правил pf при включении"
Отправлено bga83 , 14-Авг-08 16:35 
>А названия сетевых интерфейсов не поменялись случаем?
>Скорее всего сетевые карты ведь другого производителя.

Сетевые интерфейсы остались теже самые(что на стром что на новом железе em). Если бы это было нет так то после загрузки сервера вручную бы не получилось загрузить правила. А в реальности при ручной загрузке правил все проходит успешно. Сегодня попробовал пересобрать мири и ядро - не помогло.
Пробовал такую вещь: закомментировал все правила, кроме block all. - загрузка прошла нормально. Затем постепенно убирал коменты, выяснилось что есть несколько правил, из- за которых проявляется данная проблема. Но в них нет ничего особенного. Пример одного из "проблемных правил":
pass in on $int_if proto tcp from $Allow_FTP_FM to $Server_FM port { 20, 21, 35500:35600 } keep state

$Allow_FTP_FM и $Server_FM объявлены ранее  ине требуют DNS-преобразования, тем более что такое правило при pfctl -f /etc/pf.conf нормально подгружается


"Загрузка правил pf при включении"
Отправлено Krieger , 20-Авг-08 16:57 
В рамках мозгового шторма: может, загружаться стало быстрее и чёто "недогружается" к моменту запуска pf?

"Загрузка правил pf при включении"
Отправлено domas , 27-Авг-08 13:50 
man rcorder


"Загрузка правил pf при включении"
Отправлено domas , 26-Авг-08 02:32 
Вывод `dmesg -a` после загрузки в студию.



"Загрузка правил pf при включении"
Отправлено bga83 , 26-Авг-08 12:47 
Всем спасибо за помощь. Проблема решена.
Дело было в следующем: новый сервер запускал не подключеннным к сети, для того чтобы предварительно убедиться в его полной работоспособности. А для некоторых правил все же требовалось DNS-преобразование. После того как сервер был нормально подключен к сети, все нормально заработало.



"Загрузка правил pf при включении"
Отправлено s8500 , 16-Дек-09 21:18 
Еще точно такое же бывает в FreeBSD если используется OpenVPN или PPPoE, в частности интерфейс tun0..9
Т.е. когда начинает загружаться pf, то tun0..9 не имеют еще ip адресов, и pf выдает ошибку (которую видно по команде, как написал domas, 'dmesg -a'):

no IP address found for tun0
/etc/pf.conf:141:
could not parse host specification

pfctl:
Syntax error in config file: pf rules not loaded

Чтобы этого избежать нужно убрать во всех правилах из полей 'from' и 'to' имена интерфесов tun0..9, т.к. имя интерфейса в этих полях меняются на текущие ip адреса эти интерфейсов, а т.к. ip еще не присвоены, то и просходит ошибка.
Просто впишите вместо tun0..9 ip_адрес или маску подсети если ip выдается по dhcp.

Пример.
неправильно, правила не будут загружаться:
me = "vr0 tun0"
pass out quick proto udp from $me to port 33433:33626 keep state
# 33433:33626 (UDP) - traceroute for *nix

правильно так:
me = "vr0 192.168.10.0/24"
pass out quick proto udp from $me to port 33433:33626 keep state