Створення і тестування Firewall в Linux, Частина 1.1 Віртуальна лабораторія

Вирішив написати статтю по слідах курсу, який я робив у минулому семестрі в інституті. Звичайно, тут я опишу лише найголовніші основи і максимально все спрощу. Постараюся дати трохи теоритической інформації, але в основному більше посилань, зображень і практики.

Отже, мова піде про написання firewall в середовищі Linux. Всю статтю я поделю на кілька частин. Те, що ви читаєте зараз – перша частина, вона поділена ще на три частини. Деякі теми добре відомі і задокументовані, тому я постараюся окремо давати мінімум теорії з ним і окремо практику. Щоб всім було цікаво. А також посилання для поглиблення (часто це будуть англійські статті).

Зміст першої частини:

1.1 — Створення віртуальної лабораторії (щоб нам було де працювати, я покажу як створити віртуальну мережу на вашому комп'ютері. Мережа буде складатися з 3х машин Linux ubuntu).
1.2 – Написання простого модуля в Linux. Введення в Netfilter та перехоплення трафіку з його допомогою. Об'єднуємо всі разом, тестуємо.
1.3 – Написання простого char device. Додавання віртуальної файлової системи — sysfs. Написання user interface. Об'єднуємо всі разом, тестуємо.

Частина 2. Ще не готова, але думаю торкнутися наступні теми: короткий вступ в таблиці firewall. Stateless vs statefull firewall. Додавання ще одного модуля для завантаження таблиць правил (через віртуальну файлову систему sysfs з першої частини, тут може бути я просто дам вихідний код, бо принципово нічого нового тут немає). Додамо невелику проксі-програму user space і пошлемо потрібний трафік з ядра проксі, попрацюємо з вмістом трафіку і на цій основі приймемо рішення про його подальшу долю (додамо можливість блокувати окремі сайти). А так само візьмемо реальну відому атаку засновану на buffer overflow, захопимо управління над віддаленим комп'ютером з її допомогою і подивимося як наш firewall може захистити від цього.

Можливо друга частина буде розбита на дві, або змінена. Буду дуже радий вашим коментарям та побажань як по першій частині так і по другій.

Введення
Наша мета в цій частині – написання програми, яка буде на дуже простому рівні контролювати весь трафік. А саме – ми визначимо які пакети можна пропускати, а які видаляти. Створимо просту систему логів, для відстеження результатів, а також програму для звісно користувача, через яку можна буде читати ці результати і трохи керувати програмою. Ось такий тривіальний firewall чи російською мовою — Міжмережевий екран, мережевий екран — це комплекс апаратних і програмних засобів в комп'ютерній мережі, здійснює контроль і фільтрацію проходять через негосетевых пакетів у відповідності з заданими правилами. Wikipedia).

В нашому випадку, функцію firewall буде виконувати окремий комп'ютер. Виглядати це буде так:



Давайте дивитися. Ми зробимо мережа, в якій буде три віртуальних комп'ютера – host1, host2, fw і з'єднаємо їх як на картинці вище.

host1 — отримає статичний IP address – 10.0.1.1. Його ми будемо захищати.
host2 — який буде в останній частині аттакующим і буде мати статичний IP – 10.0.2.2
fw — буде відслідковувати весь трафік, сконфігуріруем йому так само інтерфейс для виходу в інтернет, щоб можна було при (читати ВК та новини) необхідності завантажувати потрібний софт.



В двох словах про DHCP (англ. Dynamic Host Configuration Protocol — протокол динамічної настройки вузла) —мережний протокол, що дозволяє комп'ютерам автоматично одержувати IP-адресу й інші параметри, необхідні для роботи в мережі TCP/IP. (Wikipedia).

Тобто він буде сам отримувати різні настройки, включаючи IP, для того щоб мати можливість через цей мережевий інтерфейс, виходити без зайвого головного болю в інтернет.

Створення віртуального середовища. Теорія
Трохи про віртуальні машини. В нашому випадку, віртуальна машина – це програма, яка буде емулювати копьютера, завдяки чому, ми зможемо запустити на нашому комп'ютері відразу три операційні системи. Для тих хто зовсім не знайомий з темою, можуть почати тут.

Ми скористаємося безкоштовною програмою VirtualBox, яка дозволяє створювати віртуальні мережі на одному комп'ютері. Звичайно ж не принципово чим саме користуватися, головне мати можливість налаштувати мережу. Програма безкоштовна, шукаємо, качаємо, ставимо.
Наступним кроком буде додати віртуальні машини. Я буду працювати з Linux Ubuntu 12, з «історичних причин». Ви можете завантажити останню версію. Тим більше якщо ваш копьютера досить потужний. Образ Ubuntu можна знайти на тут.

Я сподіваюся, що читач впорається з додавання образу в virtualbox і тепер у вас є щось схоже на картинку. Я раджу скористатися функцією «clone» в virtualbox, для швидкого створення ще двох машин. У мене в ролі host1, host2 спеціально урізані «легкі» версії ubuntu, без графічного інтерфейсу (не вистачає RAM для повноцінних).

Приблизно так це має виглядати в кінці



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

Йдемо в settings і конфігуруємо як на фото:



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



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

На даному етапі, я припускаю, що читачеві відомо, що таке IP-адреса як він выгледит і навіщо він потрібен. Я буду редагувати vi, ви можете в будь-якому іншому редакторі, але не забуваємо давати права адміністратора (запускати з sudo), щоб мати можливість зберегти.

$ sudo vi /etc/network/interfaces



«Просимо» систему заново прочитати файл конфігурації (щоб не перезавантажувати машину):

$ sudo ifdown eth0 && sudo ifup eth0

Запускаємо 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, потім вимкнути комп'ютер, щоб змінити налаштування і запустити заново).

Host2:



Тепер прийшла черга головної машини, яка буде виконувати роль 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:

net.ipv4.ip_forward = 1

Зробити це можна будь-яким зручним способом, не забуваємо sudo. Багато інформації про конфігурацію інтерфейсів можна почитати тут.

Перевірка
Залишилося перевірити, що все пов'язано один з одним і працює. Перевіряти будемо класичним ping



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

Посилання:
» Мережеві Екрани
» Віртуальні машини
» дозволити forwarding
» Конфігурація interfaces
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.