Docs: port 22 conflict with sshd, bind alternatives and DNAT

This commit is contained in:
PTah
2026-04-11 19:25:11 +10:00
parent 212d564acf
commit b10e0c0439
2 changed files with 32 additions and 3 deletions
+22
View File
@@ -218,6 +218,28 @@ sudo haproxy -c -f /etc/haproxy/haproxy.cfg
Откройте с интернета только: **25**, **22**, **3389**, **443** (и при использовании — **8404** для stats). Остальной трафик — по политике безопасности. Откройте с интернета только: **25**, **22**, **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` на один и тот же порт в разных фронтендах.
## Лицензия ## Лицензия
Конфигурация поставляется как есть, без гарантий. Используйте на свой риск. Конфигурация поставляется как есть, без гарантий. Используйте на свой риск.
+10 -3
View File
@@ -83,12 +83,19 @@ backend be_rdp
server itis 192.168.160.198:3389 server itis 192.168.160.198:3389
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# SSH (22): Ubuntu 192.168.160.85 # SSH: прокси на Ubuntu 192.168.160.85:22, белый список trusted/ssh.lst
# Доступ только с адресов из 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 frontend fe_ssh
bind *:22 bind *:22
# bind *:2222 # раскомментируйте вместо строки выше, если :22 занят sshd на этом хосте
acl trusted_ssh src -f /etc/haproxy/trusted/ssh.lst acl trusted_ssh src -f /etc/haproxy/trusted/ssh.lst
tcp-request connection reject if !trusted_ssh tcp-request connection reject if !trusted_ssh
default_backend be_ssh default_backend be_ssh