ot Radoslav Kolev(22-04-2004)

reiting (32)   [ dobre ]  [ zle ]

Printer Friendly 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.

iptables

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:

 
 
## Vmukva connection-tracking modulite (ne e neobhodimo ako sa vgradeni v iadroto).
 # insmod ip_conntrack
 # insmod ip_conntrack_ftp
 
 ## Suzdava veriga, koiato blokira vsichki novi vruzki, osven tezi idvashti otvutre
 # iptables -N block
 # iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
 # iptables -A block -m state --state NEW -i ! ppp0 -j ACCEPT
 # iptables -A block -j DROP
 
 ## Prenasochvane kum tazi veriga ot INPUT i  FORWARD verigite.
 # iptables -A INPUT -j block
 # iptables -A FORWARD -j block

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.

  1. Kogato se poluchi paket (primerno ot mrezhovata karta) iadroto purvo poglezhda za kude e adresiran toi: tova se naricha `rutirane'.
  2. 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.
  3. 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.
  4. 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:

  1. Suzdavane na nova veriga (-N).
  2. Iztrivane na prazna veriga (-X).
  3. Smiana na politikata na vgradena veriga (-P).
  4. Pokazvane na pravilata vuv veriga (-L).
  5. Iztrivane na pravilata vuv veriga (-F).
  6. Nulirane na baitovite i paketni broiachi na vsichki pravila vuv veriga (-Z).

Ima niakolko nachina za manipulirane na pravilata v edna veriga:

  1. Dobaviane na novo pravilo kum veriga (-A).
  2. Vmukvane na novo pravilo na dadena pozitsiia (-I).
  3. Zamiana na edno pravilo na dadena pozitsiia s drugo (-R).
  4. 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 -c 1 127.0.0.1
 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
 # iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
 # ping -c 1 127.0.0.1
 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:

 
 
# iptables -D INPUT 1
 #
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:

 
 
# iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
 #
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. ]
 
 
# iptables -A INPUT -s 0/0 -j DROP
 #

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:

 
 
# iptables -A OUTPUT -f -d 192.168.1.1 -j DROP
 #

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:

 
 
# iptables -p tcp --help
 #

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:

 
 
# iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DROP

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:

 
 
# iptables -A FORWARD -m limit -j LOG

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:

 
 
# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

Furtive port scanner:

 
 
# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

Ping na smurtta:

 
 
# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

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:

 
 
# iptables -A FORWARD -i ppp0 -m state ! --state NEW -j DROP

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:

 
 
# modprobe iptable_filter
 # modprobe ip_queue
 # iptables -A OUTPUT -p icmp -j QUEUE
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':

 
 
# iptables -N test
 #

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.

 
 
# iptables -X test
 #

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:

 
 
# iptables -L FORWARD
 # iptables -Z FORWARD
 # 

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:

 
 
# iptables -P FORWARD DROP
 #

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:

 
 
# Maskirai vsichko izlizashto prez ppp0
 iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
 
 # Zabrani NEW i INVALID idvashti ot ppp0.
 iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j DROP
 iptables -A FORWARD -i ppp0 -m state --state NEW,INVALID -j DROP
 
 # Vklyuchvane na IP forwarding
 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:

 
 
# echo 1 > /proc/sys/net/ipv4/conf/ppp0/rp_filter
 #

Ili za vsichki interfeisi:

 
 
# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
 #     echo 1 > $f
 # done
 # 

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 >>