Как и все другие серверы, SSH-сервер также подвержен попыткам несанкционированного доступа. Поэтому всякий раз, когда вы хотите использовать SSH-сервер, вы должны сначала подумать о его защите, чтобы спастись от любых нежелательных ситуаций в долгосрочной перспективе. Обычно термин «защита сервера» также известен как «усиление защиты сервера». Это можно сделать, приняв несколько мер. Эти меры зависят от требуемого уровня безопасности.
Меры защиты SSH-сервера варьируются от базовых до расширенных, и, как мы уже говорили ранее, вы можете выбрать их в соответствии с нужным вам уровнем безопасности. Вы можете пропустить любую из предписанных мер, если у вас есть достаточные знания о последствиях и если вы в состоянии противостоять им. Кроме того, мы никогда не можем сказать, что один шаг обеспечит 100% безопасность или что один шаг лучше другого.
Все зависит от того, какой тип безопасности нам действительно нужен. Поэтому сегодня мы намерены дать вам очень глубокое представление об основных и дополнительных шагах для защиты SSH-сервера в Ubuntu 20.04. Помимо этих методов, мы также поделимся с вами некоторыми дополнительными советами по защите вашего SSH-сервера в качестве бонуса. Итак, давайте начнем с сегодняшнего интересного обсуждения.
Все конфигурации SSH хранятся в его файле /etc/ssh/sshd_config. Этот файл считается очень важным для нормального функционирования вашего SSH-сервера. Поэтому перед внесением каких-либо изменений в этот файл настоятельно рекомендуется создать резервную копию этого файла, выполнив следующую команду в своем терминале:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Если эта команда выполнена успешно, вы не увидите никаких результатов.
После создания резервной копии этого файла этот шаг является необязательным и выполняется, если вы хотите проверить все параметры, которые в данный момент включены в этом файле конфигурации. Вы можете проверить это, выполнив следующую команду в своем терминале:
sudo sshd –T
Теперь вы можете начать защищать свой SSH-сервер, переходя от основных шагов к расширенным в Ubuntu 20.04.
Основные шаги по защите SSH-сервера в Ubuntu 20.04 следующие:
Вы можете открыть файл конфигурации SSH, выполнив в терминале команду, указанную ниже:
sudo nano /etc/ssh/sshd_config
Вместо использования паролей для аутентификации ключи SSH считаются более безопасными. Поэтому, если вы сгенерировали ключи SSH для аутентификации, вы должны отключить аутентификацию на основе пароля. Для этого вам нужно найти переменную PasswordAuthentication, раскомментировать ее и установить для нее значение «нет», как показано на изображении, показанном ниже:
Иногда пользователям очень удобно создавать пустые пароли, чтобы не запоминать сложные пароли. Такая практика может нанести ущерб безопасности вашего SSH-сервера. Следовательно, вам необходимо отклонить все попытки аутентификации с пустыми паролями. Для этого вам нужно найти переменную PermitEmptyPasswords и просто раскомментировать ее, поскольку по умолчанию для нее уже установлено значение «нет», как показано на следующем изображении:
Вы должны строго запретить вход в систему с правами root для защиты любого злоумышленника от получения доступа root к вашему серверу. Вы можете сделать это, найдя переменную PermitRootLogin, раскомментируя ее и установив для нее значение «no», как показано на изображении ниже:
Сервер SSH может работать с двумя разными протоколами, т. е. Протоколом 1 и протоколом 2. Протокол 2 реализует более продвинутые функции безопасности, поэтому он предпочтительнее протокола 1. Однако протокол 1 является протоколом SSH по умолчанию, а не протоколом. явно упоминается в файле конфигурации SSH. Поэтому, если вы хотите работать с протоколом 2 вместо протокола 1, вам необходимо явно добавить строку «Protocol 2» в файл конфигурации SSH, как показано на следующем изображении:
Иногда пользователи оставляют свои компьютеры без присмотра на очень долгое время. Между тем, любой злоумышленник может подойти и получить доступ к вашей системе, нарушив ее безопасность. Здесь в игру вступает концепция тайм-аута сеанса. Эта функция используется для выхода пользователя из системы, если он остается неактивным в течение длительного времени, чтобы ни один другой пользователь не мог получить доступ к его системе.
Этот тайм-аут можно установить, найдя переменную ClientAliveInterval, раскомментируя ее и присвоив ей любое значение (в секундах) по вашему выбору. В нашем случае мы присвоили ему значение «300 секунд» или «5 минут». Это означает, что если пользователь находится вдали от SSH-сервера в течение «300 секунд», он автоматически выйдет из системы, как показано на изображении ниже:
Сервер SSH — это не сервер, доступ к которому требуется всем остальным пользователям. Поэтому доступ к нему должен быть ограничен только теми пользователями, которым он действительно нужен. Чтобы разрешить конкретным пользователям доступ к серверу SSH, вам нужно добавить переменную с именем «AllowUsers» в файл конфигурации SSH, а затем записать имена всех тех пользователей, которым вы хотите разрешить доступ к серверу SSH, через пробел. В нашем случае мы хотели разрешить доступ к SSH-серверу только одному пользователю.
Каждый раз, когда пользователь пытается получить доступ к серверу, и он не может аутентифицироваться в первый раз, он пытается сделать это снова. Пользователь продолжает предпринимать эти попытки до тех пор, пока он не сможет успешно аутентифицировать себя и, следовательно, получить доступ к серверу SSH. Это считается крайне небезопасной практикой, поскольку хакер может запустить атаку грубой силы (атака, которая многократно пытается угадать пароль, пока не будет найдено правильное совпадение). В результате он сможет получить доступ к вашему SSH-серверу.
Вот почему настоятельно рекомендуется ограничить количество попыток аутентификации, чтобы предотвратить атаки подбора пароля. Значение по умолчанию для попыток аутентификации на сервере SSH установлено на «6». Однако вы можете изменить его в зависимости от требуемого уровня безопасности. Для этого вам нужно найти переменные «MaxAuthTries», раскомментировать их и установить для них любое желаемое число. Мы хотели ограничить количество попыток аутентификации числом «3», как показано на изображении ниже:
К настоящему времени мы предприняли все основные шаги для защиты нашего SSH-сервера в Ubuntu 20.04. Однако нам по-прежнему необходимо убедиться, что только что настроенные параметры работают правильно. Для этого мы сначала сохраним и закроем наш файл конфигурации. После этого мы попробуем запустить наш SSH-сервер в тестовом режиме. Если он успешно работает в тестовом режиме, это будет означать, что в вашем файле конфигурации нет ошибок. Вы можете запустить свой SSH-сервер в тестовом режиме, выполнив следующую команду в своем терминале:
Когда эта команда выполняется успешно, она не выводит никаких результатов на терминал, как показано на изображении ниже. Однако, если в вашем файле конфигурации будут какие-либо ошибки, то выполнение этой команды отобразит эти ошибки на терминале. Затем вы должны будете исправить эти ошибки. Только тогда вы сможете продолжить.
Теперь, когда сервер SSH успешно работал в тестовом режиме, нам нужно перезагрузить его, чтобы он мог прочитать новый файл конфигурации, то есть изменения, которые мы внесли в файл конфигурации SSH на шагах, показанных выше. Чтобы перезагрузить SSH-сервер с новыми конфигурациями, вам необходимо выполнить следующую команду в вашем терминале:
sudo service sshd reload
Если ваш SSH-сервер перезапущен успешно, терминал не будет отображать никаких выходных данных.
После выполнения всех основных шагов по защите SSH-сервера в Ubuntu 20.04 вы, наконец, можете перейти к расширенным шагам. Это всего лишь шаг вперед к защите вашего SSH-сервера. Однако, если вы намереваетесь достичь умеренного уровня безопасности, описанных выше шагов будет достаточно. Но если вы хотите пойти немного дальше, вы можете выполнить шаги, описанные ниже:
Основные шаги по обеспечению безопасности сервера SSH реализованы в файле конфигурации SSH. Это означает, что эти политики будут действовать для всех пользователей, которые попытаются получить доступ к серверу SSH. Это также подразумевает, что основные шаги представляют собой общий метод защиты SSH-сервера. Однако, если мы попытаемся рассмотреть принцип «глубокой защиты», мы поймем, что нам нужно защищать каждый отдельный ключ SSH отдельно. Это можно сделать, задав явные параметры безопасности для каждого отдельного ключа. Ключи SSH хранятся в файле ~/.ssh/authorized_keys, поэтому сначала мы получим доступ к этому файлу, чтобы изменить параметры безопасности. Мы запустим следующую команду в терминале, чтобы получить доступ к файлу ~/.ssh/authorized_keys:
sudo nano ~/.ssh/authorized_keys
Выполнение этой команды откроет указанный файл в редакторе nano. Однако вы также можете использовать любой другой текстовый редактор по вашему выбору, чтобы открыть этот файл. Этот файл будет содержать все ключи SSH, которые вы создали на данный момент.
Для достижения повышенного уровня безопасности доступны следующие пять опций:
Эти параметры можно записать перед любым ключом SSH по вашему выбору, чтобы сделать их доступными для этого конкретного ключа. Для одного ключа SSH можно настроить даже несколько параметров. Например, вы хотите отключить переадресацию портов для любого конкретного ключа или, другими словами, вы хотите реализовать переадресацию без переадресации портов для определенного ключа, тогда синтаксис будет следующим:
no-port-forwarding DesiredSSHKey
Здесь вместо DesiredSSHKey у вас будет фактический SSH-ключ в вашем файле ~/.ssh/authorized_keys. После применения этих параметров для желаемых ключей SSH вам необходимо сохранить файл ~/.ssh/authorized_keys и закрыть его. Этот расширенный метод хорош тем, что вам не потребуется перезагружать SSH-сервер после внесения этих изменений. Скорее, эти изменения будут автоматически прочитаны вашим SSH-сервером.
Таким образом, вы сможете глубоко защитить каждый ключ SSH, применив передовые механизмы безопасности.
Помимо всех основных и дополнительных шагов, которые мы предприняли выше, есть также несколько дополнительных советов, которые могут оказаться очень полезными для защиты SSH-сервера в Ubuntu 20.04. Эти дополнительные советы обсуждаются ниже:
Данные, которые находятся на вашем SSH-сервере, а также тот, который остается в пути, должны быть зашифрованы, и это тоже с помощью надежного алгоритма шифрования. Это не только защитит целостность и конфиденциальность ваших данных, но также предотвратит нарушение безопасности всего вашего SSH-сервера.
Программное обеспечение, которое работает на вашем SSH-сервере, должно быть актуальным. Это сделано для того, чтобы в вашем программном обеспечении не осталось ошибок безопасности. Скорее они должны быть исправлены вовремя. Это убережет вас от любого потенциального вреда в долгосрочной перспективе, а также предотвратит отказ вашего сервера или его недоступность из-за проблем с безопасностью.
SELinux — это механизм, который закладывает фундамент безопасности в системах на базе Linux. Он работает путем реализации обязательного контроля доступа (MAC). Он реализует эту модель управления доступом, определяя правила доступа в своей политике безопасности. Этот механизм включен по умолчанию. Однако пользователям разрешено изменять этот параметр в любое время. Это означает, что они могут отключить SELinux, когда захотят. Однако настоятельно рекомендуется всегда держать SELinux включенным, чтобы он мог защитить ваш SSH-сервер от всех возможных повреждений.
Если вы защитили свой SSH-сервер паролями, вы должны создать надежные политики паролей. В идеале пароли должны быть длиннее 8 символов. Их нужно менять через определенное время, скажем, каждые 2 месяца. Они не должны содержать словарных слов; скорее, они должны быть комбинацией алфавитов, цифр и специальных символов. Точно так же вы можете определить некоторые другие дополнительные строгие меры для своих политик паролей, чтобы убедиться, что они достаточно надежны.
Если что-то пойдет не так с вашим SSH-сервером, вашим первым помощником могут стать журналы аудита. Поэтому вы должны поддерживать эти журналы, чтобы можно было отследить первопричину проблемы. Более того, если вы будете постоянно следить за состоянием и работой своего SSH-сервера, это также предотвратит возникновение каких-либо серьезных проблем.
И последнее, но не менее важное: вы всегда должны хранить резервную копию всего вашего SSH-сервера. Это не только спасет ваши данные от повреждения или полной потери; скорее, вы также можете использовать этот резервный сервер, когда ваш основной сервер выходит из строя. Это также ограничит время простоя сервера и обеспечит его доступность.
Позаботившись обо всех мерах, описанных в этой статье, вы можете легко защитить или укрепить свой SSH-сервер в Ubuntu 20.04. Однако, если у вас есть опыт работы в области информационной безопасности, вы должны хорошо осознавать тот факт, что нет ничего лучше 100% безопасности. Все, что мы можем получить, — это обещание о максимальном усилии, и это наилучшее усилие будет надежным только до тех пор, пока оно также не будет нарушено. Вот почему даже после принятия всех этих мер нельзя сказать, что ваш SSH-сервер на 100% безопасен; скорее, у него все еще могут быть такие уязвимости, о которых вы даже не могли бы подумать. О таких уязвимостях можно позаботиться, только если мы будем внимательно следить за нашим SSH-сервером и постоянно обновлять его, когда это необходимо.