Bastion host: безпечний SSH-доступ до приватних серверів

Розробникам доводиться відкривати SSH-доступ до серверів у приватних підмережах, що створює ризики для безпеки. Ми налаштовуємо bastion host — єдину точку входу з жорстким hardening та логуванням сесій. Наша команда реалізує проєкт під ключ, забезпечуючи надійний і контрольований доступ.
Часті запитання

Bastion host: єдина точка входу в приватну інфраструктуру

Уявіть: у вас 50 серверів у приватних підмережах, жодної публічної IP. Щоб підключитися, розробники копіюють ключі на кожен сервер? Чи відкривають SSH на всіх інстансах? Обидва варіанти — діра в безпеці. За статистикою, більшість інцидентів пов'язані саме з неправильним управлінням доступом. Ми стикалися з таким не раз і знаємо, як це виправити.

Bastion host — єдина контрольована точка входу у всю private-інфраструктуру. Замість 50 відкритих портів — один jump-хост із жорстким hardening. Доступ через SSH ProxyJump, без копіювання ключів на bastion. Сесії записуються, кожне підключення логується. Ми налаштовуємо такі рішення під ключ — від простого bastion до інтеграції з Teleport або AWS SSM. Оцінимо ваш проект за один день.

Як bastion host знижує ризик безпеки?

Будь-який security audit (PCI DSS, SOC 2) вимагає ізоляції доступу до production. Bastion мінімізує attack surface: ви відкриваєте один порт на bastion, і то тільки з білого списку IP. Повний контроль сесій — хто, коли, що робив. Без bastion це неможливо. Згідно з NIST SP 800-207, мінімальна конфігурація повинна включати bastion для доступу до критичних систем. Економія на ліцензіях при використанні bastion замість VPN може сягати 70%. Вартість одного інциденту безпеки може бути багаторазово вищою.

Архітектура: як ми будуємо bastion в AWS

Типова схема від наших інженерів: bastion у public subnet з Elastic IP, всі EC2 у private subnets. Security Group bastion приймає SSH тільки з офісних IP (наприклад, 203.0.113.0/24). Security Group внутрішніх серверів — тільки від bastion. Жодних 0.0.0.0/0. Приклад Terraform:

resource "aws_security_group" "bastion" {
  name = "bastion-sg"
  vpc_id = var.vpc_id

  ingress {
    from_port = 22
    to_port = 22
    protocol = "tcp"
    cidr_blocks = var.allowed_cidr_blocks # ["203.0.113.0/24"]
  }

  egress {
    from_port = 0
    to_port = 0
    protocol = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_security_group" "internal" {
  name = "internal-servers-sg"
  vpc_id = var.vpc_id

  ingress {
    from_port = 22
    to_port = 22
    protocol = "tcp"
    security_groups = [aws_security_group.bastion.id]
  }
}

Що робити, якщо у вас немає публічних IP?

Якщо інфраструктура повністю ізольована, використовуйте AWS SSM або Azure Bastion. Ці сервіси не потребують публічної IP — доступ через API з IAM-аутентифікацією. Але для інтерактивної роботи bastion швидший: затримка SSM на 200–500 мс вища. Ми часто комбінуємо: bastion для SSH, SSM для автоматизації.

Практичний приклад: bastion для Kubernetes

В одному проекті ми налаштовували bastion для доступу до Kubernetes API. У нас був приватний кластер EKS у VPC без публічного доступу. DevOps-інженерам потрібно було запускати kubectl та helm. Рішення: bastion з встановленими kubectl та helm, а також налаштованим kubeconfig через AWS IAM Authenticator. Доступ через ProxyJump з MFA. Це дозволило повністю ізолювати API-сервер і при цьому дати розробникам зручний інтерфейс. Весь процес описаний у runbook, який ми передаємо клієнту.

Як налаштувати bastion за 5 кроків

  1. Виберіть дистрибутив — Ubuntu LTS, мінімум пакетів, тільки SSH.
  2. Застосуйте Security Group — дозвольте SSH тільки з ваших IP (офіс/VPN), решту забороніть.
  3. Налаштуйте SSH ProxyJump на клієнтських машинах (див. конфіг нижче).
  4. Увімкніть MFA через Google Authenticator або Duo.
  5. Активуйте запис сесій — tlog, auditd або SSM.

Приклад ~/.ssh/config для прозорого доступу:

Host bastion
    HostName 203.0.113.10
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60

Host *.internal
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519
    ProxyJump bastion

Після цього ssh app-server-01.internal підключається автоматично через bastion. Для scp: scp -o ProxyJump=bastion file.tar.gz app-server-01.internal:/tmp/.

Bastion vs AWS SSM: що обрати?

Критерій Bastion Host AWS SSM Session Manager
Публічна IP Потрібна Не потрібна
SSH-ключі Так Ні (IAM)
Запис сесій Через tlog/script Вбудована (S3 + CloudTrail)
Швидкість Висока Середня (лаг)
Складність налаштування Низька Середня (IAM + Agent)

SSM хороший для простих сценаріїв, але для частої інтерактивної роботи bastion швидший і звичніший. Ми часто комбінуємо: bastion для SSH, SSM для автоматизації. Додатково, bastion знижує витрати на інциденти безпеки при правильному налаштуванні.

Які заходи безпеки обов'язкові на bastion?

Базовий hardening на bastion:

sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
echo "AllowUsers bastion-user" >> /etc/ssh/sshd_config
echo "Port 2222" >> /etc/ssh/sshd_config
systemctl reload sshd

fail2ban для блокування брутфорсу:

[sshd] enabled = true maxretry = 3 bantime = 3600 findtime = 600 

MFA через libpam-google-authenticator обов'язкова для продакшну. Для команд від 10 осіб — інтеграція з Duo або Okta через RADIUS. Це дає двофакторну аутентифікацію поверх SSH-ключа.

Чек-лист налаштування bastion host:

  • Мінімальний дистрибутив (Ubuntu LTS, Debian, Alpine)
  • SSH на нестандартному порту
  • Тільки ключі + MFA
  • fail2ban з maxretry=3
  • Security Group з білим списком IP
  • Запис сесій (tlog, auditd)
  • Регулярні оновлення

Процес роботи: від аудиту до деплою

  1. Аудит поточної інфраструктури — аналіз VPC, Security Groups, існуючих методів доступу.
  2. Проектування архітектури — схема з bastion, маршрутизація, резервування.
  3. Розгортання через Terraform — створення bastion-хоста, Security Groups, NAT при необхідності.
  4. Налаштування SSH та MFA — hardening, ProxyJump, інтеграція з корпоративним IdP.
  5. Тестування та документування — перевірка підключень, запис інструкцій для команди.
  6. Навчання та підтримка — роз'яснення процесу, runbook.

Терміни та вартість

Базове налаштування bastion з hardening займає від 3 до 5 годин. Інтеграція з SSM або Teleport — від 1 до 2 робочих днів. Вартість розраховується індивідуально залежно від складності інфраструктури та вимог до аудиту. В середньому, економія на ліцензіях та адмініструванні становить до 70% після впровадження.

Що входить у налаштування bastion під ключ

  • Проектування архітектури (схема VPC, Security Groups, NAT)
  • Розгортання bastion через Terraform/CloudFormation
  • Налаштування SSH ProxyJump та конфігів для команди
  • MFA (TOTP або корпоративне)
  • Система аудиту сесій (tlog, auditd або Teleport)
  • Документація та навчання команди

Гарантуємо, що після налаштування ви пройдете будь-який audit. Досвід наших інженерів — 7+ років у DevOps, понад 50 проектів з безпеки інфраструктури.

Замовте налаштування bastion — отримайте консультацію та оцінку вашого проекту. Зв'яжіться з нами сьогодні.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139