Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



Лабораторна робота 5 «Пакетні фільтри»

Лабораторна робота 5 «Пакетні фільтри»




Дата конвертації03.12.2019
Розмір0.97 Mb.
ТипЛабораторна робота


Лабораторна робота 5

«Пакетні фільтри»
Робота націлена на поглиблене самостійне вивчення спеціальних питань, присвячених організації та конфігуруванню брандмауера, що використовує iptables.
1.Організація простого брандмауера

У комп’ютерній мережі брандмауер (firewall) – це програмно-апаратний засіб, який розміщується на межі мережі і використовується для двохсторонньої передачі лише авторизованих певним чином даних. Найчастіше брандмауери захищають внутрішню корпоративну мережу від несанкціонованого проникнення із зовнішньої мережі. Однак їх можна використовувати для фільтрування вихідної інформації, обмеження доступу користувачів внутрішньої мережі назовні і т.п. Брандмауери застосовують різні алгоритми фільтрування, вони мають різний ступінь захисту та вартість. Розрізняють такі типи брандмауерів:



  • брандмауери з фільтрування пакетів (працюють на канальному і мережевому рівнях);

  • шлюзи прикладного рівня (фільтрують інформацію по додатках);

  • брандмауери рівня з’єднання.



2.Типи брандмауерів
Брандмауери класифікують наступним чином:

a) Пакетні фільтри

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

б) Сервери прикладного рівня

Сервери прикладного рівня використовують сервери конкретних сервісів - TELNET, FTP, HTTP і т. ін. (proxy server), які запускаються на брандмауері і пропускають через себе весь трафік, що належить до даного сервісу. Таким чином, між клієнтом і сервером утворюються два з'єднання: від клієнта до брандмауера і від брандмауера до місця призначення. Повний набір підтримуваних серверів розрізняється для кожного конкретного брандмауера. Використання серверів прикладного рівня дозволяє вирішити важливу задачу - аутентифікації на рівні застосування користувача. При описі правил доступу використовуються такі параметри як назва сервісу, ім'я користувача, допустимий часовий діапазон використання сервісу, комп'ютери, з яких можна користуватися сервісом, схеми аутентифікації. Сервери протоколів прикладного рівня дозволяють забезпечити найвищий рівень захисту - взаємодія із зовнішнім світом реалізується через невелике число прикладних програм, які повністю контролюють весь вхідний і вихідний трафік.



Проксі-сервер прикладного рівня, як це випливає з його назви, вміє «втручатися» у процедуру взаємодії клієнта і сервера по одному з прикладних протоколів, наприклад того ж HTTP, HTTPS, SMTP / POP, FTP або telnet. Щоб виконувати роль посередника на прикладному рівні, проксі-сервер повинен «розуміти» сенс команд, «знати» формати і послідовність повідомлень, якими обмінюються клієнт і сервер відповідної служби. Це дає можливість проксі-серверу проводити аналіз вмісту повідомлень, робити висновки про підозрілий характер того чи іншого сеансу.

в) Сервери рівня з'єднання

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



Проксі-сервер рівня з'єднань виконує свою посередницьку місію на транспортному рівні, контролюючи TCP-з'єднання. Очевидно, що працюючи на більш низькому рівні, проксі-сервер має набагато менший «інтелект» і має менше можливостей для виявлення та попередження атак. Однак він має одну дуже важливу перевагу перед проксі-сервером прикладного рівня – універсальність, тобто він може бути використаний будь-якими додатками, що працюють по протоколу TCP (а в деяких випадках і UDP).

Прикладом проксі-сервера даного типу є розроблений досить давно, але все ще широко застосовуваний сервер SOCKS (Від SOCKetS).


3. Міжмережевий екран Netfilter/iptables
Netfilter - міжмережевий екран (брандмауэр), вбудований в ядро Linux починаючи з версії 2.4.

Iptables - назва утиліти користувача (запускається із командного рядка), для керування системою netfilter. За її допомогою адміністратори створюють і змінюють правила, які керують фільтрацією і перенаправленням пакетів.

Розглянемо схему роботи Netfilter/iptables (рис. 1).



Мережеві пакети надходять в мережевий інтерфейс, налаштова-ний на стек TCP/IP, і після деяких простих перевірок ядром (наприклад, підрахунок контрольної суми) проходять послідовність ланцюжків (chain) (позначені пунктиром). Пакет обов'язково проходить первинний ланцюжок PREROUTING. Після ланцюжка PREROUTING, у відповідності з таблицею маршрутизації, аналізується адреса призначення пакету і визначається, куди він далі буде направлений (в який ланцюжок). Якщо пакет не адресовано локальній системі (в TCP-пакеті поле "адреса отримувача" - не локальна система), то він направляється в ланцюжок FORWARD, якщо пакет адресований локальній системі, то він спрямовується в ланцюжок INPUT і після проходження INPUT віддається локальныим демонам/процесам. Після обробки локальною програмою, при необхідності, формується відповідь. Пакет, який відправляється локальною системою в відповідності з правилами маршрутизації направляється на відповідний маршрут (хост із локальної мережі або маршрутизатор) і також направляється в ланцюжок OUTPUT. Після ланцюжка OUTPUT (або FORWARD, якщо пакет був адресований іншому хосту) пакет знову звіряється з правилами маршрутизації і відправляється в ланцюжок POSTROUTING.

Рисунок 1 - Схема роботи Netfilter/iptables



Кожний ланцюжок, який проходить пакет, складається із набору таблиць (table) (позначені овалами). Таблиці в різних ланцюжках мають схожу назву, але ніяким чином між собою не пов'язані. Наприклад, таблиця nat в ланцюжку PREROUTING ніяк не зв'язана с таблицею nat в ланцюжку POSTROUTING. Кожна таблиця складається із впорядкованого набору правил. Кожне правило містить умову, якій повинен відповідати пакет і дії до пакету, коли пакет відповідає цій умові.

Проходячи через низку ланцюжків, пакет послідовно проходить кожну таблицю (у вказаному на рисунку порядку). В кожній таблиці послідовно звіряється з кожним правилом (точніше - з кожним набором умов/критеріїв в правилі), і якщо пакет відповідає якому-небудь критерію, то виконується задана дія над пакетом. При цьому в кожній таблиці (крім таблиці користувача) присутня задана за замовчуванням політика. Ця політика визначає дію над пакетом у випадку, якщо пакет не відповідає жодному правилу в таблиці. Частіше за все - це дія ACCEPT, щоб прийняти пакет і передати в наступну таблицю або DROP - щоб відкинути пакет. В випадку, якщо пакет не буде відкинутий, він завершує свою подорож по ядру системи і відправляється в мережевий інтерфейс, який відповідає правилам маршрутизації.


Ланцюжки netfilter:

PREROUTING — для первинної обробки вхідних пакетів;

INPUT — для вхідних пакетів, адресованих безпосередньо локальному комп'ютеру;

FORWARD — для пакетів, адресованих іншим комп'ютерам;

OUTPUT — для пакетів, створених локальним комп'ютером;

POSTROUTING— для завершальної обробки пакетів, що відправляються;

За допомогою утиліти iptables також можна створювати і відкидати власні ланцюжки .

Ланцюжки організовані в 4 таблиці:

raw — пакет проходить цю таблицю до передачі системі визначення стану. Використовується рідко, наприклад для маркування пакетів, які не опрацьовуються системою визначення стану. Для цього в правилі вказується дія NOTRACK. Присутня в ланцюжках PREROUTING і OUTPUT.

mangle — містить правила модифікації IP-пакетів (зазвичай полів заголовку). Крім того, підтримуються дії TTL, TOS, і MARK (для модифікації полів TTL і TOS, і для модифікації маркерів пакету). Рідко необхідна і може бути небезпечна. Присутня у всіх п’яти стандартних ланцюжках.

nat — призначений для підміни адреси відправника або отримувача. Дану таблицю проходить тільки перший пакет з потоку, трансляція адрес або маскування (підміна адреси відправника або отримувача) застосовується до всіх наступних пакетів в потоці автоматично. Підтримує дії DNAT, SNAT, MASQUERADE, REDIRECT. Використовується в ланцюжках PREROUTING, OUTPUT, и POSTROUTING.

filterосновна таблиця, використовується по замовчуванню, якщо назва таблиці не вказана. Використовується для фільтрації пакетів в ланцюжках INPUT, FORWARD, и OUTPUT.

Безпосередньо для фільтрації пакетів використовуються таблиці



filter.
4.Конфігурування брандмауера
Для забезпечення фільтрації пакетів в брандмауері при використанні ядра, починаючи з версії Linux 2.4 застосовується інструментальний засіб iptables.

Фільтр пакетів – це програма, яка продивляється заголовки пакетів, що надходять, і вирішує подальшу долю всього пакету. Фільтр може відкинути пакет (DROP), прийняти (ACCEPT) пакет, або виконати більш складну його обробку.

В Linux фільтр пакетів вбудований в ядро (як модуль, або як невід’ємна частина ядра), якщо при конфігуруванні ядра використовувалася опція CONFIG_NETFILTER.

Утиліта iptables взаємодіє з ядром і вказує йому, які пакети підлягають фільтруванню. За допомогою саме цієї програми можна керувати фільтром пакетів. Утиліта iptables вставляє і видаляє правила в/із таблиці фільтру пакетів ядра. Це означає, що всі зміни в таблиці фільтру, зроблені за допомогою утиліти iptables ,будуть втрачені після перезавантаження. Для збереження виконаних змін після перезавантаження використовуються утиліти iptables-save и iptables-restore, які зберігають і відновлюють правила фільтрування.

За допомогою команди iptables можна вводити ланцюжки правил, які дозволяють керувати проходженням пакетів до системи. Програма iptables замінила утиліту ipchains, що застосовувалася в більш ранніх версіях Linux. Проте можна продовжувати використовувати команди ipchains і команди ipfwadm, що застосовувалися раніше, завантаживши модулі ipchains.o або ipfwadm.o, передбачені в програмному забезпеченні Netfilter.

Принцип фільтрації такий: коли пакет проходить через ядро, він

перевіряється на відповідність одному або кільком правилам. При цьому в залежності від цих правил він може бути пропущений (ACCEPT), відкинутий (DROP) або відхилений (REJECT). Крім цього, він може бути відправлений на перевірку в інший ланцюжок правил. Факт проходження пакету, який підпадає під дію певного правила, може бути відмічений в syslog. Правила можуть виконувати перевірку адреси/порту відправника/отримувача, протоколу, прапорців TCP і т.д. (про це далі).

До речі, REJECT відрізняється від DROP тим, що замість простого знищення пакету його відправнику надсилається повідомлення про недоступність комп'ютера отримувача. Це створює додатковий трафік, але в окремих випадках спонукає відправника припинити відправляти пакети (DROP розцінюється відправником як таймаут, тобто пакети просто відправляються і підтвердження не приходять, а при REJECT відправник отримає повідомлення про те, що комп'ютер отримувача тимчасово не доступний або не існує).




5.Правила IP-таблиць
Ядро запускається з трьома списками правил в таблиці фільтру пакетів; ці списки називаються firewall chains або просто chains (ланцюжки). Ці наперед визначені ланцюжки називаються так: INPUT, OUTPUT і FORWARD. Кожний ланцюжок – це список правил, які визначають дію з пакетами, які вони аналізують. Ці дії називаються метою правила. Метою може бути і перехід на інший (визначений користувачем) ланцюжок в цій же таблиці.

Ланцюжки взаємодіють приблизно тактм чином (рис. 2):



Рисунок 2 – Схема ланцюжків фільтру пакету

Три овали представляють три ланцюжки. Коли пакет надходить в певний ланцюжок, пакет досліджується для того, щоб визначити, що робити з пакетом в подальшому. Якщо ланцюжок «говорить», що пакет треба відкинути (DROP), пакет знищується, якщо ланцюжок дозволяє проходження пакету (ACCEPT), пакет проходить до наступного кроку по схемі. Ланцюжок - це набір визначених правил. Кожне правило говорить: «якщо заголовок пакету має такий вигляд, то потрібно виконати такі дії». Якщо пакет не відповідає жодному правилу, застосовується правило, передбачене за замовчуванням. Якщо не вказане інше, за замовчуванням застосовується правило "приймати всі пакети"; це правило мається на увазі у всіх прикладах даного розділу. Для створення більш чутливих ланцюжків часто застосовується також правило «відкидати всі пакети», що не відповідають жодному правилу ланцюжка.

Коли пакет приходить, наприклад, через Ethernet карту, ядро спочатку переглядає адресу призначения пакету: це називаеться «маршрутизацією».

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

Якщо пакет адресований іншій машині, і якщо в ядрі відключена можливість маршрутизації, або якщо ядро не знає, як цей пакет маршрутизувати, пакет відкидається. Але якщо маршрутизація дозволена, і пакет адресований іншому мережевому інтерфейсу, пакет прямує прямо в ланцюжок FORWARD; якщо він дозволений (ACCEPT), він буде маршрутизований.

Нарешті, програма, яка виконується на самій машині, може сама відправляти пакети. Такі пакети будуть проходити через ланцюжок OUTPUT: якщо ланцюжок дозволяє їх (ACCEPT), то пакет продовжує свой шлях до інтерфейсу, якому він адресований.


6. Використання iptables
Робота починається з трьома вбудованими ланцюжками INPUT, OUTPUT і FORWARD, які не видаляються. Розглянемо дії, які можна виконувати з ланцюжками iptables.
Створити новий ланцюжок (-N).

Видалити пустий ланцюжок (-X).

Змінити правило по замовчуванню для вбудованого ланцюжка (-P).

Переглянути правила в ланцюжку (-L).

Очистити всі правила в ланцюжку (-F).

Обнулити лічильники пакетів і байтів у всіх правилах в ланцюжку (-Z).


Розглянемо команди, які використовуються в правилах ланцюжків.
Додати нове правило до ланцюжка (-A).

Вставити нове правило в ланцюжок (-I).

Замінити правило в ланцюжку (-R).

Видалити правило в ланцюжку (-D).

Видалити перше правило в ланцюжку, що відповідає вказаному (-D).
В командах iptables імена ланцюжків мають бути введені літерами верхнього регістру.

Відразу за командою повинна бути вказана назва ланцюжка, до якого застосовується правило: це може бути ланцюжок INPUT, OUTPUT, FORWARD або ланцюжок, визначений користувачем. Далі перераховуються різні опції, які позначають дії, що будуть виконуватись. Одні опції вказують на критерії, які аналізуються в правилі (наприклад, адреси відправника та отримувача пакету -s, -d, інші визначають дію, яка повинна бути виконана з пакетом (-j). Деякі основні опції перераховані нижче.

В наступному прикладі користувач додає до ланцюжка INPUT правило: приймати всі пакети з адресою джерела 192.168.1.55. Опція -s визначає адресу відправника, вказану в пакеті, а опція -j визначає мету (дію). Як правило, в простому брандмауері використовуються дії ACCEPT і DROP. Дія ACCEPT дозволяє пропустити пакет, а дія DROP вимагає його не пропускати. Згідно приведеному нижче правилу всі отримані (INPUT) пакети з адресою джерела (-s), що співпадає з 192.168.1.55, будуть прийняті і пропущені через брандмауер.


iptables -A INPUT -s 192.168.1.55 -j ACCEPT
7. Критерії iptables
Розглянемо критерії, що дозволяють виділяти пакети. Їх можна розділити на п’ять груп. Перша − загальні критерії, які можуть застосовуватися в будь-яких правилах, друга – TCP-критерії, які застосовуються тільки до TCP-пакетів, третя – UDP-критерії, які застосовуються тільки до UDP-пакетів, четверта – ICMP-критерії для роботи з ICMP-пакетами, і, накінець, п’ята – спеціальні критерії, такі як state, owner, limit та ін.
7.1. Загальні критерії
Критерій Призначення

-p [!] [--sport порт] протокол - один з протоколів TCP, UDP, ICMP або всі протоколи: ALL Параметр порт дозволяє вказати порт

-s [!] адреса мережева адреса джерела, що перевіряється.

-d [!] адреса мережева адреса отримувача, що перевіряється.

[!] ім’я ім’я вхідного мережевого інтерфейсу (наприклад eth0)

-j дія(мета) [порт]Дія (мета) правила (для мети REDIRECT повинен бути вказаний порт [порт])

-o [!] ім’я ім’я вихідного мережевого інтерфейсу (наприклад eth1)

-m модуль використовуваний модуль – наприклад state.
Опції модуля state, наприклад NEW, INVALID, RELATED і ESTABLISHED застосовуються для розпізнавання стану пакету.

Символ ! використовується для логічної інверсії опції, перед якою він стоїть.

7.2. TCP-критерії
Критерій Призначення

--sport, --source-port порт, з якого був відправлений пакет.

[!] Можна вказуватия номер порту або назву

мережевої служби.


--dport, --destination-port порт або діапазон портів, на який пакет

[!] адресований.
--tcp-flags [!] визначає маску і прапорці tcp-пакету.
--syn [!] критерію задовольняють пакети з

встановленим прапорцем SYN і

скинутими прапорцями ACK и FIN

--tcp-option [!] перевіряється TCP-параметр пакету.
7.3. UDP-критерії
--sport, --source-port !] аналогічно sport в TCP-критерії

[!]

--dport, --destination-port аналогічно dport в TCP-критерії

[!]

7.4. ICMP-критерії
--icmp-type [!] тип повідомлення ICMP, визначається

номером або іменем. Числові значення

визначаються в RFC 792. Щоб отримати

список імен ICMP-значень треба

виконати команду

iptables --protocol icmphelp.
7.5. Явні критерії
Перед використанням деяких критеріїв програми, які реалізують їх виконання, мають бути завантажені явно, за допомогою ключа -m або --match. Так, наприклад, якщо ми збираємося використати критерий state, то мы повинні явно вказати це в рядку правила: -m state перед критерієм, що використовується.

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

Перелічимо явні критерії:

state - перевіряється стан з'єднання (state). Відомі 4 стани:

INVALID, ESTABLISHED, NEW и RELATED.

limit - встановлюється граничне число пакетів в одиницю

часу, яке може пропустити правило.



mac - використовується для перевірки MAC-адреси

мережевого вузла, яку передав пакет.



mark - певним чином “помічає” пакети. Використовується

з різною метою, наприклад для обмеження

трафіка і фільтрування.

multiport - дозволяє вказувати в тексті правила кілька портів і

кілька діапазонів портів.



owner - використовується для перевірки “власника”

пакетів.


tos - використовується для проведення перевірки бітів

поля TOS. TOS -- Type Of Service це 8-ми бітне

поле в заголовку IP-пакету. Модуль має бути

завантажений явно, з ключем -m tos.

ttl - (time to live) є числове поле в IP-заголовку. При

проходженні чергового маршрутизатора, це число

зменшується на 1. Якщо число стає рівним нулю,

то відправнику пакету буде передане ICMP- пові-

домлення типу 11 з кодом 0 (TTL equals 0 during

transit) або з кодом 1 (TTL equals 0 during

reassembly) . Для використання цього критерію

необхідно явно завантажити модуль ключем -m ttl.


7.6. Дії и переходи
Дії і переходи повідомляють правилу, що необхідно виконати, якщо пакет відповідає заданому критерію. Частіше за все застосовуються дії ACCEPT и DROP.

Коротко розглянемо поняття переходів.

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

Наприклад, створимо ланцюжок tcp_packets в таблиці filter за допомогою команды



Iptables -N tcp_packets

Тепер ми можемо виконати перехід на цей ланцюжок :



iptables -A INPUT -p tcp -j tcp_packets
Це правило читається так. Зустрівши пакет протоколу tcp, iptables виконає перехід на ланцюжок tcp_packets і продовжить рух пакету по цьому ланцюжку. Якщо пакет досягне кінця ланцюжка, то він буде повернутий в ланцюжок INPUT і рух пакету продовжиться з правила, що слідує за правилом, яке викликало перехід. Якщо до пакету в вкладеному ланцюжку буде застосована дія ACCEPT, то автоматично пакет буде вважатися прийнятим і в ланцюжку, з якого був виклик, подальший рух буде припинений. Пакет може продовжувати рух по іншим ланцюжкам в інших таблицях.

Інші дії:
Дія DNAT - використовується для перетворення адреси

призначення в IP-заголовку пакета. Якщо

пакет підпадає під критерій правила, що

виконує DNAT, то в цьому пакеті, і у всіх

наступних пакетах із цього потоку,

адреси призначення будуть перетворені і

передані на певні пристрої, хост або

мережу.

Дія LOG - дія, яка призначена для журналювання



окремих пакетів і подій. В журнал можуть

заноситися заголовки IP- пакетів і інща

інформація, яка потім може бути

прочитана за допомогою dmesg або

syslogd, або за допомогою інших програм.

Дія MARK - використовується для установки "міток"



для певних пакетів. Ця дія може виконува-

тись тільки в межах таблиці mangle.

Дія MASQUERADE - ця дія в основі своїй аналогічна дії



SNAT, тільки не має ключа --to-source.

Причиною того, що маскарадинг може

працювати, наприклад, з dialup-

підключенням або з DHCP, тобто в тих

випадках, коли IP-адреса призначається

динамічно. Якщо підключення

динамічне, то потрібно використовувати

маскарадинг, якщо ж підключення

статичне, то краще використовувати

дію SNAT.

Дія MIRROR - в результаті дії MIRROR в пакеті поля



source і destination міняються місцями

(invert the source and destination fields) і

пакет відправляється в мережу.

Застосовується тільки для експериментів

і демонстрацій.

Дія QUEUE - ставить пакет в чергу на обробку процесу



користувача. Дія може бути використана

для потреб обліку, проксування або

додаткової фільтрації пакетів.

Дія REDIRECT - виконує перенаправлення пакетів і



потоків на інший порт тієї ж самої

машини. REDIRECT може використо-

вуватися тільки в ланцюжках

PREROUTING и OUTPUT таблиці nat.

Дія REJECT - використовується, як правило, в тих же



випадках, що і DROP, але на відміну

від DROP, команда REJECT повідомляє

хост, який передав пакет, про помилку.

Дія RETURN - зупиняє рух пакету по поточному



ланцюжку правил і виконує

повернення в ланцюжок, з якого був

перехід в поточний ланцюжок, якщо

поточний ланцюжок був вкладений,

або, якщо поточний ланцюжок лежить на

самому верхньому рівні (наприклад,

INPUT), то до пакету буде застосована

політика по замовчуванню.

Дія SNAT - використовується для перетворення



мережевих адрес (Source Network Address

Translation), тобто заміну IP-адреси

відправника в IP-заголовку пакету

Дія TOS - використовується для встановлення бітів



в полі Type of Service IP-заголовку. Поле

TOS містить 8 біт, які використовуються

для маршрутизації пакетів.

Дія TTL - використовується для модифікації поля



Time To Live в IP-заголовку.

Дія ULOG - надає можливість журналювання пакетів



в просторі користувача. Ця дія замінює

традиційну дію LOG, що базується на

системному журналі.
8. Сценарії IP-таблиць
Команди iptables можна вводити в командному рядку командного інтерпретатора. Проте після вимкнення системи ці команди будуть втрачені. Для збереження введених команд їх треба помістити в сценарій. Можна створити сценарій /etc/iptables.rules і помістити в нього команди iptables. З часом можна буде застосовувати сценарій iptables-save для виводу правил на стандартний пристрій виводу.

Тепер у вас достатньо інформації для створення простого сценарію IP-таблиць, що дозволяє встановити основні засоби захисту окремого комп'ютера, підключеного до Internet. В наступному сценарії застосову-ється простий процес фільтрації за допомогою IP-таблиць для захисту окремого комп'ютера від спроб злому ззовні. Спочатку встановлюється ціль ACCEPT для вхідних правил IP-таблиць. Це означає, що якщо пакет не відповідає жодному критерію правил, згідно якому він повинен бути знищений, пакет буде пропущений. Потім відкидаються спроби злому по методу імітації IP-адреси, а також будь-які спроби ініціювати з'єднання ззовні (пакети SYN). До того ж спроби створити з'єднання ззовні реєструються в журналі.

# В комп'ютері з адресою 192.168.1.1 застосовується

# пристрій Ethernet eth0

# Відключити маршрутизацію IP-пакетів

echo 0 > /proc/sys/net/ipv4/ip_forward

# Видалити правила ланцюжка

iptables -F INPUT

# Встановити вживану за умовчанням ціль ланцюжка INPUT iptables -P INPUT ACCEPT

# Імітація локальної IP-адреси; відкинути всі

# зовнішні пакети з внутрішньою адресою

iptables -A INPUT -j DROP -i ethO –s 192.168.1.1

# Імітація локальної IP-адреси; відкинути всі

# зовнішні пакети з адресою локального хоста

iptables -A INPUT -j DROP -i ethO –s 127.0.0.0/255.0.0.0

iptables -A INPUT -m state -state NEW -j DROP -i ethO -p tcp

# Заборонити ініціалізацію з'єднань ззовні і

# дозволити використання раніше встановлених

# з'єднань



iptables -A INPUT -m state -state NEW –i ethO -j DROP

# Включити перенаправлення IP

echo 1 > /proc/sys/net/ipv4/ip_forward
Спочатку в цьому сценарії необхідно очистити поточні IP-таблиці за допомогою команди очищення (опція -F). На той час, поки відбувається ввод в комп'ютер прав і таблиці, повинна бути також відключена маршрутизація IР-пакетів
echo 0>/proc/sys/net/ipv4/ip_forward
Всі існуючі правила ланцюжків INPUT відміняються, а потім по замовчуванню встановлюється дія ACCEPT. Для установки цілі, яка використовується в таблиці по замовчуванню, служить опція . Ціль, вказана за замовчуванням, виконується, якщо пакет не відповідає ніякому іншому правилу. В даному прикладі як загальна ціль для таблиць INPUT застосовується ACCEPT. Будь-які пакети, що не відповідають ніякому іншому правилу таблиці INPUT, будуть прийняті і пропущені в систему.
# Видалити правила ланцюжка

iptables -F INPUT

# Встановити використовувану за замовчуванням мету ланцюжка

iptables -P INPUT ACCEPT
Одним із способів захисту системи від імітації локальних IP-адрес системи в будь-якому пакеті є перевірка всіх адрес джерела на предмет того, чи не вказана в них IP-адреса вашого власного комп'ютера. В даному прикладі буде відкинутий будь-який пакет, джерелом адреси якого є адреса вашої власної системи. Та ж стратегія може застосовуватися і до локального хоста. Будь-який пакет, що надходить ззовні по інтерфейсу ethO, в якому як джерело адреси вказаний локальний хост, буде знехтуваний. Це — пакет, відправлений сторонньою особою, який маскується під власний пакет локального хоста.
# Імітація локальних IP-адрес; відкинути всі зовнішні пакети з

# внутрішньою адресою

iptables -A INPUT -j DROP -i ethO -s 192.168.1.1

# Імітація локальних IP-адрес; відкинути всі зовнішні пакети

# з адресою локального хоста

iptables -A INPUT -j DROP -i ethO -s 127.0.0.0/255.0.0.0
Щоб виключити можливість для сторонніх осіб ініціювати доступ до системи, можна створити правило, що виключає надходження пакетів SYN (для нових з'єднань) ззовні з використанням опції —state з ключовим словом NEW.

Наступна команда дозволяє відкинути всі спроби встановлення нових з'єднань через інтерфейс ethO (припускається, що комп'ютер підключений до Internet або локальної мережі тільки через інтерфейс ethO).
iptables -A INPUT -m state —state NEW –j DROP -i ethO -p tcp
Після встановлення всіх правил знову включається маршрутизація IP-пакетів:
echo 1 > /proc/sys/net/ipv4/ip_forward

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

Однією з найзручніших є функція розширення state, яка дозволяє легко знаходити в пакеті інформацію про пройдений маршрут. Для її використання потрібно спочатку вказати модуль state за допомогою опції -m state. Потім можна застосувати опцію —state. Після цього можна вказувати в таблицях будь-який з наступних критеріїв:

Опція Призначення

NEW Пакет, який створює нове з'єднання;

ESTABLISHED Пакет, який належить до існуючого з'єднання;

RELATED Пакет, який пов'язаний з існуючим з'єднанням, але

не належить до нього. Такими є повідомлення про

помилки ICMP або пакети протоколу встановлення

з'єднання FTP.

В наступному прикладі показано, як можна знищити будь-які пакети, які є спробою створити нове з'єднання через інтерфейс eth0.


iptables –A INPUT –m state –state NEW –i eth0 –j DROP

Для отримання списку правил, що зберігаються в IP-таблицях, може застосовуватися опція -L. Після додавання опції —verbose з'явиться докладний лістинг. В наступному прикладі показаний перелік правил, встановлених після виконання приведеного вище сценарію myfilter.


# iptables -L

Chain INPUT (policy ACCEPT 2 расkets, 206 bytes)

target prot opt in source destination

DROP all -- ethO any turtle.mytrek.com anywhere

DROP all — ethO any 127.0.0.0/8 anywhere

DROP tcp -- ethO any anywhere anywhere state NEW

Chain FORWARD (policy ACCEPT 773 расkets, 318322 bytes) target prot opt in source destination

Chain OUTPUT (policy ACCEPT 88 расkets, 11508 bytes) target prot opt in source destination
9. Приклади використання iptables
1. Відкинути всі пакети, отримані з вузла www.lib.ru.
iptables -A INPUT -s www.lib.ru -j DROP
Правила IP-таблиць зазвичай застосовуються до конкретного мережевого інтерфейсу, такого як інтерфейс Ethernet, який використовується для підключення до Internet. У відокремленій системі, що підключена до Internet, зазвичай застосовуються два інтерфейси: з'єднання Internet з інтерфейсом локального хоста і внутрішні з'єднання між процесами на комп'ютері. Посилання на інтерфейс для Internet виконується з використанням імені пристрою для цього інтерфейсу. Наприклад, на карту Ethernet з ім'ям пристрою /dev/eth0 можна посилатися, використовуючи ім'я eth0. Модем, що працює по протоколу РРР, з ім'ям пристрою /dev/ppp0, матиме ім'я ррр0. В правилах IP-таблиць для позначення вхідного інтерфейсу застосовується опція -i; цю опцію можна використовувати тільки у вхідних і перенаправляючих ланцюжках. Опція -о вказує на вихідний інтерфейс і може застосовуватися тільки для вихідних і перенаправляючих ланцюжків. Тому правила можуть застосовуватися до пакетів, що входять в конкретні мережеві пристрої і виходять з них. В наступному прикладі перше правило містить посилання на пристрій Ethernet (eth0), а друге — на локальний хост.
# iptables -A INPUT -j DROP -i eth0 –s 192.168.44.87

# iptables -A INPUT -j ACCEPT -i lo
2. Показати статус iptables

# iptables -L -n -v

Результат виконання команди для не активного брандмауера:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination
Результат виконання команди для активного брандмауера:
Chain INPUT (policy DROP 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID

394 43586 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

93 17292 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0

1 142 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)

pkts bytes target prot opt in out source destination

0 0 ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0

0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID

0 0 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU

0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

0 0 wanin all -- vlan2 * 0.0.0.0/0 0.0.0.0/0

0 0 wanout all -- * vlan2 0.0.0.0/0 0.0.0.0/0

0 0 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT 425 packets, 113K bytes)

pkts bytes target prot opt in out source destination

Chain wanin (1 references)

pkts bytes target prot opt in out source destination

Chain wanout (1 references)

pkts bytes target prot opt in out source destination

Тут:


-L : вивести список правил.

-v : вивести додаткову інформацію. Ця опція показує ім'я інтерфейсу, опції, TOS маски.

-n : вивести IP- адресу і порт числами (не використовуючи DNS- сервери для перетворення імен. Це пришвидшує відтворення).
3. Вивести список правил з номерами рядків

# iptables -n -L -v --line-numbers


Приклад виводу:

Chain INPUT (policy DROP)

num target prot opt source destination

1 DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID

2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy DROP)

num target prot opt source destination

1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

2 DROP all -- 0.0.0.0/0 0.0.0.0/0 state INVALID

3 TCPMSS tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU

4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

5 wanin all -- 0.0.0.0/0 0.0.0.0/0

6 wanout all -- 0.0.0.0/0 0.0.0.0/0

7 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT)

num target prot opt source destination

Chain wanin (1 references)

num target prot opt source destination

Chain wanout (1 references)

num target prot opt source destination

Номери рядків можна використати для того, щоб додавати нові правила.
3. Показати INPUT або OUTPUT ланцюжки правил.
# iptables -L INPUT -n -v
# iptables -L OUTPUT -n -v --line-numbers
4. Видалити правила брандмауера.

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


# iptables -L INPUT -n --line-numbers


# iptables -L OUTPUT -n --line-numbers
# iptables -L OUTPUT -n --line-numbers | less
# iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1

Отримаємо список пронумерованих правил . Наприклад, щоб видалити правило в рядку 3, потрібно виконати таку команду:


# iptables -D INPUT 3
Видалимо правило в таблиці INPUT, яке містить IP- адресу джерела (202.54.1.1) :
# iptables -D INPUT -s 202.54.1.1 -j DROP
5. Додати правило в брандмауер.

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


# iptables -L INPUT -n --line-numbers

Наприклад, такий:


Chain INPUT (policy DROP)

num target prot opt source destination

1 DROP all -- 202.54.1.1 0.0.0.0/0

2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED

Щоб вставити правило між 1 і 2 рядком, виконаємо команду:
# iptables -I INPUT 2 -s 202.54.1.2 -j DROP
Перевіримо , чи з'явилося правило в ланцюжку:
# iptables -L INPUT -n --line-numbers
Отримаємо:

Chain INPUT (policy DROP)

num target prot opt source destination

1 DROP all -- 202.54.1.1 0.0.0.0/0

2 DROP all -- 202.54.1.2 0.0.0.0/0

3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED


6. Зберігаємо правила брандмауера.

Через iptables-save:


# iptables-save > /etc/iptables.rules
7. Відновлюємо правила брандмауера.

Через iptables-restore:


# iptables-restore < /etc/iptables.rules
8. Встановлюємо політики по замовчуванню

Щоб заблокувати увесь трафік:


# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
# iptables -L -v –n
Після виконання цих команд жодний пакет не залишить даний хост.

9. Блокувати тільки вхідні з'єднання.

Щоб заблокувати всі не ініційовані нами вхідні пакети, але дозволити вихідний трафік:
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -L -v –n
Вихідні пакети і ті пакети, які були збережені в рамках вже встановлених сесій дозволені.

10. Відкидати адреси ізольованих мереж в публічній мережі:


# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Список IP-адрес для ізольованих мереж:
10.0.0.0/8 -j (A)
172.16.0.0/12 (B)
192.168.0.0/16 (C)
224.0.0.0/4 (MULTICAST D)
240.0.0.0/5 (E)
127.0.0.0/8 (LOOPBACK)
11. Блокування окремої IP- адреси.

Щоб заблокувати IP-адресу 1.2.3.4:


# iptables -A INPUT -s 1.2.3.4 -j DROP
# iptables -A INPUT -s 192.168.0.0/24 -j DROP
12. Заблокувати вхідні запити порту.

Щоб заблокувати всі вхідні запити порту 80:


# iptables -A INPUT -p tcp --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
Щоб заблокувати запит порту 80 з адреси 1.2.3.4:
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
13. Заблокувати запити на вихідну IP- адресу.

Щоб заблокувати конкретний домен, визначимо його адресу:


# host -t a facebook.com
Відповідь: facebook.com has address 69.171.228.40

Знайдемо CIDR для 69.171.228.40:


# whois 69.171.228.40 | grep CIDR
Відповідь: CIDR: 69.171.224.0/19

Заблокуємо доступ на 69.171.224.0/19:


# iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP
Також можна використовувати ім'я домену для блокування:

# iptables -A OUTPUT -p tcp -d www.fаcebook.com -j DROP


# iptables -A OUTPUT -p tcp -d fаcebook.com -j DROP
14. Записати подію і заблокувати.

Щоб записати в журнал рух пакетів перед блокуванням, додамо нове правило:

# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Перевіримо журнал (по замовчуванню /var/log/messages):

# tail -f /var/log/messages


# grep -i --color 'IP SPOOF' /var/log/messages
15. Заблокувати або дозволити трафік з певних MAC- адрес:
# iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
## *дозволити тільки для TCP port # 8080 з mac-адреси 00:0F:EA:91:04:07 * ##
# iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT
16. Дозволити або заборонити ICMP Ping запити.

Щоб заборонити:


# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
Дозволити для певних мереж / хостів:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
Дозволити тільки частину ICMP-запитів:
### ** припускається, що политики по замовчуванню для вхідящих пакетів встановлені в DROP ** ###
# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT

## ** дозволимо відповідати на запит ** ##


# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT


17. Відкрити діапазон портів.

# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

18. Відкрити діапазон адрес:
## дозволити підключення до порту 80 (Apache), якщо адреса в діапазоні від 192.168.1.100 до 192.168.1.200 ##

# iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT

## приклад для nat ##

# iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25


19. Закрити або відкрити стандартні порти.

Замінити ACCEPT на DROP, щоб заблокувати порт:


## ssh tcp port 22 ##
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT

## cups (printing service) udp/tcp port 631 для локальної мережі ##


iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT

## time sync via NTP для локальної мережі (udp port 123) ##


iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

## tcp port 25 (smtp) ##


iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

# dns server ports ##


iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

## http/https www server port ##


iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

## tcp port 110 (pop3) ##


iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT

## tcp port 143 (imap) ##


iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT

## Samba file server для локальної мережі ##


iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT

## proxy server для локальної мережі ##


iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT

## mysql server для локальної мережі ##


iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
20. Обмежити кількість паралельних з'єднань з сервером для однієї адреси.

Для обмеження використовується connlimit модуль. Щоб дозволити тільки 3 ssh з'єднання для одного клієнта:


# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Встановити кількість запитів HTTP до 20:
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP
10. Адаптація
Налаштування локального DNS

У зв’язку з тим, що в нас відключена система DNS, завдання можна виконувати через локальну систему доменних імен. Налагодити її можна за допомогою файлу /etc/hosts

Формат данних, що будуть збережені у файлі, має такий вигляд:

# коментарі

IP-адреса машини доменне ім’я машини
Наприклад:

# моя локальна DNS адреса

masha.kiev.ua

# адреса сусіда

10.15.17.85 vovan.ntu-kpi.com.ua


Збереження результатів

Для того, щоб зберегти результати налаштування вашої таблиці, в /home/student/ створіть директорію з вашим призвищем. В ній створіть директорію lab2.

Для збереження результатів використовується утиліта iptables-save.

Наберіть:



iptables-save > /home/student/вашепрізвище/ lab2/iptables.rules
Відкрийте файл редактором. Ви можете відредагувати його.

Для того, щоб внести відредаговані правила в ip-tables використовується утиліта iptables-restore.

Введіть:
iptables-restore < /home/student/ваше прізвище /lab2/iptables.rules
Для того, щоб ваші правила для iptables діяли відразу після завантаження Linux, їх треба розмістити в /etc/rc.d/init.d/iptables

Завдання
Завдання 1. Дозволити приймати пакети лише з хоста scs.ntu-kpi.kiev.ua.

Завдання2. Заборонити з’єднання з вашою машиною з комп’ютерів в локальній мережі.

Завдання 3. Відключити відклик на ICMP запити на вашій машині.

Завдання 4. Закрити всі порти, крім SMTP.

Завдання 5. Показати викладачу. Ознайомитись з загрузочним файлом iptables (самостійно).

1.Дозволити приймати пакети лише з вибраного хосту, всім іншим заборонити.

# iptables -A INPUT -s scs.ntu-kpi.kiev.ua -j ACCEPT

# iptables -A INPUT -j DROP


2. Блокувати всі не ініційовані нами вхідні пакети, але дозволити вихідний трафік:


# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

3. Заборонити ICMP виклики на нашій машині:


# iptables -A OUTPUT -p icmp -j DROP
4. Дозволити або заборонити ICMP Ping запити:

Щоб заборонити:



# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DR

Дозволити для певних мереж / хостів:

# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

Дозволити певні ICMP запити:


### ** припускається, що політики за замовчуванням для вхідних пакетів встановлені в DROP ** ###


# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
## ** дозволяємо відповідати на запит ** ##
# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Ланцюжок icmp дозволяє коректні icmp пакети, зокрема тільки ping.

echo "in_icmp"

$IPTABLES -A in_icmp -p icmp -m state --state NEW --icmp-type echo-request -j ACCEPT

$IPTABLES -A in_icmp -p icmp -m state --state NEW --icmp-type time-exceeded -j ACCEPT

$IPTABLES -A in_icmp -p icmp -m state --state NEW --icmp-type destination-unreachable -j ACCEPT

$IPTABLES -A in_icmp -p icmp -s 0/0 --icmp-type 8 -j ACCEPT

$IPTABLES -A in_icmp -p icmp -s 0/0 --icmp-type 11 -j ACCEPT


5. Закрити всі порти, крім 25 (smtp), 80 (http), 443 (https-http з шифруванням)- Linux
Записуємо перелік правил на вхідні підключення, які дозволяють потрібні порти, а останнім правилом забороняємо вхідний потік.
Приблизно так:
iptables -A INPUT -p TCP --dport 80 -j ACCEPT
iptables -A INPUT -p TCP --dport 443 -j ACCEPT
iptables -A INPUT -p TCP --dport 25 -j ACCEPT
iptables -A INPUT -j DROP
6. Закрити або відкрити стандартні порти.

Замінити ACCEPT на DROP, щоб заблокувати порт.

## ssh tcp port 22 ##
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT

## cups (printing service) udp/tcp port 631 для локальної мережі ##


iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT

## time sync via NTP для локальної мережі (udp port 123) ##


iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

## tcp port 25 (smtp) ##


iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

# dns server ports ##


iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

## http/https www server port ##


iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

## tcp port 110 (pop3) ##


iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT

## tcp port 143 (imap) ##


iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT

## Samba file server для локальної мережі ##


iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT

## proxy server для локальної мережі ##


iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT

## mysql server для локальної мережі ##


iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

7. Закрити всі порти, крім 25 (smtp), 80 (http), 443 (https-http з шифруванням)- Linux


1

2

3



4

5

6



7

8

9



10

11

12



13

14

15



# allow local traffic

-A INPUT -i lo -j ACCEPT

# allow icmp

-A INPUT -p icmp -j ACCEPT

# allow smtp server

-A INPUT -p tcp --dport 25 -j ACCEPT

# allow http server

-A INPUT -p tcp --dport 80 -j ACCEPT

-A INPUT -p tcp --dport 443 -j ACCEPT

# allow ssh server

-A INPUT -p tcp --dport 22 -j ACCEPT

# allow sessions

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

# drop all

-A INPUT -j DROP

8. Заблокуємо доступ на 69.171.224.0/19:


# iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP
9. Всі пакети всіх( ALL) протоколів (udp,tcp,icmp), які надходять на вхідний інтерфейс -i $LAN_IFACE і надійшли від джерела -s $LAN_NET нашого хосту – не приймаються:

#IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_NET -j DROP


10. Створити ланцюжок користувача SPAMMSG. В цьому ланцюжку записати правило, за яким усі повідомлення від джерела спаму будуть знищуватися. Виконати перехід з ланцюжка INPUT на ланцюжок SPAMMSG.