Відмінності між версіями «Механізм відслідковування сеансів»
Donserg (Обговорення • внесок) м (Захист на Механізм відслідковування сеансів встановлено ([edit=sysop] (безстроково) [move=sysop] (безстроково))) |
Поточна версія на 23:33, 20 вересня 2012
Стандартний Linux-фаєрвол netfilter використовує для відстеження зєднань інтегрованих в ядро підсистему conntrack. Отримана інформація потім може використовуватися при фільтрації та перетворення пакетів. Наприклад, саме на базі цієї інформації працюють критерії conntrack (перевірка стану з'єднання, його застаріла версія відома як state), connlimit (обмеження кількості одночасних з'єднань з однієї адреси або підмережі), connbytes (обмеження з'єднань за кількістю пакетів або байт, переданих в одному або в обох напрямках), connmark (працює з маркуванням ctmark, загальною для всіх пакетів в з'єднанні). Також інформація conntrack автоматично використовується всіма операціями перетворення адрес і портів (SNAT, MASQUERADE, DNAT, REDIRECT, SAME, NETMAP).
Ця інформація зберігається в спеціальній таблиці (переглянути її можна, наприклад, виконавши cat / proc / net / nf_conntrack). Кожне з'єднання описується так званим кортежем (tuple) - набором значень, в який входять адреси та порти (у разі ICMP - типи та коди ICMP) джерела і призначення при передачі даних у прямому і зворотному напрямку. Очевидно, що за наявності кількох підмереж з однаковими адресними просторами, можливе виникнення плутанини, коли відразу декільком з'єднанням ставиться у відповідність один і той ж запис у таблиці з'єднань. Щоб уникнути такої ситуації, в кортеж був доданий ідентифікатор зони conntrack - ціле число, яке можна встановлювати через спеціальне правило в таблиці raw в залежності від вхідного інтерфейсу (ланцюжок PREROUTING таблиці raw пакети проходять ще до обробки їх conntrack'ом). Крім того, це значення можна задати для кожного інтерфейсу через sysfs, минаючи iptables (псевдофайл / sys / class / net / імя_інтерфейса / nf_ct_zone). Таким чином, мережеві адміністратори отримали ефективний інструмент, що дозволяє витончено розв'язати навіть таку складну задачу.
Варто зазначити, що більшість питань маршрутизації в описаних умовах вже давно вирішено засобами iproute2 (використовуючи ip rule, можна направити пакети з певного інтерфейсу у відповідну таблицю маршрутизації).
Операція установки значення conntrack zone реалізується в netfilter / iptables новою дією CT. Ця дія використовується в таблиці raw і дозволяє визначити установки conntrack для нових сполук. Зокрема, з його допомогою можна: Вимкнути відстеження сполук для даного класу пакетів (опція - notrack). Раніше це виконувалося окремим дією NOTRACK, яке тепер, мабуть, буде оголошено застарілим.
Відстеження окремих сполук має сенс відключати, наприклад, в тому випадку, якщо ви перебуваєте під (D) DoS-атакою, локалізували її джерела та використовуєте засоби активної протидії, такі, як TARPIT. Якщо ви не вимкнете трекінг для таких сполук, ця зброя може боляче вдарити і вас самих. Встановити для конкретного з'єднання потрібний допоміжний модуль (conntrack helper). Допоміжні модулі використовуються системою conntrack для відстеження складних протоколів, що використовують декілька з'єднань в рамках одного сеансу (наприклад, FTP, SIP, IRC, H.323 і т.п.). Тепер, якщо ви використовуєте нестандартний порт для FTP, зовсім не обов'язково правити конфігурацію modprobe.conf, щоб прописати потрібний параметр для відповідного модуля ядра - досить виконати прив'язку хелпери до порту через правило netfilter'а. Обмежити список подій conntrack, що генеруються для даного з'єднання (наприклад, реагувати тільки на відкриття та закриття з'єднання, ігноруючи зміни його стану).
Треба зауважити, що підтримка дії CT і conntrack zones була додана в netfilter (тобто в ядро) ще на початку лютого, тому присутня вже в релізі 2.6.33. Однак модулі netfilter самі по собі не можуть бути використані без відповідних керуючих команд з userspace, які зазвичай віддаються через утиліту iptables.
Крім додавання підтримки дії CT, в код iptables також було внесено кілька менш значних змін:
Повна підтримка ядра 2.6.34.
Виправлена помилка парсинга діапазону адрес в критерії iprange.
Покращено парсинг номерів портів для дій MASQUERADE і REDIRECT.
У проект імпортована утиліта nfnl_osf, що забезпечує підвантаження бази сигнатур для критерію osf.
Покращена документація.