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:
@@ -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`).
|
Периметровая конфигурация **HAProxy** для сети **kalinamall.ru**: Exchange, RDS (веб/шлюз по HTTPS), 1С, Git, SAC, почтовый шлюз KSMG. Прямой RDP (3389) через HAProxy не используется — клиенты идут через RDS на **443** (`rds.kalinamall.ru`).
|
||||||
|
|
||||||
TLS: HAProxy на **443** в режиме **TCP + SNI**, **не терминирует** TLS — сертификаты на бэкендах.
|
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)
|
**Основной репозиторий:** [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)
|
**Резерв (без секретов):** [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`** |
|
| 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 (веб) | `sac.kalinamall.ru` | **192.168.160.145** | 443 | **`git-sac-allowed`** |
|
||||||
| SAC / Seaca (mobile API) | **`sac-api.kalinamall.ru`** | тот же **192.168.160.145** | 443 | **нет** |
|
| 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 | нет |
|
| Почтовый шлюз (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).
|
Если после **Git** в том же браузере **SAC** показывает Gitea — см. [SAC, Seaca и coalescing](docs/sac-access.md).
|
||||||
|
|
||||||
|
|||||||
+17
-4
@@ -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**.
|
Для этого репозитория нужен 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
|
```bash
|
||||||
sudo cp ~/reverse-proxy/haproxy.cfg /etc/haproxy/haproxy.cfg
|
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. Проверка и перезапуск:
|
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)
|
## 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;`
|
- На nginx SAC (**192.168.160.145**): `server_name sac.kalinamall.ru sac-api.kalinamall.ru;`
|
||||||
|
|
||||||
Подробнее: [sac-access.md](sac-access.md).
|
Подробнее: [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
@@ -1,10 +1,11 @@
|
|||||||
# HAProxy — периметровый reverse-proxy для kalinamall.ru
|
# HAProxy — периметровый reverse-proxy для kalinamall.ru
|
||||||
# Config version: 0.7.2
|
# Config version: 0.7.3
|
||||||
# Режим: TCP + SNI на 443 (TLS end-to-end, сертификаты на бэкендах)
|
# Режим: TCP + SNI на 443 (TLS end-to-end, сертификаты на бэкендах)
|
||||||
|
# HTTP на 80: zabbix.kalinamall.ru → 192.168.160.53 (allowlist zabbix-allowed)
|
||||||
#
|
#
|
||||||
# Проверка синтаксиса: haproxy -c -f haproxy.cfg
|
# Проверка синтаксиса: haproxy -c -f haproxy.cfg
|
||||||
# Установка: скопируйте в /etc/haproxy/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)
|
# sac-api.kalinamall.ru — без IP-фильтра (Seaca с любого адреса, auth на SAC)
|
||||||
|
|
||||||
global
|
global
|
||||||
@@ -87,6 +88,31 @@ backend be_sac
|
|||||||
# веб sac.kalinamall.ru — только IP из git-sac-allowed; sac-api — без фильтра на frontend
|
# веб 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
|
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
|
# SMTP (25): почтовый шлюз KSMG — ksmg.kalinamall.ru
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
5.100.81.121
|
||||||
|
109.109.217.150
|
||||||
|
109.110.54.2
|
||||||
Reference in New Issue
Block a user