docs(security): периметр 80/443→HAProxy, 25→KSMG; UFW на .117
Переписаны docs/security под текущий этап: SSH/stats из SSH_ALLOWED, 80/443 для всех. Скрипт UFW дополнен правилом 8404.
This commit is contained in:
@@ -1,90 +1,55 @@
|
||||
# Firewall на бэкендах
|
||||
|
||||
Цель: сервисный порт доступен **с HAProxy** (`192.168.160.117`) и при необходимости с **admin**-подсетей; **не** с произвольного LAN/Internet напрямую.
|
||||
**Статус: не внедряем сейчас.** Текущий этап — UFW только на HAProxy ([haproxy-host.md](haproxy-host.md)).
|
||||
|
||||
Цель (когда дойдём): сервисный порт только с **HAProxy** `192.168.160.117` + admin при необходимости.
|
||||
|
||||
Скрипт: [backend-ufw-from-haproxy.sh](../../scripts/security/backend-ufw-from-haproxy.sh).
|
||||
|
||||
## Таблица бэкендов
|
||||
## Бэкенды за HAProxy
|
||||
|
||||
| Сервис | 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 | см. ниже |
|
||||
| Сервис | IP | Порт | HAProxy backend |
|
||||
|--------|-----|------|-----------------|
|
||||
| Exchange | 192.168.160.42 | 443 | be_exchange |
|
||||
| RDS Gateway | 192.168.160.40 | 4430 | be_rds |
|
||||
| 1С ERP | 192.168.160.150 | 443 | be_erp |
|
||||
| Git (Gitea) | 192.168.160.129 | 443 | be_git |
|
||||
| SAC | 192.168.160.145 | 443 | be_sac |
|
||||
| Zabbix | 192.168.160.53 | 80 | be_zabbix |
|
||||
| Synology heap | 192.168.160.185 | 5001 | be_syno_heap |
|
||||
| Synology exchange | 192.168.160.35 | 5001 | be_syno_exchange |
|
||||
|
||||
## Шаблон правил (логика)
|
||||
`fe_smtp` в HAProxy — опционально для LAN; inbound **25** с интернета на **KSMG**, не через `.117`.
|
||||
|
||||
```
|
||||
allow from 192.168.160.117 to <PORT>
|
||||
allow from ADMIN_ALLOWED to 22/tcp # SSH, если на этом хосте
|
||||
allow from LAN to ... # только если нужен прямой доступ (минимизировать)
|
||||
deny incoming (default)
|
||||
```
|
||||
## KSMG (192.168.160.57) — отдельно от HAProxy
|
||||
|
||||
### Пример env для Git (192.168.160.129)
|
||||
| Путь | DNAT |
|
||||
|------|------|
|
||||
| Интернет → SMTP | MikroTik **25** → `.57` |
|
||||
| HAProxy → KSMG | только если используется `fe_smtp` из LAN |
|
||||
|
||||
При UFW на KSMG: разрешить **25** с интернета (или по списку MTA), **не** полагаться на HAProxy.
|
||||
|
||||
## Шаблон (Linux)
|
||||
|
||||
```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
|
||||
ADMIN_ALLOWED="192.168.128.0/17"
|
||||
```
|
||||
|
||||
## Особые случаи
|
||||
|
||||
### KSMG (192.168.160.57:25)
|
||||
|
||||
С **интернета** на HAProxy проброшены только **80/443** — inbound SMTP **не** приходит на **HAProxy:25**. Почта с периметра идёт **напрямую на KSMG** (или иным маршрутом), минуя HAProxy.
|
||||
|
||||
`fe_smtp` в `haproxy.cfg` — для **LAN** (прокси на KSMG с `.117`). На KSMG в `EXTRA_ALLOWED` укажите **192.168.160.117**, если этот путь используется. IP внешних MTA, шлющих **напрямую** на `.57`, тоже нужно явно разрешить — иначе после 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 # dry-run
|
||||
sudo bash backend-ufw-from-haproxy.sh --apply
|
||||
```
|
||||
|
||||
## Проверка
|
||||
## Особые случаи (кратко)
|
||||
|
||||
С **HAProxy** (или симуляция):
|
||||
- **Exchange / Windows** — Windows Firewall, не UFW; внутренние Outlook-клиенты могут ходить на `.42` по LAN.
|
||||
- **RDS** — порт **4430**; прямой RDP мимо HAProxy — отдельная политика.
|
||||
- **Synology** — DSM firewall; с HAProxy достаточно **5001** с `.117`.
|
||||
- **Gitea SSH 2222** — отдельное правило в `UFW_EXTRA_SERVICES`.
|
||||
|
||||
```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**.
|
||||
С HAProxy — сервис OK. С другого LAN IP на `https://192.168.160.129/` — refused/timeout.
|
||||
|
||||
Reference in New Issue
Block a user