Створення та тестування Firewall у Linux, Частина 1
Вирішив написати статтю слідами курсу, який я робив у минулому семестрі в інституті. Звичайно, тут я опишу лише найголовніші основи і максимально спрощу. Постараюся дати трохи теоретичної інформації, але переважно більше посилань, картинок і практики.
Отже, мова йтиме про написання firewall у середовищі Linux. Всю статтю я поділю на кілька частин. Те, що ви читаєте зараз - перша частина, вона поділена ще на три частини. Деякі теми добре відомі та задокументовані, тому я постараюся окремо давати мінімум теорії щодо них та окремо практику. Щоб усім було цікаво. А також посилання на поглиблення (часто це будуть англійські статті).
Зміст першої частини:
Зміст другої частини:
У нашому випадку, функцію firewall виконуватиме окремий комп'ютер. Виглядатиме це так:

Давайте дивитись. Ми зробимо мережу, в якій буде три віртуальні комп'ютери – host1, host2, fw і з'єднаємо їх як на зображенні вище.
host1 – отримає статичний IP address – 10.0.1.1. Його ми захищатимемо. host2 — який буде в останній частині атакуючим і матиме статичний IP – 10.0.2.2 fw — відслідковуватиме весь трафік, налаштуємо йому так само інтерфейс для виходу в інтернет, щоб можна було завантажити (читати ВК та новини) необхідності завантажувати потрібний софт.
Тобто він сам отримуватиме різні налаштування, включаючи IP, для того щоб мати можливість через цей мережевий інтерфейс, виходити без зайвого головного болю в інтернет.
Створення віртуального середовища. Теорія
Трохи про віртуальні машини. У нашому випадку, віртуальна машина – це програма, яка буде емулювати комп'ютер, завдякичому ми зможемо запустити на нашому комп'ютері відразу три операційні системи. Для тих хто зовсім не знайомий із темою, можуть почати тут.
Ми скористаємося безкоштовною програмоюVirtualBox, яка дозволяє створювати віртуальні мережі на одному комп'ютері. Звичайно ж не важливо, чим саме користуватися, головне мати можливість сконфігурувати мережу. Програма безкоштовна, шукаємо, качаємо, ставимо. Наступним кроком буде додати віртуальні машини. Я працюватиму з Linux Ubuntu 12, з «історичних причин». Ви можете завантажити останню версію. Тим більше, якщо ваш комп'ютер досить потужний. Образ Ubuntu можна знайти тут.
Я сподіваюся, що читач впорається з додавання образа до virtualbox і тепер у вас є щось схоже на картинку. Я раджу скористатися функцією “clone” у virtualbox для швидкого створення ще двох машин. У мене в ролі host1, host2 спеціально урізані «легкі» версії ubuntu, без графічного інтерфейсу (бракує RAM для повноцінних).
Приблизно так це має виглядати наприкінці

Створення віртуального середовища. Практика
І так, я припускаю, що у Вас вже є три віртуальні linux машини, які ми зараз налаштуємо в одну мережу і перевіримо, що все працює, перш ніж почати писати програму.
Ідемо у settings та конфігуруємо як на фото:

Додаємо мережевий пристрій:

Тепер, linux «думатиме», що в нашого комп'ютера, є мережна карта, а якщо ви подивіться в Advanced, то побачите, що в неї ще й вставлений кабель. Чудово. Тепер треба налаштувати таку карту в операційній системі. Для цього запускаємо host1.

"Просимо" систему заново прочитати файл конфігурації (щоб не перезавантажувати машину):
Запускаємоifconfigі перевіряємо, що у нас є мережева карта під ім'ямeth0, зIP== 10.0.1.1, маскою і тд і тп.

Те ж саме робимо з host2, тільки IP встановити в 10.0.2.2, gateway 10.0.2.3 і не забути «додати» мережну карту в налаштуваннях машини у virtualbox (у мене після змін налаштувань у virtualbox машина при завантаженні підвисала на пару хвилин і писала waiting for network configuration… Це пов'язано з тим, що за умовчанням, мережний інтерфейс налаштований як dhcp, тобто, операційна система чекає динамічно отримати мережеві налаштування, але в virtualbox, для цього вона має бути налаштована як NAT, але ми це змінили, тому ОС намагається зрозуміти, що не так, можна спочатку завантажити ОС, відредагувати interfaces, потім вимкнути комп'ютер, змінити налаштування і запустити заново).

Тепер настала черга головної машини, яка виконуватиме роль firewall. Нагадую, що нам знадобляться три мережеві карти, через одну ми зможемо виходити в інтернет у разі потреби, тому вона буде визначена як NAT. Інші дві будуть відповідальні пересилати трафік з host1 -> host2 і назад з host2 -> host1.

Adapter1 – має бути виставлений як NAT. Налаштування Adapter2, Adapter3, такі ж як і попередніх прикладах (Internal network). Запускаємо, починаємо конфігурувати мережеві карти. Так має виглядати файл interfaces.

А ось – кінцевий результат конфігурації після перезапуску:

Останнє, що залишилося зробити - це дозволитиpacket forwarding, для того щоб комп'ютер міг брати пакети з одного мережного інтерфейсу(10.0.2.3) на який приходять пакети від host2 і передати їх на інший мережний інтерфейс 10.0.1.3 відповідноз host1.
Тут докладно описано. Щоб налаштування було постійним, потрібно змінити наступний рядок у/etc/sysctl.conf:
Зробити це можна будь-яким зручним способом, не забуваємо sudo. Багато інформації про конфігурацію інтерфесів можна прочитати тут.
Залишилося перевірити, що все складно одне з одним і працює. Перевіряти будемо класичнимping

Як видно на картинці, ping пройшов з host1 -> host2, host2 -> host1, fw -> host1, fw -> host2. Готово «лабораторія» для майбутніх експериментів налаштована.