Обмеження вихідних з'єднань на Інтернет з ufw
ufw - це фронтенд утиліта командного рядка для спрощеного керування правилами iptables; зручна своєю простотою а також тим, що зберігає правила перманентно між системними сесіями.
Як відомо, стандартна конфігурація правил ufw блокує виключно вхідний трафік:
# ufw status verbose Status: active ... Default: deny (incoming), allow (outgoing), disabled (routed) ...
Тут, статус `allow (outgoing)` передбачає вихідні з'єднання, що може бути чутливим питанням у випадках, коли сервер має взаємодіяти виключно з мережами Yggdrasil / Mycelium, але його софт реалізує інтерактивний API (наприклад ActivitiPub, BitTorrent / PEX, SMTP, деякі реалізації FTP, тощо) і таким чином, можливі зовнішні звернення в Інтернет через вхідні запити з локальних мереж.
Найпростішим рішенням є блокування усіх вихідних з'єднань поряд з `deny (incoming)` та використання явних правил по білому списку, зокрема для DNS, NTP, apt, git, тощо:
ufw default deny outgoing
Після цього, дозволимо вихід на усі адреси Yggdrasil / Mycelium по відповідному діапазону:
ufw allow out to 0200::/7 ufw allow out to 0400::/7
- можна явно задати порт, наприклад `... port 80 proto tcp`
Для підключення оверлейних мереж вище до публічних вузлів:
ufw allow out to xx.xx.xx.xx port xxxx proto tcp ...
DNS
Далі, дивимось адреси DNS для системного резольвера (наприклад в /etc/systemd/resolved.conf), та додаємо їх до списку; для Cloudflare - це буде 1.1.1.1:53:
ufw allow out to 1.1.1.1 port 53 proto udp
або просто дозволяємо всі можливі:
ufw allow out to any port 53 proto udp
Якщо використовується локальний DNS для Yggdrasil (https://yggdrasil-network.github.io/services.html#dns) або Mycelium, цей крок можна пропустити, адже вище ми вже дозволили усі вихідні з'єднання на ці мережі.
NTP
Важливо дозволити синхронізацію годинника:
ufw allow out 123/udp
apt
Для системних оновлень, найпростіше підключити локальні дзеркала або проксі, для Yggdrasil це:
Acquire::http::Proxy "http://[xxx:xxxx:xxxx:xxxx::xxxx]:xxxx"; Acquire::https::Proxy "http://[xxx:xxxx:xxxx:xxxx::xxxx]:xxxx";
Для команди `extrepo` на прикладі додавання репозиторію LibreWolf:
https_proxy=http://[xxx:xxxx:xxxx:xxxx::xxxx]:xxxx/ extrepo enable librewolf
- або/і `http_proxy`
Git
git config --global http.proxy http://[xxx:xxxx:xxxx:xxxx::xxxx]:xxxx
- або/і `https.proxy`
Додаючи програмне забезпечення через сторонні проксі, важливо розуміти, що ви отримуєте через них й ключі. Відповідно, маєте усвідомлювати, що такий спосіб отримання системних оновлень може бути потенційно небезпечним і краще користуватись окремими джерелами або власним сервером (у даному випадку - локальним)