Netfilter Framework ядра Linux
1.1 Що таке Netfilter?
Netfilter, безумовно більший ніж будь-який з підсистем брандмауера в минулому Linux ядра. Netfilter надає абстрактне, узагальнення в рамках якого одного конкретного втілення є фільтрація пакетів підсистеми.
Netfilter рамки складаються з трьох частин:
Кожен протокол визначає набір "гачків" (IPv4 визначає 5), які використовуються в певні моменти проходження пакета цього стека протоколів. На кожній з цих точок, стек протоколів викличе Netfilter рамки з пакета і гачок номер.
Частини ядра можуть зареєструватися, щоб використовувати різні гачки для кожного протоколу. Таким чином, коли пакет передається в рамках Netfilter, він перевіряє, чи хтось зареєстрований для цього протоколу і гачком, а якщо так, вони отримують можливість вивчити (і можливо змінити) пакет, відмовитися від нього, щоб він міг пройти запит Netfilter в черзі пакетів для простору користувача.
Пакети, які були зібрані в черзі для відправки в просторі користувача, ці пакети обробляються асинхронно. Користувач процесу може розглянути пакет, може змінити його.
Вся пакетна фільтрація / NAT / ... матеріал на основі цієї бази. Існує також пакети із зміненим кодом розкидані по всьому мережевому стеку.
Netfilter рамки в даний час реалізовані для IPv4, IPv6 і DECnet.
1.2 Для чого Netfilter?
У цьому розділі можна було б назвати "Що не так з IPCHAINS? Так чому ж ми повинні це змінити?
Немає інфраструктури для передачі пакетів в користувальницький простір, так щоб весь код, який робить кілька пакетів дріб'язковими повинно бути зроблено в коді ядра. Ядро програмування повинно бути зроблено в С, а це небезпечно.
Зробити прозорий проксі вкрай складно, ми повинні дивитися look up _every_ packet, щоб побачити, чи є гніздо, пов'язане з цим адресом.
Створення пакету дотримуючись правил фільтрації незалежного інтерфейсу адресу неможливо. Ми повинні знати адресу локального інтерфейсу розрізняти локально згенерований або локально-завершений, через пакети від пакетів. Впереді ланцюг має тільки інформацію про вихідний інтерфейс. Таким чином, ми повинні спробувати з'ясувати, звідки пакет прийшов.
Ipchains код не є модульної розширюваної(наприклад, для фільтрація МАС-адрес)