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-соединения. В результате такого соединения на компьютере пользователя прописываются маршруты только к нужным серверам, что повышает надежность, либо ко всей сети если нужно

TL;DR

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