Встановлений в операційній системі Firewall використовується для запобігання несанкціонованого проходження трафіку між комп'ютерними мережами. Вручну або автоматично створюються спеціальні правила для брандмауера, які і відповідають за управління доступом. В ОС, розробленої на ядрі Linux, CentOS 7 є вбудований фаєрвол, а управління ним здійснюється за допомогою брандмауера. За замовчуванням задіяний FirewallD, і про його налаштування ми б хотіли поговорити сьогодні.
зміст
Як вже було сказано вище, стандартним брандмауером в CentOS 7 призначена утиліта FirewallD. Саме тому настройка фаервола буде розглянута на прикладі цього інструменту. Задати правила фільтрації можна і за допомогою тієї ж iptables, але це виконується трохи іншим чином. Зі зміною згаданої утиліти рекомендуємо ознайомитися, перейшовши за наступним посиланням, а ми ж почнемо розбір FirewallD.
Читайте також: Налаштування iptables в CentOS 7
Існує кілька зон - наборів правил для управління трафіком на основі довіри до мереж. Всім їм задаються власні політики, сукупність яких і утворює конфігурацію брандмауера. Кожній зоні присвоюється один або кілька мережних інтерфейсів, що також дозволяє регулювати фільтрацію. Від використовуваного інтерфейсу безпосередньо залежать застосовувані правила. Наприклад, при підключенні до загальнодоступного Wi-Fi мережевий екран підвищить рівень контролю, а в домашній мережі відкриє додатковий доступ для учасників ланцюга. В даному фаєрволі присутні такі зони:
trusted
- максимальний рівень довіри до всіх пристроїв мережі; home
- група локальної мережі. Існує довіру до оточення, але при цьому вхідні з'єднання доступні тільки для певних машин; work
- робоча зона. Присутній довіру до більшості пристроїв, а також активуються додаткові сервіси; dmz
- зона для ізольованих комп'ютерів. Такі пристрої від'єднані від решти мережі і пропускають тільки певний вхідний трафік; internal
- зона внутрішніх мереж. Довіра застосовується до всіх машин, відкриваються додаткові сервіси; external
- зворотна до попередньої зона. У зовнішніх мережах активна маскування NAT, закриваючи внутрішню мережу, але не блокуючи можливість отримання доступу; public
- зона загальнодоступних мереж з недовірою до всіх пристроїв і індивідуальним прийомом вхідного трафіку; block
- всі вхідні запити скидаються з відправленням помилки icmp-host-prohibited або icmp6-adm-prohibited; drop
- мінімальний рівень довіри. Вхідні з'єднання скидаються без будь-яких повідомлень. Самі ж політики бувають тимчасові і постійні. При появі або редагуванні параметрів дію фаервола відразу змінюється без потреби перезавантаження. Якщо ж були застосовані тимчасові правила, після рестарту FirewallD вони будуть скинуті. Перманентне правило на те так і називаються - воно буде збережено на постійній основі при застосуванні аргументу —permanent
.
Для початку потрібно запустити FirewallD або переконатися в тому, що він знаходиться в активному стані. Тільки що функціонує демон (програма, що працює в фоновому режимі) буде застосовувати правила для брандмауера. Активація проводиться буквально в кілька кліків:
sudo systemctl start firewalld.service
і натисніть на клавішу Enter. firewall-cmd --state
. Якщо ж вам одного разу буде потрібно тимчасово або перманентно відключити брандмауер, радимо скористатися інструкцією, представленої в інший нашій статті за наступним посиланням.
Детальніше: Відключення Firewall в CentOS 7
Навіть працює в штатному режимі фаєрвол має свої певні правила і доступні зони. Перед початком редагування політик радимо ознайомитися з поточною конфігурацією. Робиться це за допомогою простих команд:
firewall-cmd --get-default-zone
. firewall-cmd --get-active-zones
. firewall-cmd --list-all
виведе на екран правила, задані для зони за замовчуванням. Зверніть увагу на скріншот нижче. Ви бачите, що активній зоні «public» присвоєно правило «default» - функціонування за замовчуванням, інтерфейс «enp0s3» і додано два сервісу. firewall-cmd --get-zones
. firewall-cmd --zone=name --list-all
, де name - назва зони. Після визначення необхідних параметрів можна переходити до їх зміни і додаванню. Давайте детально розберемо кілька найпопулярніших конфігурацій.
Як ви знаєте з інформації вище, для кожного інтерфейсу визначається своя зона за замовчуванням. Він буде перебувати в ній до тих пір, поки налаштування не зміняться користувачем або програмно. Можливий ручної перенесення інтерфейсу в зону на одну сесію, і здійснюється він активацією команди sudo firewall-cmd --zone=home --change-interface=eth0
. Результат «success» свідчить про те, що перенесення пройшов успішно. Нагадаємо, що такі настройки скидаються відразу після перезавантаження фаервола.
При подібному зміні параметрів слід враховувати, що робота сервісів може бути скинута. Деякі з них не підтримують функціонування в певних зонах, припустимо, SSH хоч і доступний в «home», але в призначених для користувача або особливих сервіс працювати відмовиться. Переконатися в тому, що інтерфейс був успішно прив'язаний до нової гілки можна, запровадивши firewall-cmd --get-active-zones
.
Якщо ви захочете скинути зроблені раніше настроювання, просто виконайте рестарт брандмауера: sudo systemctl restart firewalld.service
.
Часом не завжди зручно змінювати зону інтерфейсу всього на одну сесію. У такому випадку потрібно редагувати конфігураційний файл, щоб всі налаштування ввелись на перманентної основі. Для цього ми радимо використовувати текстовий редактор nano, який встановлюється з офіційного сховища sudo yum install nano
. Далі залишається провести такі дії:
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
, де eth0 - назва необхідного інтерфейсу. public
або home
. Тепер зона інтерфейсу буде такою, якою ви її вказали, до моменту наступного редагування конфігураційного файлу. Щоб оновлені параметри вступили в дію, виконайте sudo systemctl restart network.service
і sudo systemctl restart firewalld.service
.
Вище ми вже демонстрували команду, яка дозволяла дізнатися встановлену за замовчуванням зону. Її також можна змінити, встановивши параметр на свій вибір. Для цього в консолі досить прописати sudo firewall-cmd --set-default-zone=name
, де name - ім'я необхідної зони.
Про успішність виконання команди буде свідчити напис «success» в окремому рядку. Після цього всі поточні інтерфейси прив'яжуться до зазначеної зоні, якщо іншого не задано в конфігураційних файлах.
На самому початку статті ми розповіли про дії кожної зони. Визначення сервісів, утиліт і програм в такі галузі дозволить застосувати для кожної з них індивідуальні параметри під запити кожного користувача. Для початку радимо ознайомитися з повним списком доступних на даний момент сервісів: firewall-cmd --get-services
.
Результат відобразиться прямо в консолі. Кожен сервер розділений прогалиною, і в списку ви зможете з легкістю відшукати Вас інструмент. Якщо ж потрібний сервіс відсутній, його слід додатково встановити. Про правила інсталяції читайте в офіційній документації програмного забезпечення.
Зазначена вище команда демонструє тільки назви сервісів. Детальна інформація по кожному з них виходить через індивідуальний файл, що знаходиться по шляху /usr/lib/firewalld/services
. Такі документи мають формат XML, шлях, наприклад, до SSH виглядає так: /usr/lib/firewalld/services/ssh.xml
, а документ має наступне вміст:
SSH
Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.
Активується підтримка сервісу в певній зоні вручну. У «Терміналі» слід задати команду sudo firewall-cmd --zone=public --add-service=http
, де --zone = public - зона для активації, а --add-service = http - назва сервісу. Врахуйте, що така зміна буде діяти тільки в межах однієї сесії.
Перманентне додавання здійснюється через sudo firewall-cmd --zone=public --permanent --add-service=http
, а результат «success» свідчить про успішне завершення операції.
Переглянути повний список постійних правил для певної зони можна, відобразивши список в окремому рядку консолі: sudo firewall-cmd --zone=public --permanent --list-services
.
Стандартно в правилах брандмауера вказані найпопулярніші і безпечні сервіси як дозволені, проте деякі стандартні або сторонні додатки він блокує. У такому випадку користувачеві вручну потрібно змінити налаштування, щоб вирішити проблему з доступом. Зробити це можна двома різними методами.
проброс порту
Як відомо, всі мережеві сервіси використовують певний порт. Він запросто виявляється фаєрволом, і по ньому можуть виконуватися блокування. Щоб уникнути таких дій з боку фаервола, потрібно відкрити необхідний порт командою sudo firewall-cmd --zone=public --add-port=0000/tcp
, де --zone = public - зона для порту, --add-port = 0000 / tcp - номер і протокол порту. Опція firewall-cmd --list-ports
відобразить список відкритих портів.
Якщо ж вам необхідно відкрити порти, що входять в діапазон, скористайтеся рядком sudo firewall-cmd --zone=public --add-port=0000-9999/udp
, де --add-port = 0000-9999 / udp - діапазон портів і їх протокол.
Наведені вище команди лише дозволять протестувати застосування подібних параметрів. Якщо воно пройшло успішно, слід додати ці ж порти в постійні настройки, а робиться це шляхом введення sudo firewall-cmd --zone=public --permanent --add-port=0000/tcp
або sudo firewall-cmd --zone=public --permanent --add-port=0000-9999/udp
. Перелік відкритих постійних портів проглядається так: sudo firewall-cmd --zone=public --permanent --list-ports
.
Як бачите, додавання портів не викликає ніяких труднощів, але процедура ускладнюється в тому випадку, коли додатків використовується велика кількість. Відстежити всі використовуються порти стає важко, через що більш правильним варіантом стане визначення сервісу:
sudo cp /usr/lib/firewalld/services/service.xml /etc/firewalld/services/example.xml
, де service.xml - ім'я файлу сервісу, а example.xml - назва його копії. sudo nano /etc/firewalld/services/example.xml
. sudo firewall-cmd --reload
. Після цього сервіс з'явиться в списку доступних, який можна переглянути через firewall-cmd --get-services
. Вам залишається тільки вибрати найбільш підходящий метод вирішення проблеми з доступом до сервісу і виконати наведені інструкції. Як бачите, всі дії виконуються досить легко, і ніяких труднощів виникнути не повинно.
Ви вже знаєте, що спочатку в FirewallD створено велику кількість різноманітних зон з певними правилами. Однак трапляються ситуації, коли системному адміністратору потрібно створити призначену для користувача зону, як, наприклад, «publicweb» для встановленого веб-сервера або «privateDNS» - для DNS-сервера. На цих двох прикладах ми і розберемо додавання гілок:
sudo firewall-cmd --permanent --new-zone=publicweb
і sudo firewall-cmd --permanent --new-zone=privateDNS
. sudo firewall-cmd --reload
. Для відображення перманентних зон введіть sudo firewall-cmd --permanent --get-zones
. sudo firewall-cmd --zone=publicweb --add-service=ssh
, sudo firewall-cmd --zone=publicweb --add-service=http
і sudo firewall-cmd --zone=publicweb --add-service=https
, де --zone = publicweb - назва зони для додавання. Переглянути активність сервісів можна, прописавши firewall-cmd --zone=publicweb --list-all
. З цієї статті ви дізналися, як створювати призначені для користувача зони і додавати в них сервіси. Щодо розміщення їх за замовчуванням і присвоєння інтерфейсів ми вже розповіли вище, вам залишається лише вказати правильні назви. Не забувайте перезавантажувати міжмережевий екран після внесення будь-яких перманентних змін.
Як бачите, брандмауер FirewallD - досить об'ємний інструмент, що дозволяє зробити максимально гнучку конфігурацію брандмауера. Залишилося тільки переконатися в тому, що утиліта запускається разом з системою і зазначені правила відразу ж починають свою роботу. Зробіть це командою sudo systemctl enable firewalld
.