Защита SSH- соединений помогает защитить вашу систему Linux и данные. Системным администраторам и домашним пользователям также необходимо обеспечить безопасность компьютеров, подключенных к Интернету. Вот 10 простых способов помочь вам защитить ваш SSH-сервер .
Некоторые основы безопасности SSH
SSH означает Secure Shell. Протокол SSH или программный инструмент позволяет системным администраторам и пользователям устанавливать безопасные соединения с удаленными компьютерами, используя этот протокол.
Протокол SSH — это зашифрованный протокол, предназначенный для обеспечения безопасного соединения через незащищенную сеть, например Интернет. SSH в Linux построен на портативной версии проекта OpenSSH. Он реализован в классической модели клиент-сервер с SSH-сервером, принимающим соединения от SSH-клиентов. Клиент используется для подключения к серверу и предоставления сеанса удаленным пользователям. Сервер принимает соединение и инициирует сеанс.
В конфигурации по умолчанию сервер SSH будет «прослушивать» входящие соединения по протоколу управления передачей (TCP), порт 22. Поскольку это стандартизированный и популярный порт, он является целью для угроз и вредоносных ботов.
Злоумышленники запускают ботов, которые сканируют диапазоны IP-адресов в поисках открытых портов. Затем он исследует эти порты на наличие уязвимостей, которые можно использовать. Думать, что я в безопасности, что есть много более крупных и лучших целей, чем я, для плохих парней, совершенно неверно. Эти боты не выбирают цели по каким-либо критериям, они просто ищут способ проникнуть в систему.
Вы станете жертвой, если не защитите свою систему.
Проблемы безопасности
Точка разногласий в безопасности — это любая ситуация, когда выполнение основной задачи предотвращается или задерживается из-за требований безопасности.
Проблемы с безопасностью вызывают дискомфорт (на любом уровне) для пользователей и других лиц при реализации мер безопасности. Люди, плохо знакомые с компьютерными системами, могут беспокоиться о том, действительно ли им придется вводить пароль каждый раз, когда они входят в мэйнфрейм. Для них это также форма разногласий по поводу безопасности.
Введение мер безопасности часто вызывает у некоторых людей определенные разногласия. Владельцы бизнеса должны платить за эти меры. Пользователям компьютеров, возможно, придется изменить привычки или запомнить другую информацию для аутентификации, добавив дополнительные шаги для успешного подключения. Системным администраторам придется проделать дополнительную работу по внедрению и поддержанию новых мер безопасности.
Укрепить и заблокировать Linux или Unix-подобную операционную систему можно быстро. Меры безопасности здесь представляют собой набор простых для выполнения шагов, которые улучшат компьютерную безопасность без необходимости использования сторонних приложений и глубокого вмешательства брандмауэра .
Используйте протокол SSH версии 2.
В 2006 году протокол SSH был обновлен с версии 1 до версии 2. Это значительное обновление. Существует множество изменений и улучшений, особенно в области шифрования и безопасности, а версия 2 не имеет обратной совместимости с версией 1. Чтобы запретить подключения от клиентов версии 1, вы можете указать компьютерам принимать соединения только из версии 2.
Для этого отредактируйте файл /etc/ssh/sshd_config с помощью следующей команды:
sudo gedit /etc/ssh/sshd_config

Добавьте следующую строку:
Protocol 2

Сохраните файл, а затем перезапустите процесс демона SSH, используя следующую команду:
sudo systemctl restart sshd

Проверьте новую настройку в действии, переключившись на другую машину и попытавшись подключиться к тестовой машине по SSH. Мы будем использовать опцию -1 (протокол 1), чтобы заставить команду ssh использовать протокол версии 1.
ssh -1 dave@howtogeek.local

Запрос на подключение отклонен. Убедитесь, что вы все еще можете подключиться к протоколу 2. Для проверки мы буде�� использовать -2 (протокол 2).
ssh -2 dave@howtogeek.local

Тот факт, что SSH-сервер запрашивает пароль, является положительным признаком того, что соединение установлено и вы взаимодействуете с сервером. Современные SSH-клиенты по умолчанию используют протокол 2, нам не нужно указывать протокол 2, если клиент обновлен.
ssh dave@howtogeek.local

Соединение принято.
Избегайте ворот 22
Порт 22 является стандартным портом для SSH-соединений. Если используется другой порт, это добавляет вашей системе немного безопасности через скрытность (STO). Безопасность посредством двусмысленности никогда не следует рассматривать как реальную меру безопасности. Фактически, некоторые более умные атакующие боты проверяют все открытые порты и решают, какую услугу они выполняют, вместо того, чтобы полагаться на простой список поиска портов и предполагать, что они обычно предоставляют услугу. Но использование нестандартного порта может помочь уменьшить плохой трафик на порту 22.
Чтобы настроить нестандартный порт, отредактируйте файл конфигурации SSH, как указано выше.

Удалите # в начале строки порта и замените 22 номером по вашему выбору. Сохраните файл конфигурации и перезапустите демон SSH.
На другом компьютере мы будем использовать команду ssh для подключения к серверу. Команда ssh по умолчанию использует порт 22:
ssh dave@howtogeek.local

В соединении отказано. Попробуйте еще раз и укажите порт 470, используя опцию –p (порт):
ssh -p 479 dave@howtogeek.local

Соединение подтверждено.
Подключите фильтр с помощью TCP Wrappers
TCP Wrappers — это простой для понимания список контроля доступа. Он позволяет запрещать и разрешать соединения на основе характеристик запроса на соединение, таких как IP-адрес или имя хоста. TCP Wrappers следует использовать вместе с правильно настроенным брандмауэром, а не вместо него.
TCP Wrappers предустановлен на компьютерах с Ubuntu 18.04 LTS . Он должен быть установлен на Manjaro 18.10 и Fedora 30.
Для установки в Fedora используйте следующую команду:
sudo yum install tcp_wrappers

Для установки на Manjaro используйте следующую команду:
sudo pacman -Syu tcp-wrappers

Включены два файла: один файл содержит список разрешений, а другой — список запрещенных. Отредактируйте список запретов, используя следующую команду:
sudo gedit /etc/hosts.deny

Приведенная выше команда откроет редактор gedit, в котором файл отказывается загружаться.

Вам нужно добавить строку:
ALL : ALL
И сохраните файл. Эта линия заблокирует любой несанкционированный доступ. Теперь нам нужно предоставить разрешения соединениям, которые вы хотите принять. Для этого вам необходимо отредактировать файл разрешений:
sudo gedit /etc/hosts.allow

Приведенная выше команда откроет редактор gedit с загружаемым файлом.

Мы добавили имя демона SSH, SSHD и IP-адрес компьютера, который позволяет установить соединение. Сохраните файл и посмотрите, действуют ли ограничения и разрешения.
Сначала вы попытаетесь подключиться с компьютера, которого нет в файле hosts.allow:

В соединении отказано. Попробуем подключиться с машины с IP-адресом 192.168.4.23:

Соединение принято.
В приведенном здесь примере допускается подключение только одной машины. Оболочки TCP достаточно гибки, они поддерживают имена хостов, подстановочные знаки и маски подсети для приема соединений из диапазонов IP-адресов.
Отклонять запросы на подключение без пароля
Хотя это и нехорошо, системные администраторы Linux могут создавать учетные записи пользователей без паролей. Это означает, что для удаленных подключений из этой учетной записи пароль не требуется. Эти соединения будут приняты, но не аутентифицированы.
По умолчанию SSH принимает запросы на подключение без пароля. Мы можем легко изменить его и убедиться, что все эти соединения аутентифицированы.
Вам необходимо отредактировать файл конфигурации SSH.

Прокрутите файл вниз, пока не увидите строку #PermitEmptyPasswords no . Удалите # в начале строки и сохраните файл. Перезапустите демон SSH.
Используйте ключи SSH вместо паролей
Ключи SSH обеспечивают безопасный способ входа на сервер SSH. Пароли можно взломать, угадать или подобрать методом перебора . Ключи SSH не уязвимы для атак такого типа.
При создании ключа SSH вы создаете пару ключей. Один из них — открытый ключ, а другой — закрытый ключ. Открытый ключ устанавливается на серверах, к которым вы хотите подключиться. Закрытый ключ надежно хранится на вашем компьютере.
Ключи SSH позволяют устанавливать соединения без пароля, что более безопасно, чем соединения с использованием аутентификации по паролю.
При выполнении запроса на соединение удаленный компьютер использует копию открытого ключа для создания зашифрованного сообщения, отправляемого обратно на компьютер. Поскольку он зашифрован открытым ключом, компьютер может расшифровать его с помощью закрытого ключа.
Затем компьютер извлекает некоторую информацию из сообщения, шифрует ее и отправляет обратно на сервер. Если сервер может расшифровать его с помощью копии открытого ключа. Если информация в сообщении совпадает с тем, что вам отправил сервер, соединение будет подтверждено.
Здесь соединение с сервером по адресу 192.168.4.11 осуществляется пользователем с помощью ключа SSH. Обратите внимание, что им не предлагается вводить пароль.
ssh dave@192.168.4.11

Полностью отключить аутентификацию по паролю
Вы можете полностью отключить аутентификацию по паролю, если используете ключи SSH. Нам нужно отредактировать файл конфигурации SSH.

Прокрутите файл вниз, пока не увидите строку, начинающуюся с #PasswordAuthentication yes . Удалите # в начале строки, измените да на нет и сохраните файл. Перезапустите демон SSH.
Отключить переадресацию X11
Переадресация X11 позволяет удаленным пользователям запускать графические приложения с вашего сервера через сеанс SSH, но ею легко могут воспользоваться злоумышленники. Лучше отключить его, отредактировав файл конфигурации SSH.

Прокрутите файл вниз, пока не увидите строку #X11Forwarding no , удалите # в начале строки и сохраните файл. Перезапустите демон SSH.
Установите значение тайм-аута простоя
Если с компьютером установлено SSH-соединение и в течение определенного периода времени на нем не происходит никаких действий, это может представлять угрозу безопасности.
Поэтому вам следует установить ограничение по времени ожидания. SSH-соединение будет разорвано, если в течение заданного времени не будет активности. Еще раз нам нужно отредактировать файл конфигурации SSH.

Прокрутите файл вниз, пока не увидите строку, начинающуюся с #ClientAliveInterval 0 . Удалите # в начале строки, измените цифру 0 на желаемое значение. Обычно люди устанавливают его на 300 секунд, то есть 5 минут. Сохраните файл и перезапустите демон SSH.
Установите ограничение на количество вводов пароля
Определение ограничения на количество подтверждений может помочь предотвратить подбор пароля и атаки методом перебора. После указанного количества запросов аутентификации пользователь будет отключен от SSH-сервера. По умолчанию количество попыток пароля не ограничено, но вы можете изменить это в файле конфигурации SSH.

Прокрутите файл вниз, пока не увидите строку, начинающуюся с #MaxAuthTries 0 . Удаление # в начале строки изменяет число на желаемое значение. Вы можете установить значение 3. Сохраните файл при внесении изменений и перезапустите демон SSH.
Вы можете проверить это, попытавшись подключиться и введя неправильный пароль.

Обратите внимание: число MaxAuthTries превышает количество попыток, разрешенных пользователю. После двух неудачных попыток вы будете отключены, что означает, что для MaxAuthTries установлено значение 3.
Отключить root-вход
Вам не рекомендуется входить в систему как root, просто используйте как обычный пользователь в Linux и используйте sudo для выполнения действий, требующих прав root. Вы также не должны разрешать пользователю root входить на SSH-сервер. Только обычные пользователи могут подключаться. Если им необходимо выполнить задачу административного уровня, они также могут использовать sudo. Если вам необходимо разрешить пользователю root войти в систему, вы можете заставить его использовать ключ SSH.
Отредактируйте файл конфигурации, чтобы отключить вход с правами root.

Прокрутите файл вниз, пока не увидите строку, начинающуюся с #PermitRootLogin, запретить-пароль , удалите # в начале строки.
- Если вы хотите запретить root-пользователю вход в систему, замените запретный пароль на no.
- Если вы разрешаете пользователю root войти в систему, но принудительно используете ключ SSH, оставьте запретный пароль нетронутым.
Сохраните изменения и перезапустите демон SSH.
Последний шаг
Конечно, если вам не нужен SSH на вашем компьютере, отключите его с помощью следующей команды:
sudo systemctl stop sshd
sudo systemctl disable sshd
Желаю вам успехов!