Контакти

Centos 7 firewall відкрити порт 80. Налаштування системної пошти

встановлений в операційній системі Firewall використовується для запобігання несанкціонованого проходження трафіку між комп'ютерними мережами. Вручну або автоматично створюються спеціальні правила для брандмауера, які і відповідають за управління доступом. В ОС, розробленої на ядрі Linux, CentOS 7 є вбудований фаєрвол, а управління ним здійснюється за допомогою брандмауера. За замовчуванням задіяний FirewallD, і про його налаштування ми б хотіли поговорити сьогодні.

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

Основні поняття брандмауера

Існує кілька зон - наборів правил для управління трафіком на основі довіри до мереж. Всім їм задаються власні політики, сукупність яких і утворює конфігурацію брандмауера. Кожній зоні присвоюється один або кілька мережних інтерфейсів, що також дозволяє регулювати фільтрацію. Від використовуваного інтерфейсу безпосередньо залежать застосовувані правила. Наприклад, при підключенні до загальнодоступного Wi-Fi мережевий екран підвищить рівень контролю, а в домашньої мережі відкриє додатковий доступ для учасників ланцюга. В даному фаєрволі присутні такі зони:

  • trusted - максимальний рівень довіри до всіх пристроїв мережі;
  • home - група локальної мережі. Існує довіру до оточення, але при цьому вхідні з'єднання доступні тільки для певних машин;
  • work - робоча зона. Присутній довіру до більшості пристроїв, а також активуються додаткові сервіси;
  • dmz - зона для ізольованих комп'ютерів. Такі пристрої від'єднані від решти мережі і пропускають тільки певний вхідний трафік;
  • internal - зона внутрішніх мереж. Довіра застосовується до всіх машин, відкриваються додаткові сервіси;
  • external - зворотна до попередньої зона. У зовнішніх мережах активна маскування NAT, закриваючи внутрішню мережу, але не блокуючи можливість отримання доступу;
  • public - зона загальнодоступних мереж з недовірою до всіх пристроїв і індивідуальним прийомом вхідного трафіку;
  • block - всі вхідні запити скидаються з відправленням помилки icmp-host-prohibited або icmp6-adm-prohibited;
  • drop - мінімальний рівень довіри. Вхідні з'єднання скидаються без будь-яких повідомлень.

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

Увімкнути брандмауер FirewallD

Для початку потрібно запустити FirewallD або переконатися в тому, що він знаходиться в активному стані. Тільки що функціонує демон (програма, що працює в фоновому режимі) буде застосовувати правила для брандмауера. Активація проводиться буквально в кілька кліків:

  1. запустіть класичний «Термінал» будь-яким зручним способом, наприклад, через меню «Додатки».
  2. Введіть команду sudo systemctl start firewalld.service і натисніть на клавішу Enter.
  3. Управління утилітою здійснюється від імені суперкористувача, тому доведеться підтвердити справжність, вказавши пароль.
  4. Щоб переконатися у функціонуванні сервісу, вкажіть firewall-cmd --state.
  5. У відкритому графічному вікні повторно підтвердите справжність.
  6. З'явиться новий рядок. значення «Running» говорить про те, що фаєрвол працює.

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

Перегляд правил за замовчуванням і доступних зон

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

  1. Визначити функціонуючу за замовчуванням зону допоможе команда firewall-cmd --get-default-zone.
  2. Після її активації ви побачите новий рядок, Де відобразиться потрібний параметр. Наприклад, на скріншоті нижче активної вважається зона «Public».
  3. Проте активними можуть бути відразу кілька зон, до того ж вони прив'язуються до окремого інтерфейсу. Дізнайтеся цю інформацію через firewall-cmd --get-active-zones.
  4. Команда firewall-cmd --list-all виведе на екран правила, задані для зони за замовчуванням. Зверніть увагу на скріншот нижче. Ви бачите, що активній зоні «Public» присвоєно правило «Default» - функціонування за замовчуванням, інтерфейс «Enp0s3» і додано два сервісу.
  5. Якщо з'явилася потреба дізнатися всі доступні зони брандмауера, введіть firewall-cmd --get-zones.
  6. Параметри ж конкретної зони визначаються через firewall-cmd --zone \u003d name --list-all, де name - назва зони.

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

Параметри зон інтерфейсів

Як ви знаєте з інформації вище, для кожного інтерфейсу визначається своя зона за замовчуванням. Він буде перебувати в ній до тих пір, поки налаштування не зміняться користувачем або програмно. Можливий ручної перенесення інтерфейсу в зону на одну сесію, і здійснюється він активацією команди sudo firewall-cmd --zone \u003d home --change-interface \u003d eth0. результат «Success» свідчить про те, що перенесення пройшов успішно. Нагадаємо, що такі настройки скидаються відразу після перезавантаження фаервола.

При подібному зміні параметрів слід враховувати, що робота сервісів може бути скинута. Деякі з них не підтримують функціонування в певних зонах, припустимо, SSH хоч і доступний в «Home», Але в призначених для користувача або особливих сервіс працювати відмовиться. Переконатися в тому, що інтерфейс був успішно прив'язаний до нової гілки можна, запровадивши firewall-cmd --get-active-zones.

Якщо ви захочете скинути зроблені раніше настроювання, просто виконайте рестарт брандмауера: sudo systemctl restart firewalld.service.

Часом не завжди зручно змінювати зону інтерфейсу всього на одну сесію. У такому випадку потрібно редагувати конфігураційний файл, щоб всі налаштування ввелись на перманентної основі. Для цього ми радимо використовувати текстовий редактор nano, Який встановлюється з офіційного сховища sudo yum install nano. Далі залишається провести такі дії:

  1. Відкрийте конфігураційний файл через редактор, ввівши sudo nano / etc / sysconfig / network-scripts / ifcfg-eth0, де eth0 - назва необхідного інтерфейсу.
  2. Підтвердіть справжність облікового запису для виконання подальших дій.
  3. Пошукайте параметр «ZONE» і поміняйте його значення на потрібне, наприклад, public або home.
  4. затисніть клавіші Ctrl + O, Щоб зберегти зміни.
  5. Не змінюйте ім'я файлу, а просто натисніть на Enter.
  6. вийдіть з текстового редактора через Ctrl + X.

Тепер зона інтерфейсу буде такою, якою ви її вказали, до моменту наступного редагування конфігураційного файлу. Щоб оновлені параметри вступили в дію, виконайте sudo systemctl restart network.service і sudo systemctl restart firewalld.service.

Установка зони за замовчуванням

Вище ми вже демонстрували команду, яка дозволяла дізнатися встановлену за замовчуванням зону. Її також можна змінити, встановивши параметр на свій вибір. Для цього в консолі досить прописати sudo firewall-cmd --set-default-zone \u003d 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 \u003d public --add-service \u003d http, де --zone \u003d public - зона для активації, а --add-service \u003d http - назва сервісу. Врахуйте, що така зміна буде діяти тільки в межах однієї сесії.

Перманентне додавання здійснюється через sudo firewall-cmd --zone \u003d public --permanent --add-service \u003d http, а результат «Success» свідчить про успішне завершення операції.

переглянути повний список постійних правил для певної зони можна, відобразивши список в окремому рядку консолі: sudo firewall-cmd --zone \u003d public --permanent --list-services.

Рішення неполадки з відсутністю доступу до сервісу

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

проброс порту

Як відомо, всі мережеві сервіси використовують певний порт. Він запросто виявляється фаєрволом, і по ньому можуть виконуватися блокування. Щоб уникнути таких дій з боку фаервола, потрібно відкрити необхідний порт командою sudo firewall-cmd --zone \u003d public --add-port \u003d 0000 / tcp, де --zone \u003d public - зона для порту, --add-port \u003d 0000 / tcp - номер і протокол порту. Опція firewall-cmd --list-ports відобразить список відкритих портів.

Якщо ж вам необхідно відкрити порти, що входять в діапазон, скористайтеся рядком sudo firewall-cmd --zone \u003d public --add-port \u003d 0000-9999 / udp, де --add-port \u003d 0000-9999 / udp - діапазон портів і їх протокол.

Наведені вище команди лише дозволять протестувати застосування подібних параметрів. Якщо воно пройшло успішно, слід додати ці ж порти в постійні настройки, а робиться це шляхом введення sudo firewall-cmd --zone \u003d public --permanent --add-port \u003d 0000 / tcp або sudo firewall-cmd --zone \u003d public --permanent --add-port \u003d 0000-9999 / udp. Перелік відкритих постійних портів проглядається так: sudo firewall-cmd --zone \u003d public --permanent --list-ports.

визначення сервісу

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


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

Створення призначених для користувача зон

Ви вже знаєте, що спочатку в FirewallD створено велику кількість різноманітних зон з певними правилами. Однак трапляються ситуації, коли системному адміністратору потрібно створити призначену для користувача зону, як, наприклад, «Publicweb» для встановленого веб-сервера або «PrivateDNS» - для DNS-сервера. На цих двох прикладах ми і розберемо додавання гілок:


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

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

зони

Демон firewalld управляє групами правил за допомогою так званих зон.

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

Комп'ютери, які часто підключаються до різних мереж (наприклад, ноутбуки) можуть використовувати зони, щоб змінювати набори правил в залежності від середовища. Наприклад, при підключенні до громадської мережі WiFi брандмауер може застосовувати суворіші правила, а в домашній мережі послаблювати обмеження.

У firewalld існують такі зони:

  • drop: найнижчий рівень довіри мережі. Весь вхідний трафік скидається без відповіді, підтримуються тільки вихідні з'єднання.
  • block: ця зона схожа на попередню, але при цьому вхідні запити скидаються з повідомленням icmp-host-prohibited або icmp6-adm-prohibited.
  • public: ця зона являє публічну мережу, якій не можна довіряти, однак підтримує вхідні з'єднання в індивідуальному порядку.
  • external: зона зовнішніх мереж. Підтримує маскування NAT, завдяки чому внутрішня мережа залишається закритою, але з можливістю отримання доступу.
  • internal: зворотна сторона зони external, внутрішні мережі. Комп'ютерів в цій зоні можна довіряти. Доступні додаткові сервіси.
  • dmz: використовується для комп'ютерів, розташованих в DMZ (ізольованих комп'ютерів, які не матимуть доступу до іншої частини мережі); підтримує тільки деякі вхідні з'єднання.
  • work: зона робочої мережі. Більшості машин в мережі можна довіряти. Доступні додаткові сервіси.
  • home: зона домашньої мережі. Оточенню можна довіряти, але підтримуються тільки певні користувачем вхідні з'єднання.
  • trusted: всім машинам в мережі можна довіряти.

збереження правил

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

Більшість команд firewall-cmd може використовувати прапор -permanent, який збереже правило, після чого воно буде використовуватися на постійній основі.

Увімкнути брандмауер firewalld

Для початку потрібно включити демон. Unit-файл systemd називається firewalld.service. Щоб запустити демон, введіть.

sudo systemctl start firewalld.service

Переконайтеся, що сервіс запущений:

firewall-cmd --state
running

Тепер брандмауер запущений і працює відповідно до конфігурації за замовчуванням.

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

Правила брандмауера

Перегляд правил за замовчуванням

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

firewall-cmd --get-default-zone
public

На даний момент firewalld не отримував ніяких інструкцій щодо інших зон, крім того, до інших зон не прив'язаний ні один інтерфейс, тому зараз зона public є зоною за замовчуванням, а також єдиною активною зоною.

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


public
interfaces: eth0 eth1

До зони public прив'язані два мережевих інтерфейсу: eth0 і eth1. Інтерфейси, прив'язані до зони, працюють згідно з правилами цієї зони.

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

firewall-cmd --list-all
public (default, active)
interfaces: eth0 eth1
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Отже, тепер ви знаєте, що:

  • public є зоною за замовчуванням і єдиною активною зоною.
  • До неї прив'язані інтерфейси eth0 і eth1.
  • Вона підтримує трафік DHCP (привласнення IP-адрес) і SSH (віддалене адміністрування).

Інші зони брандмауера

Тепер слід ознайомитися з іншими зонами.

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

firewall-cmd --get-zones

Щоб отримати параметри конкретної зони, додайте в команду прапор -zone \u003d.

firewall-cmd --zone \u003d home --list-all
home
interfaces:
sources:
services: dhcpv6-client ipp-client mdns samba-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Щоб вивести визначення всіх доступних зон, додайте опцію -list-all-zones. Для більш зручного перегляду висновок можна передати в пейджер:

firewall-cmd --list-all-zones | less

Параметри зон інтерфейсів

Спочатку всі мережеві інтерфейси прив'язані до зони за замовчуванням.

Зміна зони інтерфейсу на одну сесію

Щоб перевести інтерфейс в іншу зону на одну сесію, використовуйте опції -zone \u003d і -change-interface \u003d.

Наприклад, щоб перевести eth0 в зону home, потрібно ввести:

sudo firewall-cmd --zone \u003d home --change-interface \u003d eth0
success

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

Щоб переконатися, що інтерфейс прив'язаний до нової зоні, введіть:

firewall-cmd --get-active-zones
home
interfaces: eth0
public
interfaces: eth1

Після перезавантаження брандмауера інтерфейс буде знову прив'язаний до зони за замовчуванням.

sudo systemctl restart firewalld.service
firewall-cmd --get-active-zones
public
interfaces: eth0 eth1

Зміна зони інтерфейсу на постійній основі

Якщо в налаштуваннях інтерфейсу не зазначена жодна інша зона, після перезапуску брандмауера інтерфейс буде знову прив'язаний до зони за замовчуванням. У CentOS такі конфігурації зберігаються в каталозі / etc / sysconfig / network-scripts, в файлах формату ifcfg-interface.

Щоб визначити зону інтерфейсу, відкрийте конфігураційний файл цього інтерфейсу, наприклад:

В кінець файлу додайте змінну ZONE \u003d і в якості значення вкажіть іншу зону, наприклад, home:

. . .
DNS1 \u003d 2001: 4860: 4860 :: 8844
DNS2 \u003d 2001: 4860: 4860 :: 8888
DNS3 \u003d 8.8.8.8
ZONE \u003d home

Збережіть і закрийте файл.

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

sudo systemctl restart network.service
sudo systemctl restart firewalld.service

Після перезапуску інтерфейс eth0 буде прив'язаний до зони home.

firewall-cmd --get-active-zones
home
interfaces: eth0
public
interfaces: eth1

Налаштування зони за замовчуванням

Також ви можете вибрати іншу зону за замовчуванням.

Для цього використовується параметр -set-default-zone \u003d. Після цього всі інтерфейси будуть прив'язані до іншої зоні:

sudo firewall-cmd --set-default-zone \u003d home
home
interfaces: eth0 eth1

Створення правил для додатків

Додавання сервісу в зону

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

firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

Примітка: Більше інформації про кожен конкретний сервісі можна знайти в файлах.xml в каталозі / usr / lib / firewalld / services. До приклад, відомості про сервіс SSH зберігаються в /usr/lib/firewalld/services/ssh.xml і виглядають так:



SSH

Щоб включити підтримку сервісу в тій чи іншій зоні, використовуйте опцію -add-service \u003d. Вказати цільову зону можна за допомогою опції -zone \u003d. За замовчуванням ці зміни будуть працювати протягом однієї сесії. Щоб зберегти зміни та використовувати їх на постійній основі, додайте прапор -permanent.

Наприклад, щоб запустити веб-сервер для обслуговування трафіку HTTP, для початку потрібно включити підтримку цього трафіку в зоні public на одну сесію:

sudo firewall-cmd --zone \u003d public --add-service \u003d http

Якщо сервіс потрібно додати в зону за замовчуванням, прапор -zone \u003d можна опустити.

Переконайтеся, що операція пройшла успішно:

firewall-cmd --zone \u003d public --list-services
dhcpv6-client http ssh

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

sudo firewall-cmd --zone \u003d public --permanent --add-service \u003d http

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

sudo firewall-cmd --zone \u003d public --permanent --list-services
dhcpv6-client http ssh

Тепер зона public підтримує HTTP і порт 80 на постійній основі. Якщо веб-сервер може обслуговувати трафік SSL / TLS, ви також можете додати сервіс https (для однієї сесії або в набір постійних правил):

sudo firewall-cmd --zone \u003d public --add-service \u003d https
sudo firewall-cmd --zone \u003d public --permanent --add-service \u003d https

Що робити, якщо потрібний сервіс недоступний?

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

Спосіб 1: Налаштування порту

Найпростіше в такій ситуації відкрити порт додатки в необхідній зоні брандмауера. Потрібно просто вказати порт або діапазон портів і протокол.

Наприклад, додаток, яке використовує порт 5000 і протокол TCP, потрібно додати в зону public. Щоб включити підтримку програми на дну сесію, використовуйте параметр -add-port \u003d і вкажіть протокол tcp або udp.

sudo firewall-cmd --zone \u003d public --add-port \u003d 5000 / tcp

Переконайтеся, що операція пройшла успішно:

firewall-cmd --list-ports
5000 / tcp

Також можна вказати послідовний діапазон портів, відокремивши перший і останній порт діапазону за допомогою тире. Наприклад, якщо додаток використовує UDP-порти 4990-4999, щоб додати їх в зону public, потрібно ввести:

sudo firewall-cmd --zone \u003d public --add-port \u003d 4990-4999 / udp

Після тестування можна додати ці правила в постійні настройки брандмауера.

sudo firewall-cmd --zone \u003d public --permanent --add-port \u003d 5000 / tcp
sudo firewall-cmd --zone \u003d public --permanent --add-port \u003d 4990-4999 / udp
sudo firewall-cmd --zone \u003d public --permanent --list-ports
success
success
4990-4999 / udp 5000 / tcp

Спосіб 2: Визначення сервісу

Додавати порти в зони просто, але якщо у вас багато таких додатків, в результаті буде складно відстежити, для чого призначений той чи інший порт. Щоб уникнути такої ситуації, можна замість портів визначити сервіси.

Сервіси - це просто набори портів з певним ім'ям і описом. За допомогою сервісів простіше управляти настройками, але самі по собі вони складніше, ніж порти.

Для початку потрібно скопіювати існуючий сценарій з каталогу / usr / lib / firewalld / services в каталог / etc / firewalld / services (тут брандмауер шукає нестандартні налаштування).

Наприклад, можна скопіювати визначення сервісу SSH і використовувати його для визначення умовного сервісу example. Ім'я сценарію має збігатися з ім'ям сервісу і мати расшіреніе.xml.

sudo cp /usr/lib/firewalld/services/service.xml /etc/firewalld/services/example.xml

Відкоректуйте скопійований файл.

sudo nano /etc/firewalld/services/example.xml

У файлі знаходиться визначення SSH:



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.

Більшу частину визначення сервісу складають метадані. Змінити коротке ім'я сервісу можна в тегах . Це человекочітаемое ім'я сервісу. Також потрібно додати опис сервісу. Єдина зміна, яку вплине на роботу сервісу - це зміна номера порту і протоколу.

Повернемося до сервісу example; допустимо, він вимагає відкрити TCP- порт 7777 і UDP- порт 8888. Визначення буде виглядати так:



Example Service
This is just an example service. It probably shouldn "t be used on a real system.

Збережіть і закрийте файл.

Перезапустіть брандмауер:

sudo firewall-cmd --reload

Тепер сервіс з'явиться в списку доступних сервісів:

firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns example ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

створення зон

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

Наприклад, для веб-сервера можна створити зону publicweb, а для DNS-сервісу - зону privateDNS.

Створюючи зону, потрібно додати її в постійні настройки брандмауера.

Спробуйте створити зони publicweb і privateDNS:

sudo firewall-cmd --permanent --new-zone \u003d publicweb
sudo firewall-cmd --permanent --new-zone \u003d privateDNS

Переконайтеся, що зони існують:

sudo firewall-cmd --permanent --get-zones

У поточній сесії нові зони не будуть доступні:

firewall-cmd --get-zones
block dmz drop external home internal public trusted work

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

sudo firewall-cmd --reload
firewall-cmd --get-zones
block dmz drop external home internal privateDNS public publicweb trusted work

Тепер ви можете присвоїти новим зонам необхідні сервіси і порти. Наприклад, в зону publicweb можна додати SSH, HTTP і HTTPS.

sudo firewall-cmd --zone \u003d publicweb --add-service \u003d ssh
sudo firewall-cmd --zone \u003d publicweb --add-service \u003d http
sudo firewall-cmd --zone \u003d publicweb --add-service \u003d https
firewall-cmd --zone \u003d publicweb --list-all
publicweb
interfaces:
sources:
services: http https ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

У зону privateDNS можна додати DNS:

sudo firewall-cmd --zone \u003d privateDNS --add-service \u003d dns
firewall-cmd --zone \u003d privateDNS --list-all
privateDNS
interfaces:
sources:
services: dns
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Потім можна прив'язати мережеві інтерфейси до нових зон:

sudo firewall-cmd --zone \u003d publicweb --change-interface \u003d eth0
sudo firewall-cmd --zone \u003d privateDNS --change-interface \u003d eth1

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

sudo firewall-cmd --zone \u003d publicweb --permanent --add-service \u003d ssh
sudo firewall-cmd --zone \u003d publicweb --permanent --add-service \u003d http
sudo firewall-cmd --zone \u003d publicweb --permanent --add-service \u003d https
sudo firewall-cmd --zone \u003d privateDNS --permanent --add-service \u003d dns

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

Наприклад, eth0 буде прив'язаний до publicweb:

sudo nano / etc / sysconfig / network-scripts / ifcfg-eth0
. . .
IPV6_AUTOCONF \u003d no
DNS1 \u003d 2001: 4860: 4860 :: 8844
DNS2 \u003d 2001: 4860: 4860 :: 8888
DNS3 \u003d 8.8.8.8
ZONE \u003d publicweb

А інтерфейс eth1 буде прив'язаний до privateDNS:

sudo nano / etc / sysconfig / network-scripts / ifcfg-eth1
. . .
NETMASK \u003d 255.255.0.0
DEFROUTE \u003d "no"
NM_CONTROLLED \u003d "yes"
ZONE \u003d privateDNS

Перезапустіть мережеві сервіси та брандмауер:

sudo systemctl restart network
sudo systemctl restart firewalld

Перевірте зони:

firewall-cmd --get-active-zones
privateDNS
interfaces: eth1
publicweb
interfaces: eth0

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

firewall-cmd --zone \u003d publicweb --list-services
http htpps ssh
firewall-cmd --zone \u003d privateDNS --list-services
dns

Призначені для користувача зони повністю готові до роботи. Ви можете зробити будь-яку з них зоною за замовчуванням. наприклад:

sudo firewall-cmd --set-default-zone \u003d publicweb

Автоматичний запуск брандмауера

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

Для цього введіть:

sudo systemctl enable firewalld

Тепер брандмауер буде запускатися разом з сервером.

висновок

Брандмауер firewalld - дуже гнучкий інструмент. Зони дозволяють швидко змінювати політику брандмауера.

Тепер ви знаєте, як працює firewalld, знайомі з основними поняттями брандмауера, вмієте створювати призначені для користувача зони і додавати сервіси.

Tags:,

Починаючи з CentoOS 7 для настройки правил фільтрації трафіку з'явився новий інструмент firewalld. Саме його рекомендується використовувати для управління правилами iptables. У CentOS 8 замість стандартного пакета фільтрації iptables тепер використовується фреймворк nftables, і при налаштуванні правил брандмауера через firewalld насправді ви налаштовуєте nftables. У цій статті ми розглянемо установку, основні концепції та налаштування брандмауера firewalld на сервері під керуванням CentOS 8 (в CentOS 7 все аналогічно).


FirewallD - міжмережевий екран для захисту сервера від небажаного трафіку з підтримкою динамічного управління правилами (без перезапуску) і реалізації постійних правил брандмауера. Працює як інтерфейс для і nftables. FirewallD можна використовувати майже в усіх дистрибутивах Linux.

Основні концепції firewalld, зони і правила

Перед тим як приступити до встановлення та налаштування firewalld, Ми познайомимося з поняттям зон, які використовуються для визначення рівня довіри до різним з'єднанням. Для різних зон firewalld можна застосувати різні правила фільтрації, вказувати активні опції брандмауера у вигляді попередньо визначених служб, протоколів і портів, перенаправлення портів і rich-rules.

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

У firewalld є зони, де вже попередньо налаштовані дозволу для різних служб. Можна використовувати ці настройки або створювати власні зони. Список зон по-замовчуванню, які створюються при установці firewalld (зберігаються в каталозі / usr / lib / firewalld / zones /):

drop мінімальний рівень довіри. Всі вхідні з'єднання блокуються без відповіді, допускаються тільки вихідні з'єднання;
block зона схожа з попередньою, але при відхиленні вхідних запитів відправляється повідомлення icmp-host-prohibited для Ipv4 або icmp6-adm-prohibited для Ipv6;
public представляє громадські, недовірених мережі. Можна вирішувати вибрані вхідні з'єднання в індивідуальному порядку;
external зовнішні мережі при використанні брандмауера в якості шлюзу. Вона налаштована для маскування NAT, тому ваша внутрішня мережа залишається приватною, але доступною;
internal антонім зони external. Хост володіють достатнім рівнем довіри, доступний ряд додаткових служб;
dmz використовується для комп'ютерів, розташованих в DMZ (ізольовані комп'ютери без доступу до іншої мережі). Дозволені тільки певні вхідні з'єднання;
work зона для робочих машин (більшість комп'ютерів в мережі довірені);
home зона домашньої мережі. Можна довіряти більшості ПК, але підтримуються тільки певні вхідні з'єднання;
trusted довіряти всім машинам в мережі. Найбільш відкрита з усіх доступних опцій, Вимагає свідомого використання.

В firewalld використовується два набори правил - постійні і тимчасові. Тимчасові правила працюють до перезавантаження сервера. За замовчуванням при додаванні правил в firewalld, Правила вважаються тимчасовими ( runtime). Щоб додати правило на постійній основі потрібно використовувати прапор - permanent. Такі правила будуть застосовуватися після перезавантаження сервера.

Установка і включення firewalld в CentOS

У CentOS 7/8 firewalld встановлюється за умовчанням при ОС. Якщо ви його видалили і хочете встановити firewalld, можете скористатися стандартним менеджером / dnf:

# Yum install firewalld -y - для Centos 7
# Dnf install firewalld -y - для Centos 8

щоб демон firewalld запускався автоматично зі стартом сервера, потрібно додати його в:

# Systemctl enable firewalld

І запустити:

# Systemctl start firewalld

Перевірити статус сервісу:

# Systemctl status firewalld

● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-10-14 14:54 : 40 +06; 22s ago Docs: man: firewalld (1) Main PID: 13646 (firewalld) CGroup: /system.slice/firewalld.service └─13646 / usr / bin / python2 -Es / usr / sbin / firewalld --nofork --nopid Oct 14 14:54:40 server.vpn.ru systemd: Starting firewalld - dynamic firewall daemon ... Oct 14 14:54:40 server.vpn.ru systemd: Started firewalld - dynamic firewall daemon.

Або командою:

# Firewall-cmd --state

Команда firewall-cmd є фронтенда firewalld до nftables / iptables.

# Firewall-cmd --state

Робота з правилами firewalld

Правила за умовчанням:

Перед налаштуванням правил firewalld, потрібно перевірити, яка зона використовується за умовчанням:

# Firewall-cmd --get-default-zone

Так як firewalld ми тільки встановили і ще не налаштовували, у нас зона по-замовчуванню public.

Перевіримо активну зону. Вона також одна - public:

# Firewall-cmd --get-active-zones

Public interfaces: eth0

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

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

# Firewall-cmd --list-all

Public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

З лістингу видно, що в дану зону додані звичайні операції, пов'язані з DHCP-клієнтом і ssh.

доступні зони

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

# Firewall-cmd --get-zones

У мене вийшов такий список:

Block dmz drop external home internal public trusted work

Щоб перевірити правила конкретної зони, потрібно додати прапор - zone.

# Firewall-cmd --zone \u003d home --list-all

Home target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client mdns samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

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

# Firewall-cmd --list-all-zones

Лістинг буде досить великий, так як зон може бути багато.

Зміна зони за замовчуванням.

За замовчуванням всі мережеві інтерфейси розташовані в зоні public, Але їх можна перенести в будь-яку з зон, командою:

# Firewall-cmd --zone \u003d home -change-interface \u003d eth0

після параметра -zone \u003d вказати потрібну зону.

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

# Firewall-cmd --set-default-zone \u003d home

Додавання правил для додатків

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

Висновок буде містити велику кількість сервісів. Детальна інформація про службу міститься в її xml файлі. Ці файли розташовані в директорії / Usr / lib / firewalld / services.

наприклад:

# Cd / usr / lib / firewalld / services

Mail (SMTP) This option allows incoming SMTP mail delivery. If you need to allow remote hosts to connect directly to your machine to deliver mail, enable this option. You do not need to enable this if you collect your mail from your ISP "s server by POP3 or IMAP, or if you use a tool such as fetchmail. Note that an improperly configured SMTP server can allow remote machines to use your server to send spam.

У XML файлі є опис сервісу, протокол і номер порту, який буде відкритий в firewalld.

При додаванні правил, ви можете використовувати параметр -add-service, Щоб відкрити доступ певного сервісу:

# Firewall-cmd --zone \u003d public --add-service \u003d http

# Firewall-cmd --zone \u003d public --add-service \u003d https

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

# Firewall-cmd --zone \u003d public --list-services

Dhcpv6-client http https ssh

Якщо ви хочете зробити ці правила постійними, при додаванні потрібно додати параметр -permanent.

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

# Firewall-cmd --permanent --zone \u003d public --remove-service \u003d http

Dhcpv6-client https ssh test

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

скопіюємо файл smtp.xml в директорію для роботи з сервісами користувачів:

# Cp /usr/lib/firewalld/services/smtp.xml / etc / firewalld / services

Змініть опис сервісу в файлі.

Сам файл xml теж потрібно перейменувати на ім'я вашого сервісу. Після чого, потрібно перезавантажити firewalld і перевірити чи є наш сервіс в списку:

Я назвав сервіс test і в списку він з'явився:

Syslog-tls telnet test tftp

Тепер можна додати створений сервіс в будь-яку зону:

# Firewall-cmd --zone \u003d public --add-service \u003d test --permanent

# Firewall-cmd --zone \u003d public --permanent --list-services

Dhcpv6-client http https ssh test

Якщо ви на знайшли потрібний вам сервіс в списку, ви можете відкрити потрібний порт на firewalld командою:

# Firewall-cmd --zone \u003d public -add-port \u003d 77 / tcp - відкрити 77 порт tcp
# Firewall-cmd --zone \u003d public -add-port \u003d 77 / udp - відкрити 77 порт udp
# Firewall-cmd --zone \u003d public -add-port \u003d 77-88 / udp - відкрити діапазон портів 77-88 udp
# Firewall-cmd --zone \u003d public -list-ports - перевірити список дозволених портів

Заблокувати / дозволити ICMP відповіді:

# Firewall-cmd --zone \u003d public --add-icmp-block \u003d echo-reply
# Firewall-cmd --zone \u003d public --remove-icmp-block \u003d echo-reply

Видалити додану порт:

# Firewall-cmd --zone \u003d public -remove-port \u003d 77 / udp - видалити тимчасове правило 77 udp

# Firewall-cmd --permanent --zone \u003d public -remove-port \u003d 77 / udp - видалити постійне правило

Додавання власних зон

Ви можете створити власну зону (назву її our):

# Firewall-cmd --permanent --new-zone \u003d our

Після створення нової зони, як і після створення сервісу, потрібне перезавантаження firewalld:

# Firewall-cmd --reload

# Firewall-cmd --get-zones

Block dmz drop external home internal our public trusted work

зона our доступна. Ви можете додавати в неї сервіси або відкривати певні порти.

Firewalld: блокування IP-адрес, створення виключень

Ви можете додавати в виключення firewalld довірені адреси IP адреси або блокувати небажані.

Щоб додати в виключення конкретний IP- адреса (Наприклад 8.8.8.8) на вашому сервері через firewalld, Використовуйте команду:

# Firewall-cmd --zone \u003d public --add-rich-rule \u003d "rule family \u003d" ipv4 "source address \u003d" 8.8.8.8 "accept"

Перевірте зону, і переконайтеся що IP доданий в виключення в правилі rich rules:

Public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client http https ssh test ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: rule family \u003d "ipv4" source address \u003d "8.8.8.8" accept

щоб заблокувати IP, Потрібно замінити accept на reject:

# Firewall-cmd --zone \u003d public --add-rich-rule \u003d "rule family \u003d" ipv4 "source address \u003d" 8.8.4.4 "reject"

# Firewall-cmd --zone \u003d public --list-all

Public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client http https ssh test ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: rule family \u003d "ipv4" source address \u003d "8.8.8.8" accept rule family \u003d "ipv4" source address \u003d "8.8.4.4" reject

Можна дозволити певну службу тільки для запитів з конкретного IP адреси:

# Firewall-cmd --permanent --add-rich-rule "rule family \u003d" ipv4 "source address \u003d" 10.10.1.0/24 "service name \u003d" https "accept"

Якщо вам потрібно терміново заблокувати взагалі всі запити до сервера, використовуйте команду паніки:

# Firewall-cmd --panic-on

Вийти з режиму паніки можна або командою:

# Firewall-cmd --panic-off

Або перезагрузив сервер.

Ви можете заблокувати конфігурацію firewalld, щоб локальні сервіси з правами root не могли змінити створені вами правила брандмауера:

# Firewall-cmd --lockdown-on

Вийти з режиму блокування:

# Firewall-cmd --lockdown-off

Перенаправлення портів в firewalld

Ви можете створити правило перенаправлення портів в firewalld. Щоб перенаправити 443 порт на 9090:

# Firewall-cmd --zone \u003d public --add-forward-port \u003d port \u003d 443: proto \u003d tcp: toport \u003d 9090 --permanent

Щоб видалити правило перенаправлення порту:

# Firewall-cmd --zone \u003d public --remove-forward-port \u003d port \u003d 443: proto \u003d tcp: toport \u003d 9090

F irewallD є інструментом управління брандмауера, доступний за умовчанням на серверах CentOS 7. В основному, це оболонка навколо IPTables і поставляється з графічним інструментом конфігурації firewall-config і інструментом командного рядка firewall-cmd. За допомогою сервісу IPtables, кожна зміна вимагає видалення старих правил і створення нових правил в файлі ` / Etc / sysconfig / iptables`, А при firewalld застосовуються тільки відмінності.

зони FirewallD

FirewallD використовує сервіси та зони замість правил і ланцюжків в Iptables. За умовчанням доступні наступні зони:

  • drop - Відкиньте всі вхідні мережеві пакети без відповіді, тільки вихідні підключення доступні.
  • block- Відхилити всі вхідні мережеві пакети з повідомленням icmp-host-prohibited, тільки вихідні підключення доступні.
  • public - тільки вибрані вхідні з'єднання приймаються, для використання в громадських місцях
  • external - Для зовнішніх мереж з masquerading, тільки вибрані вхідні з'єднання приймаються.
  • dmz - демілітаризованої зони DMZ, публічно доступні з обмеженим доступом до внутрішньої мережі, тільки вибрані вхідні з'єднання приймаються.
  • work
  • home - Для комп'ютерів в домашній зоні, тільки вибрані вхідні з'єднання приймаються.
  • internal - Для комп'ютерів в вашої внутрішньої мережі, тільки вибрані вхідні з'єднання приймаються.
  • trusted - Все мережеві з'єднання приймаються.

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

# Firewall-cmd --get-zones work drop internal external trusted home dmz public block

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

# Firewall-cmd --get-default-zone public

Щоб змінити зону за замовчуванням:

сервіси FirewallD

Сервіси FirewallD представляють собою файли конфігурації XML, З інформацією про записи служби для firewalld. Щоб отримати список всіх доступних послуг:

# Firewall-cmd --get-services amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

файли XML зберігаються в каталогах / Usr / lib / firewalld / services / і / Etc / firewalld / services /.

Налаштування брандмауера з FirewallD

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

Спочатку ми встановимо зона за замовчуванням для DMZ.

# Firewall-cmd --set-default-zone \u003d dmz # firewall-cmd --get-default-zone dmz

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

# Firewall-cmd --zone \u003d dmz --add-service \u003d http --permanent # firewall-cmd --zone \u003d dmz --add-service \u003d https --permanent

Відкрийте порт 25 (SMTP) і порт 465 (SMTPS):

Firewall-cmd --zone \u003d dmz --add-service \u003d smtp --permanent firewall-cmd --zone \u003d dmz --add-service \u003d smtps --permanent

Open, IMAP, IMAPS, POP3 і POP3S порти:

Firewall-cmd --zone \u003d dmz --add-service \u003d imap --permanent firewall-cmd --zone \u003d dmz --add-service \u003d imaps --permanent firewall-cmd --zone \u003d dmz --add-service \u003d pop3 --permanent firewall-cmd --zone \u003d dmz --add-service \u003d pop3s --permanent

Оскільки порт SSH змінений на 7022, ми видалимо службу SSH (порт 22) і відкриємо порт 7022

Firewall-cmd --remove-service \u003d ssh --permanent firewall-cmd --add-port \u003d 7022 / tcp --permanent

Для реалізації змін нам потрібно перезавантажити брандмауер:

Firewall-cmd --reload

І, нарешті, ви можете перерахувати правила.

Centos 7, на відміну від CentOS 6, в базі йде з новим брандмауером - firewalld. Його можна відключити і замінити на старий добрий iptables, але якщо до цього немає прямих передумов, то краще звикати до чогось нового, а не впиратися в старе. Це не означає, що Windows 10 краще Windows 7, а Windows XP краще Windows 7;) Гарний приклад на цю тему - selinux. Якщо спочатку майже всі (і я теж) його відключали і навіть трохи лаяли, то тепер майже ніхто це не радить, тільки якщо є впевненість, що так треба. Навпаки, багато хто вже звик (або звикають) користуватися semanage. Не будемо і ми відразу відключати firewalld, а спробуємо, як він на смак.

Firewalld - це не принципово інший брандмауер. Це інша надбудова над netfilter, тому якщо ви маєте досвід роботи з iptables, то помучитися трохи ви спокійно почнете користуватися новим інструментом.

Запуск і зупинка firewalld

Перевіримо, чи запущений firewalld:

# Systemctl status firewalld

Тут буде розширена інформація. Щоб коротко, так (працює) чи ні можна так:

# Firewall-cmd --state
running

Ок, працює.

Зупинка firewalld:

# Systemctl stop firewalld

Заборона автостарту:

# Systemctl disable firewalld

Запуск firewalld:

# Systemctl start firewalld

Включення автостарту:

# Systemctl enable firewalld

зони firewalld

У firewalld широко використовується поняття зони. Список всіх допустимих зон за замовчуванням:

# Firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Призначення зон (умовно, звичайно):

  • drop - всі вхідні пакети відкидаються (drop) без відповіді. Дозволені лише вихідні з'єднання.
  • block - вхідні з'єднання відхиляються (rejected) з відповіддю icmp-host-prohibited (або icmp6-adm-prohibited). Дозволені лише ініційовані системою з'єднання.
  • public - зона по-замовчуванню. З назви зрозуміло, що ця зона націлена на роботу в соціальних мережах. Ми не довіряємо цій мережі і дозволяємо тільки певні вхідні з'єднання.
  • external - зона для зовнішнього інтерфейсу роутера (т.зв. маськарадінг). Дозволені тільки певні нами вхідні з'єднання.
  • dmz - зона DMZ, дозволені тільки певні вхідні з'єднання.
  • work - зона робочої мережі. Ми все ще не довіряємо нікому, але вже не так сильно, як раніше :) Дозволені тільки певні вхідні з'єднання.
  • home - домашня зона. Ми довіряємо оточенню, але дозволені тільки певні вхідні з'єднання
  • internal - внутрішня зона. Ми довіряємо оточенню, але дозволені тільки певні вхідні з'єднання
  • trusted - дозволено все.

Список всіх активних зон:

# Firewall-cmd --get-active-zones
public
interfaces: enp1s0

Ага, зона public, до якої приєднано мережевий інтерфейс enp1so. Далі в зону public додамо новий порт, на якому буде висіти sshd.

Знаючи ім'я мережевого інтерфейсу (наприклад, enp1s0), можна дізнатися, до якої зони він належить:

# Firewall-cmd --get-zone-of-interface \u003d enp1s0
public

А можна дізнатися, які інтерфейси належать конкретній зоні:

# Firewall-cmd --zone \u003d public --list-interfaces
enp1s0

Приклад: дозволяємо ssh на нестандартному порту

Давайте дозволимо доступ до сервера по ssh на порте 2234 / tcp, а не на 22 / tcp, як по-замовчуванню. Попутно трохи торкнемося selinux.

Спочатку подивимося, що взагалі дозволено постійно на нашому сервері:

# Firewall-cmd --permanent --list-all
public (default)
interfaces:
sources:
services: ssh dhcpv6-client
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Я не використовую поки ipv6, тому відразу приберу соотв. правило з firewalld:

# Firewall-cmd --permanent --zone \u003d public --remove-service \u003d dhcpv6-client

Дозволимо на постійній основі (щоб після перезавантаження НЕ потерлася) з'єднання на порт 2234 / tcp (на нього повісимо sshd):

# Firewall-cmd --permanent --zone \u003d public --add-port \u003d 2234 / tcp

Перезавантажити правила:

# Firewall-cmd --reload

перевіримо:

# Firewall-cmd --zone \u003d public --list-ports
2234 / tcp

Ок, порт відкритий. Редагуємо конфиг sshd:

# Nano / etc / ssh / sshd_config
...
port 2234
...

# Systemctl restart sshd.service

Але SELinux, яку ви, сподіваюся, не відключали, не дасть підключитися до ssh на нестандартному порту (порт 2234 / tcp для sshd - нестандартний). Ви можете цей крок пропустити і перевірити, як сработатет захист SELinux, а можете відразу все налаштувати:

# Yum provides semanage
# Yum install policycoreutils-python
# Semanage port -a -t ssh_port_t -p tcp 2234

Ось тепер все ок. Перевіряємо підключення по ssh на новому порте. Якщо все ок, закриваємо доступ до порту 22:

# Firewall-cmd --permanent --zone \u003d public --remove-service \u003d ssh
# Firewall-cmd --reload

Дивимося, що вийшло:

# Firewall-cmd --list-all
public (default, active)
interfaces:
sources:
services:
ports: 2234 / tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

От і все.

Різні корисні команди:

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

# Firewall-cmd --panic-on

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

# Firewall-cmd --panic-off

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

# Firewall-cmd --query-panic

Перезавантажити правила firewalld без втрати поточних з'єднань:

# Firewall-cmd --reload

Перезавантажити правила firewalld і скинути поточні з'єднання (рекомендується тільки в разі проблем):

# Firewall-cmd --complete-reload

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

# Firewall-cmd --zone \u003d public --add-interface \u003d em1

Додати до зони мережевий інтерфейс (збережеться після перезавантаження firewall):

# Firewall-cmd --zone \u003d public --permanent --add-interface \u003d em1

Можна в конфіги ifcfg-enp1s0 вказати, якої зони належить цей інтерфейс. Для цього додамо ZONE \u003d work в файл / etc / sysconfig / network-scripts / ifcfg-enp1s0. Якщо параметр ZONE не вказано, буде призначена зона по-замовчуванню (параметр DefaultZone в файлі /etc/firewalld/firewalld.conf.

Дозволити діапазон портів:

# Firewall-cmd --zone \u003d public --add-port \u003d 5059-5061 / udp

Маскарад (masquerade, він же nat, він же ...):

Перевірити статус:

# Firewall-cmd --zone \u003d external --query-masquerade

Увімкнути:

# Firewall-cmd --zone \u003d external --add-masquerade

Тут треба зазначити, що ви можете включити masquerade і для зони public, наприклад.

Перенаправити входять на 22 порт на інший хост:

# Firewall-cmd --zone \u003d external --add-forward-port \u003d port \u003d 22: proto \u003d tcp: toaddr \u003d 192.168.1.23

Перенаправити входять на 22 порт на інший хост зі зміною порту призначення (з 22 на 192.168.1.23:2055):

# Firewall-cmd --zone \u003d external /
--add-forward-port \u003d port \u003d 22: proto \u003d tcp: toport \u003d 2055: toaddr \u003d 192.168.1.23

На цьому закінчу, тому що прикладів може бути нескінченно багато. Додам тільки, що особисто я не склав остаточно свою думку з приводу нововведення firewalld, тому що до синтаксису звикаєш довго і якщо в вашому зоопарку зустрічаються різні OS Linux, то по первости можуть бути проблеми саме зі звичкою. Але освоївши firewalld, ви розширите кругозір - найчастіше, це коштує витрачених зусиль.

переваги firewalld

Основна перевага - ви трохи абстрагіруетесь від ланцюжків iptables.Для включення перенаправлення портів не доведеться думати про PREROUTING або POSTROUTING на додаток до FORWARD. Вам дається "API від iptables від виробника", щось в цьому роді. Якщо ви включили nat, то неважливо, де саме (в якому порядковим номером поточних правил) розміщено правило. Ви просто вказуєте - включи nat на eth0. І без дурниць;) Це може бути зручно, якщо треба організувати web інтерфейс управління брандмауером.

Є можливість перевірити статус (наприклад, включений nat чи ні!). І також використовувати це в своїх скриптах, в логіці вашого застосування, наприклад. Я не знаю, як в iptables створити саме запит статусу (вкл / викл). Можна, звичайно, щось в роді iptables -L -t nat | grep "...", але погодьтеся, це трохи не те ж саме, що виконати "firewall-cmd --zone \u003d external --query-masquerade". Є, наприклад, сотні VM з CentOS, в яких можуть трохи відрізнятися назви wan інтерфейсів або ще щось в цьому роді. А так ви маєте універсальний командлет, який дасть очікуваний результат на різних машинах.

недоліки firewalld

Основний недолік, на мій погляд, це те, що при звикання почнеться відвикання від "чистого" iptables, який і в Debian, і в Ubuntu, і в CentOS і, взагалі, скрізь. Навіть, до речі, в мікротік синтаксис і ланцюжки схожі за типом на iptables. Це на любителя, звичайно. І професіоналу все одно, з чим працювати, якщо є конкретні умови, він буде працювати з тим, що є. Але ... я ретроград і відчайдушно опирався (за браком явних переваг) новинкам, які кожен великий гравець реалізує під себе. RedHat вигідно, якщо все більше нових фахівців будуть асами в firewalld.

І якщо ви перейшли на firewalld, то вже чистий синтаксис iptables вам тільки зашкодить - буде каша або просто зламається робота брандмауера, якщо ви почнете змінювати / доповнювати правила не за допомогою стандартного синтаксису firewalld.

Не хочу firewalld! Поверніть мені старий iptables!

Якщо все ж ви хочете повернути минуле і замінити firewalld на iptables, то зробити це зовсім не важко:

Новачкам тут не місце:

# Systemctl disable firewalld
# Systemctl stop firewalld

Ставимо старий добрий iptables:

# Yum install iptables-services

Запускаємо брандмауер:

# Systemctl start iptables
# Systemctl start ip6tables

Автозапуск при включенні:

# Systemctl enable iptables
# Systemctl enable ip6tables

Для збереження правил iptables після перезавантаження:

# / Sbin / iptables-save\u003e / etc / sysconfig / iptables
# / Sbin / ip6tables-save\u003e / etc / sysconfig / ip6tables

Або по-старому:

# Service iptables save

Поточні правила знаходяться в файлах:
/ Etc / sysconfig / iptables
/ Etc / sysconfig / ip6tables

Перезапуск iptables (наприклад, після здійснення яких-небудь змін):

# Systemctl restart iptables.service




Сподобалася стаття? поділіться їй