docs(security): план UFW, hardening HAProxy и бэкендов, скрипты deploy.

This commit is contained in:
PTah
2026-06-13 21:27:49 +10:00
parent f26d52b3b4
commit 787671f9ca
13 changed files with 679 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
# Firewall на бэкендах
Цель: сервисный порт доступен **с HAProxy** (`192.168.160.117`) и при необходимости с **admin**-подсетей; **не** с произвольного LAN/Internet напрямую.
Скрипт: [backend-ufw-from-haproxy.sh](../../scripts/security/backend-ufw-from-haproxy.sh).
## Таблица бэкендов
| Сервис | IP | Порт | Протокол | HAProxy backend | Примечание |
|--------|-----|------|----------|-----------------|------------|
| Exchange | 192.168.160.42 | 443 | TCP | be_exchange | OWA, ActiveSync |
| RDS Gateway | 192.168.160.40 | **4430** | TCP | be_rds | не 443 |
| 1С ERP | 192.168.160.150 | 443 | TCP | be_erp | |
| Git (Gitea) | 192.168.160.129 | 443 | TCP | be_git | SSH Gitea 2222 — отдельно |
| SAC | 192.168.160.145 | 443 | TCP | be_sac | |
| Zabbix | 192.168.160.53 | **80** | TCP | be_zabbix | HTTP |
| Synology heap | 192.168.160.185 | **5001** | TCP | be_syno_heap | DSM HTTPS |
| Synology exchange | 192.168.160.35 | **5001** | TCP | be_syno_exchange | |
| KSMG | 192.168.160.57 | 25 | TCP | be_ksmg_smtp | см. ниже |
## Шаблон правил (логика)
```
allow from 192.168.160.117 to <PORT>
allow from ADMIN_ALLOWED to 22/tcp # SSH, если на этом хосте
allow from LAN to ... # только если нужен прямой доступ (минимизировать)
deny incoming (default)
```
### Пример env для Git (192.168.160.129)
```bash
HAPROXY_IP=192.168.160.117
BACKEND_PORT=443
ADMIN_ALLOWED="192.168.160.0/24"
UFW_EXTRA_SERVICES="2222/tcp" # если Gitea SSH с admin LAN
```
## Особые случаи
### KSMG (192.168.160.57:25)
Почта с интернета приходит на **HAProxy:25** → KSMG. На KSMG в `EXTRA_ALLOWED` укажите **192.168.160.117**. Если другие MTA шлют **напрямую** на `.57` (минуя HAProxy), их IP тоже нужно явно разрешить — иначе после UFW почта встанет.
### RDS (192.168.160.40)
Порт **4430**, не 443. VPN-клиенты с прямым RDP на `.3` / `.40` обходят HAProxy — ограничивать **3389/4430** на session hosts отдельной GPO/файрволом.
### Synology
DSM может требовать доп. порты (5000, 5001, relay). Для доступа **только через HAProxy** достаточно **5001** с `.117`. Прямой доступ к NAS с LAN — отключить или ограничить в DSM **Панель → Безопасность → Брандмауэр**.
### Exchange
Внутренние клиенты Outlook могут ходить **напрямую** на `.42` по LAN — UFW не сломать без списка подсетей Exchange. Варианты:
- разрешить `192.168.160.0/24` на 443 (шире);
- или только `.117` + подсеть Exchange DAG/clients (уже).
### Windows vs Linux
Скрипт UFW — для **Linux**. Для Windows (Exchange, RDS, 1С) — **Windows Firewall with Advanced Security**: inbound allow **Remote IP** `192.168.160.117`, порт сервиса.
## Развёртывание на Linux-бэкенде
```bash
sudo mkdir -p /etc/haproxy/security
sudo cp backend-ufw.env.example /etc/haproxy/security/backend-ufw.env
sudo nano /etc/haproxy/security/backend-ufw.env
sudo bash backend-ufw-from-haproxy.sh
sudo bash backend-ufw-from-haproxy.sh --apply
```
## Проверка
С **HAProxy** (или симуляция):
```bash
curl -kI --resolve git.kalinamall.ru:443:ПУБЛИЧНЫЙ_IP https://git.kalinamall.ru/
```
С **другого** LAN-хоста (не .117):
```bash
curl -kI --connect-timeout 3 https://192.168.160.129/ # ожидается timeout/refused
```
В логе HAProxy — backend **UP**.