# Перехід на iptables/ufw з firewalld (Fedora 43) На дистрибутив Fedora я перейшов приблизно рік тому і він мені сподобався майже усім. Усім, окрім мабуть навороченого `firewalld`, який досі не розумію та не маю наміру його вивчати, бо за роки адміністрування серверів на базі Debian, приловчився до формування правил з `ufw`, перевіривши їх часом та практикою. Через свою лінь та страх щось міняти зі стандартних пресетів без розуміння теми, довгий час таки сидів на `firewalld`, налаштовував його засобами графічної утиліти `firewall-config`, вештаючись зонами та переключалками тимчасових/перманентних правил. Так, цей інструмент можливо зручний для корпоративної інфраструктури, де потрібні оновлення правил маршрутизації без обриву з'єднання та гнучкість їх налаштувань. Але на ПК чи невеличкому приватному сервері - це реально для мене зайве. До того ж, тільки днями на свіжій інсталяції помітив можливість підключатись до сусідньої машини Fedora на 22 порт, який від її встановлення не дозволяв там явно. Я користуюсь локальними мережами [Yggdrasil](https://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom) та [Mycelium](https://devzone.org.ua/post/vstanovlennia-routera-merezi-mycelium-v-linux), де "локальними" тут є потенційно тисячі анонімних користувачів цих мереж і будь хто з них може брутфорсити мій обліковий запис `root` не подаючи при цьому жодних ознак активності, а логи при цьому я не читаю. Хоч сам `sshd` не увімкнений з коробки, він може періодично пускатись вручну. Цей мій провтик у дебрях переключалок `firewall-config` став останньою краплею терпіння і я все таки вирішив повернутись назад, на `iptables`. ## Видалення залежностей firewalld Попередньо спинив сервіси: ``` bash sudo systemctl stop firewalld sudo systemctl disable firewalld ``` Видалив саму службу та її залежності, включно з `firewall-config`: ``` bash sudo dnf remove firewalld ``` * наскільки це правильно - я не знаю, можливо тут варто переглянути залежні служби, але сподіваюсь systemd все відрезольвить автоматично ## Встановлення iptables/ufw На цьому кроці, я згідно гугло-інструкцій спочатку поставив `iptables-services`, а потім `ufw`. Але в мене сталась якась плутанина з `iptables-nft`, `iptables-legacy`, `ip6tables` та ще бог зна чим. Тому я це все діло дропнув та виконав встановлення лише одного пакунку `ufw`: ``` bash sudo dnf install ufw ``` * на Fedora 43 передвстановлено `iptables-nft`, якщо його видалити, то при встановленні `ufw` - буде запропоновано залежність `iptables-legacy`: тут обирайте, кому який бекенд подобається. ### Базове налаштування ufw Якщо глянути стандартні правила: ``` sudo ufw status verbose ``` побачимо дозволи на 22/tcp і 5353/udp, тому я видалив їх послідовністю нумерованих команд: ``` sudo ufw delete 1 sudo ufw delete 1 ... ``` * допоки не буде чисто. * можна видалити командами по ключу SSH але ті що з айпішниками реально не вийшло підібрати, тому видалення номерами - тут стало в нагоді. Також, при перевірці статусу з `verbose`, буде показано стандартну політику фаєрволу: в мене заборонені всі вхідні та дозволені всі вихідні з'єднання. Тобто, стандартно, якщо список порожній - ніхто не зможе нікуди підключатись на вхідних, чого цілком достатньо для більшості юзерів ПК. Інакше, додаємо ті порти, які кому потрібно. Деякі приклади для одного зі своїх асетів занотував в матеріалі [Обмеження вихідних з'єднань на Інтернет з ufw](https://devzone.org.ua/post/obmezennia-vykhidnykh-zyednan-na-internet-z-ufw) * це суто окремий сценарій бо я там блокую вихідний трафік для запобігання діркам в SMTP/ActivityPub та інших "балакучих" протоколах. Тепер, важливо запустити сервіс нашого високорівневого фаєрволу: ``` bash sudo systemctl start ufw ``` Не менш важливо увімкнути сервіс, щоб запускався після ребуту системи: ``` bash sudo systemctl enable ufw ``` І власне увімкнути сам ufw: ``` bash sudo ufw enable ``` ### Тестування Після першого ребуту, бажано перевірити чи все пішло як планувалось: ``` bash sudo systemctl status ufw ``` * `active`/`enabled` ``` bash sudo ufw status ``` * має бути активним (`active`) Активні правила `iptables`: ``` bash sudo iptables -L -v -n ``` Щоб переконатись, що це дійсно працює фактично, можна спробувати підключитись з іншої машини на неоголошений правилами порт. ## Дивіться також * [Тред на LOU](https://linux.org.ua/index.php?topic=12318.0)