8 способов защиты ssh-сервера. Информация к размышлению

Что делать если в логах зачастили записи, говорящие о попытках проникновения на сервер предприятия по ssh

Aug 15 05:02:54 omega sshd[26789]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.85.42.230 user=root
Aug 15 05:02:57 omega sshd[26786]: error: PAM: Authentication failure for root from 112.85.42.230
Aug 15 05:02:58 omega sshd[26792]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.85.42.230 user=root
Aug 15 05:03:00 omega sshd[26786]: error: PAM: Authentication failure for root from 112.85.42.230
Aug 15 05:05:29 omega sshd[26797]: Received disconnect from 22.226.181.166 port 37420:11: [preauth]

Каковы способы защиты ssh от любопытных граждан? Есть ли способ самый надежный, внедрив который администратор может чувствовать себя спокойно? Попробуем найти ответ на этот вопрос рассмотрев следующие из них:

  • Защита средствами фаервол
  • Авторизация по паролю
  • Установка ssh-сервера на другой порт
  • Доступ по ключам
  • Доступ через программы-нокеры (port knockres)
  • Двухфакторная аутентификация (2FA)
  • Использование fail2ban
  • Использование vpn

Теперь подробнее о каждом

Защита средствами фаервол

Данный способ защиты не всегда и не всем подходит, но все же остается действенным для отражения атак с неизвестных ip-адресов. В настройках фаервола указываются правила доступа к ssh-серверу с нужных адресов и запрещающее правило для остальных

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

Авторизация по паролю

Самый стандартный способ. После установки ssh-сервер висит на 22 порту. Это стандартный порт для sshd. Доступ пользователю root запрещен. При соединении запрашивается пара логин/пароль. Если все прошло удачно, то в распоряжении пользователя появляется командная строка. Тут все просто. Порт доступен для сканирования и брутфорса

В этом случае пароль должен быть достадочно сложным

Установка sshd на другой порт

Настройки аналогичны способу авторизация по паролю с той лишь разницей, что ssh-сервер висит на любом другом вакантном порту. Регулируется это изменением параметра port в sshd_config

Port 2242

Количество атак на такие порты стремится к нулю

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

Доступ по ключам

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

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

Надежность этого способа защиты без использования пароля по мнению автора весьма спорная

Доступ через программы-нокеры

Суть технологии port knocking — открыть доступ к определенным портам если удаленный пользователь предварительно передал корректную последовательность соединений на целевой сервер

В данном случае порт 22 закрыт фаерволом, а knock-сервер ожидает передачи последовательности соединений по портам и типу протокола. В случае успеха порт 22 открывается для ip-адреса, который инициировал такую последовательность

Существует опасность, что трафик перехватят и смогут вычленить из него последовательность. Чем чаще используется port knocking, тем выше вероятность, что так произойдет

Более сложный метод защиты от прослушивания port knocking состоит в использовании одноразовых секретных последовательностей. Например в настройках сервера knockd можно использовать параметр one_time_sequences, значением которого должен быть путь к файлу с определением последовательностей, по одной на строку. После использования каждой последовательности knockd комментирует строку с такой последовательностью и переключается на следующую

Инфо! Используя knockd можно запускать процессы резервного копирования, удаления важных данных с сервера и другие. Вы даже можете отправить заявление об увольнении Вашему начальнику 🙂

Двухфакторная аутентификация (2FA)

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

В результате, потенциальному злоумышленнику мало знать Ваш логин и пароль, ему еще нужно завладеть Вашим мобильным устройством, где установлена программа аутентификатор (Google Authenticator, Microsoft Authenticator)

Этот способ значительно повышает безопасность сервера и усложняет атаки методом перебора

Использование fail2ban

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

Этот способ эффективен на практике. После блокировки на долгое время нескольких ip-адресов бот уходил на долго

Использование vpn

Этот способ более подойдет для доступа к офисным серверам, покольку предполагает удаленный доступ в сеть предприятия

В данном случае ssh-порт закрыт для доступа из мира и открыт из офисной сети только в случае успешного vpn-соединения. В результате такого соединения на компьютере пользователя прописываются маршруты только к нужным серверам, что повышает надежность, либо ко всей сети если нужно

Резюме

Были рассмотрены различные способы защиты ssh. Комбинируя их между собой можно значительно повысить уровень защиты сервера. Но это определяется уровнем паранойи администратора

Александр Черных
системный администратор

0