Netfilter: нові можливості Linux-файрволла в новому ядрі, Linux, Операційні системи, статті

Пер. Alice D. Saemon, Комп’ютерна газета

“Сталося! Довгоочікуване ядро ​​Linux 2.4 побачило світло, і для більшості з нас – фахівців в галузі забезпечення безпеки – це надзвичайно радісне подія. У даній статті я спробував роз’яснити суть поліпшень підсистеми забезпечення безпеки ядра Linux, щоб і ви зраділи настільки ж бурхливо, як і я 😉 “

Так починається стаття Jay Beale – дірекора колективу фахівців з безпеки (Security Team) компанії MandrakeSoft, провідного розробника проекту Bastille Linux, автора багатьох статей і книги по безпеки Unix / Linux-систем, а також просто захопленого лінуксоїди і мережевика. Судячи з кількості знаків оклику і пишномовно-захоплених оборотів, Джей дійсно гаряче вболіває за праве справу забезпечення безпеки мереж і працює з таким захопленням, що IMHO по праву може вважатися хакером у вихідному і правильному значенні цього слова, що позначає комп’ютерного та мережевого фанатика. До речі, протягом усієї статті ви жодного разу не зустрінете слово “хакер” як синонім “зловмисник” або “атакуючий”, і мені здається – це неспроста 😉
Перекладаючи цей матеріал я намагалася, по можливості, максимально зберегти стиль викладу вихідного тексту, що відрізняється простотою, достатком розмовних оборотів, сленгу і т.п. І не тільки з поваги до автора, але й тому, що сама дотримуюся думки, що навіть самі захмарно високі технології можуть – і повинні – “розмовляти” на нормальному людському мові 🙂

Технічне резюме

На початку мені хотілося б помістити короткий огляд нововведень в області забезпечення безпеки в ядрах Linux 2.4, а в наступних розділах – для тих, кому цікаво – пропонуються більш докладні описи кожного з них.
Отже, Netfilter – підсистема фільтрації пакетів в ядрах 2.4 – це перший вбудований в ядро ​​файрволл, що забезпечує можливість контекстної фільтрації пакетів *. Контекстні фільтри являють собою найважливіший технологічний стрибок в інтелектуальності файрволлов і присутні у всіх серйозних продуктах для забезпечення мережної безпеки enterprise-класу. Поряд з багатьма поліпшеннями, контекстность дозволяє Netfilter відстежувати і блокувати таку активність, як stealth-сканування, що раніше було недоступно вбудованим Linux-файрфоллам.
Нова система також набагато легше і приємніше в управлінні. Архітектура Netfilter пропонує більш прості, і разом з тим більш потужні можливості конфігурації таких речей, як NAT, прозорі проксі, перенаправлення трафіку. Це дає можливість легко організувати таку, здавалося б, складну штуку, як система балансування навантаження, наприклад, прозору для кінцевого користувача заміну одного веб-сервера чотирма. Далі, Netfilter здатний блокувати більше в порівнянні з попередниками кількість DoS-атак за рахунок можливості завдання правил по типу пакетів, що дозволить вам боротися з такими напастями, як SYN flood.
Netfilter являє собою нову редакцію файрволл-коду в Linux, проте залишається досить сумісним з попередніми версіями, що скоротить для більшості організацій час мигрирования і витрати на навчання персоналу.
Отже, частина гуру в області мереж і безпеки в Linux напевно вже зрозуміли все, що їм потрібно з цього короткого резюме і діловито вирушили конфігурувати новий файрволл. Решта зацікавлених особи – продовжують читати статтю, з якої вони дізнаються подробиці про кожного заявленому удосконалення.

Що таке контекстний файрволлінг (Stateful Firewalling)

Як нам відомо, мережеве взаємодія зазвичай здійснюється за допомогою передачі даних, нарізаних на маленькі шматки, обзиває пакетами. У випадку з TCP деякі з цих пакетів використовуються лише для створення, підтримки та завершення з’єднання. Це пов’язано з тим, що TCP використовує концепцію з’єднання, що дає можливість автоматичної корекції помилок, інтерпретації приходять пакетів в тій же послідовності, в якій вони були відправлені та ін Ну і яке це має відношення до файрволла? – Запитаєте ви.
Нормальні – неконтекстне фільтри пакетів, подібні тим, що присутні в більшості маршрутизаторів, інспектують кожен пакет індивідуально, не запам’ятовуючи і не розуміючи його місця в з’єднанні. Тепер, припустимо, ви, як і більшість адміністраторів, вирішили не дозволяти зовнішнім хостам ініціювати з’єднання з комп’ютерами вашої внутрішньої мережі. Неконтекстне файрфолл / маршрутизатор може відрізнити пакет, є частиною існуючого з’єднання від пакета, який бере участь у створенні нового з’єднання, проаналізувавши його на наявність прапора SYN.
Уважно прочитайте і вдумайтесь в останнє речення: файрволл повинен “довіряти” самому пакету. Але постійте, цей пакет був створений чужим комп’ютером із зовнішньої мережі і … “Чужі” в принципі можуть розставляти в ньому прапори як їм тільки заманеться! Деякі сканери використовують цю “неув’язочку” для обходу файрволлов, скануючи мережі, які повинні бути для них невидимими. Ну і як в такому випадку захиститися? Правильно, поставити контекстний файрволл. Він тримає в пам’яті інформацію по кожному проходить через нього з’єднанню.
Таким чином, якщо пакет із зовнішньої мережі намагається увійти в мережу внутрішню, видаючи себе за частину якогось існуючого з’єднання, файрволл може навести довідки в своєму списку з’єднань. Якщо з’ясовується, що пакет не відповідає жодному існуючих з’єднань, його можна відкинути, тим самим запобігши сканування.
Навіть стосовно до протоколу без установки з’єднання UDP контекстна перевірка таки є вельми корисною фичей. Припустимо, як і в попередньому прикладі, що ви забороняєте зовнішнім комп’ютерам організовувати взаємодію з вашими внутрішніми машинами. Добре, для розпізнавання імен DNS зазвичай використовується протокол UDP. Якщо ваші маршрутизатори не можуть відслідковувати всі запити DNS, вони повинні пропускати всередину все DNS-подібні пакети (UDP порт 53), які з будь-якого DNS-сервера. Контекстний файрволл веде облік усіх вихідних від вас DNS-запитів і пропускає DNS-подібні пакети тільки від тих серверів, у яких ваші хости небудь запитували, причому робить це настільки інтелектуально, щоб запобігти можливості передачі даних після приходу першого ж відповіді.
А ось ще одна чудова перевага контекстних файрволлов: їх в цілому легше адмініструвати, використовуючи меншу кількість правил для створення більш точної і дієвої політики безпеки. Хорошим прикладом тут буде активний FTP.
Коли ваш FTP-клієнт підключається до FTP-серверу, встановлюється TCP-з’єднання, де в якості порту джерела виступає якийсь “високий” порт на вашій клієнтської станції, а портом одержувача є 21-й – на сервері. Коли ви починаєте отримувати дані, будь то список вмісту каталога або передача файлів, відкривається друге з’єднання. У випадку з активним FTP, ініціатором відкриття цього з’єднання виступає сервер: порт відправника – 20 на сервері, порт одержувача – якийсь довільний “високий” порт на клієнті, про значення якого хости попередньо домовилися. Тобто виходить все навпаки: для каналу передачі даних ваш клієнт – це сервер! 🙂 Ну і в чому тут проблема? – Запитаєте ви. А ось у чому: в неконтекстне файрволл, організованому за принципом “за замовчуванням все заборонено” (default deny firewall), ви змушені в ясній формі описати в правилах кожен тип пакету, який допускається для проходження через файрволл. Оскільки незрозуміло, як охарактеризувати описаний вище тип з’єднання, ви просто одним із правил вписуєте: “дозволяти машинам із зовнішньої мережі організовувати з’єднання з 20-го порту на будь-який високий порт хостів у внутрішній мережі”. Це, панове, беспорядочек і злочинна, так сказати, недбалість! Найочевидніше, що може статися через такого правила, це те, що зловмисники швиденько зміркують сканувати вашу мережу, ставлячи в поле “порт відправника” номер 20 🙂
Тепер, з використанням контекстного файрволлінга, ми опиняємося в кращому положенні. Файрволл досить розумний, щоб моніторити наради клієнта і сервера щодо призначення номерів портів для каналу передачі даних і запам’ятовувати, на який порт клієнт очікує з’єднання від сервера. І потім відкрити доступ до цього і тільки цьому порту, а не до всіх 64512 можливим! Зауважте, це не тільки більш розумне, але і більш легке в реалізації рішення, що вимагає наявності тільки одного правила.
Контекстний файрволлінг – це очевидно більш просунута технологія в порівнянні з неконтекстне. Будь наворочений корпоративний файрволл містить в собі цю чудову фічу. Однак ніхто не говорить, що серйозні організації не використовують також неконтекстне файрволлов / маршрутизаторів. Подумайте самі: відстеження сполук – воно ж чорт знає скільки пам’яті жере! Тому багато компаній використовують звичайну фільтрацію для блокування трафіку, який ну ні за яких умов не можна пускати ззовні всередину (скажімо, спільне використання (sharing) файлів в локальній мережі – smb, nfs), а контекстна фільтрація використовується додатково, щоб розправлятися з іншими, більш неоднозначними проблемами. У будь-якому випадку, контекстность дає вашому фаєрвол пам’ять, а з нею – розум і силу. Використання цієї техніки в підсистемі фільтрації пакетів – незаперечний виграш для Linux. А взагалі-то я рішуче рекомендую вам звернутися цієї технології файрволлінга незалежно від того, будете ви використовувати її під лінуксом чи ні.

Захист від DoS-атак

<З>Затоплення SYN-пакетами (SYN flood) – це широко відома атака на відмову в обслуговуванні (DoS), що базується на загальновідомою “вічної” теми: захоплення (вичерпання, приведення до браку) ресурсів (Resource Starvation).
По суті відбувається наступне: атакуючий посилає деяка кількість TCP SYN-сегментів на ваш хост, але на ваші відповіді ніяк не реагує. Ваш комп’ютер при цьому наївно вважає, що це просто з’єднання між ним і атакуючим хостом дуже повільне, і з цих міркувань відносно тривалий час очікує, перш ніж скинути кожне із з’єднань. При цьому, однак, ваш комп’ютер стежить за тим, щоб кількість новоустанавліваемих з’єднань не перевищило деякий ліміт. Таким чином, якщо атакуючий пошле досить цих самих SYN-пакетів, ви опиняєтеся в положенні, коли не можете обробити сполуки, що надходять від когось ще. В даному випадку вичерпне ресурс – таблиця з’єднань.
Тепер ви можете організувати на Linux’е прекрасну захист проти цієї атаки і їй подібних – ввести обмеження на кількість SYN-пакетів, що приходять від одного джерела. Netfilter дозволяє рішення такого роду, оскільки в ньому реалізована технологія обмеження швидкості передачі (basic rate limiting). Втім, ви можете використовувати цю фічу в різних цілях. Наприклад навіть для того, щоб бути впевненими, що будь-які активно використовуються машини у вашій мережі (IRC-, веб-сервери) не пожирають всю наявну у вас смугу пропускання. Це теж дуже корисна технологія! Далі, на що ще ми можемо тепер знайти управу?

захист від Stealth-сканування

Fyodor, де б ти не був, я впевнений, що ти заплакав від щастя, дізнавшись про це нововведення! ,>
Ця людина – автор nmap – вивів сканування мереж / хостів на принципово новий рівень, виявивши, що деякі види пакетів можуть безперешкодно пройти крізь багато файрволли і досягти багатьох хостів, залишившись непоміченими. Цей вид сканування, названий stealth-сканування, включає в себе все що завгодно, починаючи від посилання ACK-пакетів, прикидаються частиною відкритого з’єднання, до використання “нелогічних” пакетков, як наприклад XMAS-пакет, в якому виставлені всі TCP-прапори або NULL-пакет, в якому всі прапори відключені. Поки ці пакети можуть спокійно шастати через бесконтекстние файрволли, а операційні системи мають властивість відповідати на ці пакети різними повідомленнями про помилки, у цікавих є прекрасна можливість досліджувати машини за файрволлом, частіше за все не будучи при цьому виявленими.
Netfilter здатний виробляти фільтрацію пакетів, базуючись на будь-якій комбінації TCP-прапорів, що було неможливо на ядрах 2.0/2.2, фаєрвол-модулі яких справлялися тільки з розпізнаванням прапора SYN.Ета та інші можливості захисту від атак стали можливі завдяки глобальним поліпшень архітектури коду файерволлінга Linux в цілому, яка пропонує прості можливості розширення. Прямим наслідком цієї розширюваності є, наприклад, ось яка фіча:

MAC-фільтрація

Кожна мережева карта має свій MAC (Media Access Control) адреса, який повинен бути унікальним не тільки в рамках вашої мережі, але і у всьому світі (насправді бувають ситуації, коли виробник дублює MAC-адреси, але в такому випадку карти з однаковими адресами надходять у продаж у дуже віддалені один від одного регіони, наприклад, в Японії і Європи. – Прим. ред). Тепер, якщо вам потрібно посилити вимоги до внутрішньої безпеки мережі, ви можете організувати фільтрацію не тільки по IP-, але і по MAC-адресами. Така очевидно корисна фіча, однак, була недоступна в ядрах 2.0/2.2.
При цьому майте на увазі, що подібна міра буде ефективна як доповнення для забезпечення безпеки в комутованій мережі. Вона не зупинить просунутого зловмисника в некомутованої (побудованої на основі хабів) мережі, хоча і може бути корисна як додаткова міра захисту. До речі ви можете комбінувати цей метод з технологією, описаною абзацом нижче, для створення віртуальних ЛВС (VLAN) “для бідних “. Погляньте ка на:

Більш інтелектуальні NAT і проксі

Трансляція мережевих адрес (Network address translation, NAT), або, як деякі люблять говорити – “модифікація пакетів”, являє собою технологію, коли файрволл змінює інформацію про джерело або одержувача в пакетах, які через нього проходять.
NAT використовується для вирішення широкого спектру завдань і має масу різновидів. Крім інших (див. статтю “To NAT or not to NAT” в “СР” № 1 за 1999 г “), існує класифікація, що розділяє NAT на” трансляцію джерела (відправника) “і” трансляцію пункту призначення (отримувача) “.
Перша використовується найчастіше у випадку, коли безліч клієнтських станцій спільно використовують один виділений провайдером IP-адресу. Багато організацій використовують це також щоб захистити внутрішню мережу від чужого цікавого ока.
Трансляція відправника була реалізована і на попередніх ядрах Linux, але в Netfilter вона була сильно дороблена і покращена.
Трансляція одержувача дозволяє файрволл відсилати всі вихідні пакети на заданий хост / порт. Наприклад, мій файрволл може відловлювати всі веб-з’єднання і прозоро для користувачів перенаправляти їх на проксі-сервер. Це дозволяє збільшити швидкість роботи в інтернеті за рахунок кешування даних на проксі. Також це дозволяє фільтрувати веб-контент, оскільки проксі працює як посередник.
Люди також використовують трансляцію одержувача для організації так званого кластеру для балансування навантаження, найчастіше для роботи з веб-серверами базами даних.
Приклад: Припустимо, мої веб-сервера налаштовані для запитів до сервера баз даних за адресою 192.16.1.53. Таким чином, якщо між ними встановити систему трансляції одержувача, вона буде перетворювати цей адреса в один з п’яти можливих адрес серверів, наприклад з діапазону 10.0.0.1-10.0.0.5

Поліпшені можливості протоколювання трафіку

Netfilter тепер веде логи більш інтелектуально. Що важливо, він може протоколювати пакети на різних рівнях значимості і додавати довільні мітки в лог, базуючись на певних вами правилах. Поясню сказане на декількох прикладах:
Приклад 1: ви знаєте, що не повинні споглядати ніяких входять у вашу мережу SMB-запитів. Ви встановлюєте правило, згідно з яким в лог пишуться всі пакунки цього типу з позначкою значимості “warning”. Надалі можна змусити обробник логів слати вам на e-mail все, що проходить з такою позначкою.
Приклад 2: ви збираєте фактичний матеріал проти когось, хто намагається вломитися в вашу систему протягом, скажімо, двох тижнів. Ви вирахували його IP-адресу (а) і наказуєте системі протоколювання записувати в лог кожен пакет, який надходить з цих адрес, з присвоєнням рівня значимості “emerg”. Процес обробки і стеження за логами шле всі ці записи прямо на поставлене принтер для подальшого надійного збереження “речових доказів” на папері. Ну і звичайно ви повинні використовувати обмеження швидкості передачі для запобігання DoS-атак на систему протоколювання. Можна також вимагати відсилати вам попередження на пейджер або мобільний телефон у разі, коли зловмисник починає з’єднання після, припустимо, 2:00 бездіяльності.
Бачите, система протоколювання тут досить гнучка, як, втім, і інші частини Netfilter. Те, що вона може виявляти практично будь-які вторгнення, не може не вражати. Якщо ви хочете обзавестися потужною системою виявлення вторгнень (Intrusion Detection System, IDS) – будь ласка, підшукайте собі таку. Але не гидуйте використовувати додатково і “рідну” лінуксовий систему протоколювання. Пам’ятайте, можуть виявитися баги, що роблять навіть просунуту IDS марною або непрацездатною, тому керуйтеся правилом “Defense in Depth” – використовуйте множинні методи захисту щоб застраховатсья від виходу з ладу одного з них.

* – Насправді автор застосовує у статті терміни stateful / stateless firewall / filter. Порадившись з деякими мережевими гуру і переглянувши російськомовну літературу, я з’ясовую, що усталеного перекладу цих понять немає. Для stateful firewall / filter були знайдені наступні варіанти: “фільтр пакетів з контекстною перевіркою”, “фільтр із зберіганням стану” і “фільтр, що відслідковує з’єднання”.
Деякі джерела стверджують, що все це також є синонімом поняття “динамічний файрволл”, хоча інші з цим в корені не згодні. Таким чином я, набравшись нахабства, вводжу термін “контекстний файрволл / фільтр “: в будь-якому випадку велика частина статті присвячена розшифровці цього поняття, а далі вже вам самим вирішувати – як цю справу назвати 😉

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*