|
ot Fahri Hasan(22-01-2017)
reiting (24)
[ dobre ]
[ zle ]
Variant za otpechatvane Podrobno rukovodstvo za ipfw nat
Originalna statiia: Podrobnoe rukovodstvo po ipfw
nat
Avtor: terminus
Po stranno stechenie na obstoiatelstvata v internet se namirat
mnogo malko rukovodstva, koito opisvat vuzmozhnostite i
stsenarii za prilozhenie na ipfw nat, vupreki fakta, che se
poddurzha ot dulgo vreme - FreeBSD versiia 7.0. Nai-obidno e, che
man sektsiiata posvetena na ipfw nat izglezhda glupavo. I v
deistvitelnost ot tam zapochva da chete vseki, koito iska da
nastroi "in-kernel nat", i tova e estestveno - ne vseki
razbira. V rezultat na tova horata preminavat kum natd, niakoi
ludi glavi dori zapochvat da izpolzvat alternativni zashtitni
steni kato pf/ipf. TSelta na tova rukovodstvo e podrobno
opisanie na ipfw nat i izpolzvaneto na tozi instrument v
razlichni mrezhovi konfiguratsii. V tazi statiia shte ima mnogo
smislovi prepratki kum prekrasnata statiia ot Vadim
Goncharov
(nuclight),
kudeto podrobno opisa vutreshnata struktura na ipfw i mrezhoviia
stek na FreeBSD.
Primerite v moiata statiia sa probvani na FreeBSD 7.2-STABLE.
Predi vsichko e neobhodimo da se opishe detailno dvizhenieto na
trafika v mrezhoviia steka na FreeBSD. Bez tova razbirane
tsialostnata kartina na "tova, koeto pravim", niama da bude
pulna. Na figuri 1-a i 1-b e pokazana hipotetichna sistema na
dva mrezhovi adaptera fxp0 i fxp1. Shema 1-a pokazva
fizicheskata vruzka, a shema 1-b e logicheskata vruzka. Nas ni
interesuva poveche logicheskata - na neia shte vidim, che vuv vsiaka
mrezhova vruzka trafika ima dva putia - IN i OUT. Kakto lesno
mozhe da se dosetite, prez put IN postupva trafik, idvasht kum
nas ot mrezhata, a prez put OUT preminava trafika, koito e
adresiran da napusne mrezhata, kum koiato e svurzana mrezhoviiat
adapter. Po tozi nachin, vrushtaiki se kum primera na sistema s
dve mrezhovi karti, mozhem da vidim, che tia ima chetiri putia za
trafika. Kogato dobavim kum sistemata dopulnitelni mrezhovi
adapteri shemata se razshiriava.
No predishnata shema ne e glavna. Vsushtnost shemata na trafika
prez mrezhoviia stek na FreeBSD ima samo edna logicheska strana s
putishta IN i OUT, nezavisimo ot broia na mrezhovi adapteri.
Prosto pri dvizhenieto na trafika prez steka, operatsionnata
sistema izbira samostoiatelno put IN i/ili OUT da bude
zadeistvan pri predavaneto na trafika. V suotvetstvie s tova,
v paketa se namira vutreshna informatsiia (hedur) za mrezhovata
podsistema, dobaviat se otmetki, ukazvashti prez koi put IN
(konkreten mrezhovi adapter) e doshul trafika i chrez koi OUT
mrezhovi adapter shte izleze ot mashinata.
Ukazanite putishta IN i OUT sa vazhni, zashtoto pri postupvaneto na
mrezhoviia trafika v tiah, toi popadat v zashtitnata stena, kudeto
preminava prez pravila za filtrirane na ipfw. Po tozi nachin,
trafika preminavasht prez marshrutizatora, popada v pravilata na
ipfw dva puti – purvo v put IN na mrezhovi adapter, chrez koito
e bil poluchen, i v put OUT na mrezhovi adapter, chrez koito shte
bude prepredaden (sega ne razglezhdame sluchaia s vklyuchena
filtratsiia na nivo Ethernet - v tozi sluchai, trafika preminava
prez ipfw chetiri puti). Kakto izhodiashtiia trafik ot samiia
marshrutizator, ima svoi put OUT, taka i trafika adresiran
neposredstveno kum marshrutizatora, idva prez svoi put IN.
Po-dolu predstaviam chast ot statiiata na Vadim Goncharov – chastta
v koiato se obiasniava dvizhenieto na trafika chrez shema 2.
Hubavoto na tozi avtor e, che v statiiata e vklyuchi tova mnogo,
mnogo podrobno obiasnenie.
Dopuskame, che naborut ot pravilata pri nas e sledniiat:
ipfw add 1
deny tcp from any to any 135,445
ipfw add 2 divert 8668 all from any to any via ext0
ipfw add 3 count icmp from any to any
ipfw add 4 allow all from any to any
# v 65535 po podrazbirane deny
Kogato paketa preminava prez mashinata, sistemata prikrepia kum
sudurzhanieto mu dopulnitelna informatsiia, vidimo s tcpdump.
Naprimer na koi interfeis e bil poluchen, chrez koi se izprashta i
t.n. Tova mozhe da se proveri sus suotvetnite optsii v pravilata
na ipfw, na risunkata sa pokazani mestata, kudeto shte srabotiat
suotvetnite ukazaniia in/out i recv/xmit za mrezhata.
Da razgledame po-podrobno tochkite s funktsii, koito se povikvat
v iadroto na rutera - shema 2. Vsushtnost, tochkite s funktsii na
figurata po-gore niamat dve strani, tia e samo edna, i se
razlichava po parametrite - obraboteni ot mrezhovata karta.
Tova oznachava, che paketa na vhoda se predava na draivera v
ether_demux(), sled tova popada v ip_input(), v tochka (2),
kudeto se izpulniavat osnovni proverki za korektnostta na
paketa, sled koeto paketa pristiga v ipfw - funktsiia
ipfw_chk(). Dopuskame che, pravilata sa prosti, bez
zadeistvaneto na drugi podsistemi. Togava, sled kato bude
vurnat ot ipfw, paketa produlzhava dvizhenieto si po ip_input(),
koiato sledi, dali paketa e prednaznachen za nashata mashina ("to
me" ot gledna tochka na ipfw), ili niakoi drug. Ako e za nas,
paketa otiva do tochkata (3), kudeto shte se reshi na koi soket i
koia programa shte go izprati.
Ako paketa ne e prednaznachen za nas, ot ip_input() shte otide
kum tochkata (4), kudeto ip_forward() shte proveri v sysctl,
pozvoleno li e prenasochvane, shte snizhi TTL i drugi deistviia,
sled koeto paketa idva v tochka (6), funktsiia ip_output(). Tuk
popada direktno, i kogato niakoia programa reshi da izprati neshto
kum mrezhata i predade danni kum iadroto.
Funktsiia ip_output() purvo proveriava v tablitsata za
marshrutizatsiia i opredelia shlyuz, i na koi interfeis se namira. S
tazi informatsiia, paketa se predava otnovo v ipfw i preminava
prez tsialata poreditsata ot pravila. Posle izliza ot ipfw_chk()
i se vrushta v ip_output(), ako iadroto e kompilirano sus
suotvetnata optsiia, se proveriava dali ne e bil promenen v
ipfw_chk() - ako e da, otnovo se proveriava tablitsata za
marshrutizatsiia, za da se poluchi MAC adresa na noviia shlyuz. Sled
tova v tochkata (7) paketa napuska ip_output() i se predava po-
nadolu v Layer 2, i kum draivera na interfeisa.
Tova beshe vsichko v sluchaia s prostite pravila na zashtitnata
stena. Sega da predpolozhim, che tam se poiaviava divert, da
razgledame primera na goreopisanite pravila. Paket, koito shte
otide v internet na port 80, kogato pristigne na vutreshniia
interfeis v tochka (1), preminava purvonachalna ip_input()
proverka v (2), predava se v ipfw_chk() i zapochva proverka po
pravilata. Toi ne popada v 1-vo pravilo, pod 2-ro sushto, tam
ima interfeis na imeto int0, pravilo 3 otnovo ne srabotva, no
pravilo 4 podhozhda na vsichki paketi, i toi izliza ot
ipfw_chk() i se vrushta v ip_input(). Tam se iziasniava, kude v
internet e prednaznachen da otide, sledovatelno paketa popada v
tochkata (4) i sled tova (6), kudeto ip_output() opredelia
adresa na shlyuza i che interfeisut shte e ext0, s tazi informatsiia
paketa popada otnovo v ipfw_chk() i nanovo preminava po
pravilata. Pravilo 1 otnovo ne se vpisva, no uslovieto na
pravilo 2 srabotva - "via ext0, premini prez interfeis ext0 v
pravilnoto destinatsiia".
I tuk raboti divert - paketa ot ipfw_chk() se predava v tochka
(8), v podsistemata divert, s predvaritelno prikrepena
metainformatsiia s posoka (out), interfeis (ext0) i nomera na
pravilo 2. Podsistema divert predava paketa v ukazaniia v
praviloto port (8668), na koito v nashiiat sluchai raboti natd.
Toi obrabotva paketa, metainformatsiiata sushtoto i vrushta
promeneniia paket v podsistema divert, kakto sledva (taka
postupvat povecheto divert demoni, vupreki che vseki ot tiah mozhe
da promeni tazi informatsiia, i paketa shte bude izpraten na drugo
miasto).
Podsistemata divert prehvurlia polucheniia paket ot natd ot tochki
(9) v tochkata (6). Oburnete vnimanie - paketa popada v
ip_output() OTNOVO! Tova e neobhodimo, zashtoto demonut mozhe da
vurne paketa s napulno razlichen adres ili dori da suzdadete
nov paket. No v nashiia sluchai, paketa nosi divert tag,
metainformatsiia, nai-vazhnata chast ot koiato e nomera na
praviloto. Pri vlizane v ipfw_chk() paketa purvoto se
proveriava za nalichieto na tozi marker. Ako bude otkrit i
sudurzha nomer na pravilo (v sluchaia 2), ipfw_chk() propuska
proverkata na pravila 1 i 2, i zapochva s tsifrata 2 + 1, t.e. 3
(ako proverkata na paketa zapochne ot praviloto s ukazaniiat
nomer, a ne ot sledvashtoto, toi otnovo shte popadne na divert,
t.e. shte se poluchi bezkraen tsikul).
Na tozi etap paketa produlzhava dvizhenieto po pravilo 3 i sled
tova otiva v tochka (7) v mrezhata. Po tozi nachin, vupreki
fakta, che paketa e popadnal v ip_output() dva puti, ot gledna
tochka na potrebitelia tova izglezhda, siakash paketa e bil tam
vednuzh i ne e izlizal izvun zashtitnata stena - prosto na
pravilo 2 se poluchava magicheski nachin za promiana adresa i
porta.
Po analogichen nachin, paketa koito se vrushta ot internet na
interfeis ext0, preminava prez mashinata po putia (1) - (2) -
nachaloto na ipfw_chk() - pravilo 1 - pravilo 2 – (8) - divert
- natd - (9) - (2) - proverka v ipfw_chk() - pravilo 3 -
pravilo 4 - (4) - (6) - nachaloto na ipfw_chk() - pravilo 1 -
pravilo 2 - pravilo3 - pravilo 4 - (7) - izprashtane prez
interfeis int0.
Podobno e povedenieto na paketa sled obrabotka ot ipfw v druga
podsistema – to ne e unikalno za divert, tova e obshta shema na
rabota na FreeBSD steka. Naprimer, deistviia pipe i queue v
dummynet predavat paketa v netgraph (i taka se poiaviava v 7.0
ipfw nat) deistva na tozi printsip. Razlikata obache e, che v
tazi podsistema paketa ostava v iadroto, ne se predava na
demon. Zatova na purvo miasto v po-gornata podsistema vmesto
nomera na praviloto se zapazva pulniiat ukazatel, i paketa se
vrushta neposredstveno kum sledvashtoto pravilo, dazhe i da ima
sushtiiat nomer. Na vtoro miasto, za takiva podsistemi deistva
nastroikata one_pass v sysctl - ako e vklyuchena, pri povtorno
vlizane na paketa v ipfw, sled zavrushtaneto si ot podsistema
dummynet (netgraph), ipfw_chk() vednaga vrushta paketa bez da
premine prez pravilata, siakash kum paketa e prilozhen allow.
Tova povedenie pozvoliava oprostiavane pravilata na zashtitnata
stena, kogato e izvestno, ako paketa popadne v trubata (pipe),
toi se otpravia napred i ne e neobhodimo sled vsiako pipe
pravilo da se postavia allow (za da ne popadne paketa v
sledvashto pravilo i sledvashtite pipe/queue). Ako konfiguratsiiata
iziskva, purvo triabva da se ogranichi trafika i sled tova da se
razberat slozhnite iziskvaniia, za niakoi shte bude razresheno, a za
niakoi zabraneno, za oprostiavaneto na pravilata, pravilniiat
nabor shte bude vklyuchvane na one_pass - vmesto allow, do pipe
pravilata, bi triabvalo da se napravi skipto.
I taka, kakto veche beshe kazano, paketa preminava prez
poreditsata ot pravila posledovatelno, vuv vuzhodiasht red na
pravilata. Poreditsata ot pravilata mozhe da se razglezhda kato
tablitsa s tri koloni: nomer, deistvie (i negovite parametri,
kato log), kakto i usloviiata, pri koito edin paket otgovaria na
praviloto (naprimer ot adres 1.1.1.1 do adres 2.2.2.2).
Tablitsata se razglezhda otgore nadolu, paketa se sravniava s
usloviiata. Pri purvo suvpadenie po stulbitsata, se izpulniava
deistvie i spirame nablyudenieto ...
Veche znaem, v kakva posledovatelnost izliza paketa prez
mrezhoviia stek na FreeBSD, nie mozhem da pristupim kum izuchavane
pravilata na ipfw nat.
Mehanizma ipfw nat mozhe da se razgleda kato svoeobrazen filtur
– preobrazuvatel na trafika. V zavisimost ot tova kak e
nastroen nat i ot tova kakvi IP adresi na podatel i poluchatel,
shte budat predadeni chrez nego, nat shte preobrazuva IP adresa na
podatelia ili IP adresa na poluchatelia, ili prosto shte othvurli
paketa. Vazhno e da zapomnite, che nat razdelia trafika na
izhodiasht (takuv, koito se maskira) i vhodiasht (takuv, koito se
demaskira) v zavisimost ot tova prez kakuv put (OUT ili IN) e
bil poluchen. Taka che, trafika popadnal v nat prez put OUT
triabva da se maskira (zamenia se IP adresa na podatelia s IP
adresa na nat mashinata), a trafikut koito idva prez put IN da
se demaskira. Za da razberem tova povedenie, mozhe da
izpolzvate direktivata revers - togava tsialoto povedenie shte se
promeni i mozhe da bude pusnat nat na vunshniia mrezhovi interfeis
(koito sledi v internet) i na vutreshniia (koito sledi v
lokalnata mrezha). Podrobno opisanie za tova kak raboti
mehanizma na nat, veroiatno e izlishno. Za povedenieto na
mehanizma na nat vliiae nastroikata na parametura one_pass - v
zavisimost ot nego, trafika preminavasht prez nat mozhe da se
vurne v zashtitnata stena, ot kudeto e bil izpraten v nat ili da
izleze ot zashtitnata stena. Tazi guvkavost pozvoliava da se
napraviat mnogo interesni neshta s trafika. ipfw nat vi pozvoliava
da startirate mnogo svoite kopiia, vseki ot koito ima svoi nat
tablitsi i nastroiki. Ne triabva, da se obediniavat niakolko
kopiia, za da se izpolzva obshtata nat tablitsa.
Vuzmozhnosti i optsii za konfigurirane na ipfw nat
ipfw nat e baziran na koda na bibliotekata libalias. Na neia e
izgraden kakto natd taka i ng_nat. Funktsionalnostta na
libalias e prenesena v ipfw nat, prakticheski napulno povtaria
vsichko, koeto ima v natd s izklyuchenie na niakoi spetsifichni
neshta. Za suzhalenie man stranitsata za ipfw nat dava mnogo
oskudno opisanie na vuzmozhnostite mu, za tova pri izuchavane na
optsiite za konfigurirane, mozhe da izpolzvate man stranitsata na
natd.
man
natd
Primeri i stsenarii za prilozhenie na ipfw nat mehanizma
Sled kato se zapoznahme s printsipa na predvizhvane na trafika
prez steka, kakto i optsiite za konfigurirane mehanizma na ipfw
nat, mozhe da pristupim kum suzdavaneto na pravila i da
razgledame tiahnata rabota. Dolnite primeri, shte budat osnovani
na printsipa "zadacha - reshenie", i taka na tozi printsip
postepenno, shte se uslozhniava konfiguratsiiata s podrobno opisanie
i shte budat obiasneni predpolagaemite resheniia. Ako ima mneniia,
spomagashti po-lesno da se razbere izuchavaniia material, v tova
chislo i primeri, mogat da se izpolzvat v rabotata.
Vklyuchvane na ipfw nat i Dummynet
Prekompilirane na iadroto s dopulnitelnite parametri:
options
IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options IPFIREWALL_nat
options LIBALIAS
options ROUTETABLES=2
options DUMMYNET
options HZ="1000"
Ili vklyuchvane bez prekompilirane (no s po-malko vuzmozhnosti za
konfigurirane)
/etc/rc.conf
firewall_nat_enable="YES"
dummynet_enable="YES"
Primer 1
Prost sluchai: ruter s dva mrezhovi adaptera vklyucheni v
lokalnata mrezha i v internet. Adres na lokalnata mrezha
192.168.1.1 (mrezhovi adapter fxp0), adres v internet 1.2.3.4
(mrezhovi adapter em0).
Zadacha: „razdavane na internet“ za lokalna mrezha, obezpechen
pri povikvane na port za vutreshni adresi, razreshavane
preminavaneto na trafika prez otdelnite portove na tozi
rutera.
Konfiguratsiia:
/etc/rc.conf
gateway_enable="YES"
ifconfig_em0="inet 1.2.3.4 netmask 255.255.255.0 -rxcsum"
ifconfig_fxp0="inet 192.168.1.1 netmask 255.255.255.0"
defaultrouter="1.2.3.254"
firewall_enable="YES"
# Belezhka: razgledaite /etc/defaults/rc.conf i
/etc/rc.firewall vuv FreeBSD 11
firewall_type="/etc/firewall"
/etc/sysctl.conf
net.inet.ip.fw.one_pass=1
/etc/firewall
# pravila razreshavashti trafik prez lokalniia interfeis lo0
# shte budat dobaveni avtomatichno pri startirane na zashtitnata
stena
# ipfw add 100 allow ip from any to any via lo0
# ipfw add 200 deny ip from any to 127.0.0.0/8
# ipfw add 300 deny ip from 127.0.0.0/8 to any
# razreshavame vsichko prez interfeisa za lokalnata mrezha
ipfw add 1040 allow ip from any to any via fxp0
# boim se ot neizvestni
ipfw add 1050 deny ip from any to 192.168.0.0/16 in recv
em0
ipfw add 1060 deny ip from 192.168.0.0/16 to any in recv
em0
ipfw add 1070 deny ip from any to 172.16.0.0/12 in recv
em0
ipfw add 1080 deny ip from 172.16.0.0/12 to any in recv
em0
ipfw add 1090 deny ip from any to 10.0.0.0/8 in recv em0
ipfw add 10100 deny ip from 10.0.0.0/8 to any in recv em0
ipfw add 10110 deny ip from any to 169.254.0.0/16 in recv
em0
ipfw add 10120 deny ip from 169.254.0.0/16 to any in recv
em0
# nastroika na nat.
# optsiiata za prenos na nov red "\", triabva da se otstrani,
vsichko triabva da e na edin red
# optsiite redirect_port sa primerni - kak da se napravi
"prenasochvane na port"
ipfw nat 1 config log if em0 reset same_ports deny_in \
redirect_port tcp 1.2.3.4:6881 6881 \
redirect_port udp 1.2.3.4:4444 4444 \
redirect_port tcp 192.168.1.24:25 25
# prenasochvame vsichko, koeto preminava prez vunshniia interfeis
kum nat
ipfw add 10130 nat 1 ip from any to any via em0
# boim se ot neizvestni
# Belezhka: vuv FreeBSD 11 modula ipfw e kompiliran, po
podrazbirane s deny
ipfw add 65534 deny all from any to any
Detailno opisanie za preminavaneto na trafika prez
zashtitnata
stena v dadenata konfiguratsiia:
Za rutera:
Trafika initsializiran neposredstveno ot rutera v tochka (5) -
risunka 2, preminava v tochka (6). Popadnal v ip_output(), shte
mu bude prisvoen shlyuz po podrazbirane s mrezhovi interfeis em0,
prez koito e dluzhen da izleze v internet (via em0, po-tochno
xmit em0). Kogato trafika vleze v zashtitnata stena, zapochva da
minava prez poreditsata ot pravila. Trafika idva do pravilo
10130 i biva predaden v tochka (8), ako se obrabotva v nat kato
izhodiasht trafik, shte postupi v put OUT. V podsistema nat za
trafika, shte bude suzdaden zapis za suotvetstvie v tablitsata za
suedineniia, kakto sledva: lokalno_IP:port
otdalecheno_IP:port. Posle v tochka (9) trafika izliza ot
podsistema nat i se predava za obrabotka v tochka (6), otnovo
popada v ip_output(). Ako one_pass ima stoinost 1 (vklyuchen),
trafika izliza ot ipfw (siakash kum nego e prilozheno pravilo
allow) i otiva v internet prez em0.
Trafika, koito se vrushta kato otgovor, otiva v tochka (1) i
popada v put IN, imeto na tozi mrezhoviia interfeis e em0 (via
em0, po-tochno recv em0), prez koito e poluchen. Po-natatuk
trafika otiva v tochka (2) i popada vuv funktsiia ip_input(),
posle otiva v zashtitnata stena i zapochva da minava prez
poreditsata ot pravila. Trafika idva do pravilo 10130 i biva
predaden v tochka (8), ako se obrabotva v nat kato vhodiasht
trafik, shte postupi v put IN. V podsistema nat za trafika, shte
bude nameren po-rano suzdadeniia zapis za suotvetstvie ot
tablitsata za suedineniia, kakto sledva: lokalno_IP:port
otdalecheno_IP:port, sled koeto shte se demaskira (v tozi sluchai
niama da ima deistvitelni izmenia, tui kato maskirane/
demaskirane na adresa e edno i sushto – lokalen/1.2.3.4). Posle
v tochka (9) trafika izliza ot podsistema nat i se predava za
obrabotka v tochka (2), otnovo popada v ip_input(). Ako
one_pass ima stoinost 1 (vklyuchen), trafika izliza ot ipfw
(siakash kum nego e prilozheno pravilo allow) i otiva v lokalniia
soket, na koito raboti programa za ranno initsializirane na
suedineniiata.
Ako ot internet doide trafik, za koito niama zapis za
suotvetstvie v tablitsata za suedineniia, pri postupvane v nat,
toi shte bude othvurlen, siakash nat e nastroen s parametur
deny_in.
Ako ot internet pristigne trafik adresiran za tcp
1.2.3.4:6881, toi shte doide do tochka (8) i shte popadne v nat,
kudeto shte bude uspeshno demaskiran, v tablitsata za nego shte ima
statichen zapis suotvetstvasht na 1.2.3.4:6881
otdalecheno_IP:otdalechen_port. Posle kakto e v sluchaia s trafik,
koito se vrushta kato otgovor ot internet, shte bude priet i shte
postupi v lokalniia soket na port 6881.
Suotvetno, izhodiashtiia trafik ot tozi soket preminava prez
statichnoto pravilo i shte bude obraboten uspeshno, kakto e v
sluchaia s izhodiashtiia trafik kum internet.
Za mrezha 192.168.1.0/24:
Trafika initsializiran ot host 192.168.1.56, ot mrezha
192.168.1.0/24, shte vleze v rutera prez mrezhovi interfeis fxp0,
v tochka (1) poluchava tag na mrezhovi interfeis fxp0 (via fxp0,
po-tochno recv fxp0), prez koito e poluchen. Posle trafika otiva
v tochka (2) i popada vuv funktsiia ip_input(), sled tova vliza v
zashtitnata stena i zapochva da minava prez poreditsata ot
pravila. Trafika idva do pravilo 1040 i se predava v put IN na
zashtitnata stena, i popada obratno v ip_input(), kudeto shte bude
prieto reshenie, che toi ne e za nas, sledovatelno triabva da se
izprati v tochka (4), vuv funktsiia ip_forward(). Kogato popadne
v ip_forward(), shte se snizhi TTL-a na IP trafika, osven tova
shte se proveri, dali e razresheno izvurshvaneto na marshrutizatsiia
(ustanoviavane na suotvetnite stoinost v sysctl, koito se
prilagat v rc.conf chrez gateway_enable="YES"), togava shte bude
predaden v tochka (6), vuv funktsiia ip_output(). Popadnal v
ip_output() na nego shte bude prisvoen shlyuz po podrazbirane i
tag na mrezhovi interfeis em0, prez koito e dluzhen da izleze v
internet (via em0, po-tochno xmit em0). Trafika vliza v
zashtitnata stena i zapochva da minava prez poreditsata ot
pravila. Trafika idva do pravilo 10130 i biva predaden v tochka
(8), ako se obrabotva v nat kato izhodiasht trafik, shte postupi v
put OUT. V podsistema nat za trafika, shte bude suzdaden zapis
za suotvetstvie v tablitsata za suedineniia, kakto sledva:
192.168.1.56:port 1.2.3.4:port otdalecheno_IP:port, a
originalniia adres na podatelia (192.168.1.56) v hedura, shte bude
zamenen s IP adresa ukazan v parametur „if“ v nastroika nat.
Posle v tochka (9) trafika izliza ot podsistema nat i se
predava za obrabotka v tochka (6), otnovo popada v ip_output().
Ako one_pass ima stoinost 1 (vklyuchen), trafika izliza ot ipfw
(siakash kum nego e prilozheno pravilo allow) i otiva v internet
prez em0 s IP adres na podatel 1.2.3.4.
Trafika, koito se vrushta kato otgovor, otiva v tochka (1) i
popada v put IN, imeto na tozi mrezhoviia interfeis e em0 (via
em0, po-tochno recv em0), prez koito e poluchen. Po-natatuk
trafika otiva v tochka (2) i popada vuv funktsiia ip_input(),
posle otiva v zashtitnata stena i zapochva da minava prez
poreditsata ot pravila. Trafika idva do pravilo 10130 i biva
predaden v tochka (8), ako se obrabotva v nat kato vhodiasht
trafik, shte postupi v put IN. V podsistema nat za trafika, shte
bude nameren po-rano suzdadeniia zapis za suotvetstvie ot
tablitsata za suedineniia, kakto sledva: 192.168.1.56:port
1.2.3.4:port otdalecheno_IP:port, sled koeto shte se
demaskira – adresa na poluchatelia v hedura, shte bude zamenen ot
1.2.3.4 na 192.168.1.56. Posle v tochka (9) trafika izliza ot
podsistema nat i se predava za obrabotka v tochka (2), otnovo
popada v ip_input(). Ako one_pass ima stoinost 1 (vklyuchen),
trafika izliza ot put IN na zashtitnata stena (siakash kum nego e
prilozheno pravilo allow) i popada obratno v ip_input(), kudeto
shte bude prieto reshenie, che toi ne e za nas, sledovatelno
triabva da se izprati v tochka (4), vuv funktsiia ip_forward().
Kogato popadne v ip_forward(), shte se snizhi TTL-a na IP
trafika, osven tova shte se proveri, dali e razresheno
izvurshvaneto na marshrutizatsiia (ustanoviavane na suotvetnite
stoinost v sysctl, koito se prilagat v rc.conf chrez
gateway_enable="YES"), togava shte bude predaden v tochka (6),
vuv funktsiia ip_output(). Popadnal v ip_output() na nego shte
bude prisvoen shlyuz po podrazbirane i tag na mrezhovi interfeis
fxp0, prez koito e dluzhen da otidete v lokalnata mrezha (via
fxp0, po-tochno xmit fxp0). Trafika vliza v zashtitnata stena i
zapochva da minava prez poreditsata ot pravila. Trafika idva do
pravilo 1040. Posle tozi trafik izliza ot ipfw i otiva v
lokalnata mrezha prez fxp0 s IP adresa na poluchatelia
192.168.1.56.
Ako ot internet doide trafik, za koito niama zapis za
suotvetstvie v tablitsata za suedineniia, pri postupvane v nat,
toi shte bude othvurlen, siakash nat e nastroen s parametur
deny_in.
Ako ot internet pristigne trafik adresiran za tcp 1.2.3.4:25,
toi shte doide do tochka (8) i shte popadne v nat, kudeto shte bude
uspeshno demaskiran, v tablitsata za nego shte ima statichen zapis
suotvetstvasht na 192.168.1.24:25 1.2.3.4:25
predpochitan_IP:predpochitan_port. Posle kakto e v sluchaia s
trafika, koito se vrushta kato otgovor ot internet, shte bude
priet i shte premine po sushtiia marshrut prez IN i OUT, shte otide v
lokalnata mrezha na host s IP 192.168.1.24.
Suotvetno, izhodiashtiia trafik ot IP 192.168.1.24, preminava prez
statichnoto pravilo i shte bude obraboten uspeshno, kakto e v
sluchaia s izhodiashtiia trafik kum internet.
Nadolu pri razglezhdaneto na drugite konfiguratsii, az poveche
niama da opisvam detailno vsichki sluchai. Za razbiraneto na tozi
mehanizum, dolnoto opisanie shte bude dostatuchno i mozhe da
preminem kum ostanalite konfiguratsii. Detailnite opisaniia shte
budat tam, kudeto e neobhodimo.
Primer 2
Edin po-slozhen sluchai: ruter s dva mrezhovi adaptera vklyucheni v
lokalnata mrezha i v internet. Adres na lokalnata mrezha
192.168.1.1 (mrezhovi adapter fxp0), adres v internet 1.2.3.4 i
1.2.3.5 (mrezhovi adapter em0).
Zadacha: „razdavane na internet“ za lokalna mrezha, obezpechen
pri povikvane na port za vutreshni adresi, razreshavane
preminavaneto na trafika prez otdelnite portove na tozi
rutera, a glavno – izpolzvane na sheipur Dummynet, za da
osiguri spravedlivo razpredelenie na propuskatelnata
sposobnost mezhdu klientite v lokalnata mrezha. Da se osiguri
prenasochvane na tseliia trafik kum 1.2.3.5 na 192.168.1.36 s
izpolzvane na redirect_addr.
/etc/rc.conf
gateway_enable="YES"
ifconfig_em0="inet 1.2.3.4 netmask 255.255.255.0 -rxcsum"
ifconfig_em0_alias0="inet 1.2.3.5 netmask 255.255.255.255"
ifconfig_fxp0="inet 192.168.1.1 netmask 255.255.255.0"
defaultrouter="1.2.3.254"
firewall_enable="YES"
firewall_type="/etc/firewall"
/etc/sysctl.conf
net.inet.ip.fw.one_pass=0
/etc/firewall
ipfw add 1040 allow ip from any to any via fxp0
ipfw add 1050 deny ip from any to 192.168.0.0/16 in recv
em0
ipfw add 1060 deny ip from 192.168.0.0/16 to any in recv
em0
ipfw add 1070 deny ip from any to 172.16.0.0/12 in recv
em0
ipfw add 1080 deny ip from 172.16.0.0/12 to any in recv
em0
ipfw add 1090 deny ip from any to 10.0.0.0/8 in recv em0
ipfw add 10100 deny ip from 10.0.0.0/8 to any in recv em0
ipfw add 10110 deny ip from any to 169.254.0.0/16 in recv
em0
ipfw add 10120 deny ip from 169.254.0.0/16 to any in recv
em0
ipfw pipe 1 config bw 10Mbit/s queue 60 gred 0.002/10/30/0.1
ipfw queue 1 config pipe 1 queue 60 mask src-ip 0xffffffff gred
0.002/10/30/0.1
ipfw pipe 2 config bw 10Mbit/s queue 60 gred 0.002/10/30/0.1
ipfw queue 2 config pipe 2 queue 60 mask dst-ip 0xffffffff gred
0.002/10/30/0.1
ipfw nat 1 config log if em0 reset same_ports deny_in \
redirect_port tcp 1.2.3.4:6881 6881 \
redirect_port udp 1.2.3.4:4444 4444 \
redirect_port tcp 192.168.1.24:25 25
ipfw nat 2 config log same_ports redirect_addr 192.168.1.36
1.2.3.5
ipfw add 10130 skipto 10190 ip from 192.168.1.36 to any out
xmit em0
ipfw add 10140 skipto 10210 ip from any to 1.2.3.5 in recv
em0
ipfw add 10150 queue 1 ip from any to any out xmit em0
ipfw add 10160 nat 1 ip from any to any via em0
ipfw add 10170 queue 2 ip from any to any in recv em0
ipfw add 10180 allow all from any to any
ipfw add 10190 queue 1 ip from any to any out xmit em0
ipfw add 10200 nat 2 ip from 192.168.1.36 to any out xmit
em0
ipfw add 10210 nat 2 ip from any to 1.2.3.5 in recv em0
ipfw add 10220 queue 2 ip from any to any in recv em0
ipfw add 10230 allow all from any to any
ipfw add 65534 deny all from any to any
Detailno opisanie za preminavaneto na trafika prez
zashtitnata
stena v dadenata konfiguratsiia:
Nastroikata na parametura queue mask 0xffffffff e ukazan za
tova, che dinamichnite redove shte budat suzdavani vuz osnova na
razlikata na predpochitanite bitove ot IP adresa na podatelia
ili poluchatelia. Skorostta na izhodiashtiia i vhodiashtiia trafik, shte
bude ogranichena pod 10 Mbit/s.
Za rutera:
Trafika initsializiran neposredstveno ot rutera preminava prez poreditsata ot pravila na ipfw v put OUT do pravilo s nomer
10150. Trafika popada v Dummynet i otiva v dinamichno suzdadenata opashka i truba, v rezultat na koeto skorostta na
izhodiashtiia trafik se ogranichava do 10Mbit/s. Sled kato izleze ot Dummynet trafika se vrushta v zashtitnata stena (tui kato e
izklyuchen parametura one_pass) i popada v pravilo 10160. Sled kato premine prez nat, trafika otnovo se vrushta v zashtitnata
stena i idva do pravilo 10180, izliza ot zashtitnata stena i otiva vuv vunshnata mrezha.
Otvetniia trafik preminava prez put IN na zashtitnata stena do pravilo 10160, kudeto popada v nat i se demaskira (v dolniia
sluchai e nesushtestveno) i se priema v nat, tui kato veche ima aktivno suedinenie. Izlizaiki ot nat, trafika popada v
pravilo 10170 i se predava v Dummynet i otiva v dinamichno suzdadenata opashka i truba, v rezultat na koeto skorostta na
vhodiashtiia trafik se ogranichava do 10Mbit/s. Sled kato izleze ot Dummynet trafika se vrushta v zashtitnata stena i popada v
pravilo 10180, kudeto shte bude razreshen i shte izleze ot zashtitnata stena v soket programa initsializirashta suedineniiata.
Ako v rutera doide sluchaen trafik ot internet, toi shte premine
prez pravilo 10160 i shte bude othvurlen, siakash nat e nastroen s
parametur deny_in.
Trafik idvasht na port 6881, 4444 i 25, shte bude zaveden v nat na
pravilo 10160, posle v Dummynet na pravilo 10170, a sled tova
se propuska ili do samiia ruter, ili do host 192.168.1.24
suotvetno.
Za IP adresi 192.168.1.36 i 1.2.3.5
Trafika idvasht ot internet na vunshen IP adres 1.2.3.5 e dluzhen
da bude prenasochen kum 192.168.1.36. Kogato takuv trafik
premine prez put IN na zashtitnata stena, toi shte bude obraboten
v pravilo 10140, koeto shte prehvurli obrabotkata na 10210 –
trafika shte bude predaden vuv vtoro kopie na nat, kudeto shte se
izvurshi demaskirane (IP adres 1.2.3.5 na poluchatelia, shte bude
zamenen s 192.168.1.36). Posle tozi trafik se vrushta v
zashtitnata stena i prez pravilo 10220 popada v Dummynet.
Izlizaiki ot tam se vrushta v zashtitnata stena i idva do pravilo
10230, posle izliza to put IN na zashtitnata stena i otiva v put
OUT, kudeto idva do pravilo 1040 i se priema, izliza ot
zashtitnata stena, i se izprashta na 192.168.1.36.
Otvetniia trafik (kakto i drug predpocheten izhodiasht trafik) ot
192.168.1.36 preminava prez 1040 v put IN, sled tova v put OUT
prez 10130, 10190, 10200 i 10230, posle otiva vuv vunshnata
mrezha.
Za mrezha 192.168.1.0/24:
Trafik idvasht ot mrezhata 192.168.1.0/24 (naprimer ot host s IP
192.168.1.24), shte mine prez mrezhov adapter fxp0 v put IN na
zashtitnata stena i shte doide do pravilo 1040, posle shte izleze ot
IN i shte bude pozvolen. Trafika shte otide v put OUT, kudeto shte
premine prez pravilata do 10150. Trafika popada v Dummynet i otiva v dinamichno suzdadenata opashka i truba, v rezultat na
koeto skorostta na izhodiashtiia trafik shte se ogranichi do
10Mbit/s. Sled kato izleze ot Dummynet trafika se vrushta v
zashtitnata stena (tui kato parametur one_pass e izklyuchen) i
popada v pravilo 10160. Sled kato premine prez nat, trafika se
vrushta v zashtitnata stena i idva do pravilo 10180, kudeto izliza
ot zashtitnata stena i otiva vuv vunshnata mrezha.
Otvetniia trafik preminava prez put IN na zashtitnata stena do
pravilo 10160, kudeto popada v nat i se demaskira i se priema
v nat, tui kato veche ima aktivno suedinenie. Izlizaiki ot nat,
trafika popada v pravilo 10170 i se predava v Dummynet, i otiva v dinamichno suzdadenata opashka i truba, v rezultat na
koeto skorostta na vhodiashtiia trafik shte se ogranichi do 10Mbit/s.
Sled kato izleze ot Dummynet trafika se vrushta v zashtitnata
stena i popada v pravilo 10180, kudeto shte bude razreshen i shte
izleze ot put IN na
<< | Mikrotik + Openvpn + android >>
|
|