Налаштування iptables і ip6tables, конфігурація iptables

Штатний, досить популярний фаєрвол в Ubuntu - iptables. Всі приклади статті протестовані під Ubutnu 14.04. Iptables - це по суті призначений для користувача інтерфейс управління системою netfilter, яка обробляє вхідні та вихідні стеком Linux. Iptables порівнює кожен вступник пакет з набором встановлених правил і приймає рішення, що з ним робити.

Всі команди iptables необхідно виконувати тільки з root-привілеями, для цього потрібно:

  • використовувати sudo (рекомендований спосіб в Ubuntu);
  • використовувати su або sudo -i, щоб більш безпечно працювати під root;
  • увійти в систему як користувач root.

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

Слід врахувати, що для мережі IPv4 використовується iptables, а для IPv6 - ip6tables, і якщо IPv6 не використовується - можна відразу заборонити весь трафік в ip6tables:

# Ip6tables -P INPUT DROP
# Ip6tables -P OUTPUT DROP
# Ip6tables -P FORWARD DROP

Але, якщо після відключення всіх з'єднань по IPv6 перестане працювати оновлення системи (aptitude update), потрібно буде модифікувати настройки.

Щоб в ході експериментів не втратити доступ до віддаленого сервера по IPv4, потрібно прописати скидання всіх правил iptables раз в 20 хвилин по cron:

# Crontab -e
Додати рядок:
* / 20 * * * * / sbin / iptables -F

Тепер, навіть якщо випадково буде заблокований весь трафік, то кожні 20 хвилин буде відбуватися скидання правил з таблиці фаервола filter table, що дозволить не втратити доступ до сервера. Для цього варіанту слід враховувати політики iptables за замовчуванням. Якщо фаєрвол ще ніким не налаштовувався, то запустивши команду iptables -S можна побачити наступне:

# Iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

Дані настройки вказують, що після скидання всіх правил за допомогою iptables -F весь трафік буде дозволений. Якщо замінити стандартні параметри на DROP, як це зроблено на початку статті для протоколу IPv6, то вони все одно будуть діяти навіть після скидання налаштувань за допомогою прапора -F. Тобто команда iptables -F видаляє ВСІ настройки firewall з таблиці filter tables, КРІМ НАСТРОЕК за умовчанням.

Всі настройки iptables будуть скинуті після перезавантаження сервера, включаючи ланцюжка INPUT, FORWARD, OUTPUT, які після запуску сервера перейдуть в статус ACCEPT. Це ж стосується і налаштувань за замовчуванням. Як не втратити налаштування iptables і ip6tables при перезавантаженні, буде написано нижче.

таблиці правил

Штатний фаєрвол Ubuntu - iptables, складається з п'яти таблиць: filter. nat. mangle. raw і security. Щоб подивитися настройки з певної таблиці, наприклад з nat table, потрібно запустити команду: iptables -L -t nat. Таблиця filter table використовується за умовчанням, і для того, щоб подивитися, які правила вже внесені в неї, досить набрати: iptables -L (без вказівки імені таблиці). За замовчуванням, iptables налаштований так, що дозволено все.

Filter table - таблиця для фільтрування вхідного, вихідного і проходить (перенаправляє) трафіку. Для кожного виду трафіку в filter table використовується своя ланцюжок: INPUT, OUTPUT і FORWARD відповідно.

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

Ще існує дві таблиці: raw і security, для чого вони призначені, можна ознайомитися набравши man iptables.

Налаштування правил iptables

Перед налаштуванням правил, щоб не заблокувати необхідні послуги, варто подивитися відкриті порти на сервері за допомогою команди:

Всі правила iptables застосовуються відразу після виконання команди по додаванню правила в firewall. Щоб це перевірити, можна відразу заборонити доступ до 80 порту, якщо звичайно на ньому налаштований web-сервер, для щодо безпечного спостереження за діями блокування:

# Iptables -A INPUT -p tcp -m tcp --dport 80 -j DROP

Тепер можна переконатися, що сайт, щоб отримати доступ до якого використовується 80 порт, став недоступний. Прапор -A додає правило в самий кінець обраної ланцюжка. Оскільки в команді не вказано ім'я таблиці правил (-t tablename), використовується таблиця за замовчуванням: filter. Зняти блокування можна, як було описано раніше, шляхом запуску команди iptables -F, але що робити, якщо потрібно видалити тільки одне правило, а решті дати без змін?

Видалити всі правила з ланцюжка INPUT з параметром DROP:
# Iptables -D INPUT -j DROP
Видалити тільки правило, заданий за допомогою INPUT -p tcp -m tcp --dport 81 -j DROP
# Iptables -D INPUT -p tcp -m tcp --dport 80 -j DROP

Ключ -D позначає: видалити одне або більше правил відповідно до наступного за ним умові.

# Iptables -L -n -v --line-numbers

Тепер видалити одне правило, знаючи його номер, можна так:

# Iptables -D INPUT 1

Додати правило на певне місце, наприклад на першу сходинку, можна, використовуючи такий синтаксис:

# Iptables -I INPUT 1 -s 4.4.4.4 -j ACCEPT

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

Опція -Z скидає в нуль лічильники пакетів і байт.

DROP або REJECT

DROP і REJECT відхиляють з'єднання, але REJECT ще додатково відправляє ініціатору ICMP пакет, з повідомленням, що спроба з'єднання відхилена. DROP - просто відкидає пакет, що прийшов, чи не відправляючи ніякого повідомлення у відповідь. У разі DoS-атаки, REJECT створюватиме надлишковий трафік своїми відповідями, так що в разі відхилення з'єднання найкраще використовувати DROP.

В офіційній документації радять використовувати REJECT, для захисту від сканування портів, оскільки DROP може залишати відкриті невикористовувані сокети на сервері.

Скидання правил: опція -F або -X

У багатьох прикладах для повного очищення правил використовується відразу прапор -F і прапор -X:

# Iptables -F
# Iptables -X

І це вірно! Так як -F видаляє всі призначені для користувача правила створені в стандартних і користувальницьких ланцюжках, а ось прапор -X видаляє назви ланцюжків, створені за допомогою прапора -N. Міняти місцями -F і -X не варто, так як для видалення користувальницької ланцюжка, необхідно попередньо очистити її від правил, інакше ланцюжок видалена не буде і відобразитися повідомлення про помилку.

запис налаштувань

Після настройки iptables і ip6tables і тестування працездатності мережі, настройки варто зберегти в директорії / etc в файли з іменами: iptables.conf і ip6tables.conf (насправді шлях і назви файлів можна вибрати на свій розсуд):

# Iptables-save> /etc/iptables.conf
# Ip6tables-save> /etc/ip6tables.conf

Далі в директорії /etc/network/if-pre-up.d слід створити файл iptables (# touch /etc/network/if-pre-up.d/iptables), зробити його запускаються (# chmod + x / etc / network /if-pre-up.d/iptables) і заповнити його таким вмістом:

#! / Bin / sh
iptables-restore ip6tables-restore

Тепер, при кожному завантаженні сервера, перед включенням мережі, в iptables і ip6tables будуть завантажуватися правила з файлів /etc/iptables.conf і /etc/ip6tables.conf. Якщо завантажувати правила потрібно вже після включення мережі, файл iptables можна створити в директорії /etc/network/if-up.d.

Альтернативний шлях - використовувати утиліту iptables-persistent.

Якщо не відновлювати налаштування iptables після завантаження сервера, фаєрвол буде запущений з настройками за замовчуванням, включаючи настройки за замовчуванням (ACCEPT) для ланцюжків таблиці filter: INPUT, OUTPUT і FORWARD.

Також, не забудьте відключити скидання налаштувань iptables по cron, якщо такий був попередньо налаштований.

Безпечна проба налаштувань - iptables-apply

Існує утиліта iptables-apply. для безпечного тестування налаштувань iptables на віддаленому сервері. Суть її роботи зводиться до наступного: вона застосує нові налаштування із зазначеного файлу на деякий період часу (за замовчуванням 10 сек.) І якщо користувач в консолі не підтвердив нові настройки натисканням клавіші Y, в iptables повертаються настройки, які були доп застосування нових.

iptables-apply -t 15 new_iptable_conf

В наведеному вище прикладі, iptables-apply відразу після запуску застосує настройки фаєрвола з файлу new_iptable_conf і буде чекати підтвердження від користувача на протязі 15 секунд. І якщо користувач не підтвердить нову конфігурацію, буде повернута стара. Формат файлу iptables-apply такий же, як і при збереженні налаштувань за допомогою iptables-save.

Тобто для безпечного тестування налаштувань iptables необхідно: записати поточну конфігурацію в файл new_iptable_conf: iptables-save> new_iptable_conf. далі відредагувати цей файл і вже після цього безпечно випробувати нові параметри за допомогою iptables-apply: iptables-apply -t 15 new_iptable_conf.

Корисні посилання

Схожі статті