Netfilter/iptables

Vikipēdijas raksts

  iptables
Uzturētājs: Netfilter Core Team
Tekošā versija: 1.3.8 / June 24, 2007
OS: Linux
Žanrs: Pakešu filtrēšana
Licence: GNU General Public License
Mājaslapa: www.netfilter.org

Netfilter ir ietvars, kas dod iespēju Linux kodolam pievienot notikumu apstrādātājus pakešu pārtveršanai un apstrādei. Pazīstamākais komponents, kas balstīts uz Netfilter ir ugunsmūris, kurš filtrē paketes, bet notikumu apstrādes "āķus" izmanto arī citi komponenti, kas veic tīkla adrešu tulkošanu, stāvokļjūtīgu pakešu izsekošanu un pakešu sarindošanu lietotāja atmiņas apgabalā. Nosaukums Netfilter attiecas arī uz projekta nosaukumu, kurā tiek izstrādāti ugunsmūra rīki Linuksam. Šie kompenenti parasti ir ielādējami kodola moduļi, lai gan projekts arī piedāvā lietotāja apgabalā izvietojamus rīkus un bibliotēkas. Netfilter produkti pēdējā laikā vairs nenodrošina atpakaļsavietojamību ar ipchains.

iptables ir nosaukums rīkam lietotāja apgabalā, ar kuru Linuksa servera administratori veido likumus pakešu filtrēšanai un NAT moduļiem. Tehniski runājot, iptables ir rīks, kurš vienīgi kontrolē pakešu filtrēšanu un NAT komponentus kodolā, nosaukumu iptables bieži lieto, lai aprakstītu visu infrastruktūru, ieskaitot Netfilter, konekciju sekošanu un NAT, kā arī pašu iptables komponentu. Tā ir standarta sastāvdaļa visās mūsdienīgās Linux distribūcijās.

Satura rādītājs

[izmainīt šo sadaļu] Vēsture

Netfilter/iptables projektu uzsāka 1998 gadā Rusty Russell, kurš bija arī iepriekšējā projekta - ipchains autors. Projektam augot, viņš izveidoja Netfilter pamatkomandu (vai vienkārši pamatkomandu(coreteam)) 1999. gadā. Softs, ko viņi veido (kopš tā laika to sauc netfilter) ir licenzēts ar GNU General Public License (GPL), un tika sapludināts ar Linux 2.3 2000.gada martā. 2003.gada augustā Harald Welte kļuva par pamatkomandas vadītāju, un 2004.gada aprīlī, veicot šī projekta ietvaros izmeklēšanas darbības pret tiem, kas izplatīja viņu softu iegultās sistēmās - rūteros, neievērojot GPL licenzes noteikumus, Welte Vācijas tiesā panāca svarīgu piekāpšanos no Sitecom Germany, kas līdz tam atteicās sekot GNU licenzes noteikumiem (sk. Tiesu strīdi saistībā ar GPL).

Pirms iptables, dominējošais softs Linux ugunsmūru veidošanai bija ipchains priekš Linux 2.2 un ipfwadm priekš Linux 2.0, kas savukārt bija balstīts uz BSD ipfw. Gan ipchains, gan ipfwadm maina tīklošanās kodu tā, lai varētu manipulēt ar pakotnēm, jo pirms Netfilter nebija universāla pakešu vadības ietvara. iptables saglabā pamatidejas, ko Linux-ā ieviesa ipfwadm: likumu saraksts, no kuriem katrs rāda, kādas atbilstības meklēt paketē un ko darīt ar katru šādu paketi. ipchains pievienoja likumu ķēžu jēdzienu, un iptables to tālāk paplašināja par tabulām: vienu tabulu pārbaudīja, lai izlemtu, vai NAT-ot paketi, otru izmantoja, lai izlemtu, kā filtrēt paketi. Turklāt trīs punkti paketes ceļā, kur agrāk veica filtrēšanu tika izmainīti, tādēļ iptables gadījumā katra pakete iet cauri tikai vienam filtrēšanas punktam.

Kamēr ipchains un ipfwadm kombinē pakešu filtrēšanu un NAT (it īpaši trīs atsevišķus NAT paveidus, ko sauc "maskošanās", "portu forvardēšana" un "redirekcija"), Netfilter dod iespēju sadalīt pakešu operācijas trīs daļās - pakešu filtrēšana, konekciju sekošana un tīkla adrešu tulkošana. Katra daļa piesaistās Netfilter atpakaļizsaukumiem ("āķiem") atšķirīgās koda vietās, lai piekļūtu paketēm. Konekciju sekošana un NAT apakšsistēmas ir vispārīgākas un varenākas nekā vienkāršotās versijas, ko lieto ipchains un ipfwadm.

Šī atbildības dalīšana savukārt ļāva iptables izmantot informāciju, ko konekciju izsekošanas slānis bija noteicis par pakotni - agrāk šī informācija bija piesaistīta NAT-am. iptables ir pārākas par ipchains, jo tām ir spēja novērot konekcijas stāvokli un redirektēt, pārveidot vai apturēt datu paketes, atkarībā no konekcijas stāvokļa, ne tikai no izcelsmes, galaadreses vai datu satura šajā paketē. Ugunsmūris, kurš balstīts uz iptables tādēļ kļūst par stāvokļjūtīgu ugunsmūri atšķirībā no ipchains, kas ļauj veidot vienīgi bezstāvokļa ugunsmūri, izņemot ļoti specifiskus gadījumus. Var uzskatīt, ka ipchains nezina pilnu kontekstu, kurā datu pakete rodas, kamēr iptables to zina. Tādēļ iptables var pieņemt labākus lēmumus par pakešu un konekciju likteni.

Iptables, NAT-a apakšsistēma un konekciju sekošanas apakšsistēma arī ir paplašināmas, un daudzi paplašinājumi ir iekļauti pamata "iptables" risinājumā, piemēram "iptables" paplašinājums, kurš ļauj izdarīt vaicājumus par konekcijas stāvokli, kā izklāstīts augstāk. Papildu paplašinājumi tiek izplatīti līdzās iptables lietojumprogrammai, piemēram, ielāpi kodola izejas kodam, līdz ar ielāpu rīku, ko sauc patch-o-matic.

Tika izveidota arī iptables versija priekš IPv6, kuru sauc ip6tables atbilstoši administrēšanas rīka nosaukumam.

[izmainīt šo sadaļu] Darbības pārskats

Netfilter ietvars ļauj sistēmas administratoram noteikt likumus, ko darīt ar tīkla paketēm. Likumus grupē ķēdēs - katra ķēde ir sakārtots likumu saraksts. Ķēdes grupē tabulās - katra tabula tiek saistīta ar citu pakešu apstrādes paveidu.

Katrs likums apraksta nosacījumu, kuras paketes tam atbilst un mērķi, kas norāda, ko darīt ar paketi, ja tā atbilst nosacījumam. Katra tīkla pakete, kas ienāk vai iziet no datora šķērso vismaz vienu ķēdi un katrs likums šajā ķēdē pārbauda savu nosacījumu. Atrodot pirmo likumu, kurš atbilst pakotnei, pārbaude beidzas, un likuma mērķis nosaka, ko darīt ar paketi. Ja pakete sasniedz predefinētas ķēdes beigas, neatbilstot neviena šīs ķēdes likuma nosacījumam, ķēdes politikas mērķis nosaka, ko darīt ar paketi. Ja pakete sasniedz lietotāja definētas ķēdes beigas, neatrodot nevienu atbilstošu likumu šajā ķēdē vai arī lietotāja definētā ķēde ir tukša, pārbaude turpinās izsaucošajā ķēdē (noklusētais mērķis ir RETURN). Vienīgi predefinētām ķēdēm ir politikas.

Katrs likums var izmest paketi no ķēdes (īsslēgums), un turpmākas ķēdes tad netiek apskatītas. Ķēde var saturēt norādi uz citu ķēdi - ja vai nu pakete iziet cauri visai ķēdei vai atbilst RETURN mērķim kārtējā likumā, tā turpināsies pirmajā ķēdē. Nav robežas uz to, cik daudzas iekļautas ķēdes var būt. Ir trīs vienkāršas predefinētas ķēdes (INPUT, OUTPUT un FORWARD), un lietotājs var radīt jaunas ķēdes pēc vajadzības. Likums var būt arī vienkārši norāde uz ķēdi.

[izmainīt šo sadaļu] Konekciju izsekošana

Viena no svarīgākajām funkcijām, kas ir izveidota uz Netfilter ietvara pamata, ir konekciju izsekošana (connection tracking). Konekciju izsekošana ļauj kodolam sekot līdzi visām logjiskajām tīkla konekcijām vai sesijām, un tādējādi atpazīt paketes, kuras varētu piederēt dotajai konekcijai. NAT balstās uz šo informāciju, lai translētu visas saistītās paketes vienā un tanī pašā veidā, un "iptables" var izmantot šo informāciju, lai darbotos kā stāvokļjūtīgs ugunsmūris.

Konekciju izsekošana klasificē katru paketi vienā no četriem stāvokļiem - NEW jeb jauna (cenšas izveidot jaunu konekciju), ESTABLISHED jeb izveidojusies (daļa no jau esošas konekcijas), RELATED jeb saistīta (saistīta ar kādu no esošām konekcijām, bet faktiski tai nepieder) vai INVALID jeb nederīga (nepieder pastāvošai konekcijai un nespēj izveidot jaunu konekciju). Normāla secība ir šāda - pirmā pakete, ko redz ugunsmūris tiek klasificēta kā NEW, atbilde uz to tiks klasificēta kā ESTABLISHED un ICMP kļūda būs RELATED. Savukārt tāda ICMP kļūdas pakotne, kas neatbilda nevienai zināmai konekcijai tiktu klasificēta kā INVALID.

Konekcijas stāvoklis ir pilnīgi neatkarīgs no jebkāda TCP stāvokļa. Ja hosts atbild ar SYN ACK pakotni, lai apstiprinātu jaunu ienākošo TCP konekciju, tad pati TCP konekcija vēl nav izveidota, bet izsekojamā konekcija jau ir - šāda pakete atbildīs stāvoklim ESTABLISHED. Izsekota konekcija bezsavienojumu protokolam, piemēram UDP, tik un tā ir ar konekcijas stāvokli.

Izmantojot spraudņu moduļus, konekciju izsekošanai var darīt zināmus aplikācijas slāņa protokolus un tādējādi var konstatēt, ka divas vai vairākas atsevišķās konekcijas ir "saistītas". Piemēram, aplūkosim FTP protokolu. Vispirms izveidojas vadības konekcija, bet, kad sākas datu pārraide, rodas atsevišķa konekcija datu pārraidei. Kad ielādējas ip_conntrack_ftp modulis, pirmā FTP datu konekcijas pakotne tiks apzīmēta kā RELATED nevis NEW, jo tā logjiski ir jau pastāvošas konekcijas sastāvdaļa.

iptables var izmantot konekciju izsekošanas informāciju, lai paplašinātu pakešu filtrēšanas likumu iespējas un vadāmību. Pakešu atbilstības nosacījumu "conntrack" paplašinājums pārbauda paketes konekciju izsekošanas klasifikatoru dotajai paketei. Piemēram, kāds likums varētu atļaut NEW paketes tikai no iekšpuses uz ārpusi, bet atļautu RELATED un ESTABLISHED abos virzienos. Tas atļauj normālas atbildes pakotnes no ārpuses jau izveidotai (ESTABLISHED) konekcijai, bet neatļauj jaunas konekcijas no ārpuses uz iekšpusi. Toties, ja FTP datu konekcijai ir jānāk no ugunsmūra ārpuses uz iekšpusi, tā tiks atļauta, jo paketi pareizi klasificēs kā RELATED attiecībā pret FTP vadības konekciju, nevis kā NEW konekciju.

[izmainīt šo sadaļu] iptables

iptables ir lietotāja apgabala lietojumprogramma, kas ļauj sistēmas administratoram konfigurēt Netfilter tabulas, ķēdes un likumus kā paskaidrots agrāk. Tā kā "iptables" darbināšanai ir nepieciešamas papildu privilēgjijas, to jāizpilda lietotājam root, citādi tā nedarbosies. Vairumam Linux sistēmu, iptables ir instalēts kā /sbin/iptables un dokumentēts savā man lappusē[1]. Šis vienkāršais piemērs iptables lietojumam ilustrē, kā redirektēt visu trafiku, kurš pienāk uz noklusēto HTTP portu tālāk uz portu 8080, atļaujot HTTP dēmonam darboties kā nepriviligjētam lietotājam, kurš nevar klausīties portus, kuru numuri ir mazāki par 1024.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

[izmainīt šo sadaļu] ipset

ipset tiek lietots, lai izveidotu, uzturētu un pārlūkotu t.s. "IP kopas" Linux-a kodolā. "IP kopa" parasti satur kopu ar IP adresēm, bet var arī saturēt kopas ar citiem tīklošanā izmantotiem skaitliskiem identifikatoriem, atkarībā no tās "tipa".

Jebkuru elementu vienā kopā var piesaistīt arī citai kopai, kas ļauj veikt sarežgjītas atbilstību meklēšanas darbības. IP kopu var izdzēst vienīgi tad, ja nav iptables likumu vai citu kopu, kas uz to norādītu.

[izmainīt šo sadaļu] Sk. arī

Portal:free software
free software Portal
  • Shorewall, softs vienkāršākai iptables pārvaldīšanai.
  • FireHOL, vienkārša aplikācija, lai lietotu iptables ugunsmūri.
  • NuFW, Netfilter paplašinājums lietotāja atmiņas apgabalam
  • ipchains, Netfilter priekšgājējs.
  • Netlink, Netfilter lietotais programmējamais interfeiss (API)
  • PF (ugunsmūris)
  • ipfw
  • ipfilter

[izmainīt šo sadaļu] Ārējas saites

[izmainīt šo sadaļu] Lietotāju saskarnes

  • en:NuFW autentificējošs ugunsmūris, kurš izmanto Netfilter
  • Ugunsmūru veidotājs
  • dwall Universāls ugunsmūru generators
  • Firestarter vizuāls ugunsmūru konfigurēšanas rīks
  • NetfilterOne bezmaksas grafisks rīks Netfilter-a drošības politikas veidošanai (šo softu vairs tieši nepiegādā Solsoft)
  • KMyFirewall KDE/QT balstīts konfigurēšanas rīks

[izmainīt šo sadaļu] Diagrammas

Lai labāk saprastu, kā pakete šķērso Linux kodola Netfilter tabulas/ķēdes, sk. sekojošas diagrammas: