# Перехід на iptables/ufw з firewalld (Fedora 43)

На дистрибутив Fedora я перейшов приблизно рік тому і він мені сподобався майже усім. Усім, окрім мабуть навороченого firewalld, який досі не розумію та не маю наміру його вивчати, бо за роки адміністрування серверів на базі Debian, приловчився до формування правил з ufw, перевіривши їх часом та практикою.

Через свою лінь та страх щось міняти зі стандартних пресетів без розуміння теми, довгий час таки сидів на firewalld, налаштовував його засобами графічної утиліти firewall-config, вештаючись зонами та переключалками тимчасових/перманентних правил. Так, цей інструмент можливо зручний для корпоративної інфраструктури, де потрібні оновлення правил маршрутизації без обриву з'єднання та гнучкість їх налаштувань. Але на ПК чи невеличкому приватному сервері - це реально для мене зайве.

До того ж, тільки днями на свіжій інсталяції помітив можливість підключатись до сусідньої машини Fedora на 22 порт, який від її встановлення не дозволяв там явно. Я користуюсь локальними мережами Yggdrasil та Mycelium, де "локальними" тут є потенційно тисячі анонімних користувачів цих мереж і будь хто з них може брутфорсити мій обліковий запис 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, буде показано стандартну політику фаєрволу: в мене заборонені всі вхідні та дозволені всі вихідні з'єднання. Тобто, стандартно, якщо список порожній - ніхто не зможе нікуди підключатись на вхідних, чого цілком достатньо для більшості юзерів ПК.

Інакше, додаємо ті порти, які кому потрібно. Деякі приклади для одного зі своїх асетів занотував тут:
=> filter-outgoing-connections-with-ufw.gmi Обмеження вихідних з'єднань на Інтернет з 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
```

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

## Дивіться також

=> https://devzone.org.ua/post/perekhid-na-iptablesufw-z-firewalld-fedora-43 Веб-адаптація цього матеріалу з коментарями на DevZone
=> https://linux.org.ua/index.php?topic=12318.0 Тред на LOU