Remove SSH (port 22) from HAProxy; drop ssh.lst and port-22 docs

This commit is contained in:
PTah
2026-04-11 19:27:27 +10:00
parent b10e0c0439
commit 7e2ef061b6
4 changed files with 7 additions and 52 deletions
-1
View File
@@ -1,5 +1,4 @@
# Локальные копии списков с реальными IP (не коммитьте секреты) # Локальные копии списков с реальными IP (не коммитьте секреты)
trusted/rdp.lst trusted/rdp.lst
trusted/ssh.lst
*.pem *.pem
*.key *.key
+7 -29
View File
@@ -1,6 +1,6 @@
# reverse-proxy # reverse-proxy
Периметровая конфигурация **HAProxy** для сети **kalinamall.ru**: Exchange, RDS, 1С, почтовый шлюз KSMG, ограниченный RDP и SSH. Периметровая конфигурация **HAProxy** для сети **kalinamall.ru**: Exchange, RDS, 1С, почтовый шлюз KSMG, ограниченный RDP (SSH через HAProxy не публикуется).
TLS: на целевых серверах используются **wildcard-сертификаты GlobalSign**; HAProxy на **443** работает в режиме **TCP + SNI** и **не терминирует** TLS — сертификаты остаются на бэкендах. TLS: на целевых серверах используются **wildcard-сертификаты GlobalSign**; HAProxy на **443** работает в режиме **TCP + SNI** и **не терминирует** TLS — сертификаты остаются на бэкендах.
@@ -142,9 +142,10 @@ git config --global credential.helper 'cache --timeout=28800'
| 1С | `erp.kalinamall.ru` | hp-serv.b26.kalinamall.ru — **192.168.160.150** | 443 | | 1С | `erp.kalinamall.ru` | hp-serv.b26.kalinamall.ru — **192.168.160.150** | 443 |
| Почтовый шлюз (KSMG) | `ksmg.kalinamall.ru` | ksmg.kalinamall.ru — **192.168.160.57** | 25 | | Почтовый шлюз (KSMG) | `ksmg.kalinamall.ru` | ksmg.kalinamall.ru — **192.168.160.57** | 25 |
| RDP | (публичный IP / DNS при необходимости) | itis.b26.kalinamall.ru — **192.168.160.198** | 3389 | | RDP | (публичный IP / DNS при необходимости) | itis.b26.kalinamall.ru — **192.168.160.198** | 3389 |
| SSH (Ubuntu) | (публичный IP) | **192.168.160.85** | 22 |
DNS: записи **A** для `ext`, **`autodiscover`**, `rds`, `erp`, `ksmg` (и при необходимости для входа по RDP/SSH) должны указывать на **публичный IP** хоста с HAProxy. Имя `autodiscover.kalinamall.ru` должно быть в **SAN** wildcard `*.kalinamall.ru` или отдельно в сертификате на Exchange. DNS: записи **A** для `ext`, **`autodiscover`**, `rds`, `erp`, `ksmg` (и при необходимости для RDP) должны указывать на **публичный IP** хоста с HAProxy. Имя `autodiscover.kalinamall.ru` должно быть в **SAN** wildcard `*.kalinamall.ru` или отдельно в сертификате на Exchange.
Доступ по **SSH** к внутренним хостам (например Ubuntu **192.168.160.85**) в этом репозитории **не** настраивается через HAProxy — организуйте отдельно (прямой проброс, VPN, бастион и т.д.).
В режиме **TCP + SNI** отдельные строки в HAProxy для путей вроде `/owa` **не нужны**: после согласования TLS клиент шлёт HTTP внутри шифрования, разбор путей делает **IIS/Exchange** на `192.168.160.42`. В режиме **TCP + SNI** отдельные строки в HAProxy для путей вроде `/owa` **не нужны**: после согласования TLS клиент шлёт HTTP внутри шифрования, разбор путей делает **IIS/Exchange** на `192.168.160.42`.
@@ -196,13 +197,12 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo cp ~/reverse-proxy/haproxy.cfg /etc/haproxy/haproxy.cfg sudo cp ~/reverse-proxy/haproxy.cfg /etc/haproxy/haproxy.cfg
``` ```
3. Списки доверенных адресов для RDP и SSH: 3. Белый список IP для RDP:
```bash ```bash
sudo mkdir -p /etc/haproxy/trusted sudo mkdir -p /etc/haproxy/trusted
sudo cp trusted/rdp.lst.example /etc/haproxy/trusted/rdp.lst sudo cp trusted/rdp.lst.example /etc/haproxy/trusted/rdp.lst
sudo cp trusted/ssh.lst.example /etc/haproxy/trusted/ssh.lst
``` ```
Отредактируйте `rdp.lst` и `ssh.lst`: укажите свои подсети и IP (по одному адресу или CIDR на строку). Удалите заглушку `127.0.0.1/32`, когда появятся реальные адреса. Отредактируйте `rdp.lst`: укажите свои подсети и IP (по одному адресу или CIDR на строку). Удалите заглушку `127.0.0.1/32`, когда появятся реальные адреса.
4. Проверка и перезапуск: 4. Проверка и перезапуск:
```bash ```bash
@@ -216,29 +216,7 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg
## Порты на фаерволе ## Порты на фаерволе
Откройте с интернета только: **25**, **22**, **3389**, **443** (и при использовании — **8404** для stats). Остальной трафик — по политике безопасности. На хосте с HAProxy с интернета обычно открывают только то, что слушает конфиг: **25**, **3389**, **443** (и при использовании — **8404** для stats). Остальной трафик — по политике безопасности.
Если HAProxy слушает SSH-прокси на **2222** (см. раздел ниже), на фаерволе нужен проброс **внешний TCP 22 → IP_HAProxy:2222** (или открыть **2222** снаружи — по вашей политике).
## Конфликт порта 22: `cannot bind socket (Address already in use)`
Сообщение при старте HAProxy вроде `Binding ... frontend fe_ssh: cannot bind socket ... for [0.0.0.0:22]` означает: на **этом же сервере** порт **22** уже занят (чаще всего **`sshd`**).
Проверка:
```bash
sudo ss -tlnp | grep ':22 '
```
**Варианты решения:**
1. **Выделенный хост для HAProxy** без локального SSH на `:22` (или SSH только на внутреннем интерфейсе / другом порту) — тогда в `haproxy.cfg` оставляйте `bind *:22`.
2. **Админский SSH на этой же машине перенести с 22 на другой порт** (например `2222` только для входа администраторов на **сам** HAProxy-сервер): в `/etc/ssh/sshd_config` строка `Port 2222` (и при необходимости `ListenAddress`), перезапуск `sshd`, подключение админов на новый порт. После освобождения `:22` HAProxy сможет сделать `bind *:22` для **проксирования** на `192.168.160.85:22`.
3. **HAProxy слушает не 22, а другой порт** (в репозитории в секции `fe_ssh` можно закомментировать `bind *:22` и раскомментировать `bind *:2222`). Снаружи клиенты по-прежнему могут стучаться на **публичный порт 22**, если на **пограничном** маршрутизаторе/фаерволе настроен **DNAT**: `внешний_IP:22 → IP_хоста_с_HAProxy:2222`.
Не включайте одновременно два активных `bind` на один и тот же порт в разных фронтендах.
## Лицензия ## Лицензия
-21
View File
@@ -82,27 +82,6 @@ frontend fe_rdp
backend be_rdp backend be_rdp
server itis 192.168.160.198:3389 server itis 192.168.160.198:3389
# -----------------------------------------------------------------------------
# SSH: прокси на Ubuntu 192.168.160.85:22, белый список trusted/ssh.lst
#
# Конфликт «cannot bind socket (Address already in use) for [0.0.0.0:22]»:
# на этой же машине уже слушает порт 22 — обычно OpenSSH (sshd). Один порт = один процесс.
# Варианты: (1) отдельная ВМ периметра, где sshd выключен или не на :22;
# (2) перенести АДМИНСКИЙ sshd на этой ВМ на другой порт (/etc/ssh/sshd_config → Port),
# затем оставить здесь bind *:22;
# (3) слушать bind *:2222 (ниже), с пограничного фаервола DNAT «внешний :22 → этот_IP:2222».
# Используйте ровно ОДНУ строку bind (вторую закомментируйте).
# -----------------------------------------------------------------------------
frontend fe_ssh
bind *:22
# bind *:2222 # раскомментируйте вместо строки выше, если :22 занят sshd на этом хосте
acl trusted_ssh src -f /etc/haproxy/trusted/ssh.lst
tcp-request connection reject if !trusted_ssh
default_backend be_ssh
backend be_ssh
server ubuntu 192.168.160.85:22
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Опционально: статистика (раскомментируйте и задайте пароль) # Опционально: статистика (раскомментируйте и задайте пароль)
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
-1
View File
@@ -1 +0,0 @@
127.0.0.1/32