Что делать если в логах зачастили записи, говорящие о попытках проникновения на сервер предприятия по 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 комментирует строку с такой последовательностью и переключается на следующую
Двухфакторная аутентификация (2FA)
Этот способ хорошо использовать с вариантом авторизация по паролю. Такой вид защиты обеспечивает дополнительный уровень безопасности, поскольку помимо знания правильного логина и пароля, пользователь должен предоставить временный цифровой код, сгенерированный независимо на сервере и на мобильном устройстве (планшет или смартфон)
В результате, потенциальному злоумышленнику мало знать Ваш логин и пароль, ему еще нужно завладеть Вашим мобильным устройством, где установлена программа аутентификатор (Google Authenticator, Microsoft Authenticator)
Этот способ значительно повышает безопасность сервера и усложняет атаки методом перебора
Использование fail2ban
Принцип работы этой программы в следующем: если за определенное количество попыток не был выполнен удачный вход, то ip-адрес с которого пользователь соединяется будет заблокирован на время определенное в настройках fail2ban. Решения о блокировке принимается на основании онлайн анализа sshd.log и выполняется посредством корректировки правил фаервол
Этот способ эффективен на практике. После блокировки на долгое время нескольких ip-адресов бот уходил на долго
Использование vpn
Этот способ более подойдет для доступа к офисным серверам, покольку предполагает удаленный доступ в сеть предприятия
В данном случае ssh-порт закрыт для доступа из мира и открыт из офисной сети только в случае успешного vpn-соединения. В результате такого соединения на компьютере пользователя прописываются маршруты только к нужным серверам, что повышает надежность, либо ко всей сети если нужно
TL;DR
Были рассмотрены различные способы защиты ssh. Комбинируя их между собой можно значительно повысить уровень защиты сервера. Но это определяется уровнем паранойи администратора

- Системный администратор с 2000 года
- Участник Хабр Q&A и cyberforum
- Кейсы