Распечатать страницу
Главная \ База готовых работ \ Готовые работы по компьютерным дисциплинам \ Компьютерные системы и сети \ 3759. Лабораторна робота №9, Налаштування міжмережевого екрану в Лінукс

Лабораторна робота №9, Налаштування міжмережевого екрану в Лінукс

« Назад

Код роботи: 3759

Вид роботи: Лабораторна робота

Предмет: Комп’ютерні системи та мережі

Тема: №9, Налаштування міжмережевого екрану в Лінукс

Кількість сторінок: 15

Дата виконання: 2015

Мова написання: українська

Ціна: безкоштовно

Мета роботи: вивчення та практичне застосування брандмауера ОС Linux netfiler / iptables. Отримання практичних навичок налаштування пакетного фільтра.

Введення

Iptables - утиліта командного рядка, є стандартним інтерфейсом управління роботою брандмауера (брандмауера) netfilter для ядер Linux версій 2.4 і 2.6.

Програма дозволяє задати правила, яким повинні відповідати проходять через брандмауер IP- пакети. Ці правила, як і всі налаштування Linux, записуються в текстовий файл, що знаходиться в папці / etc. Послідовність правил називається ланцюжком (CHAIN). Для одного і того ж мережевого інтерфейсу використовуються кілька ланцюжків. Якщо проходить пакет не відповідає жодному з правил, то виконується дія за замовчуванням.

При виклику, параметром вказується команда, яку потрібно виконати. Зазвичай можна вказати тільки одну команду (але є винятки). Команду можна вказати однієї великої буквою або словом. Якщо при виклику будь-якої команди не вказано назву таблиці, то команда виконується в таблиці filter. Програма має докладну довідку, що викликається командою man iptables.

Короткий опис

Є віртуальна машина з встановленою ОС Linux, в Linux встановлений пакетний фільтр Iptables. Потрібно налаштувати в даній системі iptables для задоволення заданим умовам (набору дозволів і заборон доступу до мережевих сервісів для пристроїв локальної мережі).

Використовувані зовнішні команди і утиліти

ifconfig

Команда ifconfig служить для налаштування мережевого інтерфейсу.

ifconfig [інтерфейс] inet [IP- адреса] netmask [маска] broadcast [шіроковещ. адреса]

route

Командою route можна додавати / видаляти записи з таблиці маршрутизації:

route add - net [мережа призначення] netmask [маска] gw [шлюз]

route delete - net [мережа призначення]

Слово default замість адреси мережі призначення позначає маршрут за замовчуванням (в цьому випадку маска не потрібне). У тому випадку, якщо маска не вказана, route вибере її зі своїх міркувань, тому щоб уникнути непорозумінь маску необхідно вказувати завжди.

Для маршрутів до конкретних вузлів мережі:

route { add | delete } - host [адреса вузла мережі] gw [шлюз].

команди iptables

Вивести правила (- L, - list)

iptables [- t таблиця] - L [ланцюжок] [параметри]

Вивести список правил для зазначеної таблиці і ланцюжки. Якщо ланцюжок не вказано, то виводяться список правил для кожного ланцюжка. Наприклад для виведення правил з таблиці nat: iptables - t nat - n -L.

Часто використовуються параметри - n (під ізбеженіе повільних запитів DNS) і - v (для виведення більш докладної інформації).

Команду - L можна використовувати з - Z (iptables - L- Z) для виведення значень лічильників і одночасного їх обнулення.

Видалити всі правила з ланцюга (-F, - flush)

iptables [- t таблиця] - [F] [ланцюжок] [параметри]

Якщо ланцюжок не вказано, то видаляються всі ланцюжки з таблиці.

Обнулити всі лічильники (- Z, - zero)

iptables [- t таблиця] - Z [ланцюжок] [параметри]

Присвоює лічильникам числа пакетів і обсягу даних нульових значень. Якщо ланцюжок не вказано, то обнулення виконується для всіх ланцюжків.

Команду - Z можна використовувати з - L (iptables - L- Z) для виведення значень лічильників і одночасного їх обнулення.

Створити новий ланцюжок (- N, - new - chain)

iptables [- t таблиця] - N ланцюжок

Створити новий ланцюжок в зазначеній таблиці з вказаним ім'ям. Якщо у зазначеній таблиці вже є ланцюжок з вказаним ім'ям, то новий не створюється.

Видалити створений ланцюжок (-X, - delete - chain)

iptables [- t таблиця] -X [ланцюжок]

Видалити ланцюжок раніше створений за допомогою команди - N. Перед видаленням ланцюга необхідно видалити або замінити всі правила, які посилаються на цей ланцюжок. Якщо ланцюжок не вказаний, то з таблиці будуть видалені всі ланцюги крім стандартних (INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING). Стандартні ланцюжки не видаляються.

Перейменування ланцюга (-E, - rename - chain)

iptables [- t таблиця] -E ланцюжок нова_назва

Присвоює зазначеному ланцюжку нову назву. Косметична функція, що не впливає на функціональність.

Встановити політику для стандартного ланцюга (- P, - policy)

iptables [- t таблиця] - P ланцюжок дії [параметри]

Над пакетами які доходять до кінця зазначеного ланцюжка буде виконуватися вказана дія. В якості дії не можна вказувати назву ланцюжка. Встановлювати політику можна тільки на вбудованих ланцюжках. Наприклад: iptables - P INPUT DENY

Команди модифікації правил

Додати нове правило (-A, - append chain)

iptables [- t таблиця] -A ланцюжок спеціфікація_правила [параметри]

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

Вставити нове правило (-I, - insert)

iptables [- t таблиця] -I ланцюжок [номер_правила] специфікація_правила [параметри]

Зазначене правило вставляється у вказане місце зазначеного ланцюжка. Правила нумеруються з 1, тому якщо вказати номер 1 (або не вказати взагалі), то правило буде вставлено в початок ланцюжка.

Видалити правило (-D, - delete)

iptables [- t таблиця] -D ланцюжок номер_правила [параметри]

iptables [- t таблиця] -D ланцюжок спеціфікація_правила [параметри]

Правило можна вказувати за допомогою його номера в ланцюжку (нумерація починається з 1) або його специфікації.

Замінити правило (-R, - replace)

iptables [- t таблиця] -R ланцюжок номер_правила спеціфікація_правила [параметри]

Замінити правило з вказаним номером у зазначеному ланцюжку. Правила нумеруються з 1. Специфікація правила не може містити імені відправника або одержувача, яке одночасно відповідає кількома адресами.

Параметри визначення правил

Наведені нижче параметри використовуються при завданні специфікації правил і вказуються з командами модифікації правил. Ці параметри обмежують застосування правил - якщо оброблюваний пакет не відповідає зазначеним у специфікації критеріям, то зазначена в правилі дія на цей пакет не поширюється.

- p, - protocol [!] протокол

Обмеження протоколу. Основні значення: tcp, udp, icmp, або all. Протокол також можна вказати за допомогою номера, або назви зазначеного у файлі / etc / protocols. Знак « ! » Перед ім'ям протоколу змінює критерій на протилежний (наприклад ! Tcp означає « будь-який протокол, крім TCP »). Значення « Будь-який протокол » можна вказати за допомогою слова all або числа 0. Якщо протокол не вказано, то мається на увазі « Будь-який протокол ».

- s, - src, - source [!] адресу [/ маска]

Обмеження відправника. Адреса може бути IP -адресою (можливо з маскою), ім'ям хоста, або доменним ім'ям. Маска може бути в стандартному форматі (наприклад 255.255.255.0) або ж у вигляді числа, яке зазначає число одиниць з « лівого боку » маски (наприклад 24). Знак « ! » Перед адресою змінює критерій на протилежний.

Наполегливо не рекомендується використовувати імена, для дозволу яких потрібно віддалений запит, наприклад по системі DNS.

- d, - dst, - destination [!] address [/ mask]

Обмеження одержувача. Синтаксис такий же, як у - src.

- i, - in - interface [!] імя_інтерфейсу

Обмеження вхідного мережевого інтерфейсу. Знак « ! » Перед адресою змінює критерій на протилежний. Якщо вказане ім'я інтерфейсу кінчається на «+ », то критерієм збігаються всі інтерфейси, чиї імена починаються на вказане ім'я. Якщо параметр - in - interface не вказаний, то критеріям відповідають пакети з будь-якого мережевого інтерфейсу.

- o, - out - interface [!] імя_інтерфейса

Обмеження вихідного мережевого інтерфейсу. Синтаксис такий же, як і для - in - interface.

[!] - F, - fragment

Обмеження фрагментами: критеріям відповідають тільки фрагменти пакета, починаючи з другого фрагмента. Знак « ! » Перед адресою змінює критерій на протилежний.

У таких фрагментів починаючи з другого немає заголовка з портами відправника і одержувача (або з типом ICMP). Отже, такі фрагменти не відповідають критеріям, що вказує номери портів.

- j, - jump дія_або_ланцюжок

- g, - goto ланцюжок

Специфікація дій і переходів. Якщо вказано назву ланцюжка раніше створеної командою - N, то пакети відповідають критеріям правила переноситься в початок зазначеної ланцюжка (заборонено вказувати назву ланцюжка, в якому це правило знаходиться). Якщо вказано дію, то вона виконується над пакетами відповідним критеріям правила. Якщо у правилі немає параметрів - jump і - goto, то правило не впливає на пакети що перевіряються (але лічильник правила продовжує працювати).

- goto відрізняється від - jump поведінкою при дії RETURN. Дія RETURN переводить пакет у правило, наступне після того, яке викликало попередній перехід - jump. Тобто, якщо пакет перейшов з ланцюжка X в ланцюжок Y за допомогою - jump, а потім в Z знову за допомогою - jump, то дія RETURN повертає його в Y. Якщо ж пакет перейшов в Z за допомогою - goto, то RETURN повертає його в X.

- c, - set - counters пакети байти

Параметр дозволяє при додаванні або зміні правил одночасно ініціалізувати лічильники числа пакетів і розміру даних.

виконання

Налаштування мережевих інтерфейсів

У нас є станція з трьома мережевими інтерфейсами - eth0, eth1, eth2. За допомогою утиліт ifconfig та route ми можемо налаштувати їх мережеві настройки.

Синтаксис команди ifconfig виглядає наступним чином:

ifconfig [інтерфейс] inet [IP- адреса] netmask [маска].

Синтаксис команди route виглядає наступним чином:

route add - net [мережа призначення] netmask [маска] gw [шлюз].

У наступних 4х командах описаний сам процес налаштування інтерфейсів:

ifconfig eth0 inet 200.200.200.200 netmask 255.255.255.0

ifconfig eth1 inet 205.205.205.205 netmask 255.255.255.0

ifconfig eth2 inet 210.210.210.210 netmask 255.255.255.0

route add default gw 200.200.200.1

Командою виду:

ifconfig eth0 inet 200.200.200.200 netmask 255.255.255.0

ми призначаємо фізічному інтерфесу (в даному випадку eth0) ip-адресу 200.200.200.200 і говоримо про те, що маска підмережі для нього буде 255.255.255.0.

Командою виду:

route add default gw 200.200.200.1

ми призначаємо шлюз за замовчуванням. Адреса шлюзу буде 200.200.200.1.

підготовка iptables

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

iptables -F

Ця команда скидає всі наявні в iptables ланцюжки, таким чином ми Обнуляємо всі наявні маршрути, але не політики безпеки.

Для обнулення політик безпеки нам треба виконати наступні 3 команди:

iptables - P INPUT DROP

iptables - P OUTPUT DROP

iptables - P FORWARD DROP

Перша команда скине політики, що стосуються вхідного трафіку, друга - вихідного, третя - перенаправляє.

Перш ніж скинути правила при віддаленому підключенні необхідно переконатися, що в ланцюжках INPUT і OUTPUT встановлена політика ACCEPT. Це робиться так:

sudo iptables -P INPUT ACCEPT

sudo iptables -P OUTPUT ACCEPT

sudo iptables -F

Далі слід використовувати команду:

iptables - A POSTROUTING - t nat - j MASQUERADE

це необхідно, щоб сервер виставляв на адресу відправника транзитних пакетів свою IP- адресу.

Отже, для початку потрібно переглянути список поточних правил iptables. Для цього використовується прапор -L:

sudo iptables -L

За допомогою прапора -S даний список можна переглянути в іншому форматі, який відображає команди, необхідні для активації правил і політик:

sudo iptables -S

-P INPUT ACCEPT

-P FORWARD ACCEPT

-P OUTPUT ACCEPT

Створимо пару правил, які бажано мати в ланцюжку INPUT практично для будь-серверної конфігурації:

1. Правило дозволяє будь вхідний трафік на службовий внутрішній loopback device. Це може знадобитися для коректної роботи різного роду служб і додатків.

sudo iptables -I INPUT 1 -i lo -j ACCEPT

2. Правило для підтримки вже дозволених раніше і встановлених з'єднань

sudo iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT

Створимо ряд однотипних правил для запущених на на нашому сервері служб. Наприклад правило дозволяє вхідні TCP-пакети для підключення до служб SSH-сервера OpenSSH, веб-сервера Apache, проксі-сервера Squid, сервера часу NTPD на мережевому інтерфейсі направленому в локальну мережу (eth0):

sudo iptables -A INPUT -p tcp --dport 22 -i eth0 -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 443 -i eth0 -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 3128 -i eth0 -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 123 -i eth0 -j ACCEPT

Додатково створимо правило, що дозволяє відповіді на echo-запити по протоколу ICPM що надходять на інтерфейс внутрішньої локальної мережі нашого Linux-сервера:

sudo iptables -A INPUT -p icmp --icmp-type echo-request -i eth0 -j ACCEPT

Розглянемо правило, яке дозволяє поточний SSH-підключення.

Воно виглядає так:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT

Звичайно, спочатку створеня правила може здатися неймовірно складним; щоб зрозуміти дане правило, ознайомимося з його компонентами:

-A INPUT: прапор -А додає (append) правило в кінець ланцюжка. Ця частина команди повідомляє iptables про необхідність внести правило в кінець ланцюжка INPUT.

-m conntrack: крім набору основних функцій iptables також має набір розширень, або модулів, які відповідають за додаткові можливості фаєрвола. Дана частина команди говорить про те, що користувачеві необхідний доступ до функцій модуля conntrack. Цей модуль дозволяє використовувати команди, котрі вирішують, що робити з пакетом, на основі його відношення до попередніх з'єднаннь.

-ctstate: Одна з команд, доступних при виклику модуля conntrack. Дана команда дозволяє відстежувати ставлення пакетів до інших пакетів, переглянутих раніше. Їй задані значення ESTABLISHED (що дозволяє приймати пакети, які є частиною існуючого з'єднання) і RELATED (приймає пакети, які пов'язані з уже встановленим з'єднанням). Саме ця частина правила відповідає за поточну сесію SSH.

-j ACCEPT: вказує дію (target), яку потрібно виконати над пакетом, який відповідає правилу. У цьому випадку iptables буде приймати (accept) пакети, які відповідають попереднім критеріям.

В кінець ланцюжка потрібно внести правило, що скидає всі невідповідні пакети, при цьому зберігаючи політику ACCEPT.

Щоб повернути ланцюжку INPUT політику ACCEPT, наберіть:

sudo iptables -P INPUT ACCEPT

Тепер можна внести в кінець цього ланцюжка правило, яке буде скидати всі невідповідні пакети:

sudo iptables -A INPUT -j DROP

Звичайно, це також означає, що будь-яке правило, яке необхідно внести в кінець ланцюжка, повинно знаходитися перед правилом скидання. Це можна зробити, або тимчасово видаливши правило скидання:

sudo iptables -D INPUT -j DROP

sudo iptables -A INPUT новое_правило

sudo iptables -A INPUT -j DROP

або вставивши нове правило в кінець ланцюга (але перед правилом скидання), вказавши номер рядка. Щоб внести правило в рядок 4, наберіть:

sudo iptables -I INPUT 4 новое_правило

Збереження налаштувань iptables

За замовчуванням всі незбережені правила діють до наступного перезавантаження сервера; відразу ж після перезавантаження незбережені правила будуть втрачені.

У деяких випадках це корисно, оскільки дає можливість користувачам, випадково які заблокували себе, отримати доступ до сервера. Тим не менш, в більшості випадків все ж зручніше зберегти правила і завантажувати їх при запуску сервера.

Це можна зробити декількома способами; найпростіший з них - використовувати пакет iptables-persistent, який можна завантажити з репозиторію Ubuntu за замовчуванням:

sudo apt-get update

sudo apt-get install iptables-persistent

Під час інсталяції пакет уточнить, чи потрібно зберегти поточні правила для подальшої автоматичного завантаження; якщо поточні правила були протестовані (дозволяють створювати SSH-підключення) і відповідають всім вимогам, їх можна зберегти.

Так само пакет запитає, чи потрібно зберегти існуючі правила IPv6 (вони встановлюються за допомогою утиліти ip6tables, яка контролює вступники пакети IPv6 майже таким же чином).

Під час установки пакета нам буде поставлено питання, чи хочемо ми відразу зберегти наявні правила IPv4 в конфігураційний файл /etc/iptables/rules.v4. Аналогічне питання буде задано і за правилами для IPv6, які будуть збережені в файл /etc/iptables/rules.v6

Надалі, після редагування правил, для запису змін до зазначених конфігураційних файлів можемо пересмикнути службу iptables-persistent:

sudo service iptables-persistent save

* Saving rules...

 * IPv4...

 * IPv6... [OK]

Порядок виконання роботи

1. Перевірити підтримку iptables ядром;

2. Якщо подтримка відсутня, оновити ядро;

3. Написати скрипт, який здійснює запуск iptables

4. Вивести поточний стан ланцюжків фільтрації.

5. Якщо ланцюжки не порожні, очистити їх.

6. Створити 5-6 правил для кожного ланцюжка відповідно до завдань.

7. Видалити кілька правил.

8. Протестувати працездатність створених правил.

завдання 1

Дозволяється доступ із зовнішньої мережі до сервісів http і ftp, що виконується на вузлі з IP -адресою 205.205.205.10

iptables - A FORWARD - d 205.205.205.10 - p tcp - dport 80- j ACCEPT

iptables - A FORWARD - d 205.205.205.10 - p tcp - dport 21- j ACCEPT

iptables - A FORWARD - d 205.205.205.10 - p tcp - dport 20- j ACCEPT

iptables - A FORWARD - s 205.205.205.10 - m state - state ESTABLISHED - j ACCEPT

завдання 2

Дозволяється доступ із зовнішньої мережі до сервісу http, виконується на вузлі з IP -адресою 205.205.205.20.

iptables - A FORWARD - d 205.205.205.20 - p tcp - dport 80- j ACCEPT

iptables - A FORWARD - s 205.205.205.20 - m state - state ESTABLISHED - j ACCEPT

завдання 3

Дозволяється доступ із зовнішньої мережі до сервісів ftp, dns, echo, що виконується на вузлі з IP -адресою 205.205.205.30.

iptables - A FORWARD - d 205.205.205.30 - p tcp - dport 21- j ACCEPT

iptables - A FORWARD - d 205.205.205.30 - p tcp - dport 20- j ACCEPT

iptables - A FORWARD - d 205.205.205.30 - p tcp - dport 80- j ACCEPT

iptables - A FORWARD - d 205.205.205.30 - p udp - dport 7- j ACCEPT

iptables - A FORWARD - s 205.205.205.30 - m state - state ESTABLISHED - j ACCEPT

завдання 4

Дозволяється доступ з зовнішньої мережі до сервісів smtp, pop3, що виконується на вузлі з IP -адресою 205.205.205.40.

iptables - A FORWARD - d 205.205.205.40 - p tcp - dport 25- j ACCEPT

iptables - A FORWARD - d 205.205.205.40 - p tcp - dport 110- j ACCEPT

iptables - A FORWARD - s 205.205.205.40 - m state - state ESTABLISHED - j ACCEPT

завдання 5

Дозволяється доступ із зовнішньої мережі до сервісу ssh, що виконується на вузлах мережі 205.205.205.0.24.

iptables - A FORWARD - d 205.205.205.0/255.255.255.0 - p tcp - dport 22- j ACCEPT

iptables - A FORWARD - s 205.205.205.0/255.255.255.0 - m state - state ESTABLISHED - j ACCEPT

завдання 6

Клієнтським програмам, що виконується на вузлах мережі 210.210.210.0/24, дозволяється повний доступ до сервісів, що виконується на вузлах мережі 205.205.205.0.24.

iptables - A FORWARD - s 210.210.210.0/255.255.255.0 - d 205.205.205.0/255.255.255.0 - j ACCEPT

iptables - A FORWARD - s 210.210.210.0/255.255.255.0 - d 205.205.205.0/255.255.255.0 - m state - state ESTABLISHED - j ACCEPT

завдання 7

Клієнтським програмам, що виконується на вузлах мережі 210.210.210.0/24, дозволяється повний доступ до сервісів, що виконується на вузлах зовнішніх мереж.

iptables - A FORWARD - s 210.210.210.0/255.255.255.0 - j ACCEPT

iptables - A FORWARD - d 210.210.210.0/255.255.255.0 - m state - state ESTABLISHED - j ACCEPT

завдання 8

Дозволяється доступ до сервісу ftp,що виконуються на вузлі з IP -адресою 210.210.210.10, з вузла з IP -адресою 190.190.190.190.

iptables - A FORWARD - d 210.210.210.10 - s 190.190.190.190 - p tcp - dport 21- j ACCEPT

iptables - A FORWARD - d 210.210.210.10 - s 190.190.190.190 - p tcp - dport 20- j ACCEPT

iptables - A FORWARD - s 210.210.210.10 - d 190.190.190.190 - m state - state ESTABLISHED - j ACCEPT

завдання 9

Програмі, що виконується на вузлі з IP -адресою 210.210.210.20, забороняється доступ до сервісу http вузлів інших мереж.

У цьому випадку налаштовувати нічого не треба, тому в системі діє правило - що не дозволено, то заборонено.

Звіт

Звіт повинен містити короткий опис всіх дій, звіт з результатами виконання завдань, відповіді на контрольні питання. Студент повинен вміти пояснити результати і розповісти про їх досягнення.