TGViewer
Библиотека девопса | DevOps, SRE, Sysadmin Библиотека девопса | DevOps, SRE, Sysadmin @devopsslib · 10.4K subscribers
Post #4844 1.08K
🔒 Спрятать VM от интернета и не потерять к ней доступ

Если вы запускаете что-то с публичным IP, вашу машину уже сканируют. Боты, брутфорс, стук по портам. Стандартная реакция — начать закручивать файрвол на работающей VM. Но именно так люди теряют доступ к собственным серверам.

Есть подход лучше. Называется «Private First». Суть в том, чтобы VM вообще не имела публичного адреса с момента создания. Нет адреса — нет поверхности атаки. А доступ к машине и выход в интернет настраиваются отдельными, контролируемыми каналами.

Что понадобится

VM без внешнего IP (например, e2-medium, Ubuntu 24.04 LTS), Cloud NAT с Cloud Router, Identity-Aware Proxy (IAP) для SSH и Tailscale для доступа к веб-интерфейсу. Всё это укладывается в бесплатный кредит GCP на $300.

Cloud NAT — выход в интернет без входа

VM без публичного IP не может сама ходить в интернет. Ни apt update, ни docker pull работать не будут. Cloud NAT решает это. Он даёт машине исходящий трафик через Cloud Router, но входящих соединений извне не пропускает.

VM видит интернет, интернет не видит VM.

IAP — SSH без открытого порта

Вместо того чтобы открывать порт 22 для всего мира, вы открываете его только для диапазона 35.235.240.0/20. Это адреса IAP-туннеля Google.

Каждая SSH-сессия проходит аутентификацию через Google Identity ещё до того, как первый пакет долетит до VM.

Подключение выглядит так:
gcloud compute ssh --tunnel-through-iap <instance-name>


Если вы отрежете этот диапазон в файрволе, потеряете доступ к машине. Это главная ошибка, которую стоит запомнить.

Tailscale — доступ к веб-интерфейсу

Допустим, на VM крутится n8n, Metabase или любой другой сервис с веб-панелью. Выставлять её в интернет не нужно. Ставите Tailscale на VM и на свой ноутбук. Получаете приватную mesh-сеть поверх WireGuard. Дашборд доступен по адресу вроде http://<tailscale-ip>:5678 с любого вашего устройства. Без SSL-сертификатов, без reverse proxy, без публичного DNS.

Два нюанса с Docker

Если вы запускаете n8n в Docker, учтите два момента.

Контейнер может падать при старте из-за прав на директорию ~/.n8n. Внутренний пользователь n8n ожидает владельца 1000:1000. Фиксится одной командой:
sudo chown -R 1000:1000 ~/.n8n


По умолчанию n8n выставляет N8N_SECURE_COOKIE=true и принимает сессионные куки только по HTTPS. Через Tailscale вы ходите по HTTP на приватный IP, поэтому логин будет молча ломаться. Выставьте N8N_SECURE_COOKIE=false в переменных окружения Docker. На приватной VPN-сети это безопасно.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
  • ❤ 3
  • 👍 3
More from @devopsslib
  1. Sep 18, 2026От исходного кода до процессора: разберись, как работает программа 💻 Стартует практически…
  2. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  3. Sep 15, 2026👩‍💻 Bash-скрипт для мониторинга сервисов Полноценный мониторинг вроде Zabbix или Prometh…
  4. Sep 13, 2026🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy выра…
  5. Sep 13, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
  6. Sep 10, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →