Перейти до змісту

firewalld для початківців

Вступ

Давним-давно я був маленьким початківцем, який чув, що мати брандмауер це дуже добре. Це дозволило б мені вирішувати, що входило та виходило з мого комп’ютера, чи не так? Але здебільшого це завадило моїм відеоіграм отримати доступ до Інтернету; Я був не щасливим.

Звичайно, якщо ви тут, то, ймовірно, краще знаєте, що таке брандмауер і що він робить, ніж я. Але якщо ваш брандмауер означає повідомлення Захиснику Windows, що вашій новій програмі дозволено використовувати Інтернет, не хвилюйтеся. Як зазначено в назві цього документа, цей посібник для вас (та інших початківців)!

Отже, давайте поговоримо про те, для чого ми тут. firewalld — це програма брандмауера за замовчуванням, яка входить до складу Rocky Linux і розроблена так, що вона досить проста у використанні. Потрібно трохи знати про брандмауери і не боятися використовувати командний рядок.

Тут ви дізнаєтеся про:

  • Основи роботи firewalld
  • Як використовувати firewalld, щоб обмежити або дозволити вхідні та вихідні з’єднання
  • Як дозволити лише людям із певних IP-адрес або місць віддалено входити на вашу машину
  • Як керувати деякими спеціальними функціями firewalld, наприклад зонами.

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

Примітка щодо використання командного рядка для керування брандмауером

Ну... є ** параметри конфігурації графічного брандмауера. На робочому столі є firewall-config, який можна встановити зі сховищ, а на серверах можна інсталювати Cockpit, щоб допомогти вам керувати брандмауерами та цілою купою інших речей. Однак у цьому посібнику я навчатиму вас способу виконання завдань за допомогою командного рядка з кількох причин:

  1. Якщо ви використовуєте сервер, ви все одно будете використовувати командний рядок для більшості цих речей. Багато підручників і посібників для сервера Rocky нададуть інструкції командного рядка для керування брандмауером, і ви повинні зрозуміти ці інструкції, а не просто копіювати та вставляти все, що бачите.
  2. Розуміння того, як працюють команди firewalld, може допомогти вам краще зрозуміти, як працює програмне забезпечення брандмауера. Якщо ви вирішите використовувати графічний інтерфейс у майбутньому, ви можете використовувати ті самі принципи, які ви дізналися тут, і краще розуміти, що ви робите.

Передумови та припущення

Вам знадобиться:

  • Машина Rocky Linux будь-якого типу, локальна чи віддалена, фізична чи віртуальна
  • Доступ до терміналу та бажання ним користуватися
  • Вам потрібен доступ root або можливість використовувати sudo у вашому обліковому записі користувача. Для простоти я припускаю, що всі команди виконуються від імені користувача root
  • Базове розуміння SSH не завадить керувати віддаленими машинами.

Основне використання

Службові команди системи

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

systemctl enable --now firewalld

Прапор --now запускає службу, щойно її ввімкнено, і дозволяє пропустити крок systemctl start firewalld.

Як і в усіх службах Rocky Linux, ви можете перевірити, чи працює брандмауер за допомогою:

systemctl status firewalld

Щоб припинити це взагалі:

systemctl stop firewalld

І щоб виконати жорсткий перезапуск служби:

systemctl restart firewalld

Базові команди налаштування та керування firewalld

firewalld налаштовується за допомогою команди firewall-cmd. Ви можете, наприклад, перевірити стан firewalld за допомогою:

firewall-cmd --state

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

firewall-cmd --reload

Примітка

Якщо ви перезавантажите свої конфігурації, які не стали постійними, вони зникнуть.

Ви можете переглянути всі свої конфігурації та налаштування одночасно за допомогою:

firewall-cmd --list-all

Ця команда виведе щось подібне до цього:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp9s0
  sources:
  services: ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Збереження змін

Попередження: серйозно, прочитайте наступний фрагмент.

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

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

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

firewall-cmd --runtime-to-permanent

Однак, якщо ви абсолютно впевнені в тому, що робите, і просто хочете додати правило та продовжити своє життя, ви можете додати позначку --permanent до будь-якої команди конфігурації:

firewall-cmd --permanent [the rest of your command]

Управління зонами

Перш за все, мені потрібно пояснити зони. Зони — це функція, яка дозволяє визначати різні набори правил для різних ситуацій. Зони є величезною частиною firewalld, тому варто зрозуміти, як вони працюють.

Якщо ваш комп’ютер має кілька способів підключення до різних мереж (наприклад, Ethernet і Wi-Fi), ви можете вирішити, яке з’єднання є більш надійним, ніж інше. Ви можете встановити ваше підключення Ethernet до «довіреної» зони, якщо воно підключено лише до локальної мережі, яку ви створили, і помістити Wi-Fi (який може бути підключений до Інтернету) у «загальнодоступній» зоні з більш суворими обмеженнями.

Примітка

Зона може тільки бути в активному стані, якщо вона має одну з цих двох умов:

  1. Зона призначається мережевому інтерфейсу
  2. Зоні призначаються вихідні IP-адреси або діапазони мережі (докладніше про це нижче)

Стандартні зони включають наступне (я взяв це пояснення з посібника DigitalOcean щодо firewalld, який вам також слід прочитати):

drop: Найнижчий рівень довіри. Усі вхідні з’єднання розриваються без відповіді, і можливі лише вихідні з’єднання.

block: Подібно до вищезазначеного, але замість того, щоб просто розірвати з’єднання, вхідні запити відхиляються повідомленням icmp-host-prohibited або icmp6-adm-prohibited.

public: представляє публічні, ненадійні мережі. Ви не довіряєте іншим комп’ютерам, але можете дозволити вибрані вхідні підключення в кожному конкретному випадку.

external: Зовнішні мережі, якщо ви використовуєте брандмауер як шлюз. Він налаштований на маскування NAT, щоб ваша внутрішня мережа залишалася приватною, але доступною.

internal: інша сторона зовнішньої зони, яка використовується для внутрішньої частини шлюзу. Комп’ютери досить надійні, доступні деякі додаткові послуги.

dmz: використовується для комп’ютерів, розташованих у DMZ (ізольовані комп’ютери, які не матимуть доступу до решти вашої мережі). Дозволені лише певні вхідні підключення.

work: використовується для робочих машин. Довіряє більшості комп’ютерів у мережі. Можливо, буде дозволено ще декілька послуг.

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

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

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

Команди управління зонами

Щоб побачити зону за замовчуванням, виконайте:

firewall-cmd --get-default-zone

Щоб побачити, які зони активні та виконують дії, запустіть:

firewall-cmd --get-active-zones

Примітка: деякі з них могли бути зроблені для вас.

Якщо ви використовуєте Rocky Linux на VPS, базова конфігурація, ймовірно, налаштована для вас. Зокрема, ви повинні мати доступ до сервера через SSH, а мережевий інтерфейс уже буде додано до «публічної» зони.

Щоб змінити стандартну зону:

firewall-cmd --set-default-zone [your-zone]

Щоб додати мережевий інтерфейс до зони:

firewall-cmd --zone=[your-zone] --add-interface=[your-network-device]

Щоб змінити зону мережевого інтерфейсу:

firewall-cmd --zone=[your-zone] --change-interface=[your-network-device]

Щоб повністю видалити інтерфейс із зони:

firewall-cmd --zone=[your-zone] --remove-interface=[your-network-device]

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

firewall-cmd --new-zone=[your-new-zone]
firewall-cmd --get-zones

Керування портами

Для непосвячених порти (у цьому контексті) — це лише віртуальні кінцеві точки, до яких комп’ютери підключаються для пересилання інформації вперед і назад. Подумайте про них як про фізичні порти Ethernet або USB на вашому комп’ютері, але невидимі, і ви можете мати до 65 535 з них одночасно.

Я б не став, але ти можеш.

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

Зокрема, порт 80 дозволяє передавати дані через протокол передачі гіпертексту (HTTP), а порт 443 зарезервовано для даних захищеного протоколу передачі гіпертексту (HTTPS).

Порт 22 зарезервовано для протоколу Secure Shell (SSH), який дозволяє входити в систему та керувати іншими машинами за допомогою командного рядка (див. наш короткий посібник на цю тему). Абсолютно новий віддалений сервер може дозволяти підключення лише через порт 22 для SSH і нічого іншого.

Iнші приклади включають FTP (порти 20 і 21), SSH (порт 22) і багато інших. Ви також можете налаштувати власні порти, які використовуватимуться новими програмами, які ви можете інсталювати, але для яких ще немає стандартного номера.

Примітка. Ви не повинні використовувати порти для всього.

Для таких речей, як SSH, HTTP/S, FTP тощо, насправді рекомендується додавати їх у зону брандмауера як послуги, а не як номери портів. Нижче я покажу вам, як це працює. Тим не менш, вам все одно потрібно знати, як відкривати порти вручну.

* Для абсолютних початківців HTTPS в основному (більш-менш) такий же, як HTTP, але зашифрований.

Команди керування портами

У цьому розділі я використаю --zone=public... і порт 9001 як випадковий приклад, оскільки він перевищує 9000.

Щоб побачити всі відкриті порти:

firewall-cmd --list-ports

Щоб додати порт до зони брандмауера (таким чином відкрити його для використання), просто виконайте цю команду:

firewall-cmd --zone=public --add-port=9001/tcp

Примітка

Щодо цього біта /tcp:

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

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

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

firewall-cmd --zone=public --remove-port=9001/tcp

Управління службами

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

Це найкращий спосіб відкрити порти для цих загальних служб і багато іншого:

  • HTTP і HTTPS: для веб-серверів
  • FTP: для переміщення файлів вперед і назад (старомодний спосіб)
  • SSH: для керування віддаленими машинами та переміщення файлів вперед і назад новим способом
  • Samba: для обміну файлами з машинами Windows.

Важливо

Ніколи не видаляйте службу SSH із брандмауера віддаленого сервера!

Пам’ятайте, що ви використовуєте SSH для входу на свій сервер. Якщо у вас немає іншого способу доступу до фізичного сервера або його оболонки (тобто через. панель керування, яку надає хост), видалення служби SSH заблокує вас назавжди.

Вам потрібно або звернутися до служби підтримки, щоб повернути доступ, або повністю перевстановити ОС.

Команди керування сервісом

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

firewall-cmd --get-services

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

firewall-cmd --list-services

Щоб відкрити службу у вашому брандмауері (наприклад, HTTP у публічній зоні), використовуйте:

firewall-cmd --zone=public --add-service=http

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

firewall-cmd --zone=public --remove-service=http

Примітка. Ви можете додавати власні послуги

І налаштовувати їх також. Однак це тема, яка стає досить складною. Спочатку ознайомтеся з firewalld і переходьте звідти.

Обмеження доступу

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

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

firewall-cmd --permanent --zone=trusted --add-source=192.168.1.0 [< insert your IP here]

Ви можете створити діапазон IP-адрес, додавши більше число в кінці, наприклад:

firewall-cmd --permanent --zone=trusted --add-source=192.168.1.0/24 [< insert your IP here]

Знову ж таки, просто змініть --add-source на --remove-source, щоб звернути процес.

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

По-перше, ви можете використати «багате правило» для своєї публічної зони, і воно виглядатиме приблизно так:

# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'

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

Тепер ваша конфігурація має виглядати так:

your@server ~# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: wlp3s0
  sources:
  services: cockpit dhcpv6-client
  ports: 80/tcp 443/tcp
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept

По-друге, ви можете використовувати дві різні зони одночасно. Якщо ваш інтерфейс прив’язаний до публічної зони, ви можете активувати другу зону (наприклад, «довірену»), додавши вихідну IP-адресу або діапазон IP-адрес, як показано вище. Потім додайте службу SSH до довіреної зони та видаліть її з публічної зони.

Коли ви закінчите, результат має виглядати приблизно так:

your@server ~# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: wlp3s0
  sources:
  services: cockpit dhcpv6-client
  ports: 80/tcp 443/tcp
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
your@server ~# firewall-cmd --list-all --zone=trusted
trusted (active)
  target: default
  icmp-block-inversion: no
  interfaces:
  sources: 192.168.0.0/24
  services: ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Якщо ви втратите доступ, перезапустіть сервер (на більшості панелей керування VPS є така можливість) і повторіть спробу.

Важливо

Ці методи працюють, лише якщо у вас є статична IP-адреса.

Якщо ви застрягли в Інтернет-провайдері, який змінює вашу IP-адресу кожного разу, коли ваш модем перезавантажується, не використовуйте ці правила (принаймні для SSH), доки не знайдете виправлення. Ви заблокуєте себе на своєму сервері

Або оновіть свій тарифний план/провайдера Інтернету, або отримайте VPN, який надає вам виділену IP-адресу, і ніколи не втрачайте її.

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

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

Заключні примітки

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

Для вас, шанувальників iptables (якщо ви зайшли так далеко...), у нас є посібник, який докладно описує деякі відмінності в тому, як firewalld і iptables працюють. Цей посібник може допомогти вам зрозуміти, чи хочете ви залишитися з firewalld чи повернутися до The Old Ways(TM). У цьому випадку є що сказати про The Old Ways(TM).

Висновок

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

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

Author: Ezequiel Bruni

Contributors: Steven Spencer, Ganna Zhyrnova