До 12.5 млн токенов на тест ИИ-агента
Вход/ Регистрация
На главную
Инструкции для серверов

Настройка bastion-хоста

Bastion-хост — это облачный сервер, через который можно подключаться по SSH к серверам без публичных IP-адресов. Bastion имеет публичный и приватный IP, а внутренние серверы подключены только к приватной сети.

В результате внешний SSH-доступ будет открыт только к одному серверу. Подключение к остальным серверам будет выполняться через bastion по их приватным IP-адресам.

В примере используются:

  • приватная сеть 192.168.0.0/24;

  • bastion-хост с приватным IP 192.168.0.10 и публичным IP;

  • внутренний сервер с приватным IP 192.168.0.20 без публичного IP;

  • отдельные файрволы для bastion-хоста и внутреннего сервера.

Создание SSH-ключа

Если у вас уже есть подходящая пара SSH-ключей, используйте ее и перейдите к созданию приватной сети.

Чтобы создать новый ключ, выполните на локальном компьютере:

    
ssh-keygen -t ed25519 -f ~/.ssh/timeweb-bastion -C "bastion"

Будут созданы два файла:

  • ~/.ssh/timeweb-bastion — приватный ключ;

  • ~/.ssh/timeweb-bastion.pub — публичный ключ.

Приватный ключ должен храниться только на локальном компьютере. Не загружайте его на bastion-хост или внутренний сервер.

Добавьте публичный ключ в панель управления:

  1. Перейдите в раздел «Облачные серверы» → «SSH-ключи».

  2. Нажмите «Добавить».

  3. Укажите имя, например bastion-key.

  4. Вставьте содержимое файла ~/.ssh/timeweb-bastion.pub.

  5. Сохраните ключ.

Создание приватной сети

Приватная сеть объединяет bastion-хост и внутренние серверы в изолированный сетевой сегмент.

Чтобы создать сеть:

  1. Перейдите в раздел «Сети» → «Приватные сети».

  2. Нажмите «Создать» или «Добавить».

  3. Укажите имя сети, например Bastion.

  4. Выберите локацию, в которой будут созданы серверы.

  5. Укажите диапазон адресов, например 192.168.0.0/24.

  6. Завершите создание сети.

Серверы и приватная сеть должны находиться в одной локации. Перед выбором диапазона убедитесь, что он не пересекается с другими сетями, которые планируется объединить с этой сетью.

Создание bastion-хоста

Bastion-хост должен быть доступен из интернета по публичному IP и подключен к приватной сети внутренних серверов.

  1. Перейдите в раздел «Облачные серверы» и нажмите «Создать».

  2. Выберите образ и подходящую конфигурацию сервера. Для небольшого количества SSH-соединений достаточно минимальной конфигурации.

  3. Выберите ту же локацию, в которой создана приватная сеть.

  4. Подключите публичный IP.

  5. Подключите сервер к сети Bastion.

  6. Выберите SSH-ключ bastion-key.

  7. Укажите имя bastion-host и создайте сервер.

После создания обратите внимание на:

  • публичный IP bastion-хоста;

  • приватный IP bastion-хоста, например 192.168.0.10.

Эти адреса будут использоваться дальше для настройки подключения.

Создание внутреннего сервера

Внутреннему серверу не требуется публичный IP. Он будет доступен только из приватной сети.

  1. Перейдите в раздел «Облачные серверы» и нажмите «Создать».

  2. Выберите образ и конфигурацию сервера.

  3. Выберите ту же локацию, что у bastion-хоста.

  4. Отключите публичный IP.

  5. Подключите сервер к сети Bastion.

  6. Выберите SSH-ключ bastion-key.

  7. Укажите имя internal-server и создайте сервер.

После создания запишите приватный IP сервера, например 192.168.0.20.

Один публичный ключ используется в примере для упрощения настройки. Для production-окружения можно использовать разные ключи для bastion-хоста и внутренних серверов.

Настройка файрвола

Для bastion-хоста и внутренних серверов рекомендуется использовать отдельные файрволы. Это позволяет независимо управлять правилами внешнего и внутреннего доступа.

Файрвол bastion-хоста

Разрешите подключение к порту SSH только с доверенного публичного IP:

  1. Перейдите в раздел «Сети» → «Firewall» и нажмите «Добавить».

  2. Выберите разрешающий тип правил.

  3. Укажите имя bastion-fw.

  4. Добавьте входящее правило:

    • протокол — TCP;

    • порт — 22;

    • источник — публичный IP администратора с маской /32, например 203.0.113.10/32.

  5. Привяжите файрвол к серверу bastion-host.

Узнать текущий публичный IP можно с помощью любого сервиса проверки IP-адреса. Если адрес изменится, обновите правило файрвола.

Не используйте источник 0.0.0.0/0, если в этом нет необходимости. Такое правило разрешит попытки подключения к SSH со всего интернета.

Файрвол внутреннего сервера

Разрешите SSH-подключения только с приватного IP bastion-хоста:

  1. Создайте разрешающий файрвол с именем internal-fw.

  2. Добавьте входящее правило:

    • протокол — TCP;

    • порт — 22;

    • источник — приватный IP bastion-хоста с маской /32, например 192.168.0.10/32.

  3. Привяжите файрвол к серверу internal-server.

Если исходящий трафик также ограничен, разрешите на bastion-хосте исходящее TCP-соединение к приватному IP внутреннего сервера на порт 22.

При использовании разрешающих правил файрвола настройте правила DHCP на сервере. Без них сервер может потерять приватный IP после окончания срока аренды.

Проверка подключения к bastion-хосту

Подключитесь к bastion-хосту по публичному IP:

    
ssh -i ~/.ssh/timeweb-bastion root@<BASTION_PUBLIC_IP>

При первом подключении SSH предложит сохранить ключ хоста. После успешного входа завершите сеанс командой:

    
exit

Если подключение завершается по тайм-ауту, проверьте публичный IP сервера и правила файрвола. Если появляется ошибка Permission denied, проверьте имя пользователя и SSH-ключ.

Подключение к внутреннему серверу

Для подключения через bastion используйте механизм ProxyJump:

    
ssh -i ~/.ssh/timeweb-bastion -J root@<BASTION_PUBLIC_IP> root@192.168.0.20

SSH-клиент установит соединение с bastion-хостом, а затем подключится к приватному IP внутреннего сервера. Приватный ключ при этом остается на локальном компьютере.

Для старых версий OpenSSH без поддержки ProxyJump используйте ProxyCommand:

    
ssh -i ~/.ssh/timeweb-bastion -o ProxyCommand="ssh -i ~/.ssh/timeweb-bastion -W %h:%p root@<BASTION_PUBLIC_IP>" root@192.168.0.20

Настройка SSH-конфигурации

Чтобы не указывать параметры подключения вручную, добавьте хосты в файл ~/.ssh/config на локальном компьютере:

    
Host twc-bastion HostName <BASTION_PUBLIC_IP> User root IdentityFile ~/.ssh/timeweb-bastion IdentitiesOnly yes ​ Host twc-internal HostName 192.168.0.20 User root IdentityFile ~/.ssh/timeweb-bastion IdentitiesOnly yes ProxyJump twc-bastion

Ограничьте доступ к файлу конфигурации:

    
chmod 600 ~/.ssh/config

Теперь для подключения к внутреннему серверу достаточно выполнить:

    
ssh twc-internal

Доступ к сервисам во внутренней сети

Через bastion можно открыть локальный SSH-туннель к сервису на внутреннем сервере. Например, следующая команда перенаправит локальный порт 8080 на порт 80 сервера 192.168.0.20:

    
ssh -N -L 8080:192.168.0.20:80 twc-bastion

Пока соединение активно, сервис будет доступен на локальном компьютере по адресу:

    
http://127.0.0.1:8080

Порт сервиса не требуется открывать в интернет. Он должен быть доступен с приватного IP bastion-хоста.

Передача файлов

Для передачи файлов через bastion используйте scp с настроенной SSH-конфигурацией:

    
scp ./localfile.txt twc-internal:/root/

Для копирования файла с внутреннего сервера:

    
scp twc-internal:/root/remotefile.txt ./

Удаление ресурсов

Если bastion-хост и внутренний сервер больше не нужны:

  1. Удалите облачные серверы bastion-host и internal-server.

  2. Удалите файрволы bastion-fw и internal-fw.

  3. Удалите приватную сеть Bastion.

Перед удалением приватной сети убедитесь, что к ней не подключены другие серверы или сервисы.

Была ли статья полезна?
Ваш ответ поможет улучшить документацию
Пока нет комментариев