Iptables

**IPTables** — утыліта каманднага радка, з’яўляецца стандартным інтэрфейсам кіравання працай міжсеткавага экрана (брандмаўэра) **netfilter** для ядраў Linux, пачынаючы з версіі 2.4. Для выкарыстання ўтыліты IPTables патрабуюцца прывілеі суперкарыстальніка (root).

Часам пад словам IPTables маецца на ўвазе і сам міжсеткавы экран NETFilter.

## Гісторыя 
Першапачаткова распрацоўка netfilter і iptables ішла сумесна, таму ў ранняй гісторыі гэтых праектаў ёсць шмат агульнага.

Папярэднікамі iptables былі праекты ipchains (ужывалася для адміністравання фаервола ядра Linux версіі 2.2) і ipfwadm (аналагічна для ядраў Linux версій 2.0). Апошні быў аснованы на BSD-утыліце ipfw.

iptables захоўвае ідэалогію, якая бярэ пачатак ад ipfwadm: функцыянаванне фаервола вызначаецца наборам правілаў, кожнае з якіх складаецца з крытэра і дзеяння, ужыванага да пакетаў, якія трапляюць пад гэты крытэр. У ipchains з’явілася канцэпцыя *ланцугоў* — незалежных спісаў правіл. Былы уведзены асобныя ланцугі для фільтравання ўваходных (INPUT), выходных (OUTPUT) і транзітных (FORWARD) пакетаў. Дзеля працягвання гэтай ідэі ў iptables з’явіліся *табліцы* — незалежныя групы ланцугоў. Кожная табліца вырашала сваю задачу — ланцугі табліцы **filter** адказвалі за фільтраванне, ланцугі табліцы **nat** — за пераўтварэнне сеткавых адрасоў (NAT), да задач табліцы **mangle** адносяцца іншыя мадыфікацыі загалоўкаў пакетаў (напрыклад, змяненне TTL альбо TOS). Акрамя таго, была крыху зменена логіка працы ланцугоў: у ipchains усе ўваходныя пакеты, уключна з транзітнымі, праходзілі ланцуг INPUT. У iptables праз INPUT праходзяць толькі пакеты, якія адрасаваны да самога хостy.

Такое падзяленне функцыянала дазволіла iptables падчас апрацоўкі асобных пакетаў выкарыстоўваць інфармацыю аб злучэннях агулам (раней гэта было магчыма толькі для NAT). У гэтым iptables значна пераўзыходзіць ipchains, бо iptables можа адсочваць стан злучэння і перанакіроўваць, змяняць альбо адфільтроўваць пакеты, палагаючыся не толькі на звесткі з іх загалоўкаў (крыніца, атрымальнік) ці змесце пакетаў, але і на падставе звестак аб злучэнні. Такая магчымасць фаервола завецца stateful-фільтрацыяй, у адрозненні ад рэалізаванай у ipchains прымітыўнай stateless-фільтрацыі (падрабязней аб відах фільтрацыі у артыкуле аб фаерволах). Можна сказаць, што iptables аналізуе не толькі перадаваную інфармацыю, але і кантэкст іх перадачы, у адрозненні ад ipchains, і таму можа прымаць больш абаснаваныя рашэнні аб лёсе кожнага пакета.

У будучыні распрацоўшчыкі netfilter плануюць замяніць iptables на nftables — інструмент новага пакалення, які пакуль знаходзіцца на ранняй стадыі распрацоўкі.

## Архітэктура 
### Асноўныя паняцці 
Ключавымі паняццямі iptables з’яўляюцца:
* **Правіла** — складаецца з *крытэра*, *дзеяня* і *лічыльніка*. Калі пакет адпавядае крытэру, да яго ўжываецца дзеянне, і ён улічваецца лічыльнікам. Крытэрп можа і не быць — тады няяўна мяркуецца крытэр «усе пакеты». Указваць дзеянне таксама не абавязкова — у адсутнасць дзеяння правіла будзе працааваць толькі як лічыльнік.
** **Крытэр** — лагічны выраз, які аналізуе ўласцівасці пакета ці злучэння і вызначае, ці трапляе гэты пэўны пакет пад дзеянне бягучага правіла.
** **Дзеянне** — апісанне дзеяння, якое патрэбна зрабіць з пакетам ці злучэннем у тым выпадку, калі яны трапляюць пад дзеянне гэтага правіла. Пра дзеянні падрабязней будзе расказана ніжэй.
** **Лічыльнік** — кампанет правіла, які забяспечвае ўлік колькасці пакетаў, якія трапілі пад крытэр гэтага правіла. Таксама лічыльнік улічвае сумарны аб’ём такіх пакетаў у байтах.

* **Ланцуг** — упарадкаваная паслядоўнасць правіл. Ланцугі можна падзяліць на *карыстальніцкія* і *базавыя*.
** **Базавы ланцуг** — ланцуг, ствараны па змоўчванню пры ініцыялізацыі табліцы. Кожны пакет, у залежнасці ад таго, ці прызначаны ён самому хосту, згенераваны ім альбо з’яўляецца транзітным, мусіць прайсці належны яму набор базавых ланцугоў розных табліц. Акрамя таго, базавы ланцуг адрозніваецца ад карыстальніцкага наяўнасцю «дзеяння па змоўчванню» (default policy). Гэтае дзеянне ўжываецца да тым пакетаў, якія не былі апрацаваны іншымі правіламі гэтага ланцуга і выкліканых з яго ланцугоў. Імёны базавых ланцугоў заўсёды запісваюцца ў верхнім рэгістры (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING).
** **Карыстальніцкі ланцуг** — ланцуг, створаны карыстальнікам. Можа ўжывацца толькі ў межах сваёй табліцы. Пажадане не ўжываць для такіх ланцугоў імёны ў верхнім рэгістры, каб пазбегнуць блытаніны з базавымі ланцугамі і ўбудаванымі дзеяннямі.
* **Табліца** — сукупнасць *базавых* і *карыстальніцкіх* ланцугоў, аб’яднаных агульным функцыянальным прызначэннем. Імёны табліц (як і модуляў крытэраў) запісваюцца ў ніжнім рэгістры, бо ў прынцыпе не могуць канфліктаваць з імёнамі карыстальніцкіх ланцугоў. Пры выкліку каманды iptables табліца ўказваецца ў фармаце -t імя_табліцы. Пры адсутнасці яўнага ўказання ўжываецца табліца filter.

## Літаратура 
* 

## Спасылкі 
* Сайт проекта Netfilter
* Man page of iptables  
* Руководство по iptables (Iptables Tutorial 1.1.19)*

Катэгорыя:Linux
Катэгорыя:Свабодныя міжсеткавыя экраны