Настройка 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