Безопасность инфраструктуры

Аудит 2026-06-13

Что проверялось

  • Порты открытые наружу (0.0.0.0 vs 127.0.0.1)
  • OAuth-токены и авторизованные аккаунты
  • Открытые directory listing
  • Доступность MCP/API эндпоинтов снаружи

Найденные уязвимости и статус

#ЧтоУязвимостьСтатусИсправление
1Hermes API (порт 8642)Слушал на 0.0.0.0✅ Закрыт.hermes/.env: API_SERVER_HOST=127.0.0.1
2vpnbot-v3 dev panel (8100)Слушал на 0.0.0.0✅ Закрытdocker-compose.dev.yml: 127.0.0.1:8100:8000
3gwmcp /mcp эндпоинтПублично доступен✅ ЗакрытTraefik ipAllowList: только 127.0.0.1 + Docker сети
4awgnode API (порт 6868)Слушал на 0.0.0.0✅ Закрытiptables DROP + override монтирует entrypoint с AWG_API_HOST
5panel-dev.08317.ruПубличный dev remnawave⚠️ ОставленНужен для отладки vpnbot (сознательное решение)

gwmcp — аккаунт s.purgaev@coreclaw.ru

  • Обнаружен: странный email в OAuth credentials (домена coreclaw.ru не существует)
  • Вывод: НЕ взлом. Это был тестовый аккаунт при настройке Google OAuth — создан случайно
  • Действие: аккаунт удалён из Google OAuth consent screen
  • Текущее состояние: авторизован только mydevn8n@gmail.com, всё работает

AWG ключи — ротация (2026-06-13)

  • Причина: публичный конфиг с pubkey попал в тест (ложная тревога)
  • Что проверили: сервер pubkey VBOYmyWoQFgnO... — НЕ совпадает с ключом в утёкшем конфиге
  • Реально активный пир: F2to0k9TYiZgDmJCTq5ZHGn8... (Сергей, 10.99.0.10) — не трогали
  • Итог: ключи не ротировали (не было необходимости), VPN работает

Текущее состояние (после аудита)

Порты наружу (forge)

ПортСервисДоступность
80/443TraefikПублично (нужно)
47654 UDPawgnode VPNПублично (нужно — VPN)
8443[[projects/mtprotoMTProto]]
6868 TCPawgnode API🔒 Только 127.0.0.1 (iptables)
8642Hermes API🔒 Только 127.0.0.1
8100vpnbot dev🔒 Только 127.0.0.1

gwmcp Traefik конфиг

  • /oauth2callback — публично (нужно для Google OAuth redirect)
  • /mcp — только Docker internal (172.16.0.0/12) + 127.0.0.1
  • Файл: /home/claude/traefik/data/conf.d/gwmcp.yml

awgnode override (порт 6868)

  • Файл: /home/claude/awgnode/docker-compose.override.yml
  • Монтирует локальный /home/claude/awgnode/entrypoint.sh → поддерживает AWG_API_HOST
  • AWG_API_HOST=127.0.0.1 прописан в environment
  • Текущая iptables-защита: iptables -I INPUT -p tcp --dport 6868 ! -s 127.0.0.1 -j DROP
  • Важно: iptables правило исчезнет при рестарте контейнера, но после рестарта entrypoint сам поднимет uvicorn на 127.0.0.1

Google OAuth — два разных клиента

СервисOAuth clientАккаунтКак переавторизовать
gwmcp ([[projects/coreclawCoreClaw]])692295089009-9kjmcfh...mydevn8n@gmail.com
Hermes692295089009-pm1f51t...sergnotebooklm@gmail.comsetup.py --auth-url → URL на ПК → setup.py --auth-code "URL"

Hermes переавторизация пошагово (когда setup.py --check вернёт TOKEN_INVALID):

# 1. Получить URL
/home/claude/.hermes/hermes-agent/venv/bin/python3 \
  /home/claude/.hermes/skills/productivity/google-workspace/scripts/setup.py --auth-url
 
# 2. Открыть URL на ПК, разрешить, скопировать localhost-redirect из адресной строки
 
# 3. Обменять код
/home/claude/.hermes/hermes-agent/venv/bin/python3 \
  /home/claude/.hermes/skills/productivity/google-workspace/scripts/setup.py \
  --auth-code "http://localhost/?code=...&state=..."
 
# 4. Проверить
/home/claude/.hermes/hermes-agent/venv/bin/python3 \
  /home/claude/.hermes/skills/productivity/google-workspace/scripts/setup.py --check-live

Важно: код живёт ~10 минут. Стухший google_oauth_pending.json → удалить перед --auth-url.

SSH доступ к нодам

НодаIPЛогинПароль
de-hostkey132.243.224.242rootnkXZBXBU5jjRq
nl-aeza138.124.119.57root2DLF5581booE

(Пароли найдены: DE — из prod vpnbot БД, NL — из старого memory-файла)