The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"запуск pf из init, до ppp. как заставить ?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"запуск pf из init, до ppp. как заставить ?"  
Сообщение от netc (ok) on 20-Мрт-09, 10:43 
есть проблема на

FreeBSD unlim.ENERGOPOLUS0.LOCAL 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Thu Jan  1 14:37:25 UTC 2009     root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386

все бы хорошо, да pf не стартует из init при загрузке системы

он ругаеться на то, что в правиле присутствует не проинициализированный интерфейс
Ругни можно увидеть в выводе dmesg -a ниже по посту

части конфига /etc/pf.conf:


...
ext_if_ppp="tun0" # PPPoE over NIC in MB to MODEM Dynamic IP from TTN
...

## Если напишем nat pass ... то пакеты не будут проверяться, а будут натиться и$
## выпускаться
## если будет еще и кип стейт то будут и впускаться с флагом уст-го соед.
## Но мы не пишем здесь keep state оно идет уже по умолчанию в freebsd>7.0
## Открываем нат для

        nat pass on $ext_if_ppp from $ironws to any -> ($ext_if_ppp)
        nat pass on $ext_if_ppp from $direktorws to any -> ($ext_if_ppp)
        nat pass on $ext_if_ppp from $astalavistaws to any -> ($ext_if_ppp)

...

## Разрешаем нашему серверу ходить в Интернет
## разрешаем весь исходящий трафик с локальной машины В Интернет
## через ppp интерфейс и входящий с флагом установленного соединения

        pass out on $ext_if_ppp from $ext_if_ppp to any keep state
...

Далее в конфиге как вы понимаете также используеться инт. $ext_if_ppp

вывод dmesg -a:


sk0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=b<RXCSUM,TXCSUM,VLAN_MTU>
        ether 00:0f:38:6a:ae:b0
        inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
        media: Ethernet autoselect (none)
        status: no carrier
\M-N\M-A: not found
Starting pflog.
Mar 20 10:12:34 pflogd[396]: NSSWITCH(nss_method_lookup): winbind, passwd, endpwent, not found
Mar 20 10:12:34 pflogd[396]: [priv]: msg PRIV_OPEN_LOG received
Enabling pf.
No ALTQ support in kernel
ALTQ related functions disabled
no IP address found for tun0
/etc/pf.conf:90:
could not parse host specification

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

No ALTQ support in kernel
ALTQ related functions disabled
No ALTQ support in kernel
ALTQ related functions disabled
pf enabled
Starting PPP profile:
ttn
Mar 20 10:12:39 su: NSSWITCH(nss_method_lookup): winbind, group, setgrent, not found
Mar 20 10:12:39 su: NSSWITCH(nss_method_lookup): winbind, group, getgrent_r, not found
Mar 20 10:12:39 su: NSSWITCH(nss_method_lookup): winbind, group, endgrent, not found
Loading /lib/libalias_cuseeme.so
Loading /lib/libalias_ftp.so
Loading /lib/libalias_irc.so
Loading /lib/libalias_nbt.so
Loading /lib/libalias_pptp.so
Loading /lib/libalias_skinny.so
Loading /lib/libalias_smedia.so
.
Enabling pf. after ppp started
No ALTQ support in kernel
ALTQ related functions disabled
WARNING: attempt to net_add_domain(netgraph) after domainfinalize()
no IP address found for tun0
/etc/pf.conf:90:
could not parse host specification

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

No ALTQ support in kernel
ALTQ related functions disabled
Additional routing options:
IP gateway=YES
.
Starting devd.

Продолжим:

Что удалось выяснить:

1. если разобраться со скриптами инициализации, то pf стартует перед ppp
/etc/rc.d/pf:


#!/bin/sh
#
# $FreeBSD: src/etc/rc.d/pf,v 1.16.6.1 2008/11/25 02:59:29 kensmith Exp $
#

# PROVIDE: pf
# REQUIRE: FILESYSTEMS netif pflog pfsync
# BEFORE:  routing
# KEYWORD: nojail

. /etc/rc.subr
...

2. ppp
/etc/rc.d/pf:


#!/bin/sh
#
# $FreeBSD: src/etc/rc.d/ppp,v 1.13.2.3.2.1 2008/11/25 02:59:29 kensmith Exp $
#

# PROVIDE: ppp
# REQUIRE: netif isdnd
# KEYWORD: nojail

. /etc/rc.subr
...
ppp_poststart()
{
        # Re-Sync ipfilter and pf so they pick up any new network interfaces
        #
        echo "Enabling pf. after ppp started"
        pfctl -F all > /dev/null 2>&1
        pfctl -f /etc/pf.conf
        if ! pfctl -s info | grep -q "Enabled" ; then
                pfctl -e
        fi
}
...

Как видно из /etc/rc.d/ppp есть такой метод ppp_poststart() в котором происходит включение pf после старта ppp - но он тоже не помогает
Вот отрывочек из dmesg -a: Enabling pf. after ppp started


Enabling pf. after ppp started
No ALTQ support in kernel
ALTQ related functions disabled
WARNING: attempt to net_add_domain(netgraph) after domainfinalize()
no IP address found for tun0
/etc/pf.conf:90:
could not parse host specification

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

No ALTQ support in kernel
ALTQ related functions disabled
Additional routing options:
IP gateway=YES

получаем туже беду


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

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

Получаеться, что как то оно все таки должно работать, но не фига, только вручную после включения Через pfctl -f /etc/pf.conf начинает работать PF

3. Также погуглив нашел предложения

      Взять определения в круглые скобки ()
      например:
      


      ext_if_ppp="(tun0)" # PPPoE over NIC in MB to MODEM Dynamic IP from TTN
      

      - НЕ ПОМОГЛО

      Взять в скобки в каждом месте, где используться инт
      например:
      


       pass out on ($ext_if_ppp) from ($ext_if_ppp) to any keep state
      

      - НЕ ПОМОГЛО

4. Суть вопроса я надеюсь ясна как правильно решить данную проблему, чтобы pf нормально загружался при минимуме изменений в системных сценариях ?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "запуск pf из init, до ppp. как заставить ?"  
Сообщение от netc (ok) on 20-Мрт-09, 16:03 
ответа так и не дождавшись ;)

результат нешл сам

правда вчера тоже читал сам но ни как не мог понять и не получалось

вообще-то обидно, что не понял но заработало след.образом

ругалось на эту строчку и только

хотя вчера мне (может) показалось что ругалось на все где был $ext_if_ppp


pass out on $ext_if_ppp from $ext_if_ppp to any keep state

решение


pass out on $ext_if_ppp from ($ext_if_ppp) to any keep state


люди может кто понял все именно все относительно расставления таких () скобок

поделитесь пожалуйста, думаю не раз еще пригодиться ;)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "запуск pf из init, до ppp. как заставить ?"  
Сообщение от kam (ok) on 20-Мрт-09, 19:59 
>[оверквотинг удален]
>
>
 
>pass out on $ext_if_ppp from ($ext_if_ppp) to any keep state
>

>
>
>люди может кто понял все именно все относительно расставления таких () скобок
>
>
>поделитесь пожалуйста, думаю не раз еще пригодиться ;)

Со скобками вроде всё просто. Вот цитата из man (5) pf.conf

       Host name resolution and interface to address translation are done
       at ruleset load-time.  When the address of an interface (or host
       name) changes (under DHCP or PPP, for instance), the ruleset must
       be reloaded for the change to be reflected in the kernel.  Sur-
       rounding the interface name (and optional modifiers) in parentheses
       changes this behaviour.  When the interface name is surrounded by
       parentheses, the rule is automatically updated whenever the inter-
       face changes its address.  The ruleset does not need to be
       reloaded.  This is especially useful with nat.

Даже при пословном переводе (забивая на правила английского) становится понятно:

Разрешение имени хоста и трансляция интерфейса в адрес выполняются во время загрузки набора правил. Когда адрес интерфейса (или имя хоста) изменяется ( например при DHCP или РРР) набор правил должен быть перезагружен для того чтобы изменение отразилось в ядре. Взятие имени интерфейса в круглые скобки изменяет это поведение. Когда имя интерфейса берётся в круглые скобки, то правило обновляется автоматически когда интерфейс меняет адрес. Это особенно полезно при использовании NAT.

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "запуск pf из init, до ppp. как заставить ?"  
Сообщение от netc (??) on 23-Мрт-09, 09:47 
Я согласен с цитатой из man(5) pf.conf

Спасибо за перевод, кстати понятный.

Но тут по моему мнению не хватает ясности с тем где необходимо использовать скобки, а где нет.

Вот пример моего конфиг файла:

###########################################################################
## ЗАДАЕМ ПАРАМЕТРЫ (МАКРОСЫ) БРЭНДМАУЭРА #################################
###########################################################################

        int_if="sk0"            # NIC Marvell PCI (1000) Local Area Network 192.168.0.2

        ext_if="rl0"    # NIC in MB (100) to MODEM
        ext_if_ppp="tun0" # PPPoE over NIC in MB to MODEM Dynamic IP from TTN

## разрешенные типы icmp сообщений.
## Первое необходимо для работы UNIX traceroute (для win tracert этого
##  не требуется), а второе нужно когда пытаемся коннектиться
## к хосту, который в дауне.
        allowed_icmp_types="{ echoreq, unreach}"

## Cписок немаршрутизируемых адресов, с которых к нам
## будут долбиться на внешний интерфейс, а мы их будем заботливо писать в лог.
        non_route_nets_inet="{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"

        trusted_lan="192.168.0.0/24" #Наша локальная сеть

        astalavistaws="192.168.0.119"
        ironws="192.168.0.101"
        direktorws="192.168.0.46"
        opennat="{" $astalavistaws $ironws $direktorws "}"

##--options
# тем, кто лезет туда куда не нужно вежливо сообщаем что нельзя
        set block-policy return

# изменяем время для состояния установленного tcp соединения,
# которое по-умолчанию черезчур большое (24часа)
        set timeout { frag 10, tcp.established 3600 }

# не проверяем на lo0
        set skip on lo0

# перед тем, как отправить фрагментированный пакет дальше
# сначала дожидаемся всех его частей
        scrub in all


###########################################################################
## СЕКЦИЯ NAT and RDR #####################################################
###########################################################################

## ВНИМАНИЕ!!! Все проверяеться нормально сначала проверка потом нат

## Открываем нат для
        nat on $ext_if_ppp from $opennat to any -> ($ext_if_ppp)

#       nat pass on $ext_if_ppp from $ironws to any -> ($ext_if_ppp)
#       nat pass on $ext_if_ppp from $direktorws to any -> ($ext_if_ppp)
#       nat pass on $ext_if_ppp from $astalavistaws to any -> ($ext_if_ppp)


################################################################################
## СЕКЦИЯ правила фильтрации ###################################################
################################################################################

## антиспуфинг
## Что означает : сбрасывать все входящие пакеты с
## адресом отправителя равным нашему
        antispoof log quick for $ext_if_ppp # включает простейший

# умников, которые лезут на внутренний интерфейс с любых сетей
# отличных от 192.168.0.0/24
        block drop in log quick on $ext_if_ppp from $non_route_nets_inet to any

# пишем тех, кто ломится к нам на 25 порт. Облегчает работу по
# определению зараженных компов в локальной сети
        block drop in log quick on $int_if from !$int_if:network to any

# хорошее начало любых правил :-P
# Правда! (см. [7])
        block all

## Разрешаем нашему серверу ходить в Интернет
## разрешаем весь исходящий трафик с локальной машины В Интернет
## через ppp интерфейс и входящий с флагом установленного соединения
        pass out on $ext_if_ppp from ($ext_if_ppp) to any keep state

## Разрешаем нашему серверу работать с сетью. иницировать соед-я только ему, пропускать
## инициированые
        pass out on $int_if from ($int_if) to $trusted_lan keep state


# после freebsd 7.0. keep state подставляеться по умолчанию
# т.е. пропускаються назад ответы (пакеты с установленным соединением)


# ICMP (PINGing) Пинг из локальной сети в Интернет
        pass out on $ext_if_ppp proto icmp from $trusted_lan icmp-type $allowed$

# ICMP (PINGign) Пинг сервера из локальной сети
        pass in on $int_if proto icmp from $trusted_lan icmp-type $allowed_icmp$

# Доступ к прокси Squid из локальной сети 100%
        pass in on $int_if proto tcp from $trusted_lan to $int_if port 3128 kee$

# SSH из локальной сети 100%
        pass in log on $int_if proto tcp from $trusted_lan to $int_if port 22 k$

# Статистика LightSquid для локальной сети, расположенного в локальном каталоге$
# сервера Apache и работающего на 80 порту
        pass in log on $int_if proto tcp from $trusted_lan to $int_if port 80 k$

Самое интересное, что исправив в одном месте:
        pass out on $ext_if_ppp from ($ext_if_ppp) to any keep state

Стало работать!
Вопрос почему тогда не ругаеться в других правилах,
где также используеться не проинициализированный интерфейс:

здесь:
        nat on $ext_if_ppp from $opennat to any -> ($ext_if_ppp)
        antispoof log quick for $ext_if_ppp # включает простейший
        block drop in log quick on $ext_if_ppp from $non_route_nets_inet to any
        pass out on $ext_if_ppp proto icmp from $trusted_lan icmp-type $allowed...

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

либо

2. есть другой прикол

вот как бы что интересно ;)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "запуск pf из init, до ppp. как заставить ?"  
Сообщение от urusha (ok) on 23-Мрт-09, 10:07 
Там где у вас "on $ext_if_ppp" имеется ввиду сам интерфейс, а для, например, правил ната "-> ($ext_if_ppp)" имеется ввиду именно его адрес, который в вашем случае должен быть динамическим.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру