Брандмауер у Linux відіграє важливу роль у захисті комп’ютерної системи. Він діє як бар’єр, контролюючи та фільтруючи мережевий трафік, щоб захистити систему від несанкціонованого доступу, атак та інших загроз. Без правильно налаштованого брандмауера сервер може бути вразливим до різних типів кібератак, що призведе до серйозних наслідків для безпеки та конфіденційності даних.
У цій статті ми розглянемо два основних інструменти для налаштування брандмауера Linux: firewalld та iptables. Проведемо порівняльний аналіз їх особливостей, функціональності та переваг. Крім того, ми надамо докладні інструкції щодо налаштування та використання кожного з цих інструментів, а також обговоримо найкращі методи захисту вашої системи за допомогою брандмауера на платформі Linux. Усі дії будуть продемонстровані на а Віртуальний сервер з кореневим доступом.
Налаштування брандмауера в Linux
Брандмауер (Firewall Daemon) — програма для керування брандмауером в операційних системах Linux. Він надає інтерфейс користувача для налаштування правил брандмауера, дозволу або блокування з’єднань мережевих програм. Він попередньо встановлений за замовчуванням у більшості серверних дистрибутивів. Якщо Firewalld не встановлено попередньо, його можна встановити незалежно з офіційних сховищ дистрибутива.
Для систем Red Hat (таких як RHEL, CentOS, Fedora) інсталяція виконується командою:
yum install firewalld
Для Debian/Ubuntu:
apt-get install firewalld
Після інсталяції його можна відразу запустити та активувати командою:
systemctl start firewalld
Далі потрібно додати службу до автозавантаження:
systemctl enable firewalld
На цьому етапі ми рекомендуємо вимкнути ufw, оскільки одночасне використання цього інструменту з firewalld або iptables не рекомендується. Перевірте статус:
systemctl status ufw
Щоб зупинити його, введіть команду:
systemctl stop ufw
Для повної дезактивації:
ufw disable
Після цих дій можна переходити до налаштування брандмауера.
По-перше, необхідно визначити зони довіри. Firewalld використовує концепцію зон для визначення рівня довіри для мережевих інтерфейсів. Кожному інтерфейсу призначається одна зона, і правила брандмауера застосовуються на основі зони. Список усіх доступних зон відкривається командою:
firewall-cmd --get-zones
Зазвичай використовуються 4 основні зони:
- громадськості: Ця зона для мереж, які ви вважаєте небезпечними;
- приватний: Застосовується до домашніх мереж або інших надійних мережевих підключень;
- Внутрішній: Використовується для внутрішніх мереж, наприклад мереж у межах організації чи корпоративної мережі;
- DMZ: у цій зоні зазвичай розміщуються сервери, які мають бути доступні з Інтернету.
Однак це лише один приклад. Ви можете додати власну зону за допомогою команди:
firewall-cmd --permanent --new-zone=nameyourzone
Після додавання потрібне перезавантаження:
firewall-cmd --reload
Для видалення зони використовується аналогічний спосіб
firewall-cmd --permanent --delete-zone=nameyourzone
Після визначення зон необхідно дозволити трафік для потрібних сервісів і портів. Щоб дозволити певний сервіс, використовуйте команду:
firewall-cmd --zone=public --add-service=name
де ім'я це назва послуги. Наприклад, щоб дозволити трафік для Apache:
firewall-cmd --zone=public --add-service=http
Щоб визначити допустимі порти, використовуйте команду:
firewall-cmd --zone=public --add-port=number/protocol
Наприклад, стандартний 22 порт для SSH виглядатиме так:
firewall-cmd --zone=public --add-port=22/tcp
На цьому етапі вже створені основні правила. Далі визначте, як оброблятиметься трафік залежно від джерела, призначення, порту та інших критеріїв. Щоб додати правило (за допомогою громадськість зона як приклад):
firewall-cmd --zone=public rule
Наприклад, щоб дозволити вхідний трафік з будь-якого джерела на порт 80 (HTTP):
firewall-cmd --zone=public --add-port=80/tcp --permanent
Щоб видалити правило:
firewall-cmd --permanent --remove-rule=rule_specification
де правити це тип правила (наприклад, порт, обслуговування, багате правило тощо), і специфікація правила є специфікацією самого правила.
Після внесення змін до конфігурації Firewalld їх необхідно зберегти та застосувати. Щоб зберегти зміни, використовуйте команду:
firewall-cmd --runtime-to-permanent
Щоб застосувати зміни:
firewall-cmd --reload
Після завершення налаштування ви можете перевірити вибрані параметри, відкривши список усіх правил:
firewall-cmd --list-all
Якщо виникають проблеми, перевірте журнали Firewalld командою:
journalctl -u firewalld
Примітка. Ми розглянули лише загальний алгоритм налаштування підключення. Інструмент має широкий функціонал. Щоб отримати повну інформацію про всі доступні опції, ви можете скористатися офіційна документація або відкрити довідку:
firewall-cmd --help
Налаштування iptables в Linux
На відміну від Firewalld, iptables є старішим, але все ще широко використовуваним інструментом у Linux для керування брандмауером. Він забезпечує більш прямий і гнучкий підхід до правил фільтрації пакетів на рівні ядра Linux. Однак iptables вимагає більших знань і досвіду порівняно з Firewalld, що робить його менш доступним для початківців. Перевірте попередньо встановлену версію інструменту командою:
iptables -V
Якщо засіб не встановлено, його потрібно встановити. Команда для встановлення на Ubuntu, Debian:
apt install iptables
Для систем Red Hat (наприклад, CentOS, Fedora):
yum install iptables
Команда для активації після установки:
systemctl start iptables
Щоб додати до запуску, виконайте:
systemctl enable iptables
Перш ніж почати налаштування iptables, важливо зрозуміти, як це працює. Цьому сприяє синтаксис програми. Виглядає це наступним чином:
iptables -t table action chain additional_parameters
Розберемося глибше в кожному пункті.
Iptables має чотири основні таблиці: filter, nat, mangle і raw. Кожен з них призначений для обробки певних типів пакетів і має власні ланцюжки правил:
- фільтрувати: це найбільш часто використовувана таблиця, яка містить правила фільтрації пакетів. Він використовується для прийняття рішень щодо дозволу чи заборони пакетів.
- nat: Ця таблиця використовується для зміни мережевих адрес і портів у пакетах. Його часто використовують для налаштування маскування (NAT).
- гадюка: у цій таблиці ви можете змінювати заголовки пакетів. Він використовується для спеціальних операцій з пакетами, наприклад для маркування.
- сировина: Ця таблиця використовується для налаштування правил, які застосовуються до того, як вони пройдуть через систему відстеження з’єднань. Зазвичай він використовується для встановлення правил, які система відстеження не повинна змінювати, як-от відкидання пакетів із певних адрес.
Кожна таблиця містить набір ланцюжків. Ланцюжки — це послідовність правил, які послідовно перевіряються. Є три попередньо визначені ланцюги:
- INPUT (вхідні). Правила в цьому ланцюжку визначають, що робити з вхідними пакетами.
- ВИХІД (вихідний). Цей ланцюжок застосовується до всіх пакетів, які ваш комп’ютер надсилає іншим пристроям або комп’ютерам у мережі.
- FORWARD (пересилання). Правила в цьому ланцюжку визначають, що робити з пересланими пакетами.
Нарешті, кожен ланцюжок має певну дію (ціль). На практиці використовуються 5 основних дій:
- ПРИЙНЯТИ: дозволити пакету пройти через брандмауер.
- DROP: Відхилити пакет і відхилити його без відповіді.
- ОТХОДИТИ: відхилити пакет і надіслати відправнику повідомлення про помилку ICMP.
- ВХІД: зареєструйте пакет у системному журналі та виконайте іншу дію (наприклад, ПРИЙНЯТИ або ВИДАЛИТИ).
- ПОВЕРНЕННЯ: припинити перевірку правил у поточному ланцюжку та повернутися до ланцюжка викликів (якщо застосовно).
Щоб почати налаштування, відкрийте список існуючих правил командою:
iptables -L
Як посібник із налаштування Iptables, давайте розглянемо практичні приклади найбільш часто використовуваних команд. Для зручності розділимо приклади на 3 групи в залежності від конкретного ланцюжка.
Ланцюг ВХІД:
- Дозволити вхідний трафік через протокол TCP на порт 80:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. Дозволити вхідний трафік через протокол UDP на порт 22:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. Заблокуйте вхідний трафік із певної IP-адреси:
iptables -A INPUT -s 192.168.1.100 -j DROP
Ланцюг ВИХІД:
- Дозволити вихідний трафік через протокол TCP на порт 443:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. Дозволити вихідний трафік через протокол UDP на порт 80:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. Заблокувати вихідний трафік на певний порт (наприклад, 21):
iptables -A OUTPUT -p tcp --dport 21 -j DROP
Ланцюг ВПЕРЕД:
- Блокувати перенаправлений трафік із певного діапазону IP-адрес:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. Заблокуйте пересилання пакетів із певного мережевого інтерфейсу:
iptables -A FORWARD -i eth1 -j DROP
3. Обмежте кількість одночасних з’єднань для певного порту (у цьому прикладі 10 з’єднань на хвилину на порту 80):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
Як бачимо, в кожному окремому випадку використовується додатковий аргумент (команда). Щоб отримати повний список можливих аргументів і загальну підтримку функціональності інструменту, введіть:
iptables -h
Щоб переконатися, що налаштування правильні, повторно введіть команду, щоб переглянути список правил:
iptables -L
Щоб видалити певне правило, використовуйте команду:
iptables -D chain rule_number
Наприклад, якщо ви хочете видалити правило номер 1 із ланцюжка INPUT, команда виглядатиме так:
iptables -D INPUT 1
Щоб видалити всі правила однією командою:
iptables -F
Важливе зауваження: правила iptables не зберігаються автоматично після перезавантаження системи чи служби. Щоб зберегти правила, їх потрібно додати до конфігураційного файлу та відновити після перезавантаження. The iptables-збереження та iptables-відновлення утиліти можуть допомогти в цьому. Щоб зберегти правила, введіть команду:
iptables-save > /etc/iptables/rules.v4
Це збереже поточні правила iptables у файл rules.v4. Для відновлення після перезавантаження введіть:
iptables-restore < /etc/iptables/rules.v4
Ця команда відновлює правила з файлу rules.v4.
Висновок
Налаштування брандмауера в Linux за допомогою firewalld або iptables є важливим аспектом забезпечення безпеки сервера. Обидва інструменти пропонують надійні засоби керування мережевим трафіком і захисту системи від несанкціонованого доступу та кібератак. Вибір між firewalld та iptables залежить від конкретних потреб і вподобань користувача, враховуючи їхню різну функціональність та сильні сторони.