# Установка HAProxy и развёртывание конфигурации Для этого репозитория нужен HAProxy **не ниже 2.4**. Конструкции `req_ssl_sni` и `tcp-request content accept` (разбор ClientHello для SNI в TCP-режиме) входят в штатные сборки **2.8.x** из Ubuntu 24.04 и во все актуальные ветки **3.x**. ## Вариант 1: пакет из репозитория Ubuntu (HAProxy 2.8.x) Обычно этого достаточно для данного конфига: ```bash sudo apt update sudo apt install -y haproxy haproxy -v ``` Проверьте, что версия **2.4+** (на Noble обычно **2.8.x**). ## Вариант 2: последняя ветка 3.x (PPA Vincent Bernat) Актуальные пакеты **HAProxy 3.3.x** для Noble публикуются в PPA [vbernat/haproxy-3.3](https://launchpad.net/~vbernat/+archive/ubuntu/haproxy-3.3) (номер микроверсии может обновляться; см. страницу PPA). Не подключайте одновременно несколько PPA с разными ветками HAProxy. ```bash sudo apt update sudo apt install -y software-properties-common sudo add-apt-repository -y ppa:vbernat/haproxy-3.3 sudo apt update sudo apt install -y haproxy haproxy -v sudo systemctl enable --now haproxy ``` Другие ветки того же автора (при необходимости): [haproxy-3.2](https://launchpad.net/~vbernat/+archive/ubuntu/haproxy-3.2), [haproxy-3.1](https://launchpad.net/~vbernat/+archive/ubuntu/haproxy-3.1), [haproxy-3.0](https://launchpad.net/~vbernat/+archive/ubuntu/haproxy-3.0), а также [haproxy-2.8](https://launchpad.net/~vbernat/+archive/ubuntu/haproxy-2.8) — всегда выбирайте **одну** строку версии. ## Проверка синтаксиса конфига ```bash sudo haproxy -c -f /etc/haproxy/haproxy.cfg ``` ## Установка конфигурации из репозитория 1. Убедитесь, что установлен HAProxy **2.4+** (см. разделы выше). 2. Скопируйте `haproxy.cfg` и файлы allowlist в `/etc/haproxy/`. Пример, если репозиторий лежит в домашнем каталоге: ```bash sudo cp ~/reverse-proxy/haproxy.cfg /etc/haproxy/haproxy.cfg sudo cp ~/reverse-proxy/git-sac-allowed ~/reverse-proxy/1c-allowed ~/reverse-proxy/zabbix-allowed ~/reverse-proxy/syno-allowed /etc/haproxy/ ``` 3. Проверка и перезапуск: ```bash sudo haproxy -c -f /etc/haproxy/haproxy.cfg sudo systemctl reload haproxy ``` ## Проверка `ssl verify none` на бэкендах В `backend` для 443 указано `ssl verify none`, чтобы health-check и при необходимости установка соединения не ломались на внутренних именах/SAN. Если вы выпустите внутренние доверенные CA и зададите их в системе, можно включить проверку (`verify required` + `ca-file`). ## Порты на фаерволе На хосте с HAProxy с интернета обычно открывают только то, что слушает конфиг: **25**, **80** (Zabbix HTTP), **443** (и при использовании — **8404** для stats). Остальной трафик — по политике безопасности. Порт **80** используется для **`http://zabbix.kalinamall.ru`** (allowlist `zabbix-allowed`). Для ACME на других именах см. [letsencrypt-acme.md](letsencrypt-acme.md) — потребуется расширить `fe_http_zabbix` маршрутизацией по Host/пути. ## SAC и Seaca (sac-api) - Веб-SAC: **`sac.kalinamall.ru`** — IP из **`git-sac-allowed`** - Seaca (Android): **`sac-api.kalinamall.ru`** — без allowlist; добавьте **A**-запись на тот же IP HAProxy - На nginx SAC (**192.168.160.145**): `server_name sac.kalinamall.ru sac-api.kalinamall.ru;` Подробнее: [sac-access.md](sac-access.md). ## Zabbix - **`zabbix.kalinamall.ru`** — **HTTP** на порту **80** (бэкенд **192.168.160.53:80**, без TLS) - Снаружи: **`http://zabbix.kalinamall.ru`**, не `https://` - IP-allowlist: **`zabbix-allowed`** (как `git-sac-allowed`) - DNS: **A** `zabbix.kalinamall.ru` → публичный IP HAProxy Проверка с allowlist IP: ```bash curl -sI --resolve zabbix.kalinamall.ru:80:ПУБЛИЧНЫЙ_IP http://zabbix.kalinamall.ru/ ``` ## Synology DSM (heap, exchange) | Имя | NAS | Порт DSM | |-----|-----|----------| | **`heap.kalinamall.ru`** | **192.168.160.185** | **5001** (HTTPS) | | **`exchange.kalinamall.ru`** | **192.168.160.35** | **5001** (HTTPS) | - Снаружи: **`https://heap.kalinamall.ru`**, **`https://exchange.kalinamall.ru`** (TCP passthrough, TLS на Synology) - IP-allowlist: **`syno-allowed`** - На NAS: сертификат **`*.kalinamall.ru`** (GlobalSign) и соответствующее имя в **Панель управления → Безопасность → Сертификат** - **`exchange.kalinamall.ru`** — Synology, **не** Microsoft Exchange (**`ext.kalinamall.ru`**) Проверка с allowlist IP: ```bash curl -kI --resolve heap.kalinamall.ru:443:ПУБЛИЧНЫЙ_IP https://heap.kalinamall.ru/ curl -kI --resolve exchange.kalinamall.ru:443:ПУБЛИЧНЫЙ_IP https://exchange.kalinamall.ru/ ``` При HTTP/2 coalescing в Chromium см. [sac-access.md](sac-access.md) — отдельная вкладка или `http2 off` на других бэкендах с тем же wildcard.