feat(ufw): --allow-port/--allow-from для доступа прокси к внутреннему порту

This commit is contained in:
2026-09-19 20:48:59 +03:00
parent dcb2a8b3fa
commit cb2e223a4d
+22
View File
@@ -64,6 +64,8 @@ TURN_RELAY_PORT="${TURN_RELAY_PORT:-3478}"
TURN_RELAY_TLS_PORT="${TURN_RELAY_TLS_PORT:-5349}"
TLS_BY_PROXY="${TLS_BY_PROXY:-false}"
APP_BIND_ADDR="${APP_BIND_ADDR:-127.0.0.1}"
ALLOW_PORTS="${ALLOW_PORTS:-}"
ALLOW_FROM="${ALLOW_FROM:-10.77.0.0/24}"
LIVEKIT_BIND_ADDR="${LIVEKIT_BIND_ADDR:-127.0.0.1}"
TURN_CERT_REMOTE="${TURN_CERT_REMOTE:-}"
TURN_CERT_REMOTE_CRT="${TURN_CERT_REMOTE_CRT:-}"
@@ -137,6 +139,9 @@ install.sh — установка glchat (AGENT.md 10).
но ссылки в API отдаются как https/wss
--app-bind-addr <addr> адрес app (по умолчанию 127.0.0.1); для прокси по
WireGuard укажите адрес в туннеле, например 10.77.0.13
--allow-port <порт/прото> разрешить порт только из подсети --allow-from
(можно указывать несколько раз), например 8080/tcp
--allow-from <cidr> источник для --allow-port (по умолчанию 10.77.0.0/24)
--livekit-bind-addr <addr> адрес LiveKit (по умолчанию 127.0.0.1)
--turn-cert-remote <user@host> тянуть сертификат TURN/TLS с внешнего узла по SSH
--turn-cert-remote-crt <путь> путь к сертификату на внешнем узле
@@ -195,6 +200,8 @@ parse_args() {
--turn-relay-tls-port) TURN_RELAY_TLS_PORT="${2:?}"; shift 2 ;;
--tls-terminated-by-proxy) TLS_BY_PROXY="true"; shift ;;
--app-bind-addr) APP_BIND_ADDR="${2:?}"; shift 2 ;;
--allow-port) ALLOW_PORTS="${ALLOW_PORTS} ${2:?}"; shift 2 ;;
--allow-from) ALLOW_FROM="${2:?}"; shift 2 ;;
--livekit-bind-addr) LIVEKIT_BIND_ADDR="${2:?}"; shift 2 ;;
--turn-cert-remote) TURN_CERT_REMOTE="${2:?}"; shift 2 ;;
--turn-cert-remote-crt) TURN_CERT_REMOTE_CRT="${2:?}"; shift 2 ;;
@@ -1203,6 +1210,21 @@ configure_ufw() {
# Relay-диапазон: через эти порты TURN отдаёт медиа (AGENT.md 4.2).
ufw allow "${TURN_RELAY_START}:${TURN_RELAY_END}/udp" comment 'turn-relay' >/dev/null
fi
# Правила для доступа из доверенной подсети (например, прокси по WireGuard):
# внутренний порт приложения не публикуется, но прокси должен до него дойти.
local spec port proto
for spec in $ALLOW_PORTS; do
port="${spec%%/*}"
proto="${spec##*/}"
[ "$proto" = "$port" ] && proto="tcp"
if [ "$port" = "8080" ] && [ "$APP_BIND_ADDR" = "127.0.0.1" ]; then
continue
fi
ufw allow from "$ALLOW_FROM" to any port "$port" proto "$proto" comment 'glchat-proxy' >/dev/null 2>&1 ||
warn "не удалось добавить правило UFW для ${spec}"
ok "UFW: ${spec} разрешён из ${ALLOW_FROM}"
done
ufw --force enable >/dev/null
restore_foreign_ufw_rules
ok "UFW активен: $(ufw status | head -1)"