#!/usr/bin/env bash set -Eeuo pipefail PRIVATE_IP="${PRIVATE_IP:-192.168.0.5}" ADMIN_CIDR="${ADMIN_CIDR:-192.168.0.0/24}" OTLP_SOURCE="${OTLP_SOURCE:-}" if [[ $EUID -ne 0 ]]; then echo "Запустите через sudo." >&2 exit 1 fi if [[ -z "$OTLP_SOURCE" ]]; then echo "Укажите приватный IP backend, например:" >&2 echo " sudo OTLP_SOURCE=192.168.0.1 $0" >&2 exit 1 fi ip -4 addr show | grep -Fq "inet ${PRIVATE_IP}/" || { echo "Приватный адрес ${PRIVATE_IP} не найден." >&2 exit 1 } echo "SSH будет разрешён только из ${ADMIN_CIDR}." echo "OTLP будет разрешён только от ${OTLP_SOURCE}." echo "До продолжения проверьте отдельную SSH-сессию через приватную сеть." read -r -p "Введите APPLY для применения правил: " answer [[ "$answer" == APPLY ]] || { echo "Отменено."; exit 1; } apt-get update apt-get install -y ufw ufw default deny incoming ufw default allow outgoing ufw logging medium ufw allow from "$ADMIN_CIDR" to "$PRIVATE_IP" port 22 proto tcp comment "SigNoz admin SSH" ufw allow from "$OTLP_SOURCE" to "$PRIVATE_IP" port 4317 proto tcp comment "HAN OTLP gRPC" ufw allow from "$OTLP_SOURCE" to "$PRIVATE_IP" port 4318 proto tcp comment "HAN OTLP HTTP" ufw --force enable ufw status verbose cat <<'EOF' Важно: Docker-публикации могут обходить цепочку UFW INPUT. Основная фильтрация источника OTLP должна оставаться в облачной группе безопасности. casting.yaml дополнительно привязывает OTLP только к приватному IP, а UI — к loopback. EOF