|
|
|
ИСТОРИЯ
|
Бърз файъруол с HFSC
|
|
|
|
|
|
от Димитър Василев(21-12-2006)
рейтинг (1)
[ добре ]
[ зле ]
Вариант за отпечатване Понеже преди време се обсъждаше HFSC, реших да си позволя
един пример за него върху PF. Имайте в предвид че всичко
може да варира от трафика, капацитета, желязото ви и какво
пропускате.
PF не е "универсално ренде" - ако имате
потребители които капсуловат трафика си по портове и
протоколи - ще трябва да приложите и друго решение
евентуално.
Долното е само нагледен пример за това как се прави.
Пакетите в опашката на дисциплината са повечко защото: 1)
трафикът за домашен юзър е малък 2) картите даянат на товар
- xl и fxp 3)по-добро разпределение.
С _login са означени сесиите за влизане и контрол, _bulk
пакетите по самата сесия.
Ето и правилата:
#PF.conf reloaded - 16.12.2006
#
tg="block log quick"
tg_in="block in log quick"
tg_out="block out log quick"
#
bw="bandwidth"
ext_if="xl1"
int_if="fxp0"
l="lo0"
int_net=""
#
#
DNS="{IP, IP}"
#
dhcp1="255.255.255.255/32"
dhcp2="172.20.0.9/32"
#
bootstrap_server="67"
#
bootstrap_client="68"
#
q="qlimit"
#
services="22,5190,6666,6667,5190,80,443"
#
#
# Tables: similar to macros, but more flexible for many
addresses.
#
table <misfits> persist file
"/etc/pf/misfits"
#
#
table <bgpeer> persist file
"/etc/pf/bgpeer2"
#
#
# Options: tune the behavior of pf, default values are
given.
set timeout { interval 5, frag 20, src.track 20 }
set timeout { tcp.first 30, tcp.opening 30, tcp.established
86400 }
set timeout { tcp.closing 90, tcp.finwait 20, tcp.closed 90
}
set timeout { udp.first 60, udp.single 30, udp.multiple 60
}
set timeout { icmp.first 20, icmp.error 10 }
set timeout { other.first 60, other.single 30,
other.multiple 60 }
#
set timeout { adaptive.start 6000, adaptive.end 12000 }
#
set limit { states 20000, frags 20000, src-nodes 2000 }
set loginterface $ext_if
set optimization normal
set block-policy drop
set state-policy if-bound
set require-order yes
set fingerprints "/etc/pf.os"
#
# Normalization: reassemble fragments and resolve or reduce
traffic ambiguities.
scrub in all min-ttl 2 max-mss 1440 fragment reassemble
scrub out all min-ttl 1 no-df max-mss 1440 fragment
reassemble random-id
#scrub log no-df fragment reassemble
#
# Queueing: rule-based bandwidth control.
#
altq on $ext_if bandwidth 1000Mb hfsc queue { tcp_ack_out,
www, ftp, ssh tcp_ack_in}
queue tcp_ack_out $bw 10Mb priority 6 hfsc (ecn
realtime 6Mb linkshare 10% upperlimit 9Mb) $q 1000
queue tcp_ack_in $bw 10Mb priority 7 hfsc (ecn
default realtime 6Mb linkshare 10% upperlimit 9Mb) $q
1000
#
#
#start intl www
#
queue www $bw 30Mb priority 5 hfsc (ecn realtime 30Mb
linkshare 20% upperlimit 35Mb) $q 1000 { www_in, www_out
}
queue www_in $bw 15Mb priority 5 hfsc (ecn realtime
10Mb linkshare 5% upperlimit 10Mb) $q 1000
queue www_out $bw 15Mb priority 6 hfsc (ecn
realtime 10Mb linkshare 5% upperlimit 10Mb) $q 1000
#
#
# ftp
#
queue ftp $bw 50Mb priority 5 hfsc (ecn realtime 30Mb
linkshare 20% upperlimit 35Mb) $q 1000 { ftp_login, ftp_bulk
}
queue ftp_bulk $bw 70% priority 5 hfsc (ecn
realtime 30Mb linkshare 20% upperlimit 35Mb) $q 1000
queue ftp_login $bw 30% priority 7 hfsc (ecn
realtime 20Mb linkshare 20% upperlimit 25Mb) $q 1000
#ssh
#
queue ssh $bw 120Mb priority 7 hfsc (ecn realtime
50Mb linkshare 30% upperlimit 150Mb) $q 1000 { ssh_login,
ssh_bulk }
queue ssh_login $bw 50Mb priority 7 hfsc
(ecn realtime 30Mb linkshare 10% upperlimit 35Mb) $q
1000
queue ssh_bulk $bw 50Mb priority 5
hfsc (ecn realtime 30Mb linkshare 10% upperlimit 40Mb)
$q 1000
#
# NAT
#
#
nat on $ext_if from !($ext_if) to any -> ($ext_if)
#
# FTP proxying
#
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr pass on $int_if proto tcp from $int_net to any
port ftp -> 127.0.0.1 port 8021
#
#
# spamd-setup puts addresses to be redirected into table
<spamd>.
#table <spamd> persist
#no rdr on { lo0, lo1 } from any to any
#rdr inet proto tcp from <spamd> to any port smtp
-> 127.0.0.1 port 8025
#
# Filtering: the implicit first two rules are
#
antispoof quick for {$ext_if, $int_if,$l }
#
#
pass quick on {$l} all keep state
#
#
block log on $ext_if all
$tg_in on $ext_if inet proto udp from any to any
port=syslog
$tg_in on $ext_if from any to any flags P/FSRPAUEW
$tg_in on $ext_if from any to any flags FPU/FSRPAUEW
$tg_in on $ext_if from any to any flags FPU/FPU
$tg_in on $ext_if from any to any flags /FSRA
$tg_in on $ext_if from any to any flags FS/FSRA
$tg_in on $ext_if from any to any flags FSPU/FSPRAU
$tg_in on $ext_if from any to any flags FPU/FSRPAU
$tg_in on $ext_if from any to any flags /FSRPAU
$tg_in on $ext_if from any to any flags F/FSRA
$tg_in on $ext_if from any to any flags U/FSRAU
$tg_in on $ext_if from any to any flags S/FSRPAU
$tg_in on $ext_if from any to any flags P/FSRPAU
$tg_in on $ext_if from any to any flags A/A
$tg_in on $ext_if from any to any flags P/P
#
anchor "ftp-proxy/*"
pass out on $ext_if keep state
#
pass in quick on $ext_if inet proto tcp from any port 21 to
$ext_if user proxy keep state queue ftp_bulk
pass out quick on $ext_if inet proto tcp from any to any
port 21 user proxy keep state queue ftp_login
#
pass out quick on $ext_if inet proto tcp from any to any
port { 22, 5190, 6666,6667, 5190 } keep state queue
ssh_login
pass in quick on $ext_if inet proto tcp from any port { 22,
5190, 6666,6667, 5190 } to any keep state queue ssh_bulk
#
pass out quick on $ext_if inet proto tcp from any to any
port { 80, 443 } keep state queue www_out
pass in quick on $ext_if inet proto tcp from any port
{ 80, 443 } keep state queue www_in
Приемаме бира и дарения за Фют.
Весели празници!
<< | >>
|
|
|
|
|
pf.cfg, история От: Stelian На: 22-12-2006@14:12 GMT+2 Оценка: 1/Неутраленняма да коментирам начинът по който си (или не си) подредил този текст, но ми е интересно този конфиг файл на pf, по какъв начин виждаш да се вписва в "линукс за българи" и още повече в категория "история"
> Приемаме бира и дарения за Фют.
а на какво основание ги очакваш?
[Отговори на този коментар]
Към: pf.cfg, история От: Димитър Василев На: 22-12-2006@16:21 GMT+2 Оценка: 1/НеутраленПривет Стеляне!
Благодаря за отзивите.
Историята на HFSC е дадена на http://www.cs.cmu.edu/~hzhang/HFSC/main...
Знам че текста не ми е подходящ и противореча сам на себе си пускайки материал под равнището на което пиша.
Причината да го пусна тук е, че има екипът на Линукс.БГ е отворен и за *BSD; както и че има и читатели ползващи Linux,*BSD, UNIX ...
Работещите конфигурации с HFSC са рядкост и се подкарват първоначално за 2-3 дена.
Бирата и даренията са по желание както и аз помогнах по свое желание в една кампания за обновяването на известен български Линукс-базиран сървър.
Имам доста познати линуксаджии, които нямат подобни притеснения като твоите.
Нали сме големи хора или се лъжа?
Весели празници
[Отговори на този коментар]
Много добре От: SysAdmin На: 22-12-2006@20:41 GMT+2 Оценка: 1/НеутраленРадвам се, че се обръща внимание и на други Unix OS, нека се развиваме, не само да дълбаем.
Имам подобни опити, но при машина, която взема Интернет трафик от повече доставчици (няколко мрежови карти, псевдоинтерфейси - vlan и т.н.), оказа се, че в този случай задачата става значително по-трудна. Особено когато върви BGP, приоритизацията не върви както се очаква. Пробвах няколко варианта, вкл. с priq опашки. Интересно е, че по форумите ще намерите много хора да се оплакват, че опашките и привилегиите не вървят, както се е очаквало...
[Отговори на този коментар]
Към: Много добре От: Nikolay <luck77_bg __@__ yahoo__dot__com> На: 24-12-2006@9:53 GMT+2 Оценка: 1/НеутраленПроблема с няколкото доставчика,бгп и приоритизаций (Load Balancing ?!) се решава
лесно с избора на ОС и възможностите който предоставя тя,избора на софтуеър и правилната му настройка.Обърни внимание на
the OpenBSD Project и неговите разработки (
Associated projects: OpenSSH, OpenBGPD, OpenNTPD, OpenCVS) и "екстрите" които предлага пф-а.
[Отговори на този коментар]
Към: Към: Много добре От: SysAdmin На: 24-12-2006@12:36 GMT+2 Оценка: 1/НеутраленТочно за OpenBSD говоря. От години използвам предимно тази OS. Проблемите са най-вече в различното държане на правилата, често предизвикани от лошите конфигурации на доставчиците... А и от липсата на добри примери.
[Отговори на този коментар] Към: Към: Много добре От: kiril На: 27-12-2006@16:56 GMT+2 Оценка: 1/НеутраленВсичко изглежда добре :)
Но малко коментари за нещата които са из конфига биха помогнали доста на по-изостаналите като мен :)
[Отговори на този коментар]
Dosta goliama zabelejka ..... От: _c_ <misho __@__ openbsd-bg< dot >org> На: 28-12-2006@10:31 GMT+2 Оценка: 1/НеутраленZdraweite, imam 2 seriozni zabelejki po HFSC shaper-a mislia, che za poreden pat ima chowek koito se izkazwa leeeeko nepodgotwen.
1. NIKOGA, AMA NIKOGA ne prawete podoben shaper w smisal da ogranichawate whodiasht trafik. Mrejata raboti po slednia nachin na ingress queue na interface-a ili priemash packet ili go dropish ne moje da go otlagash. Shaper se prawi SAMO i SAMO na OUT-traffic/egress queue za da ima kachestwena usluga.
2. Pri PF s HFSC bandwidth parametera e rawen na linkshare ot washeto opisanie na serviznata kriwa. Niama smisal da go pishete bandwidth ako weche ste go definirali kato linkshare i oshte po malko da ima razlichni stoinosti :):):)
3. Zashto postoiano izpolzwate quick i priniziawate PF kam nedygawia IPFW filter na freebsd ili iptables. Toi moje da naprawi dosta podrobna i precizna selekcia na trafika kato obhodi red ot prawila do kraia.
Ako reshite da se izmyknete s towa che shte byde po bawno greshite w washia sluchai tyi kato dostatychno ste zadynili gorkoto jeliazo da preasemblira trafika s scrub w nachaloto.
Da izpolzwash "quick" w PF ili IPF e kato da polzwash goto na C. Towa e koito iskah da kaja. Ostawil sam si mail-a ako jelaete moje da prodyljim diskusiata ;) Nishot lichno
Good luck!
[Отговори на този коментар]
Към: Dosta goliama zabelejka ..... От: zlatozar На: 28-12-2006@14:58 GMT+2 Оценка: 1/НеутраленМного си прав Мишо!
Още помня лекцията ти PF от BSDFest-a!
Много ще се радвам да видя твоя статия за PF...
[Отговори на този коментар]
Чуденка От: 9999999999999999999999999 На: 31-12-2006@0:45 GMT+2 Оценка: 1/НеутраленИ как очакваш да прочета това нещо като в първото изречение има два акронима които не ми говорят нищо и не са обяснени?
[Отговори на този коментар]
Към: Чуденка От: IID_IUnknown На: 31-12-2006@10:39 GMT+2 Оценка: 1/НеутраленА кой е казал, че задължително трябва да го четеш? Специално за тази статия ако тези акроними не ти говорят нищо 95% вероятно нищо от нея няма да ти е полезно.
[Отговори на този коментар]
Към: Към: Чуденка От: 9999999999999999999999999 На: 31-12-2006@15:48 GMT+2 Оценка: 1/НеутраленЗащото смята че информацията е за да се споделя. А не само от специалисти за специалисти. Или си пазите хляба?
[Отговори на този коментар] Към: Към: Към: Чуденка От: Божо На: 8-01-2007@10:10 GMT+2 Оценка: 1/НеутраленОх, не издържах.
Ами нали е споделил човекът публично!
От това споделяне повече какво?
А който не ползва Packet Filter на bsd,
явно няма да има нужда да чете
статията.
[Отговори на този коментар]
Към: Чуденка От: Димитър Василев <dimitar< dot >vassilev __@__ gmail< dot >com> На: 31-12-2006@16:10 GMT+2 Оценка: 1/НеутраленМомчета, това го направих за 15 минути между другото, докато търча из София да си оправям нещата по време на отпуската.
Оценявам, че не е съвършено и има идеологически грешки като ingress опашките и лимитите, но с него поне мога да звъня като бял човек на приятели абонати на Globul, Vodafone и T-Mobile и да не се звуча като куче в нужник.
Който желае, може да го подобри за неговите си нужди и да си поиграе с празните acknowledgement пакети по услуги и протоколи.
Вижте:
http://www.benzedrine.cx/ackpri.html
Може да стане
pass out on $ext_if proto tcp to any port sky pe flags S/SA queue {skype_queue q_def} keep state
pass in on $ext_if proto tcp from any port skype to $ext_if queue {skype_queue q_def} keep state
Пак не е идеално, но е по-добро от това което съм направил в примера.
Весело посрещане на 2007-ма.
[Отговори на този коментар]
|
|
|
|
|
|
|
|