#!/usr/bin/env bash set -Eeuo pipefail PRIVATE_IP="${PRIVATE_IP:-192.168.0.5}" PRIVATE_CIDR="${PRIVATE_CIDR:-192.168.0.0/24}" if [[ $EUID -ne 0 ]]; then echo "Запустите через sudo." >&2 exit 1 fi [[ "$PRIVATE_CIDR" =~ ^[0-9.]+/[0-9]+$ ]] || { echo "Некорректный PRIVATE_CIDR: ${PRIVATE_CIDR}" >&2 exit 1 } ip -4 addr show | grep -Fq "inet ${PRIVATE_IP}/" || { echo "Приватный адрес ${PRIVATE_IP} не найден." >&2 exit 1 } cat < -N До продолжения откройте вторую SSH-сессию, чтобы не потерять доступ. EOF read -r -p "Введите APPLY для применения правил: " answer [[ "$answer" == APPLY ]] || { echo "Отменено."; exit 1; } if ! command -v ufw >/dev/null; then apt-get update apt-get install -y ufw fi ufw --force reset ufw default deny incoming ufw default allow outgoing ufw logging medium # Источник SSH на хосте не фильтруем: allow-list делает файрвол приватной # сети / SG провайдера. Проброс UI идёт внутри этой сессии и не требует 8080. ufw allow 22/tcp comment "SSH (source limited by provider SG)" ufw allow from "$PRIVATE_CIDR" to "$PRIVATE_IP" port 4317 proto tcp \ comment "HAN OTLP gRPC from private net" ufw allow from "$PRIVATE_CIDR" to "$PRIVATE_IP" port 4318 proto tcp \ comment "HAN OTLP HTTP from private net" ufw --force enable ufw status verbose cat < -N затем http://127.0.0.1:8080 на рабочей станции. Docker-публикации могут обходить UFW INPUT. Если 4317 доступен вне ${PRIVATE_CIDR}, ограничьте источник в SG провайдера. casting.yaml биндит OTLP на ${PRIVATE_IP}, UI — на loopback. EOF