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, а все сессии будут записаны. Получите консультацию по вашему проекту — мы оценим текущую схему доступа и предложим оптимизированное решение.







