From c84ec213040e910e3cee6f6f26253fd6d2a73440 Mon Sep 17 00:00:00 2001 From: postscriptum Date: Wed, 8 Oct 2025 18:20:18 +0300 Subject: [PATCH] add `squid-out-proxy.gmi` --- public/uk/index.gmi | 1 + public/uk/squid-out-proxy.gmi | 93 +++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 public/uk/squid-out-proxy.gmi diff --git a/public/uk/index.gmi b/public/uk/index.gmi index 993f35c..988a914 100644 --- a/public/uk/index.gmi +++ b/public/uk/index.gmi @@ -9,6 +9,7 @@ ### Нотатки +=> squid-out-proxy.gmi 2025-10-08 Налаштування вихідного проксі на базі squid => reticulum-meshchat-with-connection-over-yggdrasil.gmi 2025-10-07 Reticulum / MeshChat з підключенням через Yggdrasil => pyseeder-i2p-ecosystem-support-with-yggdrasil.gmi 2025-10-04 Pyseeder: підтримка екосистеми I2P в мережі Yggdrasil => setup-i2pd-with-i2p-network-connection-over-yggdrasil.gmi 2025-10-02 Встановлення роутера i2pd з підключенням до мережі I2P через Yggdrasil diff --git a/public/uk/squid-out-proxy.gmi b/public/uk/squid-out-proxy.gmi new file mode 100644 index 0000000..4aadc51 --- /dev/null +++ b/public/uk/squid-out-proxy.gmi @@ -0,0 +1,93 @@ +# Налаштування вихідного проксі на базі squid + +Якось, був організував собі віртуальну систему, ізольовану від Інтернет засобами VSOCK, з доступом виключно до мережі Yggdrasil. Оскільки мені потрібно звідти якось брати оновлення і робити це безпечно, вирішив на іншій машині, де є Інтернет - підняти вихідний проксі (out-proxy) + +## Сервер + +В Debian, сервер squid ставиться з репозиторію: + +``` bash +apt install squid +``` + +### Налаштування + +Тут в мене передбачається взаємодія між проксі-сервером "a" та клієнтом "b" на IPv6 інтерфейсі: + +``` /etc/squid/debian.conf +#/etc/squid/debian.conf + +# інтерфейс, на якому слухати вхідні підключення +http_port [aaa:aaaa:aaaa:aaaa:aaaa]:3128 + +# налаштування журналів +logfile_rotate 0 + +# оголошуємо групу "remote", куди входить IP "bbb:bbbb:bbbb:bbbb:bbbb" +acl remote src bbb:bbbb:bbbb:bbbb:bbbb + +# оголошуємо набір правил "updates" типу "dstdomain" +# мені проксі потрібен тільки для системних оновлень, +# окрім iptables, на всяк випадок, я вирішив додати правила на піддомени (у вас може бути інший набір - дивіться /etc/apt/sources.list.d) +acl updates dstdomain .debian.org .debian.net .armbian.com .github.com .gitlab.com .crates.io .fastlydns.net .librewolf.net .nodesource.com + +# вмикаємо обмеження у послідовності +http_access allow remote updates +http_access deny all +``` + +Запускаємо і дивимось чи все в порядку: + +* `systemctl restart squid` - застосувати зміни конфігурації (перезапуск) +* `systemctl enable squid` - автозапуск проксі сервера при старті системи +* `systemctl status squid` - статус проксі сервера +* `netstat -tulpn | grep 3128` - перевірити, де слухається порт + +### Фаєрвол + +Yggdrasil - це локальна мережа, відповідно до нашого проксі можуть підключитись усі її користувачі (а не тільки наша віртуальна машина) +Якщо ви не хочете щоб усі ходили з вашого Інтернет IP на вказані сервери групи "updates", потрібно дозволити доступ тільки конкретній адресі, у нашому випадку це "b". Для керування iptables, я використовую фронт-енд ufw, тому приклад такий: + +``` +ufw allow from bbb:bbbb:bbbb:bbbb:bbbb to aaa:aaaa:aaaa:aaaa:aaaa port 3128 proto tcp +``` +* переконайтесь що фаєрвол активний і правило додане: `ufw status` + +Також, в мене вимкнені вихідні (пірингові) підключення в Інтернет з машини "a" де працює проксі-сервер, тому я окремо дозволив вихід на 80/443 TCP: + +``` bash +ufw allow out 80,443/tcp +``` + +На Веб-порти, я згодом планую дозволяти тільки конкретні IP по списку. Для цього знадобиться скрипт, що резольвитиме DNS і оновлюватиме правила iptables. Є готові "комбайни" типу Dansguardian, але мені тут не потрібен батьківський контроль з його семантичними фільтрами. Вирішуйте це питання для себе окремо. + +## Клієнт + +На клієнтській машині, в залежності від програмного забезпечення, шукаємо його налаштування і вказуємо там проксі. На прикладі apt в Debian, це буде файл: + +``` /etc/apt/apt.conf.d/proxy.conf +#/etc/apt/apt.conf.d/proxy.conf +Acquire::http::Proxy "http://[aaa:aaaa:aaaa:aaaa:aaaa]:3128"; +Acquire::https::Proxy "http://[aaa:aaaa:aaaa:aaaa:aaaa]:3128"; +``` + +Для підключення репозиторіїв утилітою extrepo, використовується команда з префіксом: + +``` +https_proxy=http://[aaa:aaaa:aaaa:aaaa:aaaa]:3128 extrepo enable librewolf +``` +* або / і `http_proxy` + +І так далі: тут гуглимо для себе, що кому треба. + +Якщо при підключенні бачите помилку групи 400, ймовірно потрібно додати домен до білого списку: йдемо на сервер і змінюємо нашу групу ACL ("updates"), після чого перезапускаємо squid і пробуємо підключитись знову. + +## Посилання + +=> https://devzone.org.ua/post/nalashtuvannia-vykhidnoho-proksi-na-bazi-squid Веб-версія цього матеріалу з коментарями на DevZone + +### Читайте також + +=> linux-isolation-from-direct-internet-connections-based-on-qemu-virtual-machine-manager-with-vsock.gmi Ізоляція Linux від прямих Інтернет з'єднань на базі QEMU / Virtual Machine Manager з VSOCK +=> filter-outgoing-connections-with-ufw.gmi Обмеження вихідних з'єднань на Інтернет з ufw +=> yggdrasil-is-network-with-distributed-routing.gmi Yggdrasil - мережа з децентралізованою маршрутизацією \ No newline at end of file