ot Radoslav Kolev(22-04-2004)
reiting (33)
[ dobre ]
[ zle ]
Variant za otpechatvane
Rusti Rusel, poshtenski spisuk netfilter@lists.samba.org
prevod Radoslav Kolev, rado_k@yahoo.com $Versiia: 1.26 $ $Data: 2002/01/24 13:42:53$
prevod $Versiia: 0.01 $ $Data: 2004/04/14 23:52:53$
Tozi dokument opisva kak se izpolzvat iptables za filtrirane na paketi v Linuks 2.4 iadrata.
1. Vuvedenie
2. Kude e ofitsialniiat ueb sait? Ima li poshtenski spisuk?
3. I taka, kakvo e paketen filtur?
4. Koi po diavolite si ti, i zashto burnikash iz moeto iadro?
5. Mnogo burz urok po filtrirane na paketi, a-la Rusti Rusel
6. Kak paketite preminavat prez filtrite
7. Izpolzvane na iptables
8. Izpolzvane na ipchains i ipfwadm
9. Suvmestiavane na NAT i filtrirane na paketi
10. Razliki mezhdu iptables i ipchains
11. Suveti otnosno izgrazhdaneto na paketen filtur
1. Vuvedenie
Dobre doshul, skupi chitatelyu!
Predpolaga se, che znaete kakvo e IP adres, mrezhov adres, mrezhova maska,
rutirane i DNS. Ako ne e taka, preporuchvam vi da prochetete
Network Concepts HOWTO.
Stilut v koito e napisano tova rukovodstvo se meni mezhdu kratki obiasneniia
(koito shte vi nakarat da se chustvate spokoini, no na praktika nezashtiteni) i
direktno i pulno razglezhdane na neshtata (koeto shte nakara vsichki, osven
nai-smelite da se chustvat oburkani, paranoichni, turseshti tezhko vuoruzhenie).
Vashata mrezha ne e sigurna. Zadachata da se osiguriat burzi i
udobni sredstva za komunikatsiia, chiiato upotreba da se ogranichi samo
za dobri, a ne zlonamereni tseli e podobna na drugi trudno razreshimi
problemi, kato naprimer da se osiguri svoboda na slovoto, kato v sushtoto
vreme se zabrani izvikvaneto na "Pozhar!" v prepulnena zala. Tezi problemi
niama da budat razresheni v tova rukovodstvo.
Edinstveno Vie mozhete da reshite kakuv shte bude kompromisut. Az shte se
opitam da vi dam instruktsii za tova kak da izpolzvate niakoi ot nalichnite
instrumenti i shte vi pokazha niakoi slabi mesta za koito
triabva da znaete. Nadiavam se, che shte gi
izpolzvate za dobro, a ne za losho. Tova e drug podoben problem.
(C) 2000 Pol `Rusti' Rusel. Razprostraniava se pod GNU GPL litsenz.
2. Kude e ofitsialniiat ueb sait? Ima li poshtenski spisuk?
Ima tri ofitsialni saita:
Mozhete da dostignete do vseki edin ot tiah chrez krugovi DNS zaiavki na adres
http://www.netfilter.org/ ili
http://www.iptables.org/
Otnosno ofitsialniiat poshtenski spisuk vizhte
netfilter List.
3. I taka, kakvo e paketen filtur?
Paketniiat filtur e programa, koiato preglezhda zaglavnite chasti (header)
na preminavashtite paketi, i reshava sudbata na tseliia paket. Toi mozhe da reshi da
othvurli (DROP) paketa (s drugi dumi, da se durzhi taka, vse edno tozi
paket nikoga ne e pristigal), da prieme (ACCEPT) paketa (t.e, da razreshi
na paketa da premine), ili da izvurshi drugo po-slozhno deistvie.
Pri Linuks kodut za filtrirane na paketi e chast ot iadroto (kato modul,
ili kompiliran direktno v iadroto) i mozhem da pravim niakoi dosta
slozhni neshta s paketite, no osnovniiat printsip na predglezhdane na
zaglavnata chast i reshavane na sudbata na tseliia paket e vse oshte validen.
3.1 Zashto bih iskal da imam paketen filtur?
Kontrol. Sigurnost. Nablyudenie.
- Kontrol:
kogato izpolzvate kompyutur s Linuks za da svurzhete vashata
vutreshna mrezha s niakoia druga (naprimer Internet) vie imate vuzmozhnost da
razreshite samo niakoi konkretni tipove trafik, kakto i da zabranite drugi.
Naprimer v zaglavnata chast na paketa se sudurzha adresa kum koito e nasochen
tozi paket (destination), taka che mozhete da sprete vsichki paketi nasocheni
kum opredelena chast ot vunshnata mrezha. Eto i drug primer - az izpolzvam
Netscape za da razglezhdam arhivite Dilbert. Na stranitsite tam ima reklami
ot doubleclick.net i Netscape gubi moeto vreme i chestotna lenta kato
radostno gi zarezhda. Kazvaiki na paketniia filtur da ne priema paketi ot ili
za adresite pritezhavani ot doubleclick.net mozhe da reshim tozi problem (ima
po-dobri nachini da se spravite s tova, vizh Junkbuster).
- Sigurnost:
kogato vashiiat kompyutur s Linuks e edinstvenoto neshto mezhdu
haosut v Internet i vashata hubava i podredena mrezha, to dobre e da znaete
kak da ogranichite kakvo mozhe da pochuka na vashata vrata. Naprimer, mozhe da
iskate da razreshite vsichko koeto izliza navun ot vashata mrezha, no se
pritesniavate ot dobre izvestniia `Ping na smurtta' idvasht ot zlonamereni
vunshni hora. Ili puk ne iskate niakoi otvun da ima telnet dostup do
vashata Linuks mashina, vupreki che vsichki potrebiteli imat paroli. Mozhe bi
(kakto povecheto hora) vie iskate da budete samo nablyudatel v Internet,
a ne i survur (sus ili bez vashe znanie). Prosto ne pozvoliavaite na
niakoi otvun da se svurzva s mrezhata vi, kato nakarate vashiiat paketen
filtur da otkazva vsichki vhodiashti paketi koito se opitvat da initsiirat
vruzka.
- Nablyudenie:
poniakoga losho konfigurirana mashina ot lokalnata mrezha
shte reshi da izplyue paketi kum vunshniia sviat. Dobre e da kazhete na paketniia
filtur da vi uvedomi v sluchai, che se sluchi neshto stranno; mozhe bi shte
mozhete da napravite neshto po vuprosa, ili puk prosto ste si lyubopitni
po priroda.
3.2 Kak da napravia paketen filtur pod Linuks?
Linuks iadrata imat vuzmozhnosti za filtrirane na paketi oshte ot
versiite 1.1. Purvoto pokolenie, bazirano na ipfw ot BSD, beshe
preneseno ot Alan Koks v kraia na 1994 godina. To beshe podobreno
ot Ios Vos (Jos Vos) i drugi hora vuv versiiata na Linuks 2.0;
potrebitelskata programa `ipfwadm' kontrolirashe pravilata za
filtrirane v iadroto. V sredata na 1998 godina, za Linuks 2.2 az
prerabotih goliama chast ot koda v iadroto s pomoshtta na Maikul Nyuling i
suzdadoh potrebitelskata programa `ipchains'. I nakraia, drugo
prenapisvane na koda v iadroto i potrebitelskata programa ot chetvurto
pololenie `iptables' stanaha fakt v sredata na 1999 godina za Linuks 2.4.
Po-goliamata chast ot tova rukovodstvo e kontsentrirana vurhu iptables.
Triabva vi iadro s netfilter infrastruktura v nego;
netfilter e obshtata osnova v Linuks iadroto kum koiato se vklyuchvat
ostanalite komponenti (kato iptables modula naprimer). Tova
oznachava, che vi triabva iadro versiia 2.3.15 ili po-nova. Otgovorete
s `Y' na CONFIG_NETFILTER pri konfiguratsiiata na iadroto.
Programata iptables si govori s iadroto i mu kazva koi
paketi da filtrira. Osven ako ne ste programist, ili puk izvunaredno
lyubopiten, to tova shte e nachin po koito shte kontrolirate filtriraneto
na paketi.
Programata iptables vmukva i iztriva pravila ot tablitsata za
paketno filtrirane v iadroto. Tova oznachava, che vsichki nastroiki koito
napravite shte budat zagubeni sled restart; vizh
Zapazvane na pravilata sled restart za obiasnenie kak da
se osiguri vuzstanoviavaneto na nastroikite pri sledvashtoto zarezhdane na
Linuks.
iptables zamenia programite ipfwadm i
ipchains : vizh
Izpolzvane na ipchains i ipfwadm za tova kak
bezbolezneno na izbegnete upotrebeta na iptables ako veche polzvate
niakoi ot drugite instrumenti.
Zapazvane na pravilata sled restart
Tekushtata konfiguratsiia na vashata zashtitna stena (firewall) se pazi v iadroto,
sledovatelno tia shte se zagubi pri restart. Mozhe da polzvate skriptovete
iptables-save i iptables-restore za zapazvane na konfiguratsiiata vuv fail i
neinoto vuzstanoviavane.
Drug nachin e da slozhite neobhodimite komandi za zadavane na zhelanite
pravila v initsializirashtite skriptove. Uverete se, che shte napravite neshto
inteligentno, v sluchai che izpulnenieto na niakoia ot komandite se provali
(obiknoveno `exec /sbin/sulogin').
4. Koi po diavolite si ti, i zashto burnikash iz moeto iadro?
Az sum Rusti Rusel; chovekut koito poddurzha koda za filtrirane na IP
paketi v Linuks iadroto, ili prosto oshte edin programist, koito se okaza
na podhodiashtoto miasto v podhodiashtoto vreme. Az napisah ipchains
(vizh
Kak da napravia paketen filtur pod Linuks? po-gore za suotvetnite zaslugi na horata koito svurshiha
sushtinskata rabota), i nauchih dostatuchno za da moga tozi put da napravia
filtriraneto na paketi po pravilniia nachin. Nadiavam se.
WatchGuard, edna otlichna
kompaniia proizvezhdashta zashtitni steni i prodavashta Firebox - edin mnogo
dobur produkt, mi predlozhi da mi plashta za da ne pravia nishto, taka che da
kontsentriram tsialoto si vnimanie vuthu razrabotkata na tezi neshta tuk i
vurhu poddruzhkata na predishni takiva. Az predvidih che shte sa mi
neobhodimi 6 mesetsa, a mi triabvaha 12, no nakraia chustvah, che neshtata
sa napraveni kakto triabva. Mnogo prenapisvaniia, skapan hard disk,
otkradnat laptop, niakolko povredeni failovi sistemi i edin schupen
ekran po-kusno, eto go i rezultata.
I dokato sum oshte s vas, bih iskal da promenia greshnite predstavi na niakoi
hora: az ne sum guru razrabotchik na iadroto. Znaia tova, zashtoto po vreme
na rabotata mi vurhu iadroto imah vuzmozhnostta da kontaktuvam s niakoi ot
tiah kato: Deivid S. Milur, Aleksei Kuznetsov, Andi Kliin, Alan Koks.
Vsichki te sa mnogo zaeti s praveneto na svoiata magiia, ostaviaiki me da
gazia iz plitkite vodi, kudeto e bezopasno.
5. Mnogo burz urok po filtrirane na paketi, a-la Rusti Rusel
Povecheto hora imat samo edna PPP vruzka kum Internet, i iskat
nikoi da niama dostup do tiahnata vutreshna mrezha ili zashtitna stena:
6. Kak paketite preminavat prez filtrite
Purvonachalno v iadroto ima tri spisuka ot pravila vuv `filter' tablitsata;
tezi spisutsi se narichat verigi s pravila za filtrirane (firewall chains)
ili prosto verigi (chains). Tezi tri verigi se narichat INPUT (vhod),
OUTPUT (izhod) i FORWARD (preprashtane).
Za fenovete na ASCII arta, verigite sa podredeni eto taka: (Zabelezhka:
podrezhdaneto e dosta po razlichno ot tova pri iadra vesrii 2.0 i 2.2 !)
_____
vhodiashti / \ izhodiashti
-->[ruting ]---> |FORWARD|------->
[reshenie] \_____/ ^
| |
v ____
___ / \
/ \ |OUTPUT|
|INPUT| \____/
\___/ ^
| |
----> lokalen protses ----
Trite kruga predstavliavat verigite za koito se spomena po-gore.
Kogato edin paket dostigne do niakoi ot krugovete na diagramata se
proveriavat pravilata v tazi veriga i se reshava sudbata na paketa.
Ako verigata kazhe paketa da bude othvurlen (DROP), to toi biva
zalichen vednaga, no ako reshenieto e toi da bude priet (ACCEPT)
paketa produlzhava putia si po diagramata.
Verigata e spisuk ot pravila. Vsiako pravilo glasi `ako
zaglavnata chast na paketa izglezhda taka, to napravi s tozi paket eto tova'.
Ako paketut ne otgovaria na iziskvaniiata v tova pravilo, to se preminava kum
sledvashtoto vuv verigata. I nakraia, ako niama poveche pravila s koito da se
sravni paketa iadroto reshava sudbata mu suglasno politikata (policy)
na verigata. Obiknoveno, ako v edna sistema se durzhi na sigurnostta, to politikata
kazva na iadroto da otkazhe paketa.
- Kogato se poluchi paket (primerno ot mrezhovata karta) iadroto purvo
poglezhda za kude e adresiran toi: tova se naricha `rutirane'.
- Ako e adresiran za tazi mashina, to paketut preminava nadolu po diagramata
kum INPUT verigata. Ako premine prez neia protsesa chakasht tozi paket shte go poluchi.
- V protiven sluchai, ako v iadroto ne e aktivirano prehvurlianeto na paketi
(forwarding), ili puk to ne znae v kakva posoka da go prenasochi, paketa shte bude
otkazan. Ako puk prehvurlianeto e vklyucheno i paketut e nasochen kum drug mrezhov
interfeis (ako imate takuv), togava toi otiva nadiasno v diagramata,
kum FORWARD verigata. Ako premine uspeshno prez neia shte bude izpraten po drugiia
interfeis.
- I nakraia, programa raboteshta na mashinata mozhe da izprashta paketi.
Te minavat direktno kum OUTPUT verigata: ako tia kazhe, che paketa mozhe da premine
toi produlzhava kum koito interfeis e bil nasochen.
7. Izpolzvane na iptables
iptables ima dosta detailna man stranitsa (man iptables ),
v sluchai, che vi triabvat poveche konkretni detaili. Tezi ot vas koito
sa izpolzvali ipchains mozhe prosto da poglednat
Razliki mezhdu iptables i ipchains; te sa mnogo podobni.
Ima niakolko razlichni neshta koito mozhete da pravite s iptables .
Zapochvate s trire vgradeni verigi INPUT , OUTPUT
i FORWARD koito ne mozhete da iztriete. Neka razgledame deistviiata
chrez koito mozhete da kontrolirate tseli verigi:
- Suzdavane na nova veriga (-N).
- Iztrivane na prazna veriga (-X).
- Smiana na politikata na vgradena veriga (-P).
- Pokazvane na pravilata vuv veriga (-L).
- Iztrivane na pravilata vuv veriga (-F).
- Nulirane na baitovite i paketni broiachi na vsichki pravila vuv veriga (-Z).
Ima niakolko nachina za manipulirane na pravilata v edna veriga:
- Dobaviane na novo pravilo kum veriga (-A).
- Vmukvane na novo pravilo na dadena pozitsiia (-I).
- Zamiana na edno pravilo na dadena pozitsiia s drugo (-R).
- Iztrivane na pravilo na dadena pozitsiia, ili purvoto suvpadashto (-D).
7.1 Kakvo shte vidite, kogato kompyuturut vi startira
iptables mozhe da bude modul, s ime (`iptable_filter.o'), koito triabva da
bude zareden avtomatichno kogato startirate iptables za purvi put.
Mozhe sushto taka da bude vgraden v iadroto.
Predi da budat izpulneni suotvetnite iptables komandi
(vnimanie: niakoi distributsii startirat iptables v svoite startirashti
skriptove), niama da ima nikakvi pravila v koiato i da e ot vgradenite
verigi (`INPUT', `FORWARD' i `OUTPUT'), vsichki verigi shte imat politika
ACCEPT. Mozhete da promenite politikata po podrazbirane za FORWARD verigata
kato ukazhete optsiiata `forward=0' na iptable_filter modula.
7.2 Deistviia vurhu edno pravilo
Tova sa nai-chesto polzvanite deistviia pri filtriraneto na paketi -
manipuliraneto na pravila. Veroiatno nai-populiarnite ot tiah sa komandite za
dobaviane (-A) i iztrivane (-D). Drugite dve (-I za vmukvane i -R za zamiana)
sa prosto tehni razshireniia .
Vsiako pravilo zadava opredeleni usloviia na koito paketa triabva da otgovaria,
i kakvo deistvie da se izvurshi s nego v takuv sluchai (`target'). Naprimer,
vie mozhe da iskate da zabranite vsichki ICMP paketi idvashti ot 127.0.0.1. V
takuv sluchai usloviiata koito iskate da zadadete sa: protokolut da bude
ICMP; i adresut iztochnik da e 127.0.0.1. Deistvieto triabva koeto da se
izvurshi e `DROP'.
127.0.0.1 e adresa na `loopback' interfeisa, koito shte imate dori i bez
vruzka kum istinska mrezha. Mozhe da izpolzvate programata `ping' za da
generirate takiva paketi (tia prosto izprashta ICMP tip 8 (echo request) paketi,
na koito vsichki mrezhovi ustroistva (ili pone tezi koito imat dobroto zhelanie)
triabva zadulzhitelno da otgovoriat s ICMP tip 0 (echo reply) paket).
Tova ia pravi mnogo polezena za testove.
|
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.2 ms
PING 127.0.0.1 (127.0.0.1): 56 data bytes
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss
|
Mozhete da vidite, che purviiat ping e uspeshen (optsiiata `-c 1' kazva da se
izprati samo edin paket).
Togava nie dobaviame (-A) kum `INPUT' verigata pravilo, koeto ukazva
vsichki paketi idvashti ot 127.0.0.1 (`-s 127.0.0.1') s protokol ICMP (`-p icmp')
da budat otkazani (`-j DROP').
Sled tova probvame nasheto pravilo, kato puskame ping otnovo. Tozi put, sled
kratka pauza, programata se otkazva da chaka otgovor koito nikoga niama da
poluchi.
Mozhem da iztriem praviloto po edin ot dvata nachina. Znaem, che ima
samo edno pravilo v input verigata, taka che mozhem da go iztriem po
nomer:
Iztriva pravilo nomer 1 ot INPUT verigata.
Vtoriiat nachin e da izpolzvame sushtata komanda, kakto pri dobavianeto na
praviloto, no da zamenim -A s -D. Toi e polezen kogato imata slozhna
veriga ot pravila i ne iskate da gi broite za da razberete koe e pravilo
nomer 37, koeto vsushtnost iskate da premahnete. V takuv sluchai mozhe da polzvate:
Sintaksisut na -D triabva da bude sushtiiat kakto pri -A (ili -I
i -R) komandata. Ako ima poveche ot edno suvpadashti pravila v sushtata veriga,
to shte bude iztrito samo purvoto.
7.3 Definirane na filtri
Vidiahme kak se izpolzva optsiiata `-p' za da se ukazhe opredelen protokol,
ili puk `-s' za adresa na izprashtacha. Osven tezi dve ima mnogo drugi optsii,
koito mozhem da izpolzvame za da zadadem opredeleni harakteritiki na paketite.
Sledvat kratki opisaniia na vsiaka edna ot tiah.
Zadavane na IP adres na izpashtacha i poluchatelia
IP adresite na izprashtacha (`-s', `--source' ili `--src') i poluchatelia (`-d',
`--destination' ili `--dst') mogat da budat zadadeni po chetiri razlichni nachina.
Nai-chesto se izpolzva pulnoto ime, naprimer `localhost' ili `www.linuxhq.com'.
Vtoriiat nachin e da se ukazhe IP adres kato `127.0.0.1'.
Tretiiat i chetvurtiiat nachini pozvoliavat zadavaneto na grupa ot IP adresi kato
`199.95.207.0/24' ili `199.95.207.0/255.255.255.0'. I dvata primera oznachavat
vsichki IP ot 199.95.207.0 do 199.95.207.255 vklyuchitelno; chisloto sled znaka
`/' opredelia koi chasti ot IP se vzemat pod vnimanie. Stoinostta po podrazbirane
e `/32' ili `/255.255.255.255' (sravniava tseliia IP adres). Za da zadadete vseki IP
adres mozhe da izpolzvate `/0':
[ Zabelezhka: `-s 0/0' e izlishno v primera po dolu. ]
Tova se polzva riadko, zashtoto efekta e sushtiiat kakto ako ne e zadadena optsiiata `-s'.
Inversiia
Pred argumentite na mnogo ot flagovete, vklyuchitelno `-s' (ili `--source') i `-d'
(ili `--destination') mozhete da postavite `!' (chete se kato `NE') za da ukazhete
vsichki adresi, koito NE sa ravni na dadenite. Naprimer `-s ! localhost' shte suvpadne
s vseki paket, koito ne idva ot localhost.
Zadvane na protokol
Protokolut se ukazva s optsiiata `-p' (ili `--protocol').
Protokolut mozhe da bude chislo (ako znaete chislenite stoinosti otgovariashti na
suotvetnite protokoli v IP) ili ime v sluchaite na `TCP', `UDP' ili `ICMP'. Niama
znachenie dali bukvite sa malki ili glavni, taka che `tcp' e ekvivalentno s `TCP'.
Pred imeto na protokola mozhe da se postavi `!' za da se invertira, naprimer `-p
! TCP' za da zadadete vsichki paketi s protokol razlichen ot TCP.
Zadavane na interfeis
Optsiite `-i' (ili `--in-interface') i `-o' (or `--out-interface') ukazvat imeto
na vhodiashtiia ili izhodiashtiia interfeis. Interfeis se naricha fizicheskoto
ustroistvo po koeto paketut e pristignal (`-i') ili puk predstoi da bude izpraten
(`-o'). Mozhete da izpolzvate komandata ifconfig za da vidite spisuk
na vsichki interfeisi koito sa `vdignati' (t.e., raboteshti v momenta).
Paketite preminavashti prez INPUT verigata niamat izhodiasht interfeis,
sledovatelno pravila v koito e ukazan takuv s optsiiata `-o' niama da
suvpadnat s nikoi ot preminavashtite paketi.
Analogichno, paketite preminavashti prez OUTPUT verigata niamat vhodiasht
interfeis, sledovatelno pravilata izpolzvashti optsiiata `-i' v tazi veriga niama
da suvpadnat s nikoi paket.
Samo paketite preminavashti prez FORWARD verigata imat ednovremenno i
vhodiasht i izhodiasht inrerfeis.
Napulno dopustimo e da zadadete interfeis koito v momenta ne sushtestvuva;
praviloto niama da suvpadne s nikoi ot paket, dokato ne se vdigne
suotvetniia interfeis. Tova e osobenno polezno za dial-up PPP vruzki (
obiknoveno interfeis ppp0 ) i durgi podobni sluchai.
Kato spetsialen sluchai, interfeisi s ime zavurshvashto sus znak `+' shte
suvpadnat s vsichki interfeisi (nezavisimo dali v momenta sushtestvuvat ili ne)
chieto ime zapochva s tozi simvolen niz. Naprimer, za da zadadete pravilo koeto
suvpada s vsichki PPP interfeisi triabva da izpolzvate optsiiata -i ppp+ .
Ako pred imeto na interfeisa se postavi znaka `!' s intervali okolo nego,
to praviloto shte suvpada samo s paketi koito ne ot posocheniiat
interfeis(i),naprimer -i ! ppp+ .
Zadavane na fragmenti
Poniakoga edin paket e prekaleno goliam za da mozhe da bude izpraten tseliiat
navenduzh. Kogato tova se sluchi tozi paket se razdelia na fragmenti,
koito se izprashtat kato niakolko po-malki otdelni paketa. Poluchateliat suediniava
tezi fragmenti za da poluchi purvonachalniiat paket.
Problemut s fragmentite e, che purviiat ot tiah ima pulen nabor ot zaglavni
poleta (IP + TCP, UDP i ICMP), no sledvashtite paketi imat samo chast ot tiah
(IP bez poleta za drugite protokoli). Sledovatelno da se preglezhda
sudurzhanieto na vtoriia i sledvashti fragmenti za poletata na suotvetnite
protokoli (kakto tova praviat TCP, UDP i ICMP razshireniiata) e nevuzmozhno.
Ako izpolzvate funktsionalnostta za sledene na vruzkite (connection tracking) ili NAT,
togava vsichki fragmenti shte budat suedineni predi da dostignat do koda za filtrirane.
V takuv sluchai niama nuzhda da se pritesniavate za fragmentite.
Molia da zabelezhite, che pravilata v INPUT verigata ot tablitsata za filtrirane (ili vsiaka druga
tablitsa zakachashta se kum NF_IP_LOCAL_IN hook) se preglezhdat sled kato paketite sa
defragmentirani ot IP steka na iadroto.
Vuv vsichki drugi sluchai e vazhno da razbirate kak fragmentite se tretirat ot pravilata za
filtrirane. Vsiako pravilo, koeto iziskva informatsiia koiato ne mozhe da bude predostavena
niama da suvpadne s paketa. Tova oznachava, che purviia fragment se tretira kato vseki
drug paket. Za vtoriiat i sledvashti fragmenti, tova ne e taka. Naprimer praviloto
-p TCP --sport www (zadavashto izhoden port na `www') niama nikoga da suvpadne s
fragment (s izklyuchenie na purviia). Sushtoto vazhi i za inversnoto pravilo -p TCP --sport ! www .
Mozhete da zadadete pravilo koeto se otnasia spetsialno za vtoriia i sledvashti fragmenti kato
izpolzvate flaga `-f' (ili `--fragment'). Sushto taka e dopustimo da ukazhete, che opredeleno
pravilo ne se otnasia za vtoriia i sledvashti fragmenti kato postavite ` ! ' pred `-f'.
Obiknoveno se schita za bezopasno da pozvolite na vtoriia i sledvashtite fragmenti da preminavat,
zashtoto ako purviia e bil filtriran, to tova shte napravi nevuzmozhno sglobiavaneto na paketa ot
poluchatelia; vupreki tova sa izvestni greshki v niakoi softuerni produkti koito pozvoliavat
zabivane na tsialata mashina chrez prosto izprashtane na fragment. Vash izbor.
Zabelezhka za mrezhovite spetsialisti: malformirani paketi (TCP, UDP ili ICMP paketi prekaleno
malki za da budat procheteni portovete ili ICMP kodut i tip) se othvurliat pri opit da budat
pregledani. Sushtoto vazhi i za TCP fragmenti zapochvashti ot pozitsiia 8.
Naprimer, slednoto pravilo shte zabrani vsichki fragmenti nasocheni kum 192.168.1.1:
Razshireniia kum iptables: Novi moduli za sravnenie
iptables e razshiriaem, koeto oznachava, che i iadroto, i programata
iptables mogat da budat razshiriavane za da predostaviat novi vuzmozhnosti.
Niakoi ot tezi razshireniia sa standartni, a drugi po-ekzotichni. Razshireniiata mogat da
budat napraveni ot drugi hora i da se razprostraniavat otdelno za spetsifichni potrebiteli.
Razshireniiata kum iadroto obiknoveno se namirat v poddirektoriiata za moduli, primerno
/lib/modules/2.4.0-test10/kernel/net/ipv4/netfilter. Te se rarezhdat avtomatichno pri
neobhodimost ako iadroto vi e kompilirano s optsiiata CONFIG_KMOD, taka che ne triabva da gi
vmukvate ruchno.
Razshireniiata kum programata iptables biblioteki, koito obiknoveno se namirat v direktoriiata
/usr/local/lib/iptables/, no distributsiite gi slagat v /lib/iptables ili /usr/lib/iptables.
Razshireniiata bivat dva tipa: novi deistviia, i novi moduli za sravnenie (shte govorim za
novite deistviia malko po-kusno). Niakoi protokoli avtomatichno predostaviat novi proverki:
v momenta tova sa TCP, UDP i ICMP kakto se vizhda po-dolu.
Za tiah shte mozhete da zadavane novite proverki na komandniia red, sled optsiiata `-p',
koiato zarezhda suotvetnoto razshirenie. Za izrichno ukazvane na novi proverki izpolzvaite
optsiiata `-m' za da zaredite razshirenieto, sled koeto dopulnitelnite optsii shte budat nalichni.
Za da poluchite pomoshtna informatsiia otnostno dadeno razshirenie, izpolzvaite optsiiata s
koiato go zarezhdate (`-p', `-j' ili `-m') posledvana ot `-h' ili `--help', primerno:
TCP razshireniia
TCP razshireniiata se zarezhdat avtomatichno ako e ukazana optsiiata `-p tcp'. Te predostaviat
slednite optsii (nito edna ot tiah ne suvpada s fragmenti).
- --tcp-flags
sled koiato mozhete da postavite `!' za inversiia i dva
simvolni niza ot flagove. Te vi pozvoliavat da filtrirate paketa v zavisimost
ot sustoianieto na niakoi ot tiah v TCP zaglavnata chast. Purviiat niz e maskata:
spisuk ot flagovete koito iskate da budat provereni. Vtoriiat ukazva koi/koi
ot tiah triabva da budat vdignati. Naprimer:
Tova ukazva da budat pregledani vsichki flagove (`ALL' e sinonim na `SYN,ACK,
FIN,RST,URG,PSH'), no samo SYN i ACK triabva da sa vdignati. Drug vuzmozhen
argument e `NONE', koeto oznachava da niama vdignati flagove.
- --syn
pred nego mozhe da ima `!', tova e po-kratuk variant na
`--tcp-flags SYN,RST,ACK SYN'.
- --source-port
mozhe da se postavi `!', sled neia edin ili oblast
ot TCP portove. Tova mogat da budat imena na portove, kakto sa ukazani v
/etc/services, ili chisla. Oblastite mogat da se zadadat po niakolko nachina:
dva porta s postaveni `:' mezhdu tiah; port posledvan ot `:' (za da ukazhete
portove po-golemi ili ravni na tozi); ili `:' posledvani ot port (za da ukazhete
tezi koito sa ravni ili po-malki na zadadeniia),.
- --sport
e sinonim na `--source-port'.
- --destination-port
i
- --dport
sa analogichni na tezi
po-gore, no ukazvat porta na poluchatelia (destination port).
- --tcp-option
posledvan po zhelanie ot `!' i chislo, shte suvpada s
paketi chiito TCP optsii sa ravni na tova chislo. Ako paketa niama pulna TCP
zaglavna chast, to toi shte bude othvurlen avtomatichno pri opit za proverka
na TCP optsiite.
Obiasnenie na TCP flagovete
Poniakoga e polezno da razreshite samo TCP vruzki v ednata posoka, a da zabranite
tezi v drugata. Naprimer, mozhe bi iskate da razreshite vruzkite kum niakoi vunshen
ueb survur, no ne i tezi idvashti ot nego.
Purvoto neshto koeto idva na um e da blokirate TCP paketite idvashti ot survura.
Za suzhalenie, za da rabotiat vuobshte, TCP vruzkite iziskvat paketi preminavashti
i v dvete posoki.
Reshenieto e da blokirate samo tezi paketi, koito se izpolzvat za initsiirane na
vruzka. Tezi paketi se narichat SYN paketi (dobre de, tova sa paketi s
vdignat SYN flat, i spusnati RST i ACK flagove, za po-kratko gi narichame SYN
paketi). Kato zabranite samo tezi paketi, mozhete da sprete opitite za
osushtestviavane na vruzka otvun oshte v zarodish.
Optsiiata `--syn' se izpolzva tochno za tova: tia e validna samo v pravila v koito
e ukazan TCP za protokol. Naprimer za da zadadete paketite koito opitvat da
napraviat TCP vruzki idvashti ot 192.168.1.1:
-p TCP -s 192.168.1.1 --syn
Tozi flag mozhe da bude invertiran kato pred nego postavite `!', koeto oznachava
vsichki paketi, osven tezi za initsiirane na vruzka.
UDP razshireniia
Tezi razshireniia se zarezhdat avtomatichno,ako e ukazana optsiiata `-p udp'.
Te predostaviat optsiite `--source-port', `--sport',
`--destination-port' i `--dport' koito sa analogichni na tezi opisani za TCP
po-gore.
ICMP razshireniia
Tezi razshireniia se zarezhdat avtomatichno ako e ukazan flagut `-p icmp'. Te
osiguriavat samo edna nova optsiia:
- --icmp-type
eventualno posledvan ot `!'za otritsanie i ime na
icmp tip (primerno `host-unreachable'), ili chislena stoinost (primerno `3'),
ili chisla za tip i kod razdeleni s `/' (primer: `3/3'). Spisuk ot validnite
imena na icmp tipove mozhete da vidite s `-p icmp --help'.
Drugi razshireniia za sravniavane
Tezi razshireniia v paketa netfilter sa za demonstratsiia i (ako sa instalirani)
mogat da budat izvikani s optsiiata `-m'.
- mac
Za da izpolzvate tozi modul triabva zadulzhitelno da ukazhete
`-m mac' ili `--match mac'. Toi se izpolzva za sravniavane na
Ethernet (ili MAC) adresa na izprashtacha na vhodiashtite paketi, i sledovatelno e
prilozhim samo za paketi preminavashti prez PREROUTING i INPUT verigite.
Toi predostavia samo edna optsiia:
- --mac-source
mozhe da bude posledvana ot `!', i
ethernet adresa v shestnaistichen vid razdelen s ':', naprimer
`--mac-source 00:60:08:91:CC:B7'.
- limit
Za da izpolzvate tozi modul triabva zadulzhitelno da zadadete
`-m limit' ili `--match limit'. Toi se izpolzva za ogranichavane na broia
suvpadeniia za edinitsa vreme, primerno za ogranichavane na log suobshteniiata.
Toi shte suvpada samo opredelen broi puti v sekunda (po podrazbirane 3 suvpadeniia
za chas, s burst ot 5). Modulut priema dva nezadulzhitelni argumenta:
- --limit
posledvan ot chislo; zadava sredno kolko nai-mnogo
suvpadeniia za edna sekunda sa razresheni. Mozhete da ukazhete izrichno
kakva e mernata edinitsa, izpolzvaiki `/second', `/minute', `/hour' ili
`/day', ili chasti ot tiah (`5/second' e sushtoto kato `5/s').
- --limit-burst
poslevan ot chislo, ukazva maksimalniia
burst predi limita da vleze v sila.
Tova razshirenie nai-chesto se izpolzva ogranichavane na LOG suobshteniiata.
Za da razberete kak raboti, neka razgledame slednoto pravilo, koeto
logva paketi izpolzvaiki ogranichenieto po podrazbirane:
Purviiat put kogato s raviloto suvpadne paket, toi shte bude zapisan v zhurnalniia
fail; vsushtnost, stoinostta na burst po podrazbirane e 5, taka che purvite
pet paketa shte budat zapisani. Sled tova, shte izminat 20 minuti predi da bude
otbeliazan paket suvpadasht s tova pravilo, nezavisimo kolko takiva ima. Sushto
taka, za vseki 20 minuti prez koito ne e preminal suvpadasht paket burst shte
vuzvrushta po edinitsa ot stoinostta si; sledovatelno ako prez praviloto ne
preminavat paketi v produlzhenie na 100 minuti, to burst shte bude napulno
prezareden, kakto v nachaloto.
Zabelezhka: v momenta ne mozhete da suzdadete pravilo s vreme za prezarezhdane
po-goliamo ot 59 chasa, sledovatelno ako zadadere skorost ot edin paket na den,
stoinostta ukazana na burst triabva da bude po-malka ot 3.
Drugo prilozhenie na tozi modul e za predpazvane ot razlichni ataki tip
"Otkaz na usluga" (DoS).
Zashtita ot Syn-flood:
Furtive port scanner:
Ping na smurtta:
Tozi modul raboti kato "histerezisna vrata", kakto e pokazano na grafikata
po-dolu.
skorost (paketa/sekunda)
^ .---.
| / DoS \
| / \
Granitsa na -|.....:.........\.......................
DoS=(limit * | /: \
limit-burst) | / : \ .-.
| / : \ / \
| / : \ / \
Granitsa na |/....:..............:.../.......\..../.
DoS=limit | : :`-' `--'
-------------+-----+--------------+------------------> vreme (sekundi)
logika =>suvpada| ne suvpadah | suvpada
Da kazhem, che sme zadali limit ot 1 paket za sekunda, i burst ot 5 paketa,
no paketite pristigat po 4 v sekunda v produlzhenie na 3 sekundi, sled koeto
spirat i sled 3 sek otnovo idvat po 4 paketa/sekunda.
<--Flood 1--> <---Flood 2--->
Obshto ^ liniiata __-- YNNN
Paketi | na __-- YNNN
| skorostm __-- YNNN
10 | Maksimalna __-- Y
| __-- Y
| __-- Y
| __-- YNNN
|- YNNN
5 | Y
| Y Legenda: Y -> Suvpada s praviloto
| Y N -> Ne suvpada
| Y
|Y
0 +--------------------------------------------------> Vreme (sekundi)
0 1 2 3 4 5 6 7 8 9 10 11 12
Vizhdate,che na purvite pet paketa e pozvoleno da nadvishat ukazaniia limit ot
edin paket za sekunda, sled koeto ogranichenieto vliza v sila. Ako ima pauza,
to shte bude pozvolen oshte edin burst, no bez da se nadvishava maksimalnata granitsa
ukazana ot praviloto (1 paket za sekunda, sled kato se izpolzva burst).
- sobstvenik (owner)
Tozi modul se opitva da svurzhe razlichnite harakteristiki na suzdatelia na
paketa, za paketi koito se generirat lokalno. Toi e validen samo v
OUTPUT verigata, i dori tam niakoi paketi (primerno otgovori na ICMP ping)
mozhe da niamat sobstvenik, i sledovatelno niama nikoga da suvpadnath.
- --uid-owner userid
Suvpada ako paketut e suzdaden ot protses s ukazanoto efektivno (chisleno)
user id.
- --gid-owner groupid
Suvpada ako paketut e suzdaden ot protses s ukazanoto efektivno (chisleno)
group id.
- --pid-owner processid
Suvpada ako paketut e suzdaden ot protses s ukazanoto process id.
- --sid-owner sessionid
Suvpada ako paketut e suzdaden ot protses s ukazanoto stoinost na
session grupa.
- nepravilen (unclean)
Tozi eksperimentalen modul triabva da bude
ukazan izrichno chrez `-m unclean'ili `--match unclean'. Toi pravi raznoobrazni
sluchaino podbrani proverki za korektnost na paketite. Tozi modul ne e proveren
i ne triabva da se izpolzva kato miarka za sigurnost (nai-veroiatno toi mozhe da
napravi neshtata oshte po-loshi, zashtoto e vuzmozhno v samiia modul da ima greshki).
Modulut ne predostavia dopulnitelni optsii.
Modul za sustoianiiata (The State Match)
Nai-polezniiat kriterii za sravnenie se predostavia ot modulut za
`sustoianiiata', koito interpretira informatsiiata za sledene na vruzkite
predostavena ot `ip_conntrack' modula. Izpolzvaneto mu e silno preporuchitelno.
Zadavaiki `-m state' mozhem da izpolzvame dopulnitelnata optsiia `--state',
koiato e spisuk ot sustoianiia, razdeleni sus zapetaia, s niakoe ot koito paketa
triabva da supvada (flagut `!' ukazva, che paketa triabva da ne suvpada
s tezi sustoianiia). Sustoianiiata mogat da budat:
- NEW
Paket, koito suzdava nova vruzka.
- ESTABLISHED
Paket, koito prinadlezhi kum vruzka, koiato veche
sushtestvuva (primerno paket-otgovor, ili izhodiasht paket po vruzka ot koiato
veche sa poluchavani otgovori).
- RELATED
Paket, koito e svurzan s, no ne e chast ot veche sushtestvuvashta
vruzka, primerno ICMP greshka, ili (ako e zareden FTP modulut) paket koito
initsiira vruzka za predavane na danni po ftp.
- INVALID
Pkaet, koito ne mozhe da bude identifitsiran poradi niakakva
prichina: tova vklyuchva nedostatuchno svobodna pamet i ICMP suobshteniia za greshki,
koito ne sa svurzani s nikoia ot izvestnite vruzki. Po printsip tezi paketi
triabva da budat spirani.
Eto edin primer za upotrebata na tova mnogo polezno razshirenie:
7.4 Ukazvane na deistvie
Sled kato veche znaem kakvi proverki mozhem da izvurshvame vurhu edin paket,
ni triabva nachin po koito da kazhem kakvo da se sluchi s tezi paketi koito
otgovariat na tiahnite iziskvaniia. Tova se naricha deistvie na praviloto.
Ima dve mnogo prosti vgradeni deistviia: DROP i ACCEPT. Veche se zapoznahme
s tiah. Ako paketut suvpadne s niakoe pravilo i ukazanoto deistvie e edno ot
tezi dve, to ne se preglezhdat drugi pravila: sudbata na paketa e veche reshena.
Ima dva drugi vida deistviia, osven vgradenite:
razshireniia i verigi definirani ot potrebitelia.
Verigi definirani ot potrebitelia
Edna moshtna vuzmozhnost, koiato iptables nasledi ot ipchains
e vuzmozhnostta potrebiteliat da suzdava novi verigi, v dopulnenie na
trite vgradeni takiva (INPUT, FORWARD i OUTPUT). Ima konventsiia imenata na
verigite definirani ot potrebitelia da se izpisvat s malki bukvi, za da se
razlichavat po-lesno. (kak se suzdavat novi verigi e opisano po-dolu v
Deistviia vurhu tsiala veriga).
Kogato paket suvpadne s pravilo chieto deistvie e veriga definirana
ot potrebitelia, to paketut preminava prez pravilata v tazi veriga.
Ako v neia ne se reshi sudbata na paketa, to sled kato paketut e preminal
prez vsichki pravila, toi produlzhava v sledvashtoto pravilo ot tekushtata
veriga.
Vreme e za oshte ASCII art. Da vzemem dve (bezmisleni) verigi: INPUT
(vgradenata veriga) i test (veriga definirana ot potrebitelia).
`INPUT' `test'
---------------------------- ----------------------------
|Pravilo 1: -p ICMP -j DROP| | Pravilo 1: -s 192.168.1.1|
|--------------------------| |--------------------------|
|Pravilo 2: -p TCP -j test | | Pravilo 2: -d 192.168.1.1|
|--------------------------| ----------------------------
|Pravilo 3: -p UDP -j DROP |
----------------------------
Neka edin TCP paket idva ot 192.168.1.1 i otiva kum 1.2.3.4. Toi popada v
v INPUT verigata, i se testva spriamo pravilo 1 - ne suvpada.
Pravilo 2 suvpada i negovo deistvie e test , taka che sledvashtoto
pravilo koeto se proveriava e v nachaloto na test . Pravilo 1 v
test suvpada, no ne e ukazano deistvie, i se preglezhda sledvashtoto
pravilo - pravilo 2. To ne suvpada, sledovatelno veche sme dostignali do kraia na
verigata. Vrushtame se obratno v INPUT verigata, kudeto posledno
proverihme pravilo 2, sledovatelno sega preglezhdame pravilo 3, koeto sushto
ne suvpada.
V kraina smetka putia na paketa e:
v __________________________
`INPUT' | / `test' v
------------------------|--/ -----------------------|----
| Pravilo1 | /| | Pravilo1 | |
|-----------------------|/-| |----------------------|---|
| Pravilo2 / | | Pravilo2 | |
|--------------------------| -----------------------v----
| Pravilo3 /--+___________________________/
------------------------|---
v
Verigi definirani ot potrebitelia mogat da nasochat paketa kum drugi verigi
definirani ot potrebitelia (vnimavaite da ne se poluchi zatvoren krug v koito
paketa da obikalia bezkraino: vashite paketi shte budat othvurleni ako se ustanovi,
che e popadnal v zatvoren krug).
Razshireniia na iptables: Novi deistviia
Drugiiat vid razshirenie e novoto deistvieto. To se sustoi ot modul za iadroto
i eventualno razshirenie za iptables koeto osiguriava novi optsii za
komandniia red. Ima niakolko takiva razshireniia v standartnata netfilter
distributsiia:
- LOG
Tozi modul pozvoliava vsiako suzpadenie na paket da se otbeliazva
v zhurnalen fail. Toi predostavia slednite dopulnitelni optsii:
- --log-level
Posledvana ot nomer ili ime na nivo. Validni imena
sa (nechustvitelnni kum malki/glavni bukvi) `debug', `info', `notice', `warning',
`err', `crit', `alert' i `emerg', otgovariashti na nomera ot 7 do 0. Vizh man
stranitsata na syslog.conf za poveche informatsiia otnosno tezi niva. Po
podrazbirane se polzva `warning'.
- --log-prefix
Posledvana ot simvolen niz s dulzhina do 29 simvola,
koito se izprashta predi vsiako suobshtenie, za da pozvoli po-lesnoto mu
razpoznavane.
Tozi modul e nai-polezen sled izpolzvane na limit, za da ne prepulnite
zhurnalnite failovete si.
- REJECT
Tozi modul ima sushtiia efekt kato `DROP', no na podatelia na
paketa se izprashta ICMP `port unreachable' suobshtenie za greshka.
Zabelezhete, che ICMP suobshtenie za greshka ne se izprashta ako (vizh RFC 1122):
- Paketut koito biva otfiltriran e ICMP suobshtenie za greshka ili niakakuv
neizvesten ICMP tip.
- Paketut koito biva otfiltriran e fragment, razlichen ot purviia.
- Izpratili sme prekaleno mnogo ICMP suobshteniia za greshki kum tozi adres
v posledno vreme (vizh /proc/sys/net/ipv4/icmp_ratelimit).
REJECT sushto taka mozhe da ima argument `--reject-with' koito promenia vida
na paketa izprashtan kato otgovor: vizh man stranitsata.
Spetsialni vgradeni deistviia
Ima dve spetsialni vgradeni deistviia: RETURN i
QUEUE .
RETURN ima sushtiia efekt kakto i dostiganeto na kraia na
tekushtata veriga: ako praviloto se namira v niakoia ot vgradenite verigi shte
se izpulni politikata na tazi veriga. V sluchai, che e vuv veriga definirana
ot potrebitelia, to preglezhdaneto shte produlzhi v predishnata veriga, tochno
sled praviloto koeto e prehvurlilo paketa kum tekushtata.
QUEUE e spetsialno deistvie, koeto izprashta paketa v opashka za
obrabotka ot potrebitelia. Za da ima polza ot tova sa neobhodimi oshte dva
komponenta:
- "queue handler", koito se zanimava sus sushtinskata rabota po prehvurlianeto
na paketite mezhdu prostranstvoto na iadroto i na potrebitelia (kernel and userspace)
i
- potrebitelska programa,koiato da poluchi i eventualno da redaktira paketite,
sled koeto da reshi tiahnata sudba.
Standartniiat "queue handler" za IPv4 e modulut ip_queue, koito se razprostraniava
s iadroto i e markiran kato eksperimentalen.
Sledva kratuk primer za tova kak mozhe da se izpolzvat iptables za izprashtane na
paketi za obrabotka v pobtrebitelskoto prostranstvo:
S tova pravilo lokalno generiranite izhodiashti ICMP paketi (kato naprimer tezi ot
ping) se preprashtat kum ip_queue module, koito sled tova se opitva da gi predade
na potrebitelskata programa. Ako niama programa koiato da prieme paketite, to te
se othvurliat .
Za da napishete takava programa izpolzvaite libipq API-to. To se razprostraniava
s iptables. Primeren kod mozhe da bude nameren v "testsuite tools"
(primerno redirect.c) v CVS.
Statusa na ip_queue mozhe da se proveri chrez:
/proc/net/ip_queue
Maksimalnata dulzhina na opashkata (t.e. broiat paketi preprateni kum potrebitelskata
programa, za koito vse oshte ne e poluchen otgovor sus suotvetnoto deistvie)
mozhe da se kontrolira chrez:
/proc/sys/net/ipv4/ip_queue_maxlen
Stoinostta po podrazbirane e 1024. Sled kato tozi limit bude dostignat,
vsichki novi paketi shte budat othvurliani dokato dulzhinata na opashkata namalee
pod limita. Dobrite protokoli, kato TCP naprimer, interpretirat zagubenite
paketi kato pretovarvane na vruzkata, i bi triabvalo da prestanat da izprashtat
paketi sled kato opashkata se zapulni. Vupreki tova, mozhe da e neobhodimo da
se eksperimentira za da se opredeli optimalnata dulzhina na opashkata za
konkretnata situatsia, v sluchai che tazi po podrazbirane e prekaleno malka.
7.5 Deistviia vurhu tsiala veriga
Edna mnogo polezna vuzmozhnost na iptables e tazi za grupirane na
niakolko pravila vuv veriga. Mozhete da krustite verigata kakto si poiskate,
no az vi preporuchvam da izpolzvate samo malki bukvi, za da ne gi oburkate
s vgradenite verigi ili deistviia. Imenata na verigite mogat da budat dulgi
do 31 simvola.
Suzdavane na nova veriga
Neka da suzdadem edna nova veriga. I ponezhe imam strahotno vuobrazhenie,
shte ia narechem test . Mozhem da izpolzvame optsiite `-N' ili `--new-chain':
Ne e li prosto? Sega mozhete da dobaviate pravila kum verigata, kakto e pokazano po-dolu.
Iztrivane na veriga
Iztrivaneto na veriga e sushto tolkova prosto, izpolzvaiki optsiite `-X' ili `--delete-chain'.
Zashto `-X' li? Ami, vsichki hubavi bukvi veche biaha zaeti.
Ima niakolko ogranicheniia za iztrivaneto na verigi: te triabva da budat prazni
(vizh
Iztrivane na pravilata ot veriga po-dolu)
i sushto taka ne triabva da budat ukazani kato deistvie v niakoe pravilo.
Ne e vuzmozhno da iztriete nikoia trite vgradeni verigi.
Ako ne ukazhete konkretna veriga, to vsichki verigi definirani ot
potrebitelia shte budat iztriti, ako tova e vuzmozhno.
Iztrivane na pravilata ot veriga
Ima edin mnogo lesen nachin za iztrivane na vsichki pravila ot niakoia veriga,
prosto izpolzvaite komandata `-F' (ili `--flush').
# iptables -F FORWARD
#
Ako ne ukazhete veriga, to pravilata vuv vsichki verigi shte budat
iztriti.
Izvezhdane na pravilata vuv veriga
Mozhete da vidite spisus sus vsichki pravila v dadena veriga izpolzvaiki
komandata `-L' (ili `--list').
Stoinostta `h references', koiato se izpisva sled imeto na vsiaka suzdadena ot
potrebitelia veriga, e broiat na pravilata koito imat ukazana tazi veriga za
svoe deistvie. Tozi broiach triabva da bude nula (i vuv verigata da niama pravila)
predi tia da mozhe da bude iztrita.
Ako ne se ukazhe ime na kokntretna veriga, to se izvezhda sudurzhanieto na vsichki
verigi, dori i praznite.
Ima tri optsii koito mozhe da se izpolzvat zaedno s `-L'. Purvata, `-n'
(numeric) e mnogo polezna, tui kato predotvratiava opitite na iptables
da proveriava imenata suotvetstvashti na IP adresite, koito (ako izpolzvate DNS,
kakto povecheto hora) biha prichinili golemi zakusneniia, v sluchai che DNS
uslugata ne e nastroena pravilno, ili ste otfiltrirali DNS zaiavkite.
Sushto taka TCP i UDP portovete shte budat izvedeni kato tsifri, vmesto s imena.
Optsiiata `-v' shte vi pokazhe v detaili tsialata informatsiia za pravilata, kato
broiachite za paketi i baitove, sravneniia s TOS poleto i interfeisite.
Bez neia tezi stoinosti niama da budat izvedeni.
Zabelezhete, che broiachite za paketi i baitove se izvezhdat sus sufiksi
K', `M' ili `G' suotvetno za 1000, 1,000,000 i 1,000,000,000.
Ako izpolzvate i optsiiata `-x' (expand numbers) shte budat otpechatani tselite chisla,
nezavisimo kolko sa golemi.
Restartirane (Nulirane) na broiachite
Polezno e da imate vuzmozhnostta da nulirate broiachite. Tova mozhe da bude
napraveno s optsiiata `-Z' (ili `--zero').
Neka razgledame sledniia primer:
V tozi sluchai e vuzmozhno da preminat paketi v promezhdutuka ot vreme mezhdu
izvikvaneto na `-L' i izvikvaneto na `-Z', koito niama da budat otcheteni.
Poradi tazi prichina izpolzvaite `-L' i `-Z' zaedno, za da
nulirate broiachite v momenta v koito gi prochetete.
Zadavane na politika
Spomenahme kakvo se sluchva kogato edin paket dostigne do kraia na niakoia ot
vgradenite verigi, kogato razglezhdahme putia po koito preminavat paketite
po-gore. V tozi sluchai, sudbata na paketa se opredelia ot politikata
na verigata. Samo vgradenite verigi (INPUT , OUTPUT i
FORWARD ) imat politiki, zashtoto ako paketut dostigne do kraia na
niakoia veriga definirana ot potrebitelia, to toi shte produlzhi putia si prez
predhodnata veriga.
Politikata mozhe da bude ACCEPT (priemi) ili DROP (othvurli) ,
naprimer:
8. Izpolzvane na ipchains i ipfwadm
V distributsiiata na netfilter ima dva modula s imena ipchains.o
i ipfwadm.o. Vklyuchete niakoi ot tiah vuv vasheto iadro (ZABELEZHKA: te sa
nesuvmestimi s ip_tables.o!). Sega veche mozhete da izpolzvate ipchains
ili ipfwadm, kakto v dobrite stari vremena.
Te shte budat poddurzhani oshte izvestno vreme. Mislia, che podhodiashta formula
e 2 * [preduprezhdenie za izklyuchvane - purva stabilna versiia],
sled datata na koiato e nalichna stabilna versiia na zamestitelia.
Tova oznachava, che poddruzhkata veroiatno shte bude prekratena v Linuks 2.6 ili 2.8.
9. Suvmestiavane na NAT i filtrirane na paketi
Mnogo chesto se iziskva da pravite ednovremenno NAT (vizh NAT
HOWTO) i filtrirane na paketi. Dobrata novina e, che te rabotiat dosta
dobre zaedno.
Izgradete svoia paketen filtur, kato napulno prenebregvane
fakta, che izpolzvate NAT. Adresite na izprashtacha i poluchatelia, koito shte
vidi paketniia filtur shte budat `istinskite' adresi. Naprimer, ako pravite
DNAT za da izprashtate vsichki vruzki za 1.2.3.4 na port 80 kum 10.1.1.1 na port
8080, to paketniia filtur shte vidi paketi otivashti kum 10.1.1.1 na port 8080
(istinskoto napravlenie), a ne kum 1.2.3.4 na port 80. Po podoben nachin mozhe
da ignorirate i upotrebata na masquerading: shte izglezhda, che paketite 'idvat'
ot tehnite istinski vutreshni IP adresi (primerno 10.1.1.1), i otgovorite shte
se vrushtat pak tam.
Mozhe da izpolzvate `state' razshireniiata bez da natovarvane filtura
dopulnitelno, zashtoto izpolzvaneto na NAT iziskva upotrebata na mehanizmite
za preslediavane sustoianieto na vruzkite. Za da podobrim prostiiat primer za
maskirane ot NAT HOWTO, kato zabranim vsichki novi vruzki idvashti ot interfeisa
ppp0 interface, mozhe da izpolzvame tova:
|
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j DROP
iptables -A FORWARD -i ppp0 -m state --state NEW,INVALID -j DROP
echo 1 > /proc/sys/net/ipv4/ip_forward |
10. Razliki mezhdu iptables i ipchains
- Purvo, imenata na vgradenite verigi sa promeneni ot malki na
GLAVNI bukvi, zashtoto prez verigite INPUT i OUTPUT sega preminavat samo
paketite izprateni ot i nasocheni kum lokalni protsesi, raboteshti na paketniia
filtur. Predi prez tiah minavashe vsichkiiat vhodiasht i izhodiasht trafik.
- Optsiiata `-i' veche oznachava vhodiasht interfeis, i raboti samo vuv
verigite INPUT i FORWARD. Pravilata vuv verigite FORWARD i OUTPUT, koito
izpolzvat '-i' triabva da budat promeneni sus suotvetnite im polzvashti `-o'.
- TCP i UDP portovete triabva da budat ukazvani s optsiite
--source-port ili --sport (suotvetno --destination-port/--dport), i da budat
sled optsiite `-p tcp' ili `-p udp', zashtoto te zarezhdat suotvetnite TCP i UDP
razshireniia.
/-
- Optsiiata TCP -y sega e --syn, i triabva da bude sled `-p tcp'.
- Deistvieto DENY stana DROP, nai-nakraia.
- Nuliraneto na edna veriga, zaedno s prochitane na broiachite raboti.
- Nuliraneto na broiachite na vgradenite verigi, sushto bulira i broiachite
na politikite.
- Izvezhdaneto na broiachite na niakolko verigi e atomarna operatsiia.
- REJECT i LOG deistviiata sa kato razshireniia, koeto oznachava, che
sa i otdelni moduli za iadroto.
- Imenata na verigite mogat da budat do 31 simvola.
- MASQ se preimenuva na MASQUERADE i izpolzva razlichen sintaksis.
REDIRECT, vupreni che e sus sushtoto ima, ima nov sintaksis. Vizhte NAT-HOWTO
za poveche informatsiia po tezi dve deistviia.
- Optsiiata -o veche ne se izpolzva za premasochvane na paketi kum
potrebitelskoto prostranstvo (vizh -i po-gore). Paketite se prenasochvat
s pomoshtta na deistvieto QUEUE.
- Veroiatno oshte kup drugi neshta, za koito ne se seshtam.
11. Suveti otnosno izgrazhdaneto na paketen filtur
Razprostranena praktika v oblastta na kompyuturnata sigurnost e da se
zabrani vsichko po podrazbirane, sled koeto da se razreshi samo tova koeto
e neobhodimo. Tova mozhe da bude izrazeno taka `vsichko, koeto ne e izrichno
razresheno, e zabraneno'. Az bih vi preporuchal tochno tozi podhod, ako
sigurnostta e ot nai-goliamo znachenie za vas.
Ne startiraite uslugi ot koito ne se nuzhdaete, dori i da si mislite, che
ste blokirali dostupa do tiah.
Ako izgrazhdade zashtitna stena, sprete vsichki protsesi ochakvashti vruzka ot
mrezhata, i blokiraite vsichki paketi. Sega startiraite samo uslugite koito
vi triabvat i razreshete preminavaneto na paketite za koito tova e neobhodimo.
Preporuchvam zadulbochen podhod kum sigurnostta, kombiniraite
tcp-wrappers (za vruzkite kum samiia paketen filtur), proksita (za vruzkite
preminavashti prez nego), proverka na marshrutizatsiiata i paketno filtrirane.
Proverka na marshrutizatsiiata, oznachava paketite koito pristigat ot neochakvan
interfeis da budat blokirani. Naprimer, ako vashata vutreshna mrezha ima adres
10.1.1.0/24, i paket s takuv adres na izprashtacha pristigne na vunshniia vi
interfeis, to toi shte bude othvurlen. Tova mozhe da bude vklyuchena za daden
interfeis (ppp0) eto taka:
Ili za vsichki interfeisi:
Debian pravi tova po podrazbirane kogato e vuzmozhno. V sluchai, che
imate asimetrichna marshrutizatsiia (t.e. ochakvate paketi pristigashti ot
stranni posoki), to triabva da sprete filtriraneto za tezi interfeisi.
ZHurnaliziraneto na subitiiata e mnogo polezno kogato izgrazhdate
zashtitnata stena. Taka ako neshto ne raboti kakto triabva lesno shte mozhete
da vidite kude e problema. Kogato obache tia zapochnete da raboti v realni
usloviia vinagi izpolzvaite i `limit' modula. Taka shte se predpazite ot
prepulvane na zhurnalnite failove.
Silno preporuchvam izpolzvaneto modulite za sledene na vruzkite. Te
povishavat natovarvaneto na sistemata, tui kato vsichki vruzki se slediat,
no sa mnogo polezni pri kontroliraneto na dostupa do vashata mrezha.
Mozhe da se nalozhi da zaredite `ip_conntrack.o' modula ako vasheto iadro ne
poddurzha avtomatichno zarezhdane na moduli i toi ne e vgraden v iadroto.
Ako iskate sledeneto na raboti pravilno i s po slozhni protokoli, to triabva
da zaredite suotvetnite pomoshtni moduli (primer: `ip_conntrack_ftp.o').
<< Firefox 0.9 - nastroika na shriftovete i razshireniia | Slackware for dummies >>
|