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

Розділ 4: Налаштування брандмауера

У цьому розділі вам потрібно мати права root або вміти викорисовувати sudo, щоб стати root.

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

!!! "warning "Примітка щодо Rocky Linux 9.x і iptables""

Починаючи з Rocky Linux 9.0, `iptables` та всі пов’язані з ним утиліти офіційно застаріли. Це означає, що в наступних версіях операційної системи вони взагалі зникнуть. Попередня версія цього документа містила вказівки щодо налаштування `iptables`, але тепер їх видалено.

Для всіх поточних версій Rocky Linux рекомендується використовувати `firewalld`.

Налаштування брандмауера - firewalld

Для правил firewalld вам потрібно використовувати цю базову процедуру або бути знайомими з цими концепціями. Наші припущення такі: мережа LAN 192.168.1.0/24 і міст під назвою lxdbr0. Щоб було зрозуміло, у вас може бути багато інтерфейсів на вашому сервері LXD, один з яких, можливо, звернений до вашої WAN. Ви також збираєтеся створити зону для мостової та локальної мереж. Це лише для ясності зони. Інші назви зон насправді не застосовуються. Ця процедура передбачає, що ви вже знаєте основи брандмауера.

firewall-cmd --new-zone=bridge --permanent

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

firewall-cmd --reload

Ви хочете дозволити весь рух з мосту. Просто додайте інтерфейс і змініть ціль із «default» на «ACCEPT»:

!!! "warning "важливо""

Зміна цілі зони `firewalld` *має* виконуватися за допомогою параметра `--permanent`, тож ми можемо також просто ввести цей прапорець в інших наших командах і відмовитися від `--runtime-to-permanent` варіант.

Примітка

Якщо вам потрібно створити зону, у якій ви бажаєте дозволити повний доступ до інтерфейсу чи джерела, але не хочете вказувати будь-які протоколи чи служби, тоді ви має змінити ціль із «default» на «ACCEPT». Те саме стосується «DROP» та «REJECT» для певного IP-блоку, для якого у вас є власні зони. Щоб було зрозуміло, зона «відкидання» подбає про це за вас, доки ви не використовуєте спеціальну зону.

firewall-cmd --zone=bridge --add-interface=lxdbr0 --permanent
firewall-cmd --zone=bridge --set-target=ACCEPT --permanent

Якщо припустити, що помилок немає і все працює, просто перезавантажте:

firewall-cmd --reload

Якщо ви зараз перерахуєте свої правила за допомогою firewall-cmd --zone=bridge --list-all, ви побачите:

bridge (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: lxdbr0
  sources:
  services:
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Зверніть увагу, що ви також хочете дозволити свій локальний інтерфейс. Знову ж таки, включені зони названі невідповідно для цього. Створіть зону та використовуйте вихідний діапазон IP для локального інтерфейсу, щоб забезпечити доступ:

firewall-cmd --new-zone=local --permanent
firewall-cmd --reload

Додайте вихідні IP-адреси для локального інтерфейсу та змініть ціль на «ACCEPT»:

firewall-cmd --zone=local --add-source=127.0.0.1/8 --permanent
firewall-cmd --zone=local --set-target=ACCEPT --permanent
firewall-cmd --reload

Давайте перерахуємо «локальну» зону, щоб переконатися, що ваші правила існують за допомогою firewall-cmd --zone=local --list all, яка покаже:

local (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources: 127.0.0.1/8
  services:
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Ви хочете дозволити SSH із нашої надійної мережі. Тут ми будемо використовувати вихідні IP-адреси та вбудовану «довірену» зону. Ціль для цієї зони вже "ACCEPT" за замовчуванням.

firewall-cmd --zone=trusted --add-source=192.168.1.0/24

Додайте послугу в зону:

firewall-cmd --zone=trusted --add-service=ssh

Якщо все працює, перемістіть свої правила на постійні та перезавантажте правила:

firewall-cmd --runtime-to-permanent
firewall-cmd --reload

Перелік вашої «довіреної» зони покаже:

trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources: 192.168.1.0/24
  services: ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

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

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

Перевірте доступ і переконайтеся, що ви не заблоковані. Якщо ні, перенесіть свої правила на постійні, перезавантажте та винесіть зону "публічно", щоб забезпечити видалення SSH:

firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-all

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

Author: Steven Spencer

Contributors: Ezequiel Bruni, Ganna Zhyrnova