devzone.org.ua/post/blokuvannia-priamykh-zyednan-na-internet-okrim-iak-cherez-tunel-openvpn-z-ufw.md
2026-01-21 16:06:40 +02:00

102 lines
No EOL
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Блокування прямих з'єднань на Інтернет окрім як через тунель OpenVPN з ufw
Щось мене останнім часом починає харити цей ваш тренд цифровізації. Я завжди був мінімалістом і людиною, яка рахує сірники: не витрачає зайві обчислювальні ресурси (наприклад ігноруючи TLS де це можливо, окрім як форми авторизації, оплати, тощо) не використовує анонімайзери (бо сервіс без репутації та довіри - ніщо) а також, я довгий час принципово не користувався VPN, адже це зайвий виток довкола Землі, що так чи інакше забирає частину енергії в чиємусь дата-центрі.
В мене була навіть зародилась упевненість в тому, що свобода Інтернету - це не втеча від тіні а само-ідентифікація: оборона прав і свобод. Утім, озирнувшись довкола, я бачу що в цьому полі один: нікого мої цінності не цікавлять, натовп йде конвеєром на забій, не вилазячи зі своїх нашпигованих датчиками телефонів, які так чи інакше мають пряме відношення й до мене - адже цей чужий мені ідеологічно ареал не є чужим географічно.
Так як кожну подію і вчинок я тримаю в пам'яті, так само як її тримає на сервері журнал подій, так звана "паранойя" взяла верх, і я вирішив накинути на себе декілька шарів смішної для когось ковдри з тунелів.
## Навіщо блокувати прямі з'єднання
Це в принципі відома більш-менш досвідченим юзерам тема: підключаєшся до свого провайдера VPN і вважаєш, що все окей, допоки не помітиш, що з'єднання відвалилось і ти давно сидиш на прямому конекті через ISP.
Причин тому може бути багато:
* не правильно налаштований системний сервіс та відсутність авто-старту на ребуті або якийсь збій в налаштуваннях таблиці маршрутизації через кастомні налаштування системи
* якийсь глюк в network-manager на обнові
* збій в локальний мережі та обрив з'єднання з тунелем
Іншими словами, може бути що завгодно. Спеціалізований софт від провайдерів VPN, як правило, дбає про запобігання витокам; про це й дбає системний сервіс клієнта OpenVPN, налаштовуючи пріоритет таблиці маршрутизації (щонайменше в Linux) але я нікому не вірю, навіть собі.
## Чому ufw
Цей фронтенд (iptables) мені подобається тим, що він дозволяє встановлювати перманентні правила, виключаючи помилку синтаксису з блокуванням самого себе десь на сервері з вимкненим локальним терміналом. А також тим, що за ці роки я просто до нього звик і розумію його поведінку. Ось, навіть був днями таки [поставив на Fedora](https://devzone.org.ua/post/perekhid-na-iptablesufw-z-firewalld-fedora-43).
Звісно, делегувати фільтрацію трафіку на останній рубіж фаєрволу - таке собі, але в мене тут немає мети сильно заморочуватись, хочу лише зменшити об'єм витікаючих з під мене слідів у це болото. Кому цікава тема більш "глибокої" само-ізоляції, рекомендую до читання матеріал:
[Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK](https://devzone.org.ua/post/izoliatsiia-linux-vid-priamykh-internet-zyednan-na-bazi-qemu-virtual-machine-manager-i-vsock)
## До справи
Не так багато роботи, як передісторії :)
Встановлюємо ufw зі стандартним бекендом iptables (в залежностях) якщо якимось дивом ще сидите без фаєрволу:
``` bash
apt install ufw
```
* приклад спеціально для Debian бо для Fedora спочатку потрібно знести стандартний firewalld (за посиланням вище)
Вимикаємо весь вихідний трафік, який стандартно дозволений:
``` bash
ufw default deny outgoing
```
Переконуємось що все ок:
``` bash
# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), deny (outgoing), disabled (routed)
```
* тут я ще не впевнений, стосовно "disabled (routed)" - можливо це слабке місце, але поки так
Ну, і на системах з systemd глянемо, чи сервіс дійсно працює (active) і стартує з системою (enabled):
``` bash
systemctl status ufw
```
Тепер нам потрібно дозволити будь-який вихід на тунель:
``` bash
ufw allow out on tun0
```
Інтерфейс "tun0" може відрізнятись, якщо у вас динамічна конфігурація. Подивитись як він зветься та вказати свій, можна у файлі налаштувань OpenVPN (в залежності від софту) або при наявності такого з'єднання - переглянути активні:
``` bash
ifconfig
```
У разі, якщо вже було встановлене з'єднання VPN, на цьому можна було б закінчити, адже відтепер з'єднання Інтернет - буде доступним тільки за наявності підключення OpenVPN (у цьому випадку через tun0)
Але якщо ви спробуєте відключитись і підключитись до сервера VPN знову, фаєрвол не дасть того зробити. Отже, потрібно наостанок дозволити вихідні з'єднання саме на IP та порти "довірених" серверів. У разі, якщо користуєтесь Network Manager в GNOME - переходимо в налаштування мережі > з'єднання VPN > вкладку "Identity" і дивимось поле "Gateway". Оскільки я користуюсь ProtonVPN, список безкоштовних серверів UDP на прикладі Норвегії буде приблизно таким:
```
95.173.205.159:80, 95.173.205.159:5060, 95.173.205.159:1194, 95.173.205.159:51820, 95.173.205.159:4569
```
Коротке правило ufw виглядатиме наступним чином:
``` bash
ufw allow out to 95.173.205.159 port 5060,51820,80,4569,1194 proto udp
```
По аналогії додаємо стільки серверів, скільки потрібно і не забуваємо перевірити статус:
``` bash
ufw status
```
### Пам'ятка
* Якщо у вашій системі - декілька користувачів, потрібно про них подбати окремо, або попередити, що без VPN (або іншого інтерфейсу tun0) - інтернету не буде.
* Щоб автоматично підключатись до VPN через Network Manager, запускаємо в терміналі `nm-connection-editor`, шукаємо роутер (Wi-Fi або Ethernet) і після його виділення тиснемо піктограму шестерні; потрібна опція "Automatically connect to VPN" знаходиться у вкладці "General" де обираємо зі списку провайдера та зберігаємо налаштування.
## Дивіться також
* [Обмеження вихідних з'єднань на Інтернет з ufw](https://devzone.org.ua/post/obmezennia-vykhidnykh-zyednan-na-internet-z-ufw)
* [Безпечний перегляд сайтів з PAC на прикладі Yggdrasil з Yggstack](https://devzone.org.ua/post/bezpechnyy-perehliad-saytiv-yggdrasil-z-yggstack)