Використання власних ланцюжків обробки трафіку (Custom Chain)
У минулих частинах статті ми ознайомилися з базовими настройками файрволла, з яких ми, в тому числі, дізналися, що міжмережевий екран маршрутизатора послідовно перевіряє пакет на відповідність правилам фільтрації зверху-вниз. Перевірка припиняється в той момент, коли пакет буде або пропущений на наступний етап обробки трафіку (Action = Accept), або проходження пакета буде заборонено (Action = reject, drop, tarpit).
Таким чином, якщо ми уявимо собі файрволл, що складається з 25 правил, то виглядати це буде наступним чином:
При цьому, якщо пакет відповідає тільки правилом номер 25, він все одно буде перевірений на відповідність правилам з номера 1 по номер 24, на що будуть витрачені ресурси маршрутизатора.
Ситуація ускладнюється тим, що є «дуже дорогі», з точки зору процесорного часу, правила фільтрації. У цих випадках приходить на виручку можливість писати власні ланцюжки (Chain) обробки правила.
Якщо ви коли-небудь займалися програмуванням, то власна ланцюжок дуже схожа на процедуру, виклик якої здійснюється зазначенням в полі Action команди Jump з ім'ям ланцюжка, повернення ж відбувається на наступне правило за викликом ланцюжка, після закінчення обробки трафіку в ланцюжку, або якщо в якомусь -або правилі власної ланцюжка було використано Action = Return, що перервало подальшу обробку ланцюжки.
Графічно це можна
відобразити так
При цьому треба звернути увагу, що пакет потрапить в ланцюжок Custom-Chain-1, тільки якщо він буде відповідати умовам, зазначеним у правилі 3a, а в ланцюжок Custom-Chain-2, тільки якщо він відповідає правилу 15a.
В результаті очевидно, що середня кількість правил, на які перевіряється пакет, зменшується, що збільшує продуктивність маршрутизатора.
Так само хочеться звернути увагу що одну і ту ж ланцюжок можна викликати з різних ланцюжків (в тому числі і своїх) фільтрації трафіку. Наприклад, ви можете написати ланцюжок із захистом ssh-сервера від підбору пароля і звертатися до неї як з ланцюжка input (підбір пароля на маршрутизатор), так і з ланцюжка forward, захищаючи один або кілька внутрішніх серверів.
Для прикладу обговоримо, як проводиться настройка роутера Мікротік, що має кілька WAN-інтерфейсів. В цьому випадку у вас виникає необхідність або написання досить великої кількості однакових правил для кожного WAN-інтерфейсу, або створення власної ланцюжка обробки трафіку, і виклик її при попаданні пакета ззовні на будь-який з WAN-інтерфейсів.
створюємо демілітарізо-
ванну зону (DMZ)
Тепер, після невеликого теоретичного відступу про власні ланцюжки, які ми з вами будемо використовувати, ми переходимо до обіцяного створення DMZ. Виходячи з другої частини статті. у нас є 3 інтерфейсу:
- WAN (Вихід в інтернет);
- DMZ (Демілітаризована зона);
- LAN (Локальна мережа).
Розділимо їх за рівнем довіри.
LAN - сама довірена мережу. З неї можна ходити як в WAN, так і в DMZ без обмежень. Щоб з інших мереж потрапити в LAN, потрібне окреме правило на файрволла.
DMZ - мережа з проміжним рівнем довіри. З неї можна ходити в WAN, проте в LAN без спеціального дозволу доступ закритий.
WAN - сама небезпечна мережу. З неї за замовчуванням закритий доступ як в LAN, так і в DMZ.
Графічно це можна уявити так:
Налаштування маршрутизатора
Так як в цій частині статті ми працюємо з трафіком, що йде через маршрутизатор, основний ланцюжком (Chain) для такого трафіку є forward.
Спочатку вирішимо всі з'єднання з станами з'єднання рівними established і related, і заборонимо зі станом з'єднання рівним invalid, незалежно від інтерфейсів. Так як ми вже знаємо, що фільтрувати трафік логічно тільки на нових сполуках (connection-state = new).
Крім того, найбільша кількість пакетів якраз відносяться до вже встановлених з'єднань, і вказівка цього правила на початку списку кілька збільшить продуктивність.