Лёгкий Proxy
Иногда прокси нужен быстро:
для тестов, CI/CD, подключения сервисов или временной инфраструктуры.
Docker Compose — самый простой и чистый способ сделать это за пару минут.
Ниже — 3 варианта: SOCKS5, **HTTP-proxy, **HA-proxy**. Можно поднимать по отдельности или оба сразу.
Вариант 1: SOCKS5-proxy за 1 минуту
SOCKS5 — самый универсальный тип прокси. Работает практически с любым трафиком.
docker-compose.yml
services:
socks5-proxy:
image: serjs/go-socks5-proxy:latest
container_name: socks5-proxy
restart: unless-stopped
ports:
- "1080:1080"
environment:
# REQUIRE_AUTH=false — если нужна прокси без авторизации
- REQUIRE_AUTH=true
- PROXY_USER=user
- PROXY_PASSWORD=asdasd!
networks:
- proxy-network
healthcheck:
test: ["CMD", "nc", "-z", "localhost", "1080"]
interval: 30s
timeout: 10s
retries: 3
networks:
proxy-network:
driver: bridgeВариант 2: HTTP-proxy (Tinyproxy)
HTTP-прокси подходит для браузеров и простых сценариев (curl, apt, сервисы, которые не умеют SOCKS).
docker-compose.yml
services:
http-proxy:
image: vimagick/tinyproxy:latest
container_name: http-proxy
restart: unless-stopped
ports:
- "3128:3128"
environment:
- PORT=3128
# логин:пароль для basic auth
- AUTH=myuser:mypassword123
networks:
- proxy-network
healthcheck:
test: ["CMD", "nc", "-z", "localhost", "3128"]
interval: 30s
timeout: 10s
retries: 3
networks:
proxy-network:
driver: bridgeВариант 3: HA-proxy Transparent
Прозрачный прокси 443 через HAProxy (TCP passthrough)
0) Термины
- edge — защитный сервер с публичным IP, на него приходит весь трафик :443
- origin — реальный сервер с сайтом/сервисом на :443
- passthrough — HAProxy не расшифровывает TLS, просто проксирует TCP
1) Требования
- На edge открыт порт
443/tcpнаружу - На origin порт
443/tcpдоступен только с IP edge (рекомендуется) - HAProxy будет работать в режиме
mode tcp
2) Установка HAProxy на edge (Ubuntu/Debian)
sudo apt update
sudo apt install -y haproxy
haproxy -vsudo nano /etc/haproxy/haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
maxconn 20000
daemon
defaults
log global
mode tcp
option tcplog
timeout connect 5s
timeout client 1m
timeout server 1m
frontend ft_443
bind *:443
mode tcp
default_backend bk_origin_443
backend bk_origin_443
mode tcp
# Базовая проверка доступности TCP
server origin ORIGIN_IP:443 check
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl restart haproxy
sudo systemctl enable haproxy3) Проверка что passthrough работает
curl -vk https://<EDGE_DOMAIN_OR_IP>/4) Важно: на origin будут видны IP HAProxy (как исправить)
В режиме TCP passthrough origin не знает реальный IP клиента.
Решение: включить PROXY protocol от HAProxy до origin.
4.1) Включаем PROXY protocol в HAProxy
В backend добавь send-proxy-v2:
backend bk_origin_443
mode tcp
server origin ORIGIN_IP:443 send-proxy-v2 check
sudo haproxy -c -f /etc/haproxy/haproxy.cfg && sudo systemctl restart haproxy 4.2) Настраиваем origin (пример для Nginx)
На origin в nginx нужно слушать 443 с proxy_protocol.
Пример (если nginx терминирует TLS на origin):
server {
listen 443 ssl proxy_protocol;
server_name example.com;
# доверяем только edge
set_real_ip_from <EDGE_IP>;
real_ip_header proxy_protocol;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
}
}Важно: set_real_ip_from должен быть именно IP edge, иначе можно подделать IP.
Перезагрузка nginx:
sudo nginx -t && sudo systemctl reload nginx5) Закрываем origin от всего мира (рекомендовано)
На origin разрешаем вход на 443 только с edge:
UFW (пример)
sudo ufw allow from <EDGE_IP> to any port 443 proto tcp
sudo ufw deny 443/tcp
sudo ufw status verbose6) (Опционально) SNI routing: разные origin на одном 443
Если на edge нужно маршрутизировать по домену (SNI), добавляем inspect TLS ClientHello:
frontend ft_443
bind *:443
mode tcp
tcp-request inspect-delay 5s
tcp-request content accept if { req.ssl_hello_type 1 }
use_backend bk_site1 if { req.ssl_sni -i site1.example.com }
use_backend bk_site2 if { req.ssl_sni -i site2.example.com }
default_backend bk_origin_443
backend bk_site1
mode tcp
server s1 10.0.0.10:443 send-proxy-v2 check
backend bk_site2
mode tcp
server s2 10.0.0.11:443 send-proxy-v2 check7) Логи и отладка на edge
sudo journalctl -u haproxy -f
sudo tail -f /var/log/haproxy.log8) Готовый чеклист
- HAProxy слушает *:443 на edge
- backend указывает на ORIGIN_IP:443
- (опция) send-proxy-v2 включен
- origin умеет proxy_protocol и доверяет только edge IP
- origin закрыт firewall’ом для всего мира, открыт только для edge
- Проверка curl -vk https://EDGE/ проходит