feat(haproxy): HTTP-доступ к Zabbix с allowlist zabbix-allowed (0.7.3).

zabbix.kalinamall.ru:80 → 192.168.160.53, только IP из zabbix-allowed.
This commit is contained in:
Andrey Lutsenko
2026-06-13 16:48:54 +10:00
parent e7e653a9e8
commit e3f968347d
4 changed files with 55 additions and 10 deletions
+6 -3
View File
@@ -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).
+17 -4
View File
@@ -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/
```
+29 -3
View File
@@ -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
# -----------------------------------------------------------------------------
+3
View File
@@ -0,0 +1,3 @@
5.100.81.121
109.109.217.150
109.110.54.2