gemlog/public/uk/squid-out-proxy.gmi
postscriptum f36e7d7523 fix path
2026-01-05 13:17:44 +02:00

92 lines
No EOL
5.9 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.

# Налаштування вихідного проксі на базі squid
Якось, був організував собі віртуальну систему, ізольовану від Інтернет засобами VSOCK, з доступом виключно до мережі Yggdrasil. Оскільки мені потрібно звідти якось брати оновлення і робити це безпечно, вирішив на іншій машині, де є Інтернет - підняти вихідний проксі (out-proxy)
## Сервер
В Debian, сервер squid ставиться з репозиторію:
``` bash
apt install squid
```
### Налаштування
Тут в мене передбачається взаємодія між проксі-сервером "a" та клієнтом "b" на IPv6 інтерфейсі:
``` /etc/squid/conf.d/debian.conf
# інтерфейс, на якому слухати вхідні підключення
http_port [aaa:aaaa:aaaa:aaaa:aaaa]:3128
# налаштування журналів
logfile_rotate 0
# оголошуємо групу "remote", куди входить IP "b"
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 - мережа з децентралізованою маршрутизацією