The OpenNET Project / Index page

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

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

"Непонятки в фаерволе pf - FreeBSD"  +/
Сообщение от sv_igor email(ok) on 28-Ноя-09, 17:30 
Привет всем. Решил перейти с ipfw на pf(packet filter). Вот немогу никак разобраться с скоростью

Вот схема сети

(inet)---(freebsd 192.168.100.1)---(linux 192.168.100.2, 192.168.0.1)---(users 192.168.0.0)

в линухе все прозрачно в фаерволе все разрешено

Версия FreeBSD 7.1-Release

Проблема заключается в том что исходящий трафик нормально в очередь становится и забивается под пропускную способность, которую я указал, но вот вхоящий вообще мимо очереди проходит.

Вот мой конфиг pf

#-------------------------
# Variables and Macros
#-------------------------

# interfaces
inet_if = "tun0"
ext_if = "em0"
int_if = "xl0"

#-------------------------
# ip addresses
#-------------------------

extnet = "{ 10.0.0.0/8, 192.168.252.0/24 }"
lannet = "{ 192.168.0.0/24, 192.168.2.0/24, 192.168.100.0/24 }"
ext_ip = "xxx"
lhc = "192.168.100.1"
server = "192.168.0.1"
igmp_net = "224.0.0.0/4"
private_nets = "{ 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 }"
table <uaix> persist file "/etc/pf/prefixes.txt"

#-------------------------
# Ports
#-------------------------

sshlhc = "54390"
sshserver = "54391"
server_ports = "{ http, " $sshlhc $sshserver ", rdp, smtp, pop3, ftp, ftp-data, domain }"

#-------------------------
# Options
#-------------------------

# Default policy
set block-policy drop
# Type of optimization
set optimization normal
# State-policy
set state-policy floating
# skip pf on lo0 interface
set skip on lo0
# Normaliztion for all interfaces
scrub in all
set ruleset-optimization basic

#-------------------------
# Queue & Speed Control
#-------------------------

# altqs
altq on $int_if cbq bandwidth 1000Mb queue { def_download }
altq on $inet_if cbq bandwidth 1000Mb queue { def_upload }

queue def_download on $int_if bandwidth 100% cbq(default) { 192.168.0.10_ii, 192.168.0.10_ui }
queue def_upload on $inet_if bandwidth 100% cbq(default) { 192.168.0.10_io, 192.168.0.10_uo }
# users1 queues
# users2 queues
queue 192.168.0.10_ii bandwidth 512Kb cbq(ecn)
queue 192.168.0.10_io bandwidth 256Kb cbq(ecn)
queue 192.168.0.10_ui bandwidth 5120Kb cbq(ecn)
queue 192.168.0.10_uo bandwidth 512Kb cbq(ecn)

#--------------------------
# NAT & Redirect
#--------------------------

# Nat from local net to inet
nat on $inet_if from $lannet to any -> $ext_ip
# Nat from local net to ext_net
nat on $ext_if from $lannet to $extnet -> ($ext_if)
# Redirect ports
# to server ssh
rdr on $inet_if proto tcp from any to $ext_ip port 54391 -> $server port 22
# to igor
rdr on $inet_if proto tcp from any to $ext_ip port rdp -> 192.168.0.8 port 3389
# to virtual terminal
#rdr on $inet_if proto tcp from any to $ext_ip port 3390 -> 192.168.0.17 port 3389

#--------------------------
# Filter Rules
#--------------------------


block all


#--------------------------
# Out Connections
#--------------------------
pass out from (self) to any


#--------------------------
# Inet to Users
#--------------------------

# users1 filters
# users2 filters
pass out on $inet_if from any to 192.168.0.10 queue 192.168.0.10_ii
pass in on $int_if from 192.168.0.10 to any queue 192.168.0.10_io
# unlim users filters


когда я комментирую строчку pass out on $inet_if from any to 192.168.0.10 queue 192.168.0.10_ii , то интернет у пользователя всеравно есть.
Я заметил на то что pass out from (self) to any это правило влияет.

Вот непонятно почему пакет не проходит по pass out on $inet_if from any to 192.168.0.10 queue 192.168.0.10_ii этому правилу?? как сделать чтобы он прошел по нему?


Я уже измучался. Заранее благодарю

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

Оглавление

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


1. "Непонятки в фаерволе pf - FreeBSD"  +/
Сообщение от dimanoname (ok) on 28-Ноя-09, 21:15 
У вас на инетовский интерфейс(на котором все натится) весь трафик приходит для адреса 192.168.100.1 и уходит с него же. Стоит это учитывать. Это ответ на Ваш вопрос про то как влияет правило pass out from (self) to any:)
Вторым моментом является то, что если внимательно почитать библии и маны про шейпинг, то  будет ясно, что шейпить есть смысл только исходящий трафик. Или я неправльно догадался о том, какой интерфейс у Вас за что отвечает(на схеме не указали), либо Вы пытаетесь шейпить входящий трафик....
Что нибудь типа вот такого попробуйте
pass out on $inet_if from 192.168.0.10 to any queue 192.168.0.10_uo
pass out on $int_if from any to 192.168.0.10 queue 192.168.0.10_ui
Первое правило загоняет в очередь 512К исходящие пакеты на инетовском интерфейсе(исходящий трафик юзера), второе исходящие пакеты на локальную сеть(входящий трафик для юзера). Хотя и без второго правила все будет шейпится...Не поможет - пишите будеи разбираться дальше.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Непонятки в фаерволе pf - FreeBSD"  +/
Сообщение от sv_igor email(ok) on 28-Ноя-09, 22:15 
>[оверквотинг удален]
>трафик. Или я неправльно догадался о том, какой интерфейс у Вас
>за что отвечает(на схеме не указали), либо Вы пытаетесь шейпить входящий
>трафик....
>Что нибудь типа вот такого попробуйте
>pass out on $inet_if from 192.168.0.10 to any queue 192.168.0.10_uo
>pass out on $int_if from any to 192.168.0.10 queue 192.168.0.10_ui
>Первое правило загоняет в очередь 512К исходящие пакеты на инетовском интерфейсе(исходящий трафик
>юзера), второе исходящие пакеты на локальную сеть(входящий трафик для юзера). Хотя
>и без второго правила все будет шейпится...Не поможет - пишите будеи
>разбираться дальше.

Спасибо за ответ. Про то что шейпить имеет смысл только исходящий трафик я в курсе давно, только немного непонимаю как точно делать это в PF. по поводу какой интерфей за что отвечает вот:
ifconfig -a
em0: flags=8a43<UP,BROADCAST,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
        ether 00:0c:64:77:8a:56
        inet 10.8.170.22 netmask 0xffffff00 broadcast 10.8.170.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
xl0: flags=8a43<UP,BROADCAST,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9<RXCSUM,VLAN_MTU>
        ether 00:04:75:dа:00:cf
        inet 192.168.100.1 netmask 0xffffff00 broadcast 192.168.100.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
tun0: flags=8251<UP,POINTOPOINT,RUNNING,ALLMULTI,MULTICAST> metric 0 mtu 1492
        inet xxxx --> yyyy netmask 0xffffffff
        Opened by PID 450

инет подключается через em0 и организует тунель через pppoe посредством которого создается интерфейс tun0 который нужен для подключения к инету.

Я думаю достаточно ясно картину обрисовал?:) если нет то поправьте:)
завтра проверю Ваши правила.

Но все-таки непонятно, отличие от ipfw вот например в ipfw необходимо указать 2 правила чтобы пакет прошел...а тут получается одного хватает?:
pass in on $int_if from 192.168.0.10 to any queue 192.168.0.10_io


И еще вопрос - чего Вы указали очереди с окончанием 192.168.0.10_uo и 192.168.0.10_ui?

они же закомментины? или это техническая ошибка?)

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

3. "Непонятки в фаерволе pf - FreeBSD"  +/
Сообщение от dimanoname (ok) on 29-Ноя-09, 07:24 
Еслиб Вы начали пользоваться pf с более ранних версий бсды, то наверняка встретились бы с ситуацией, что нужно прописывать правила вот так:

pass out on $inet_if from 192.168.0.10 to any queue 192.168.0.10_io keep state

keep state в данном случае означает то, что фаерволл автоматом пропустит "обратные" пакеты. Если Вам надо пропустить только пакеты наружу, то

pass out on $inet_if from 192.168.0.10 to any queue 192.168.0.10_io no state

А начиная с 7 бсды keep state - это правило,применяемое к пакетам по-умолчанию, если даже оно явно не указано.
Вот и получается, что одно правило заменяет два.

Почему я именно взял эти две очереди? Потому, что я расшифровал uo - user out, ui - user in:))) так что можно назвать это ошибкой телепата-неудачника:))))

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

5. "Непонятки в фаерволе pf - FreeBSD"  +/
Сообщение от sv_igor email(ok) on 08-Дек-09, 23:55 
>[оверквотинг удален]
>pass out on $inet_if from 192.168.0.10 to any queue 192.168.0.10_io no state
>
>
>А начиная с 7 бсды keep state - это правило,применяемое к пакетам
>по-умолчанию, если даже оно явно не указано.
>Вот и получается, что одно правило заменяет два.
>
>Почему я именно взял эти две очереди? Потому, что я расшифровал uo
>- user out, ui - user in:))) так что можно назвать
>это ошибкой телепата-неудачника:))))

Извиняюсь за долгий ответ, отдыхал просто:) Возвращаемся к нашим баранам

pass out on $inet_if from 192.168.0.10 to any queue 192.168.0.10_io
pass out on $int_if from any to 192.168.0.10 queue 192.168.0.10_ii

поставил как вы и сказали, пробовал - но нефига:( даже пробовал с no state параметром.
Более прикольно то - что в этом случае вообще никакое ограничение не действует, даже на исходящий трафик:(

Куда еще можно порыть?

Может ли ктото скинуть работающий конфиг с ограничением скорости пожалуйста

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

4. "Непонятки в фаерволе pf - FreeBSD"  +/
Сообщение от Ыукпун on 03-Дек-09, 13:42 
>Вторым моментом является то, что если внимательно почитать библии и маны про
>шейпинг, то  будет ясно, что шейпить есть смысл только исходящий
>трафик.

зачем злой провайдер вопреки всем библиям и прочим манам шейпит мой upload? ведь для него это download!

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

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

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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