Кіріспе
Linux үшін пакеттерді өзгерту фреймворкі және осы аттас бағдарламалық жасақтамалар жиынтығының бас жобасы – Linux ядросымен ұсынылатын, түрлі желілік операцияларды қолданушы өңдеушілер түрінде жүзеге асыруға мүмкіндік беретін құрал. Netfilter пакеттерді сүзу, желілік мекенжайларды аудару және порттарды аудару сияқты әртүрлі функциялар мен операцияларды ұсынады, бұл пакеттерді желі арқылы бағыттау және желідегі құпиялы ақпарат сақталатын жерлерге пакеттердің жетіп кетуіне жол бермеуге қажетті мүмкіндіктерді қамтамасыз етеді. Netfilter – Linux ядросының ішіндегі нақты ядролық модульдерге кері шақыру функцияларын желілік стекке тіркеуге рұқсат беретін ілгектер жиынтығы. Бұл функциялар көбінесе трафикке фильтрлеу және өзгерту ережелері түрінде қолданылады және желілік стектегі тиісті ілгек арқылы өтетін әрбір пакет үшін шақырылады.
Netfilter is a framework provided by the Linux kernel that allows various networking related operations to be implemented in the form of customized handlers. Netfilter offers various functions and operations for packet filtering, network address translation, and port translation, which provide the functionality required for directing packets through a network and prohibiting packets from reaching sensitive locations within a network. Netfilter represents a set of hooks inside the Linux kernel, allowing specific kernel modules to register callback functions with the kernel's networking stack. Those functions, usually applied to the traffic in the form of filtering and modification rules, are called for every packet that traverses the respective hook within the networking stack.
Тарих
Расти Расселл 1998 жылы netfilter/iptables жобасын бастады; ол сонымен қатар жобаның алдыңғы нұсқасы ipchains-тің авторы болды. Жоба өскен сайын, ол 1999 жылы Netfilter негізгі командасын (немесе жай ғана coreteam) құрды. Олар жасаған бағдарламалық қамтамасыз ету (бұдан әрі netfilter деп аталады) GNU General Public License (GPL) лицензиясын қолданады, ал 1999 жылдың 26 тамызында ол Linux ядросының негізгі тармағының 2.3.15 нұсқасына қосылды және осылайша 2.4.0 тұрақты нұсқасында пайда болды. 2003 жылдың тамызында Харальд Велте негізгі команданың төрағасы болды. 2004 жылдың сәуірінде, жоба GPL талаптарын орындамайтын маршрутизаторларда жобаның бағдарламалық қамтамасыз етілімін таратқандарға қатысты қатаң шаралар қабылдағаннан кейін, неміс соты Sitecom Germany компаниясына қарсы тарихи шешім шығарды, ол GPL шарттарын сақтаудан бас тартқан болатын (GPL-ге қатысты дауларға қараңыз). 2007 жылдың қыркүйегінде бұрынғы жылдарда дамуды басқарған Патрик МакХарди негізгі команданың жаңа төрағасы болып сайланды. iptables-ке дейін Linux-та өрт қабырғаларын құруға арналған негізгі бағдарламалық пакеттер Linux 2.2.x ядросында ipchains және Linux 2.0.x ядросында ipfwadm болды.
Қосылымды бақылауға арналған көмекшілер
Плагин модульдерін пайдалану арқылы қосылымдарды бақылауға қолданба деңгейі протоколдары туралы мәлімет беруге болады, осылайша екі немесе одан көп жеке қосылымдардың «байланысты» екенін түсінуге болады. Мысалы, FTP протоколын қарастырайық. Бақылау қосылымы орнатылады, бірақ деректерді жіберген кезде, оларды жіберу үшін жеке қосылым орнатылады. nf conntrack ftp модулі жүктелген кезде, FTP дерек қосылымының алғашқы пакесі «жаңа» емес, «байланысты» деп жіктеледі, себебі ол логикалық тұрғыдан қолданыстағы қосылымның бір бөлігі болып табылады. Көмекшілер бір уақытта бір пакетті ғана тексеріп, сондықтан қосылымды қадағалау үшін маңызды ақпарат IP фрагментациясы немесе TCP сегментациясы салдарынан екі пакетке бөлінген жағдайда, көмекші үлгілерді тани алмайды және тиісінше жұмысын орындамайды. IP фрагментациясы қосылымды қадағалау кіші жүйесімен шешіледі, ол дефрагментациялауды талап етеді, бірақ TCP сегментациясы қарастырылмайды. FTP жағдайында, стандартты сегмент өлшемдерімен PASV сияқты команданың «жанында» сегментация болмайды деп есептеледі, сондықтан Netfilter-де де қарастырылмайды.
Желілік мекен-жай аудармасы
Әрбір қосылымда бастапқы мекенжайлар мен жауап мекенжайлары болады, олар бастапқыда бірдей болады. Netfilter-дегі NAT жауап мекенжайын, қажет болған жағдайда портты өзгерту арқылы іске асырылады. Пакеттер қабылданғанда, олардың қосылым туплысы жауап мекенжайы жұбымен (және порттармен) салыстырылады. NAT үшін фрагменттердің болмауы да қажеттілік болып табылады. (Қажет болған жағдайда, IPv4 пакеттері Netfilter емес, стандартты IPv4 стегімен қайта бөлшектелуі мүмкін.)
NAT көмекшілері
Қосылымды бақылау көмекшілеріне ұқсас, NAT көмекшілері пакеттерді тексеріп, пайдалы жүктемедегі бастапқы мекенжайларды жауап мекенжайларымен ауыстырады.
Netfilter-тің басқа жобалары
Netfilter кодын тікелей пайдаланбайтын ядролық модульдер болғанымен, Netfilter жобасы тағы да бірнеше көзге түсетін бағдарламалық қамтамасыз етулерді ұсынады.
контракттық құралдар
conntrack tools - жүйе әкімшілеріне қосылымды қадағалау жазбаларымен және кестелерімен өзара әрекеттесуге мүмкіндік беретін Linux жүйесі үшін пайдаланушы кеңістігі құралдарының жиынтығы. Пакетте conntrackd демоны және командалық жол интерфейсі conntrack бар. Пайдаланушы кеңістігіндегі conntrackd демоны жоғары қолжетімділік кластерлік stateful брандмауэрлерді іске қосуға және stateful брандмауэрді пайдалану статистикасын жинауға қолданылуы мүмкін. Командалық жол интерфейсі conntrack /proc/net/nf conntrack-қа қарағанда қосылымды қадағалау жүйесіне көбірек икемді интерфейс ұсынады.
ipset (жасалған)
Connection Tracking сияқты басқа кеңейтулерден өзгеше, ipset негізгі Netfilter кодына қарағанда iptables-ке жақынрақ байланысты. ipset, мысалы, Netfilter ілмектерін пайдаланбайды, бірақ IP жиынтықтарымен сәйкестікті қамтамасыз ететін және минималды өзгерістер (қою/тазалау) жасайтын iptables модулін ұсынады. Ipset деп аталатын пайдаланушы құралы Linux ядросындағы «IP жиынтықтарын» құру, күту және тексеру үшін қолданылады. IP жиынтығы әдетте IP мекенжайлар жиынтығынан тұрады, бірақ оның «типіне» байланысты басқа желілік сандар жиынтығын да қамтуы мүмкін. Бұл жиынтықтар қарапайым iptables ережелерімен салыстырғанда іздеу бойынша тиімдірек, бірақ әрине, көбірек жадты қажет етеді. Пайдаланушыға ең оңтайлы шешімді таңдау үшін ipset жадтағы дерек құрылымдары үшін әртүрлі сақтау алгоритмдерін ұсынады. Бір жиынтықтағы кез келген элементті басқа жиынтыққа байланыстыруға болады, бұл күрделі сәйкестік операцияларын жүзеге асыруға мүмкіндік береді. Жинақты жою (көшіру) тек егер оған сілтеме жасайтын iptables ережелері немесе басқа жиынтықтар болмаса ғана мүмкін.
SYN прокси
SYNPROXY нысанасы үлкен SYN тасқындарын қосылымды қадағалаудың салдарынан туындайтын үлкен өнімділік шығындарына ұшырамастан басқаруға мүмкіндік береді. Бастапқы SYN сұраныстарын SYNPROXY нысанасына бағыттай отырып, қосылыстар соңғы ACK күйіне жеткенше қосылымды қадағалауда тіркелмейді, бұл қосылымды қадағалауды көптеген потенциалды жарамсыз қосылымдарды есепке алудан босатады. Осылайша, үлкен SYN тасқындарын тиімді басқаруға болады. 2013 жылдың 3 қарашасында SYN прокси функционалдығы Netfilter-ге біріктірілді, Linux ядросының негізгі бағытының 3.12 нұсқасы жарияланды.
i лгд
ulogd — Netfilter жүйелерінен пакеттер мен оқиға туралы хабарламаларды қабылдау және тіркеуге арналған пайдаланушы кеңістігіндегі демон. IP кестелері пайдаланушы кеңістігіндегі кезектеу механизмі арқылы оған пакеттерді жібере алады, ал қосылымды қадағалау ulogd-мен өзара әрекеттесіп, пакеттер немесе оқиғалар туралы қосымша ақпарат алмаса алады (мысалы, қосылымның ажырылуы, NAT құру).
Желілік сүзгілер шеберханалары
Netfilter жобасы жыл сайын дамытушылар үшін кездесу өткізеді, онда ағымдағы зерттеу және әзірлеу жұмыстары талқыланады. 2018 жылғы Netfilter семинары 2018 жылдың маусым айында Германияның Берлин қаласында өтті.