From e3f968347d160ebf8101890cc2a21bb5a43f798e Mon Sep 17 00:00:00 2001 From: Andrey Lutsenko Date: Sat, 13 Jun 2026 16:48:54 +1000 Subject: [PATCH] =?UTF-8?q?feat(haproxy):=20HTTP-=D0=B4=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=83=D0=BF=20=D0=BA=20Zabbix=20=D1=81=20allowlist=20zabbix-al?= =?UTF-8?q?lowed=20(0.7.3).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit zabbix.kalinamall.ru:80 → 192.168.160.53, только IP из zabbix-allowed. --- README.md | 9 ++++++--- docs/haproxy-install.md | 21 +++++++++++++++++---- haproxy.cfg | 32 +++++++++++++++++++++++++++++--- zabbix-allowed | 3 +++ 4 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 zabbix-allowed diff --git a/README.md b/README.md index 9e55f8c..44ea47b 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# reverse-proxy +# reverse-proxy Периметровая конфигурация **HAProxy** для сети **kalinamall.ru**: Exchange, RDS (веб/шлюз по HTTPS), 1С, Git, SAC, почтовый шлюз KSMG. Прямой RDP (3389) через HAProxy не используется — клиенты идут через RDS на **443** (`rds.kalinamall.ru`). TLS: HAProxy на **443** в режиме **TCP + SNI**, **не терминирует** TLS — сертификаты на бэкендах. -Доступ снаружи по allowlist: **Git** и **веб-SAC** (`sac.kalinamall.ru`) — файл `git-sac-allowed`; **1С** (`erp.kalinamall.ru`) — `1c-allowed`. **Seaca** — **`sac-api.kalinamall.ru`** без IP-фильтра (аутентификация на SAC). +Доступ снаружи по allowlist: **Git** и **веб-SAC** (`sac.kalinamall.ru`) — файл `git-sac-allowed`; **1С** (`erp.kalinamall.ru`) — `1c-allowed`; **Zabbix** (`zabbix.kalinamall.ru`, HTTP) — `zabbix-allowed`. **Seaca** — **`sac-api.kalinamall.ru`** без IP-фильтра (аутентификация на SAC). **Основной репозиторий:** [git.kalinamall.ru/PapaTramp/reverse-proxy](https://git.kalinamall.ru/PapaTramp/reverse-proxy) **Резерв (без секретов):** [github.com/PTah/reverse-proxy](https://github.com/PTah/reverse-proxy) — см. [политику репозиториев](docs/repo-policy.md) @@ -20,9 +20,12 @@ TLS: HAProxy на **443** в режиме **TCP + SNI**, **не терминир | Git (HTTPS) | `git.kalinamall.ru` | **192.168.160.129** | 443 | **`git-sac-allowed`** | | SAC (веб) | `sac.kalinamall.ru` | **192.168.160.145** | 443 | **`git-sac-allowed`** | | SAC / Seaca (mobile API) | **`sac-api.kalinamall.ru`** | тот же **192.168.160.145** | 443 | **нет** | +| Zabbix (веб) | **`zabbix.kalinamall.ru`** | **192.168.160.53** | **80** (HTTP) | **`zabbix-allowed`** | | Почтовый шлюз (KSMG) | `ksmg.kalinamall.ru` | **192.168.160.57** | 25 | нет | -DNS: **A** для `ext`, `autodiscover`, `rds`, `erp`, `git`, `sac`, **`sac-api`**, `ksmg` → публичный IP HAProxy. +DNS: **A** для `ext`, `autodiscover`, `rds`, `erp`, `git`, `sac`, **`sac-api`**, **`zabbix`**, `ksmg` → публичный IP HAProxy. + +Снаружи Zabbix открывают как **`http://zabbix.kalinamall.ru`** (без HTTPS на бэкенде). Если после **Git** в том же браузере **SAC** показывает Gitea — см. [SAC, Seaca и coalescing](docs/sac-access.md). diff --git a/docs/haproxy-install.md b/docs/haproxy-install.md index 44c538f..d54aade 100644 --- a/docs/haproxy-install.md +++ b/docs/haproxy-install.md @@ -1,4 +1,4 @@ -# Установка HAProxy и развёртывание конфигурации +# Установка HAProxy и развёртывание конфигурации Для этого репозитория нужен HAProxy **не ниже 2.4**. Конструкции `req_ssl_sni` и `tcp-request content accept` (разбор ClientHello для SNI в TCP-режиме) входят в штатные сборки **2.8.x** из Ubuntu 24.04 и во все актуальные ветки **3.x**. @@ -44,7 +44,7 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg ```bash sudo cp ~/reverse-proxy/haproxy.cfg /etc/haproxy/haproxy.cfg - sudo cp ~/reverse-proxy/git-sac-allowed ~/reverse-proxy/1c-allowed /etc/haproxy/ + sudo cp ~/reverse-proxy/git-sac-allowed ~/reverse-proxy/1c-allowed ~/reverse-proxy/zabbix-allowed /etc/haproxy/ ``` 3. Проверка и перезапуск: @@ -60,9 +60,9 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg ## Порты на фаерволе -На хосте с HAProxy с интернета обычно открывают только то, что слушает конфиг: **25**, **443** (и при использовании — **8404** для stats). Остальной трафик — по политике безопасности. +На хосте с HAProxy с интернета обычно открывают только то, что слушает конфиг: **25**, **80** (Zabbix HTTP), **443** (и при использовании — **8404** для stats). Остальной трафик — по политике безопасности. -Если позже добавите фронтенд на **80** для ACME (см. [letsencrypt-acme.md](letsencrypt-acme.md)), откройте и **TCP 80**. +Порт **80** используется для **`http://zabbix.kalinamall.ru`** (allowlist `zabbix-allowed`). Для ACME на других именах см. [letsencrypt-acme.md](letsencrypt-acme.md) — потребуется расширить `fe_http_zabbix` маршрутизацией по Host/пути. ## SAC и Seaca (sac-api) @@ -71,3 +71,16 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg - На 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/ +``` diff --git a/haproxy.cfg b/haproxy.cfg index 653b775..36fbd63 100644 --- a/haproxy.cfg +++ b/haproxy.cfg @@ -1,10 +1,11 @@ -# HAProxy — периметровый reverse-proxy для kalinamall.ru -# Config version: 0.7.2 +# HAProxy — периметровый reverse-proxy для kalinamall.ru +# Config version: 0.7.3 # Режим: TCP + SNI на 443 (TLS end-to-end, сертификаты на бэкендах) +# HTTP на 80: zabbix.kalinamall.ru → 192.168.160.53 (allowlist zabbix-allowed) # # Проверка синтаксиса: haproxy -c -f haproxy.cfg # Установка: скопируйте в /etc/haproxy/haproxy.cfg -# Allowlist: git-sac-allowed (git + sac веб), 1c-allowed → /etc/haproxy/ +# Allowlist: git-sac-allowed (git + sac веб), 1c-allowed, zabbix-allowed → /etc/haproxy/ # sac-api.kalinamall.ru — без IP-фильтра (Seaca с любого адреса, auth на SAC) global @@ -87,6 +88,31 @@ backend be_sac # веб sac.kalinamall.ru — только IP из git-sac-allowed; sac-api — без фильтра на frontend server sac 192.168.160.145:443 check check-ssl check-sni sac.kalinamall.ru verify none +# ----------------------------------------------------------------------------- +# HTTP (80): Zabbix — только HTTP на бэкенде, снаружи http://zabbix.kalinamall.ru +# Allowlist: /etc/haproxy/zabbix-allowed +# ----------------------------------------------------------------------------- + +frontend fe_http_zabbix + bind *:80 + mode http + option httplog + option forwardfor except 127.0.0.0/8 + + acl host_zabbix hdr(host) -i zabbix.kalinamall.ru + acl src_zabbix_allowed src -f /etc/haproxy/zabbix-allowed + + http-request deny deny_status 403 unless host_zabbix + http-request deny deny_status 403 if !src_zabbix_allowed + + default_backend be_zabbix + +backend be_zabbix + mode http + option forwardfor + # zabbix.kalinamall.ru (192.168.160.53), веб только HTTP + server zabbix 192.168.160.53:80 check + # ----------------------------------------------------------------------------- # SMTP (25): почтовый шлюз KSMG — ksmg.kalinamall.ru # ----------------------------------------------------------------------------- diff --git a/zabbix-allowed b/zabbix-allowed new file mode 100644 index 0000000..7cdddbd --- /dev/null +++ b/zabbix-allowed @@ -0,0 +1,3 @@ +5.100.81.121 +109.109.217.150 +109.110.54.2