Правки различные

This commit is contained in:
mi
2026-08-26 11:05:32 +03:00
parent c1e49fb15d
commit 728b9826a3
36 changed files with 722 additions and 1986 deletions
+29 -12
View File
@@ -36,18 +36,35 @@ else
fail "DNS не разрешает адреса репозиториев"
fi
for url in \
https://archive.ubuntu.com \
https://download.docker.com \
https://registry-1.docker.io \
https://github.com \
https://signoz.io; do
if curl -4fsSI --connect-timeout 8 --max-time 15 "$url" >/dev/null; then
ok "доступен $url"
else
fail "нет доступа к $url"
fi
done
probe_https() {
local label="$1"
local url="$2"
shift 2
local code
code="$(curl -4sS -o /dev/null -w '%{http_code}' \
--connect-timeout 8 --max-time 15 "$url" || true)"
local expected
for expected in "$@"; do
if [[ "$code" == "$expected" ]]; then
ok "доступен $label"
return 0
fi
done
fail "нет доступа к $label (HTTP ${code:-нет ответа})"
}
# Сайты отвечают 2xx/3xx. Docker Registry API на /v2/ без токена штатно
# отдаёт 401; корень registry-1.docker.io часто даёт 404 — это не отказ сети.
probe_https https://archive.ubuntu.com https://archive.ubuntu.com \
200 301 302 303 307 308
probe_https https://download.docker.com https://download.docker.com \
200 301 302 303 307 308
probe_https https://registry-1.docker.io https://registry-1.docker.io/v2/ \
200 401
probe_https https://github.com https://github.com \
200 301 302 303 307 308
probe_https https://signoz.io https://signoz.io \
200 301 302 303 307 308
echo
echo "=== Занятость портов ==="
@@ -2,43 +2,70 @@
set -Eeuo pipefail
PRIVATE_IP="${PRIVATE_IP:-192.168.0.5}"
ADMIN_CIDR="${ADMIN_CIDR:-192.168.0.0/24}"
OTLP_SOURCE="${OTLP_SOURCE:-}"
PRIVATE_CIDR="${PRIVATE_CIDR:-192.168.0.0/24}"
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
[[ "$PRIVATE_CIDR" =~ ^[0-9.]+/[0-9]+$ ]] || {
echo "Некорректный PRIVATE_CIDR: ${PRIVATE_CIDR}" >&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-сессию через приватную сеть."
cat <<EOF
Будут применены правила UFW:
входящий по умолчанию: deny
исходящий по умолчанию: allow
TCP 22 с любого источника (ограничение IP — в SG провайдера)
TCP 4317/4318 только из ${PRIVATE_CIDR} на ${PRIVATE_IP} (ВМ1 и ВМ2)
TCP 8080 не открывается: UI только через SSH-туннель на 127.0.0.1:8080
Пример туннеля с рабочей станции:
ssh -i ~/.ssh/hansel -L 8080:127.0.0.1:8080 root@<IP_ВМ3> -N
До продолжения откройте вторую SSH-сессию, чтобы не потерять доступ.
EOF
read -r -p "Введите APPLY для применения правил: " answer
[[ "$answer" == APPLY ]] || { echo "Отменено."; exit 1; }
apt-get update
apt-get install -y ufw
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
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"
# Источник 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 <<'EOF'
cat <<EOF
Важно: Docker-публикации могут обходить цепочку UFW INPUT. Основная фильтрация
источника OTLP должна оставаться в облачной группе безопасности. casting.yaml
дополнительно привязывает OTLP только к приватному IP, а UI — к loopback.
UI не публикуется. Туннель:
ssh -i ~/.ssh/hansel -L 8080:127.0.0.1:8080 root@<IP_ВМ3> -N
затем http://127.0.0.1:8080 на рабочей станции.
Docker-публикации могут обходить UFW INPUT. Если 4317 доступен вне
${PRIVATE_CIDR}, ограничьте источник в SG провайдера. casting.yaml биндит
OTLP на ${PRIVATE_IP}, UI — на loopback.
EOF