gemlog/public/uk/filter-outgoing-connections-with-ufw.gmi

113 lines
No EOL
5.5 KiB
Text
Raw 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.

# Обмеження вихідних з'єднань на Інтернет з ufw
ufw - це фронтенд утиліта командного рядка для спрощеного керування правилами iptables; зручна своєю простотою а також тим, що зберігає правила перманентно між системними сесіями.
Як відомо, стандартна конфігурація правил ufw блокує виключно вхідний трафік:
``` bash
# 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, тощо:
``` bash
ufw default deny outgoing
```
Після цього, дозволимо вихід на усі адреси Yggdrasil / Mycelium по відповідному діапазону:
``` bash
ufw allow out to 0200::/7
ufw allow out to 0400::/7
```
* можна явно задати порт, наприклад `... port 80 proto tcp`
Для підключення оверлейних мереж вище до публічних вузлів:
``` bash
ufw allow out to xx.xx.xx.xx port xxxx proto tcp
...
```
## DNS
Далі, дивимось адреси DNS для системного резольвера (наприклад в /etc/systemd/resolved.conf), та додаємо їх до списку; для Cloudflare - це буде 1.1.1.1:53:
``` bash
ufw allow out to 1.1.1.1 port 53 proto udp
```
або просто дозволяємо всі можливі:
``` bash
ufw allow out to any port 53 proto udp
```
Якщо використовується локальний DNS для Yggdrasil (https://yggdrasil-network.github.io/services.html#dns) або Mycelium, цей крок можна пропустити, адже вище ми вже дозволили усі вихідні з'єднання на ці мережі.
## NTP
Важливо дозволити синхронізацію годинника:
``` bash
ufw allow out 123/udp
```
## apt
Для системних оновлень, найпростіше підключити локальні дзеркала або проксі, для Yggdrasil це:
``` /etc/apt/apt.conf.d/proxy.conf
Acquire::http::Proxy "http://[xxx:xxxx:xxxx:xxxx::xxxx]:xxxx";
Acquire::https::Proxy "http://[xxx:xxxx:xxxx:xxxx::xxxx]:xxxx";
```
Для команди `extrepo` на прикладі додавання репозиторію LibreWolf:
``` bash
https_proxy=http://[xxx:xxxx:xxxx:xxxx::xxxx]:xxxx/ extrepo enable librewolf
```
* або/і `http_proxy`
## Git
``` bash
git config --global http.proxy http://[xxx:xxxx:xxxx:xxxx::xxxx]:xxxx
```
* або/і `https.proxy`
Додаючи програмне забезпечення через сторонні проксі, важливо розуміти, що ви отримуєте через них й ключі. Відповідно, маєте усвідомлювати, що такий спосіб отримання системних оновлень може бути потенційно небезпечним і краще користуватись окремими джерелами або власним сервером (у даному випадку - локальним)
## LXC
В деяких рішеннях контейнеризації, через подібні правила, можуть виникнути проблеми комунікації з гостьовими системами. На прикладі LXC, я описував ситуацію тут:
=> http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:yggdrasil_in_lxc#дополнительно
``` bash
systemctl status lxc-net
```
Якщо бачимо "_Error sending DHCP packet to 10.0.3.133: Operation not permitted_", додаємо відповідні виключення:
``` bash
ufw allow in on lxcbr0
ufw allow out on lxcbr0
```
після чого рестартимо сервіс:
``` bash
systemctl restart lxc-net.service
```
## Дивіться також
=> block-direct-internet-connections-but-openvpn-tun-with-ufw.gmi Блокування прямих з'єднань на Інтернет окрім як через тунель OpenVPN з ufw
=> linux-isolation-from-direct-internet-connections-based-on-qemu-virtual-machine-manager-with-vsock.gmi Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK
=> yggdrasil-is-network-with-distributed-routing.gmi Yggdrasil - мережа з децентралізованою маршрутизацією