Задать вопрос
Все статьи / Полезная информация / Защита SSH-доступа в облачной инфраструктуре
Найти результаты:
Период:
с:
 
по:
Помощь в поиске

Помощь в поиске

apple banana
Найти записи, которые содержат хотя бы одно из двух слов.

+apple +juice
Найти записи, которые содержат оба слова.

+apple macintosh
Найти записи, которые содержат слово 'apple', но положение записей выше, если они также содержат 'macintosh'.

+apple -macintosh
Найти записи, которые содержат слово 'apple', но не 'macintosh'.

+apple ~macintosh
Найти записи, которые содержат слово 'apple', но если запись также содержит слово 'macintosh', rate it lower than if row does not. Это более "мягкий" чем поиск '+apple -macintosh', для которого наличие 'macintosh' вызывает что записи не будут возвращены вовсе.

+apple +(>turnover <strudel)
Найти записи, которые содержат слова 'apple' и 'turnover', или 'apple' и 'strudel' (в любом порядке), но ранг 'apple turnover' выше чем 'apple strudel'.

apple*
Найти записи, которые содержат такие слова как 'apple', 'apples', 'applesauce', или 'applet'.

"some words"
Найти записи, которые содержат точную фразу 'some words' (например записи содержащие 'some words of wisdom', но не "some noise words").

Защита SSH-доступа в облачной инфраструктуре

Протокол SSH (Secure Shell) – стандартный инструмент администрирования серверов, обеспечивающий зашифрованное соединение между клиентом и сервером. При этом SSH‑доступ часто становится целью злоумышленников: уязвимости в конфигурации, слабые пароли или устаревшие версии ПО могут привести к компрометации всей облачной инфраструктуры.

В этой статье мы рассмотрим основные методы защиты SSH‑доступа в облачной среде.

Общие принципы безопасности SSH

Безопасность SSH в облачной инфраструктуре опирается на несколько базовых правил, которые формируют устойчивую модель доступа. Главная идея – минимизировать поверхность атаки и сделать любой несанкционированный вход максимально сложным и заметным.

  • Отказ от аутентификации по паролю. В облаке серверы постоянно доступны из интернета, поэтому парольная защита быстро становится объектом автоматизированных атак. Использование ключевой аутентификации и отключение PasswordAuthentication значительно снижает риск компрометации. Дополнительно стоит запретить прямой вход под root и выполнять административные действия через отдельного пользователя с sudo.
  • Минимальные привилегии. Доступ предоставляют только тем сотрудникам, кому он действительно необходим, и исключительно к тем серверам, с которыми они работают. У каждого пользователя должен быть собственный ключ – использование общего доступа в команде недопустимо. Если сотрудник меняет роль или увольняется, его доступ необходимо немедленно отозвать. Контроль жизненного цикла доступа так же важен, как и его первоначальная настройка.
  • Ограничение сетевого периметра. Даже если используются ключи, не нужно открывать сервер всему интернету без реальной необходимости. Гораздо безопаснее ограничивать доступ по IP‑адресам, пускать через специальный бастион-хост или только по VPN. Так злоумышленникам остаётся намного меньше возможностей для атаки. Чем меньше точек входа снаружи, тем сложнее проникнуть в систему.
  • Аудит подключений. Логи SSH позволяют выявлять попытки перебора, нетипичную активность и несанкционированные подключения. Централизованное хранение журналов и регулярный анализ событий делают защиту управляемой, а не формальной.
  • Актуальное ПО и корректные настройки. Устаревшие версии OpenSSH и включенные слабые алгоритмы шифрования создают уязвимости даже при соблюдении остальных мер. Настройки должны быть стандартизированы и закреплены в инфраструктурном коде, чтобы исключить расхождения между серверами.

Способы защиты SSH-доступа

SSH‑доступ обеспечивает управление серверами, но при неправильной настройке становится уязвимым местом инфраструктуры. Рассмотрим основные способы повысить его безопасность и снизить риски несанкционированного доступа:

Смена порта SSH

По умолчанию SSH работает на порту 22 – его в первую очередь сканируют боты и автоматические скрипты. Если перенести службу на другой порт, число массовых попыток подключения резко сократится.

Чтобы сменить порт, нужно:

  1. Открыть файл /etc/ssh/sshd_config.
  2. Указать новый номер в параметре Port;
  3. Сохранить изменения. 
  4. Перезапустить SSH‑сервис.

Это не полноценная защита от целенаправленного злоумышленника, но эффективная мера против массового перебора. В сочетании с файерволом мера заметно снижает число нежелательных подключений.

Отключение входа по паролю

Если на сервере разрешен вход по логину и паролю, его легко атаковать методом перебора. Стандартный SSH не ограничивает число попыток ввода пароля, поэтому самый надежный способ защиты – полностью отключить парольную аутентификацию.

Сделать это можно в конфигурационном файле sshd_config. Достаточно прописать:

PasswordAuthentication no 

и сохранить изменения.

После этого подключиться к серверу можно будет только с помощью SSH‑ключей. Публичная часть ключа хранится на сервере, приватная – у пользователя. Без наличия корректной пары доступ невозможен.

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

  • у вас уже есть созданные SSH‑ключи;
  • публичный ключ добавлен в файл authorized_keys на сервере;
  • есть как минимум один рабочий административный доступ.

Если пропустить эти проверки, можно случайно потерять доступ к серверу.

Настройка устаревания паролей

Если полностью отказаться от аутентификации по паролю невозможно, стоит настроить их регулярную ротацию. Ограниченный срок действия снижает ценность украденных учетных данных: даже при компрометации пароль быстро станет недействительным.

В Linux срок действия задается политиками системы управления учетными записями (например, через chage или параметры /etc/login.defs). Можно установить максимальный период использования пароля, предупредительный срок до истечения и минимальный интервал между сменами.

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

Ограничение доступа 

Один из самых эффективных способов усилить безопасность SSH – минимизировать круг тех, кто вообще может подключаться к серверу. Чем меньше доступов, тем ниже риск компрометации.

  1. Ограничение можно реализовать на нескольких уровнях:

Ограничение по пользователям и группам

В файле /etc/ssh/sshd_config можно явно указать, кому разрешен вход:

AllowUsers admin devops

или

AllowGroups sshusers

Теперь подключиться смогут только перечисленные пользователи или участники указанной группы. Даже если в системе есть другие учетные записи, SSH их не пропустит.

  1. Ограничение по IP-адресам

На уровне firewall или группы безопасности можно разрешить доступ только с определенных IP-адресов – например, из офисной сети или с VPN. Это снижает вероятность массовых атак и исключает подключения из неизвестных сетей.

Например, разрешим доступ к SSH только с офисного IP 203.0.113.10:

sudo ufw allow from 203.0.113.10 to any port 22 proto tcp

Если SSH работает на нестандартном порту, укажите его вместо 22.

После этого включите firewall (если еще не включен):

sudo ufw enable

И удалите общее правило, если оно было:

sudo ufw delete allow 22/tcp

Теперь подключиться к серверу можно только с указанного IP.

  1. Ограничение через VPN или бастион-хост

Более надежный вариант – полностью закрыть SSH от публичного интернета и разрешить доступ только из внутренней сети. В этом случае пользователь сначала подключается к VPN или bastion-хосту, а уже затем – к нужному серверу.

Отключение root-доступа по SSH

У пользователя root в системе самые широкие права. Если злоумышленник сумеет зайти под root через SSH, он получит полный контроль над сервером. Чтобы этого не случилось, лучше запретить прямой вход под учетной записью root.

В файле /etc/ssh/sshd_config достаточно установить параметр:

PermitRootLogin no

Дальше работать с сервером можно так: заходите как обычный пользователь, а когда нужны особые права – используете команду sudo. Это безопаснее: даже если учетная запись будет скомпрометирована, злоумышленник не получит полный контроль над системой. К тому же так проще отслеживать, кто и какие действия выполнял – все фиксируется в логах.

Но прежде чем вносить такие изменения, обязательно проверьте: есть ли на сервере пользователь с правами администратора и работает ли у него подключение по SSH. Без этого вы можете потерять возможность управлять сервером.

Многофакторная аутентификация

Один пароль или один SSH‑ключ – это всего лишь одна ступень защиты. Если их украдут, злоумышленник сможет зайти на сервер. Чтобы обезопасить систему сильнее, используют многофакторную аутентификацию (MFA) – она добавляет еще одну проверку при входе.

В компаниях можно подключить SSH к общей системе входа, например через Яндекс ID. Тогда для доступа к серверу пользователь будет входить под своей корпоративной учетной записью, а подтвердить вход сможет удобным способом: через push‑уведомление, одноразовый код или другой метод многофакторной аутентификации, который настроен в системе.

Так даже при утечке пароля или ключа злоумышленник не сможет войти на сервер: ему не хватит второго фактора. Поэтому для продакшн-серверов и административных узлов включать MFA стоит обязательно.

Fail2ban и динамическая блокировка атак

Даже если вы используете SSH‑ключи, сервер все равно могут атаковать – его постоянно сканируют и пытаются взломать автоматически. Чтобы защититься, можно установить инструмент Fail2ban.

Он следит за журналом SSH и считает, сколько раз с одного IP‑адреса были неудачные попытки входа. Если их становится слишком много, Fail2ban автоматически блокирует этот адрес через файервол на определенное время.

Так можно:

  • остановить брутфорс-атаки;
  • сократить число повторяющихся попыток авторизации;
  • снизить нагрузку на сервер.

Fail2ban легко настроить: можно выбрать, на сколько блокировать IP, сколько попыток разрешать и какие адреса считать надежными. Он не заменяет отключение паролей и другие меры защиты, но хорошо их дополняет и делает сервер безопаснее.

Централизованное управление доступом

Если у вас немного серверов, можно вручную управлять SSH‑ключами – это несложно. Но когда серверов десятки, а работают с ними разные люди, быстро начинается путаница: кто‑то забывает удалить старые ключи, кто‑то оставляет ненужный доступ, и в итоге непонятно, кто и куда может заходить.

Чтобы такого не было, используют централизованные системы. Они заменяют постоянные ключи на более безопасные варианты: например, выдают временные сертификаты или подключают динамическое управление правами.

Для этого используют инструменты вроде HashiCorp Vault, который может выпускать временные SSH-сертификаты, или Teleport, который помогает управлять правами, следит за подключениями и работает с корпоративной системой единого входа.

У этого подхода есть явные плюсы:

  • не надо вручную править authorized_keys на каждом сервере – доступ отзывается одним действием;
  • управление через роли, а не через отдельные сервера;
  • вся история подключений в одном месте;
  • меньше рисков из‑за утечки ключей – они временные.

С централизацией все под контролем: один центр управления вместо разрозненных настроек.

Контроль и мониторинг SSH-подключений

Настройка SSH – это только половина задачи. Вторая половина – постоянный контроль того, кто и как использует доступ. Без мониторинга даже правильно защищенный сервер станет слепой зоной.

В Linux все попытки входа по SSH фиксируются в системных логах (/var/log/auth.log или /var/log/secure – в зависимости от дистрибутива). В них можно увидеть:

  • успешные и неуспешные попытки авторизации;
  • IP-адрес источника;
  • имя пользователя;
  • способ входа (ключ или пароль);
  • время подключения и отключения.

Хранить эти логи только на сервере опасно: если злоумышленники его взломают, они могут стереть записи. Поэтому лучше отправлять логи в другое место – например, на отдельный сервер или в специальную систему для анализа (как Elastic Stack). Так вы сохраните данные и сможете легко их искать.

Стоит настроить автоматические оповещения, чтобы сразу узнавать о подозрительных событиях. Например, если кто‑то слишком часто ошибается при входе, пытается зайти под именем главного администратора, подключается с незнакомого адреса, входит посреди ночи или вдруг резко увеличивается число подключений.

В продвинутых системах эти события отправляют в SIEM‑систему. Там они сравниваются с другими сигналами безопасности: например, с изменениями в файлах, созданием новых пользователей или запуском подозрительных программ. Это помогает увидеть полную картину и быстрее заметить атаку.

Для особо важных серверов важно не просто фиксировать, кто зашел, но и записывать, что человек делал после входа. Например, какие команды вводил или какие действия совершал. Если что‑то пойдет не так, эти записи помогут разобраться, что произошло и кто это сделал.

Мониторинг позволяет оперативно реагировать на атаки, снижать их воздействие и сохранять полную историю всех административных действий в облаке.

Регулярные проверки безопасности

Даже если SSH изначально настроен грамотно, со временем его защита ослабевает. Появляются новые пользователи, меняются IP‑адреса, добавляются ключи, выходит обновление программного обеспечения. К тому же нередко какие‑то настройки вносят временно – и потом про них забывают.

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

Что стоит проверять на постоянной основе:

  • Конфигурация SSH (sshd_config). Проверьте, отключена ли аутентификация по паролю (если того требует политика), запрещен ли вход под root, ограничено ли число попыток входа (MaxAuthTries), корректно ли настроены параметры времени ожидания (LoginGraceTime) и не используются ли устаревшие алгоритмы шифрования.
  • Пользователи с доступом к серверу. Регулярно сверяйте список системных пользователей с реальной оргструктурой: удаляйте аккаунты уволенных, пересматривайте права подрядчиков и временных сотрудников.
  • SSH-ключи и файл authorized_keys. Проверяйте все добавленные публичные ключи: выясняйте, кому они принадлежат, убедитесь, что они актуальны, и исключите общие ключи для команды. Фиксируйте, кто и когда добавил каждый ключ – так доступ будет прозрачным.
  • Сетевые правила и firewall. Убедитесь, что SSH не доступен из интернета: проверьте, ограничен ли доступ доверенными IP‑адресами или VPN, правильно ли настроены группы безопасности и нет ли лишних разрешений.
  • Обновления и уязвимости. Контролируйте, чтобы OpenSSH и системные пакеты безопасности всегда были в актуальном состоянии. В устаревших версиях программ часто встречаются уязвимости, которые могут обойти даже идеально настроенную защиту. 
  • Анализ логов и аномалий. Проверяйте попытки неудачной авторизации, входы в нерабочее время и подключения из необычных стран или IP‑диапазонов. Если у вас есть централизованная система логирования – просматривайте отчеты и срабатывания алертов.
  • Проверка процедур реагирования. Следите не только за наличием правил, но и за тем, чтобы они работали. Обеспечьте быстрый отзыв доступа, корректное удаление ключей и обязательную фиксацию и разбор инцидентов.

Лучше всего закрепить проверки в регламенте. Например, можно делать так: каждую неделю – проводить быстрый аудит (просматривать логи и проверять текущие доступы), а раз в месяц – более тщательную проверку (анализировать ключи, конфигурационные файлы, сетевые правила и актуальные обновления).

Так SSH остается защищенным не за счет одной настройки, а благодаря постоянному вниманию и регулярным проверкам.

Заключение

Облачные системы быстро растут: появляется больше серверов и точек доступа. Если не выстроить четкие правила выдачи прав и контроля доступа, риски безопасности будут расти вместе с инфраструктурой. 

SSH – главный способ управлять серверами в облаке. Чтобы его защитить, недостаточно просто настроить его один раз. Нужна целая система мер. Важно:

  • отключить вход по паролю и запретить доступ под учетной записью root; 
  • ограничить подключения только доверенными IP‑адресами;
  • добавить многофакторную аутентификацию для дополнительной проверки;
  • централизованно управлять ключами доступа;
  • постоянно следить за подключениями;
  • регулярно проверять настройки. 

Любая из этих мер полезна, чтобы полностью защитить систему, нужно использовать их вместе.

Предыдущая статья
Зачем нужен REST API и как его используют
Следующая статья
Знакомство с Node.js