Страница 1 из 1

IPFW config

СообщениеДобавлено: 30 авг 2005, 22:44
вадим_
не будет ли кто нить любезен(из юзающих БСД) скинуть свой конфиг IPFW
интересует организация шейпинга, включение правил по времени и тп


заранее спасибо

СообщениеДобавлено: 31 авг 2005, 13:58
dopey
/etc/firewall_day:
Код: Выделить всё
#!/bin/sh

sysctl net.inet.ip.fw.one_pass=0
PROXY1=xxxx.dyndns.org
PROXY2=yyyy.dyndns.org
PROXY_PORT=3128

#----------------------------------------------------
#  delete all loaded rules                          #
#----------------------------------------------------

ipfw -f flush
ipfw -f pipe flush

#----------------------------------------------------
#  enable NAT on fxp0                               #
#----------------------------------------------------

ipfw add 110 divert natd all from any to any via fxp0

#----------------------------------------------------
#  let the packets pass from and to gateway's NICS  #
#----------------------------------------------------

ipfw add 200 allow ip from any to 192.168.0.100
ipfw add 201 allow ip from 192.168.0.100 to any
ipfw add 202 allow ip from any to 192.168.1.100
ipfw add 203 allow ip from 192.168.1.100 to any

#----------------------------------------------------
#  allow communication through lo0                  #
#----------------------------------------------------

ipfw add 204 pass ip from any to any via lo0

#----------------------------------------------------
#  configure bandwidth and weights (dynamic shaping)#
#----------------------------------------------------

#upload
ipfw pipe 1 config bw 860Kbit/s queue 86 gred 0.002/10/30/0.1
ipfw queue 1 config mask src-ip 0xffffffff pipe 1 queue 5 gred 0.002/10/30/0.1
ipfw queue 2 config mask dst-ip 0xffffffff pipe 1 queue 5 gred 0.002/10/30/0.1

#---------------------------------------------------------------
#  assign each client its bandwidth priority (dynamic shaping) #
#---------------------------------------------------------------

#upload
ipfw add 100 queue 1 ip from 192.168.0.0/24 to any out via fxp0

#download
ipfw add 120 queue 2 ip from any to 192.168.0.0/24 in via fxp0

#----------------------------------------------------------------
#  configure bandwidth for each user (hard limits on each user) #
#----------------------------------------------------------------

#upload
ipfw pipe 2 config bw 560Kbit/s queue 5 gred 0.002/10/30/0.1

#download
ipfw pipe 4 config bw 560Kbit/s queue 5 gred 0.002/10/30/0.1

#----------------------------------------------------------------
#  assign each user its bandwidth (hard limits)                 #
#----------------------------------------------------------------

#upload
ipfw add 101 pipe 2 ip from 192.168.0.0/24 to any out via fxp0

#download
ipfw add 121 pipe 4 ip from any to 192.168.0.0/24 in via fxp0

#----------------------------------------------------
#  allow SHURIK                                     #
#----------------------------------------------------

ipfw add 300 allow all from 192.168.0.101 to 212.0.200.0/24
ipfw add 301 allow all from 212.0.200.0/24 to 192.168.0.101
ipfw add 302 deny all from 192.168.0.101 to 192.168.169.66
ipfw add 303 deny all from 192.168.169.66 to 192.168.0.101
ipfw add 304 allow all from $PROXY1 to 192.168.0.101
ipfw add 305 allow tcp from 192.168.0.101 to $PROXY1 $PROXY_PORT
ipfw add 306 allow udp from 192.168.0.101 to $PROXY1 $PROXY_PORT
ipfw add 307 allow all from $PROXY2 to 192.168.0.101
ipfw add 308 allow tcp from 192.168.0.101 to $PROXY2 $PROXY_PORT
ipfw add 309 allow udp from 192.168.0.101 to $PROXY2 $PROXY_PORT

#----------------------------------------------------
#  allow DOPEY                                      #
#----------------------------------------------------

ipfw add 400 allow all from any to 192.168.0.21
ipfw add 401 allow all from 192.168.0.21 to any
#ipfw add 400 deny all from 192.168.0.21 to 192.168.169.66
#ipfw add 401 deny all from 192.168.169.66 to 192.168.0.21
#ipfw add 402 allow all from $PROXY to 192.168.0.21
#ipfw add 403 allow tcp from 192.168.0.21 to $PROXY $PROXY_PORT
#ipfw add 404 allow udp from 192.168.0.21 to $PROXY $PROXY_PORT


#----------------------------------------------------
#  allow SEREGA                                     #
#----------------------------------------------------

ipfw add 500 deny all from 192.168.0.114 to 192.168.169.66
ipfw add 501 deny all from 192.168.169.66 to 192.168.0.114
ipfw add 502 allow all from any to 192.168.0.114
ipfw add 503 allow all from 192.168.0.114 to any

#----------------------------------------------------
#  allow KIND                                       #
#----------------------------------------------------

ipfw add 600 deny all from 192.168.0.113 to 192.168.169.66
ipfw add 601 deny all from 192.168.169.66 to 192.168.0.113
ipfw add 602 allow all from 192.168.0.113 to 212.0.200.0/24
ipfw add 603 allow all from 212.0.200.0/24 to 192.168.0.113
ipfw add 604 allow all from $PROXY1 to 192.168.0.113
ipfw add 605 allow tcp from 192.168.0.113 to $PROXY1 $PROXY_PORT
ipfw add 606 allow udp from 192.168.0.113 to $PROXY1 $PROXY_PORT
ipfw add 607 allow all from $PROXY2 to 192.168.0.113
ipfw add 608 allow tcp from 192.168.0.113 to $PROXY2 $PROXY_PORT
ipfw add 609 allow udp from 192.168.0.113 to $PROXY2 $PROXY_PORT

#----------------------------------------------------
#  count users traffic                              #
#----------------------------------------------------

#download
ipfw add 47 count all from any to 192.168.0.21 out recv fxp0
ipfw add 49 count all from any to 192.168.0.101 out recv fxp0
ipfw add 53 count all from any to 192.168.0.114 out recv fxp0
ipfw add 55 count all from any to 192.168.0.113 out recv fxp0 
#upload
ipfw add 48 count all from 192.168.0.21 to any out xmit fxp0
ipfw add 50 count all from 192.168.0.101 to any out xmit fxp0
ipfw add 54 count all from 192.168.0.114 to any out xmit fxp0
ipfw add 56 count all from 192.168.0.113 to any out xmit fxp0 

А чтоб включать/исключать правила по времени, тебе придется написать скрипт который будет в заданное время вводить изменения в правила файервола. Можешь написать кучу простых скриптов на /bin/sh и запускать каждый в свое время через crontab или можешь забацать например на Perl демона который будет сам проверять системное время и стирать/добавлять правила IPFW соответственно.
/etc/crontab
Код: Выделить всё
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log 

*/1	*	*	*	*	root	/usr/libexec/atrun 

5	0	*	*	*	root	/etc/firewall_night
5	8	*	*	*	root	/etc/firewall_day
55	23	*	*	*	root	/etc/firewall_deny_access
54	23	*	*	*	root	/usr/billing/get_stat
55	7	*	*	*	root	/etc/firewall_deny_access
54	7	*	*	*	root	/usr/billing/get_stat
*/1	*	*	*	*	root	/usr/billing/get_current.pl
 

СообщениеДобавлено: 31 авг 2005, 16:00
вадим_
ммм, а вот как забацать ДИНАМИЧЕСКИЙ шейпинг между всеми юзверями ходящими в инет ? и можно ли как то ограничить определенный вид траффика например п2п или *.mp3 файлы -выделить им некую скорость в 2 КБ или ето возможно только через сквид ?
у вас тут упомянаються некоторые скрипты
/etc/firewall_night
/etc/firewall_day
/etc/firewall_deny_access
/usr/billing/get_stat
/etc/firewall_deny_access
/usr/billing/get_stat
/usr/billing/get_current.pl

можно их тоже ? :oops:

СообщениеДобавлено: 01 сен 2005, 17:39
Andrew Noga
вадим_ писал(а):ммм, а вот как забацать ДИНАМИЧЕСКИЙ шейпинг между всеми юзверями ходящими в инет ? и можно ли как то ограничить определенный вид траффика например п2п или *.mp3 файлы -выделить им некую скорость в 2 КБ или ето возможно только через сквид ?


http://www.opennet.ru/openforum/vsluhforumID10/598.html
может как-то так ?
на .мрз - если по протоколу http - то через сквид
p2p - проще смотреть по интенсивности трафика.
чем больше скушал, тем меньше скорость.

СообщениеДобавлено: 03 сен 2005, 00:35
вадим_
ладно, оставим все вопросы про разного рода ограничения. Как можно динамически распределить скорость поровну между всеми клиентами использующими канал инета в данный момент времен ? ? ?

СообщениеДобавлено: 03 сен 2005, 09:33
Igoras
Написано ведь....

Код: Выделить всё
#---------------------------------------------------- 
#  configure bandwidth and weights (dynamic shaping)# 
#---------------------------------------------------- 

#upload 
ipfw pipe 1 config bw 860Kbit/s queue 86 gred 0.002/10/30/0.1 
ipfw queue 1 config mask src-ip 0xffffffff pipe 1 queue 5 gred 0.002/10/30/0.1 
ipfw queue 2 config mask dst-ip 0xffffffff pipe 1 queue 5 gred 0.002/10/30/0.1 

#--------------------------------------------------------------- 
#  assign each client its bandwidth priority (dynamic shaping) # 
#--------------------------------------------------------------- 

#upload 
ipfw add 100 queue 1 ip from 192.168.0.0/24 to any out via fxp0 

#download 
ipfw add 120 queue 2 ip from any to 192.168.0.0/24 in via fxp0 


Но только для этого канал должен быть гарантированный вроде, иначе ничего не выйдет... и в данном случае симметричный.... а вообще я бы сделал немного не так....

Код: Выделить всё
#---------------------------------------------------- 
#  configure bandwidth and weights (dynamic shaping)# 
#---------------------------------------------------- 

#upload 
ipfw pipe 1 config bw 860Kbit/s queue 86 gred 0.002/10/30/0.1 
ipfw queue 1 config mask src-ip 0xffffffff pipe 1 queue 5 gred 0.002/10/30/0.1 

#download
ipfw pipe 2 config bw 860Kbit/s queue 86 gred 0.002/10/30/0.1 
ipfw queue 2 config mask dst-ip 0xffffffff pipe 2 queue 5 gred 0.002/10/30/0.1 

#--------------------------------------------------------------- 
#  assign each client its bandwidth priority (dynamic shaping) # 
#--------------------------------------------------------------- 

#upload 
ipfw add 100 queue 1 ip from 192.168.0.0/24 to any out via fxp0 

#download 
ipfw add 120 queue 2 ip from any to 192.168.0.0/24 in via fxp0 


и еще нужно свою маскимальную скорость аплоада/даунлоада там вписать вместо 860 в примере... ну и внутреннюю подсеть поменять...

СообщениеДобавлено: 04 окт 2005, 08:33
Калян
А может кто-нибудь такой же наглядный пример привести но только под линух. Буду очень признателен. :roll:

СообщениеДобавлено: 04 окт 2005, 19:14
SeazoN
Калян писал(а):А может кто-нибудь такой же наглядный пример привести но только под линух. Буду очень признателен. :roll:


а это что под ZX Spectrum что ли было? по моему там всё просто идентично

СообщениеДобавлено: 04 окт 2005, 22:11
Калян
во-первых на линухе Iptables насколько мне память не изменяет - было бы все так просто - я бы не спрашивал! :evil:

СообщениеДобавлено: 15 июл 2006, 12:54
Артем
А как быть с молдавскими сетями. Скорость будет делиться на пользователей из расчета 860Кбит/с, а по молдове у многих за 6Мбит/сек

СообщениеДобавлено: 15 июл 2006, 14:58
Шинкевич Владимир
Igoras писал(а):Написано ведь....
и еще нужно свою маскимальную скорость аплоада/даунлоада там вписать вместо 860 в примере... ну и внутреннюю подсеть поменять...

СообщениеДобавлено: 16 июл 2006, 11:13
Артем
Profi the same писал(а):
Igoras писал(а):Написано ведь....
и еще нужно свою маскимальную скорость аплоада/даунлоада там вписать вместо 860 в примере... ну и внутреннюю подсеть поменять...


Если я укажу вместо 860 свою скорость по молдавским ресурсам, то зарубежка, когда кто-то будет качать - будет в дауне. Т.к. сервер будет думать, что у меня еще есть скорость.

СообщениеДобавлено: 16 июл 2006, 14:21
Шинкевич Владимир
о! это проблема. следует добавить правило контроля аплоада.

Добавлено спустя 1 минуту 28 секунд:

и даунлоада. забавное правило.

СообщениеДобавлено: 16 июл 2006, 22:47
Артем
Profi the same,помоему, ты не понял о чем идет речь

СообщениеДобавлено: 17 июл 2006, 11:57
Шинкевич Владимир
как я понял. проблема в физической пропускной способности канала.
Самое "горлышко" - аплоад (под 1-2 мбита). И дальше по тексту. Или нет?)

СообщениеДобавлено: 17 июл 2006, 16:50
Артем
Проблема в следующем.
Будем считать, что канал на зарубежку у меня 860/860
Я буду использвать приведенный скрипт для раздачи пользователям интернета. Все, надеюсь, будет работать нормально, т.е. один пользователь качает со скоростью 840Кбит/сек, входит второй, теперь они оба будут качать по 430Кбит/сек и т.д. Это все хорошо, но помимо зарубежного канала у меня есть скорость по молдавским ресурсам 6Мбит/с / 1Мбит/с. Если я буду использовать данный скрипт, то пользователь, качающий с молдавских ресурсов, даже если он один в сети, получит не больше 860Кбит/с, причем если зайдут два пользователя и другой пользователь будет качать по миру, а тот же пользователь по молдове, то оба они получат скорость не больше 480Кбит/с, несмотря на то, что скорость по молдове у меня 6Мбит/с. Таким образом, оба канала будут простаивать. А учитывая, что с молдовы качают гораздо больше, то отсюда вывод...

СообщениеДобавлено: 17 июл 2006, 19:06
Шинкевич Владимир
не правильно понял. в этом не разбираясь, удаляюсь)