Линукс као фајервол (iptables – опис и правила)

Линукс фајервол (firewall) – Netfilter је саставни део Линукс кернела који омогућује филтрирање пакета, превођење мрежних адреса или скраћено NAT (network address translation), као и разне друге манипулације пакетима. Netfilter је унапређена верзија ipchains-а који је био актуелан у старијим верзија Линукс оперативног система. Више о Netfilterу и свим могућностима које он обезбеђује, можете пронаћи овде.

Iptables је алат за контролу и конфигурисање Netfilterа, мада се често у пракси подразумева да када говоримо о iptables-у мислимо на обједињену функционалност iptables-а и Netfilterа. Када говоримо о фајервол функционалности на Линуксу, у ствари мислимо на употребу iptables-а и Netfilter-а. Постоје многа фајервол решења на Линукс системима, који нам обезбеђују једноставније интерфејсе за коришћење, разумљивији су корисницима, а нимало не заостају у функционалности. Међутим они се позадински такође ослањају на iptables и Netfilter. Једно од таквих решења је shorewall, а више о њему можете пронаћи овде .

Пре него што се детаљније позабавимо са iptables, следи кратак осврт на то шта је уопште фајервол, и које су основне функционалности које он треба да обезбеди.

Функционалности и могући сценарији примене

Основна улога фајервола је заштита система коју постижемо филтрирањем пакета. У зависности од тога да ли је фајервол намењен заштити рачунара на коме је активан или читаве мрежу иза себе, можемо их поделити на персоналне и корпоративне. Сама конфигурација фајервола такође зависи од већег броја параметара.

Без обзира да ли се ради о кућном или корпоративном окружењу, број мрежних интерфејса које поседује рачунар и безбедносна политика између њих, као и степен поверења појединим окружењима, су само неки од фактора који одређују сценарио конфигурације фајервола.

Када говоримо о корпоративном фајерволу мислимо на уређај који се налази између интернета и локалне мреже. У оваквом сценарију фајервол је задужен за транслацију мрежних адреса (NAT) и филтрацију пакета од интернета ка LAN-у и ако је потребно обратно (од LAN-а ка интернету). Локална мрежа опет може бити подељена на више мрежних сегмената, између којих треба дефинисати безбедоносну политику – за ово је такође задужен фајервол.

Често се иза фајервола налази DMZ (Demilitarized zone), посебна зона чији одређени сегменти требају бити изложени интернету, али која не треба бити видљива локалној мрежи.

Следи кратко појашњење често спомињаних појмова превођења мрежних адреса и филтрирања пакета.

Превођење мрежних адреса (NAT)

NAT је процес конверзије IP адреса приватне мреже у јединствену IP адресу на интернету – јавну адресу коју користи фајервол. NAT нам унутар локалне мреже дозвољава коришћење било којег опсега IP адреса, па чак и оних јавних које се већ користе на интернету.

NAT може бити SNAT (source network address translation) И DNAT (destination network address translation). Када неки рачунар из локалне мреже пошаље захтев за одређеним интернет ресурсом, приликом проласка пакета кроз фајервол, адреса из локалног опсега замениће се са јавном адресом коју фајервол користи. То је SNAT и он омогућава рачунарима једне локалне мреже да користе интернет ресурсе и да на интернету буду видљиви са јавном адресом фајервола.

Можда вам може бити занимљиво и: Рутирање и протоколи за рутирање

Често коришћени синоним за DNAT је прослеђивање портова (port forwarding). Када неки рачунар преко интернета упути захтев фајерволу за неким портом, фајервол проверава NAT табелу, тражећи унос за специфичан рачунару из приватне мреже који је назначен да прихвата захтеве по том порту, па уколико такав унос постоји, следи замена јавне фајервол адресе на коју је захтев стигао, са приватном адресом рачунара коме је захтев упућен.

Филтрирање пакета

Филтрирање пакета је фундаментална функционалност сваког фајервола. Фајервол анализира пакете и упоређује их са утврђеним правилима и сходно томе примењује предефинисане акције. Пакете фајервол филтрира по типу протокола, изворној (source) адреси или информацији о одредишном порту. На овај начин правимо избор које ћемо протоколе (нпр. TCP, UDP, ICMP, IGMP) пропустити, а које не, као и са којих адреса је дозвољен приступ одређеним портовима.

Могуће акције које фајервол може применити су одбацивање пакета (DROP), прихватање пакета (ACCEPT) или одбијање пакета уз обавештење пошиљаоцу да његов пакет није прихваћен (REJECT). У пракси се за одбацивање пакета чешће користи DROP уместо REJECT, ради избегавања непотребног мрежног саобраћаја.

iptables | структура и конкретни примери

Iptables одаје утисак комплексности на први поглед, међутим када једном разумете његов концепт, схватићете да је логичан и не толико неприступачан за коришћење. Структура алата iptables је организована тако да се састоји из табела (tables), ланаца (chains) и правила (rules). Постоје четири основне табеле: filter, nat, mangle и raw. Свака од ових табела садржи одређене ланце, па тако рецимо filter табела садржи INPUT, OUTPUT И FORWARD ланце, а NAT табела PREROUTING и POSTROUTING. За сваки ланац се дефинишу одређена правила, која представљају предефинисане акције које ћемо применти над пакетима.

За филтрирање пакета, користи се filter табела. Она се састоји, као што смо већ напоменули, из INPUT, OUTPUT и FORWARD ланаца и сваки ланац садржи листу правила са којима упоређујемо пакете. Када пакет пристигне, на основу одредишне адресе се одређује да ли је пакет намењен локалном рачунару (фајервол) и ако је тако прослеђује се INPUT ланцу. Ако правила INPUT ланца дозволе да пакет прође, пакет се прослеђује одговарајућем процесу коме је намењен.

Уколико пакет треба рутирати, онда га прослеђујемо FORWARD ланцу, па уколико задовољи сва правила овог ланца, прослеђује се даље интерфејсу који је задужен за њега. OUTPUT ланац је задужен за одлазне пакете. Уколико је пакет прошао кроз ланац, а ниједно од правила га није ни прихватило ни одбацило, онда се на њега примењује предефинисана полиса тог ланца.

Једноставни пример

Слика демонстрира iptables конфигурацију на рачунару са једним мрежним интерфејсом. Сав долазни саобраћај је блокиран, осим ssh и http саобраћа, а сав одлазни сабраћај је дозвољен. Такође онемогућено је рутирање, јер постоји само један мрежни интерфејс.

Прва линија „iptables -F“ обезбеђује поништавање (F – flush) тренутне iptables конфигурације. Идућа два реда обезбеђују додавање (А – append) два правила у INPUT ланац, и дозвољавају tcp конекције ка ssh и http порту на локалном рачунару. P (пе) параметар означава предефинисану полису за одговарајући ланац. То у нашем примеру значи да сваки долазни пакет одбацујемо („iptables -P INPUT DROP“), дозвољавамо одлазни саобраћај („iptables -P OUTPUT ACCEPT“), као и да онемогућавамо рутирање („iptables -P FORWARD DROP“).

Већ смо напоменули да се прво извршавају предефинисана правила, па уколико се ниједно од њих не односи на пакет, онда се примењује предефинисана полиса датог ланца. „iptables -А INPUT -i lo -ј ACCEPT“ – овим наредбом смо дозволили локални loopback саобраћај (-i параметар значи интерфејс). Систем често прилази одређеним сервисима по локланом интерфејсу (127.0.0.1), и без ове команде рад система би био угрожен, јер би фајервол одбацивао неке системске захтеве.

Следећа линија је такође занимљива. Параметар -m подразумева учитавање додатног модула – state модула у нашем случају. State модул задужен је за детекцију стања пакета и он детектује да ли је дати пакет део неке већ иницијализоване конекције или не. Уколико јесте пакет се пропушта, у супротном бива одбачен.

Такође можемо закључити да је iptables модуларне структуре, и да је за додавање неких функционалности потребно учитавање одговарајућих модула. Предзадња линија снима iptables конфигурацију, како би била актуелна и након поновног подизања система, а задња линија екрански штампа тренутну iptables конфигурацију.

Сложенији пример

Слика демонстрира iptables конфигурацију на рачунару са два мрежна интерфејса – eth0 интерфејс повезан са интернетом и eth1 локални LAN интерфејс. Сценарио је следећи – локалној мрежи разрешавамо интернет захтеве, радећи превођење мрежних адреса (SNAT) на интерфејсу eth0. Такође сваки захтев за локалним tcp портом 8080 фајервол преслеђује на порт 80 локалног рачунара са IP адресом 10.0.0.5. Сам фајервол излаже веб сервер и ssh сервер према интернету, док ка локалној мрежи нема рестрикција.

Прва линија је иста као у претходном примеру, али друга је већ нешто другачија. Наредба „iptables -t nat -F“ поништава сва правила у NAT табели. Користећи iptables подразумевано радимо са филтер табелом и тада параметар -t није обавезан. Међутим, за рад са другим табелама -t параметар је неопходан. Напоменули смо већ да у NAT табели постоје два ланца PREROUTING И POSTROUTING. Први се користи за разрешавање мрежних адреса или SNAT, а други за прослеђивање портова или DNAT.

Наредба „iptables -t nat -А POSTROUTING -о eth0 -ј MASQUERADE“ обезбеђује превођење мрежних адреса, а наредне две су задужене за DNAT или прослеђивање порта.

Наредба „iptables -t nat -А PREROUTING -i eth0 -p tcp –dport 8080 -ј DNAT –to 10.0.0.5:80″ замењује јавну одредишну адресу интерфејса eth0 са локалном адресом 10.0.0.5 и замењује вредност 8080 одредишног порта са вредношћу 80.

Наредба“iptables -А FORWARD -p tcp -d 10.0.0.5 –dport 80 -ј ACCEPT“ прослеђује дати пакет FORWARD ланцу који га даље рутира до веб сервера са локланом IP адресом 10.0.0.5.

Следи предефинисање полицсе за сва три ланца filter табеле. Вредности су идентичне као и у претходном примеру, што значи да сваки долазни пакет одбацујемо („iptables -P INPUT DROP“), дозвољавамо одлазни саобраћај („iptables -P OUTPUT ACCEPT“), као и да онемогућавамо рутирање („iptables -P FORWARD DROP“).

Мoжда може бити занимљиво и: Нека основна поставка iptables

Политика за долазни саобраћај је рестриктивна, али смо као изузетке поставили loopback интерфејс (lo) и локални интерфејс (eth1). Наставак је сличан као у претходном примеру. Дозвољавамо приступ tcp портовима 22 и 80 на самом фајерволу. Дефинисали смо рестриктивну полису FORWARD ланца, али додајемо локални eth1 интерфејс као изузетак. Такође пропуштамо све пакете који су део већ остварених конекција, а треба их даље рутирати. Предзадња линија снима тренутну iptables конфигурацију, а последња је екрански штампа.

Напоменимо још нешто. Да би рутирање било омогућено на Линукс оперативном систему, морамо стартовати следећу наредбу „echo 1 > /proc/sys/net/ipv4/ip_forward.. Дата наредба додељује вредност „1“, фајлу ip_forward, који је саставни део „proc“ псеудо фајл система, генерисаног од стране Линукс кернела. Исто као и информације у меморији, сви подаци у „proc“ фајл систему су ту до првог поновног покретања система, зато је наједноставније дату команду убацити rc.local скрипту или је стартовати директно из iptables скрипте.

Закључак

Приликом конфигурисања фајервол-а битно је да увек дефинишете глобалну полису, а сваки изузетак од глобалне полисе дефинишете као додатно правило. Увек имате избор – применити рестриктивну политику, па додавати изузетке који нешто дозвољавају или се определити за нерестриктивну политику па онда изричито забрањивати оно што треба забранити. Акценат овог текста је био на основним функционалностима које фајервол треба да обезбеди и како их остварити коришћењем iptables алата. Наравно iptables је комплексан и свеобухватан алат и овим чланком смо само загребали површину.

Текст је преузет са угашеног блога ИТ модул и оригинални аутор овог текста је Владимир Благојевић. Компјутераш ИТ блог објављује текстове са тог блога како ризница знања са те локације не би отишла у заборав.