Налаштування Bastion Host: безпечний SSH-доступ з MFA та аудитом

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

SSH-доступ до серверів безпосередньо з інтернету — поширена практика, яка робить кожен хост мішенню. Для команди з 20 інженерів, що керує 50 серверами, це 50 відкритих портів — величезна поверхня атаки. Bastion host (jump server) зводить її до одного публічного IP. Ми налаштовуємо такий вузол з IP-вайтлістом, обов'язковою MFA та повним логуванням усіх сесій. Результат — доступ для розробників прозорий, а безпека на рівні корпоративних стандартів.

Чому bastion host, а не VPN або прямий SSH?

Прямий SSH до кожного сервера множить поверхню атаки: кожен хост — окрема ціль. Для 50 серверів це 50 IP-адрес, які потрібно захищати. VPN (OpenVPN, WireGuard) дає єдиний вхід, але додає складність управління сертифікатами та клієнтами. Bastion — золота середина: один публічний IP, мінімум рухомих частин, максимальна прозорість для розробників. ProxyJump у ~/.ssh/config робить роботу з bastion непомітною.

Як працює ProxyJump?

Сучасний спосіб роботи з bastion — ProxyJump у ~/.ssh/config. Жодного agent forwarding (вразливо), жодного копіювання ключів на bastion:

# ~/.ssh/config
Host bastion.corp.example.com
    User ec2-user
    IdentityFile ~/.ssh/corp-key.pem
    ServerAliveInterval 30
Host 10.0.*.*
    ProxyJump bastion.corp.example.com
    User ubuntu
    IdentityFile ~/.ssh/corp-key.pem
Host prod-db-01
    Hostname 10.0.2.50
    ProxyJump bastion.corp.example.com
    User ubuntu

Після цього ssh prod-db-01 прозоро з'єднується через bastion. Ключ користувача ніколи не залишає його машину — SSH-агент форвардить лише конкретне підписання, а не сам ключ.

Які налаштування захищають bastion?

Bastion — це ціль. Його потрібно максимально закрити. Рекомендовані налаштування sshd_config:

Параметр Значення Навіщо
Port 22 (або нестандартний) Для скритності — нестандартний порт знижує шум від ботів
PermitRootLogin no Заборона прямого root-доступу
PasswordAuthentication no Тільки ключі
PubkeyAuthentication yes Обов'язково
AllowGroups ssh-users Обмеження за групами
LogLevel VERBOSE Детальне логування
MaxAuthTries 3 Обмеження спроб входу
ClientAliveInterval 300 Перевірка активності
ClientAliveCountMax 2 Відключення неактивних сесій

Firewall: вхідний SSH тільки з діапазонів IP офісу або VPN. В AWS це Security Group з дозволом порту 22 тільки з корпоративних IP-адрес. Egress — тільки на внутрішні підмережі продакшну.

# AWS Security Group через awscli
aws ec2 authorize-security-group-ingress \
    --group-id sg-bastion-id \
    --protocol tcp --port 22 \
    --cidr 203.0.113.0/24 # корпоративний IP

# Заборона всього іншого вхідного
aws ec2 revoke-security-group-ingress \
    --group-id sg-bastion-id \
    --protocol tcp --port 22 \
    --cidr 0.0.0.0/0

Як додати MFA на bastion?

MFA через PAM-модуль google-authenticator:

apt install libpam-google-authenticator
# /etc/pam.d/sshd — додати на початок
auth required pam_google_authenticator.so nullok
# /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

Користувач проходить два фактори: публічний ключ + TOTP. nullok дозволяє користувачам без налаштованого TOTP поки логінитися — прибирається після повного rollout.

Порівняння методів SSH-доступу

Метод Безпека Складність Зручність для користувачів Аудит
Прямий SSH до кожного сервера Низька (багато точок входу) Низька Висока Ні
OpenVPN + SSH Висока (шифрування тунелю) Середня Середня (потрібен VPN-клієнт) Ні
Agent forwarding Середня (ключ на bastion) Низька Висока Ні
Bastion + ProxyJump Висока (ключ не залишає клієнт) Низька Висока (прозоро) Так (логи sshd)

Що входить у роботу з налаштування bastion

  • Аналіз поточної схеми доступу та проектування архітектури bastion host під вашу інфраструктуру (AWS/GCP/Yandex Cloud).
  • Налаштування hardened sshd_config з рекомендаціями CIS.
  • Інтеграція MFA (Google Authenticator, Duo Security).
  • Централізоване логування (Loki, ELK) з retention-політиками.
  • Шаблони Ansible/Terraform для автоматизації розгортання.
  • Документація (runbook, схема доступу).
  • Навчання команди (як додати нових користувачів, як працювати з ProxyJump).
Типові помилки при налаштуванні bastion - Використання agent forwarding замість ProxyJump — ключ опиняється на bastion. - Слабкий пароль або незакриті парольні доступи. - Відсутність логування — неможливо розслідувати інциденти. - Ігнорування MFA для адміністраторів.

Терміни та етапи впровадження

Етап Тривалість Результат
Аналітика та проектування 1 день Схема доступу, вибір IP-діапазонів
Розгортання bastion (AWS/GCP) 1 день Робочий bastion з IP-вайтлістом та hardened sshd
Налаштування MFA та ProxyJump 1–2 дні Користувачі підключаються з двофакторкою
Централізоване логування 1 день Логи сесій відправляються в центральну систему
Автоматизація (Ansible/Terraform) 1–2 дні Повторюване розгортання

Базовий bastion на AWS/GCP з IP-вайтлістингом, hardened sshd, ProxyJump-конфігами для команди налаштовується за 1 день. З MFA, централізованим логуванням та ansible-автоматизацією — 2–3 дні.

Чому варто звернутися до нас?

Ми впровадили bastion host для 20+ клієнтів — від стартапів до великих e-commerce проєктів. Використовуємо лише перевірені патерни: ProxyJump замість agent forwarding, Google Authenticator PAM для MFA, RSYSLOG для централізованого збору логів. Гарантуємо, що ключі користувачів ніколи не з'являться на bastion, а всі сесії будуть записані. Отримайте консультацію щодо вашого проєкту — ми оцінимо поточну схему доступу та запропонуємо оптимізоване рішення.

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

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

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