Настройка защиты SSH-соединений (подключений)
В первой части инструкции (статьи) мы создали SSH-ключи для пользователя root (главного администратора), но работать под пользователем root является НЕ безопасным.
Поэтому во второй части инструкции (то есть вы данной статье) мы создадим пользователя под которым будем работать, а так же создадим для этого пользователя SSH-ключи и в конце статьи закроем возможность входа по паролю пользователя оставив вход только с помощью SSH-ключей.
Ну что же, давайте приступим!
СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ С ПОМОЩЬЮ КОНСОЛИ (ТЕРМИНАЛА) PUTTY
Создание нового пользователя
Работать под пользователем «root» (главный администратор) ну очень небезопасно, поэтому нужно создать нового пользователя, у которого будет меньше прав на администрирование.
На данном этапе подразумевается, что консоль уже запущена, соединение с сервером произведено, логин и пароль от SSH-ключа пользователя «root» введены.
Иными словами: Мы уже соединились с сервером с помощью SSH-ключа пользователя «root».
Вводим команду и нажимаем «Enter»:
adduser USERNAME
где USERNAME – это имя желаемого пользователя (пишем любое маленькими буквами/цифрами латинского алфавита).
Например: adduser vasya или adduser lena или adduser andrey
Придумываем и вводим пароль для нового пользователя (им будем пользоваться не часто, но будем):
Напоминаю: Пароль от пользователя и пароль для SSH-ключа – это разные пароли.
Для данного пользователя тоже будем делать SSH-ключи.
Повторяем пароль для нового пользователя:
Далее будет несколько полей которые никакой роли не играют, по желанию можно заполнить, но я этого делать не буду, а просто нажму «Enter» 5 раз.
Нажимаем на клавиатуре клавишу «y» (латинская) и клавишу «Enter» - подтверждаем, что данные введены корректно.
Система приняла все данные, не выдав никакой ошибки и ожидает от нас дальнейших команд:
Далее нужно дать созданному пользователю права sudo – это выполнение некоторых команд от имени администратора, вводим команду:
usermod -aG sudo USERNAME
где USERNAME – это имя пользователя, которому даются права «sudo»
Я ввел: usermod -aG sudo andrey
Примечание: с текущего момента, при работе под данным пользователем, для ввода команд, требующих права администратора нужно использовать приставку sudo .
Переключаемся на созданного пользователя:
su - USERNAME
где USERNAME – это имя пользователя на которого переключаемся, в моем случае команда выглядит так: «su - andrey»
Видим, что переключение на пользователя прошло успешно:
(экран консоли очищен «Ctrl + L»)
Сейчас, что нужно сделать в первую очередь?
Правильно – нужно, для данного пользователя, настроить соединение по SSH-ключу.
Возвращаемся к инструкции (первая часть данной инструкции) по генерации ключей и генерируем ключи для нового пользователя!
Сгенерировали? Замечательно, идем дальше!
Данный пользователь не имеет под собой директории «.ssh» в которой должен хранится его SSH-ключ – эту директорию нужно создать.
Команда создания директории «.ssh»:
mkdir .ssh
создавать директорию «.ssh» нужно из корневой директории текущего пользователя, на всякий случай напоминаю команду перехода в корневую директорию: «cd»)
Проверяем создалась ли директория:
ls -la
Директория на месте, у нужного пользователя!
Возвращаемся в корневую директорию текущего пользователя:
cd
Нажимаем «Enter» после ввода команды
Добавляем на сервер открытый SSH-ключ пользователя (в моем случае это пользователь andrey):
В ниже представленном блоке, аккуратно меняем мой SSH-ключ на свой ( SSH-ключ это всё что между EOF и EOF ), выделяем весь блок (включая саму команду - от « cat » до второго « EOF »), копируем и вставляем в окно консоли (при выделении и копировании, случайно, не зацепите лишний пробел так как пробел – это тоже символ):
cat >> .ssh/authorized_keys << EOF
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAgEApSn9zhSwMmpf26vXBMENLBUMiPALR9ZFy9W6qOdHt3yLklJLG3quK16P7CyZ59SC+h+TAs0NiAMOEWly+wVTH8BCyVqT3guQZxGHvu/+BOlvQReveeyxyotMz8tObDUcKLZlhMaUdI41Y7qCPif2Lp60+s0jvJiBnC0cHNU+kOS4Pc+OYTbSXwX4G8RQyh3kQ1TCwJpdrgv6LQ2j/BjI/jlkZIralrp0wOSoBTOSbGeW1Mg3nknEQu6KGyF0brtVbN7JbWl3eapDkCTaancmfxGuSZWq2nYoDGnsFGLMfDN63BvxL/F1SVziphJKuug7ERNn/SrqyZgGzRKYp+HiZ2yka12wyNi5JudT8ji6TKIioN34ci0jieG8KcKEQFY9NsyMib/nfG/IJjDzoLJgrLg/m17MkVU8b1F8i6cGA9w+0emfKuxjwT1FTZ3O9BJPZGNRJGj8FOUOlwa6oD0lsQNSIKa/GqDzz8UgT55juG6m+vU7YXsiQl+w9FXjRIFL1Sz2UyAcUt5sMVAwYMjT2bQx+hkbYZzYwvRTwe1lekci70HNESoQHlgkNnyn8bB+sUtz/+W+Cwgo3SPWhre1mDNP2zho7bp1HWZtBCXyxi7gz40PA9hIwtb37Cssyt7fIjcYwvb1DUdJN9uba1zp+JVamup8iYs5eVIfpExatCM= andreySSH-test
EOF
Нажимаем «Enter»
Ключ добавлен от имени пользователя!
Проверяем добавление ключа на сервер.
Поочередно вводим команды и нажимаем «Enter»:
cd .ssh
это мы попали в директорию «.ssh», в которую должен был добавиться наш публичный ключ.
ls -la
это отображение содержимого текущей директории
Видим, что файл «authorized_keys» существует от нужного нам пользователя.
Далее можем проверить содержимое файла – для этого вводим команду и нажимаем «Enter»
cat authorized_keys
Отобразится содержимое файла «authorized_keys»:
Далее проверка соединения по SSH-ключу…
Все то же самое, как и в прошлый раз (при настройке SSH-ключа для пользователя «root»), только нужно выбрать приватный SSH-ключ пользователя и перед сохранением задать другое имя.
Для ускорения можно сделать так:
В PuTTY однократное нажатие ЛКМ на ранее созданном пользователе.
Далее нажать кнопку «Загрузить» тем самым мы подтянем настройки указанного пользователя.
После этого, в поле «Управления сеансами» меняем имя пользователя на другое:
Идем в подраздел «Аутентификация», меняем SSH-ключ:
Возвращаемся на вкладку «Сеанс» и нажимаем на кнопку «Сохранить» (под нужным названием)
После этого нажимаем «Соединиться», вводим Логин пользователя (в моем случае andrey) и видим, что просит пароль пользовательского SSH-ключа:
Теперь мы понимаем, что оба пользователя подключаются с помощью SSH-ключей, но есть один момент:
У нас до сих пор есть возможность зайти на сервер не имя SSH-ключа – по логинам и паролям для пользователей!
Можете сами проверить попробовав подключиться не указывая в подразделе «Аутентификация» ни одного ключа т.е. соединиться с настройками по умолчанию введя только IP-адрес и порт выданные хостером .
Эту возможность нужно отключить оставив только вход с использованием SSH-ключа!
Отключение возможности входа по паролю пользователей
Входим на сервер пользователем root (главным администратором) с помощью SSH-ключа.
Можно из обычного пользователя переключиться в пользователя root введя команду:
su - root
Вводим пароль от пользователя «root» (НЕ от SSH-ключа, а именно от пользователя - тот который придумывали в первой части инструкции)
Когда мы переключились или вошли на сервер под пользователем root вводим команды, поочередно:
cd /etc/ssh
ls -la
Нас интересует вот этот файл:
Вводим команду:
nano sshd_config
Нажимаем «Enter» и попадаем в редактирование файла.
Далее аккуратно двигаемся по тексту вниз (стрелками на клавиатуре) в поиске строчки:
PasswordAuthentication yes
либо
# PasswordAuthentication yes
У меня данная строчка в самом конце.
В данной строчке нужно заменить «yes» на «no» и обязательно раскомментировать т.е. убрать # (решетку), если она есть.
Вот так :
PasswordAuthentication no
Далее нажимаем «Ctrl+X»
Потом для подтверждения сохранения изменений нажимаем клавишу «y» (латиница)
Далее вот такое окно:
Нажимаем «Enter» - нас вернет в основной экран, в директорию «.ssh».
Остается только перезапустить сервис SSH.
Вводим команду и нажимаем «Enter»:
service ssh restart
Команда введена и принята без ошибок:
ВСЁ! С этого момента вход на сервер по паролю пользователей невозможен. Для доступа на сервер нужно использовать SSH-ключи которые мы создали.
ВНИМАНИЕ! Для пользователя «root» используется SSH-ключ пользователя «root», для обычного пользователя (в моем случае «andrey») используется SSH-ключ обычного пользователя (в моем случае «andrey»).
Давайте проверим возможность входа по паролю.
Закрываем консоль и подключаемся к сервере с настройками по умолчанию введя только IP-адрес выданный хостером (без использования SSH-ключа):
Вводим логин, например «root» (он чаще всего атакуется) и нажимаем «Enrer» - появляется вот такая ошибка:
С этого момента можно не опасаться того, что кто-то попадет на наш сервер без SSH-ключа, НО....
Существует такая атака как Brute-force (брутфорс) она же «метод Грубой силы» — это хакерская атака путем полного перебора (подбора) пароля. Вручную, естественно, этим никто заниматься не будет – создаются бот-сети (botnet), которые в автоматическом режиме, 24 часа в сутки, сканируют целые сегменты IP-адресов и при получении отклика начинают данную атаку. Перебирать, суммарно, по 5 млн. паролей в сутки для ботнета совсем не проблема.
СКОРЕЕ ВСЕГО ВАШ СЕРВЕР УЖЕ ПОД АТАКОЙ!
Вероятно возник вопрос: Зачем я то им нужен? У меня и красть там нечего, по большому счёту.
Дело в том, что красть то у нас, по большому счёту, никто ничего не собирается.
Цель атаки: Заразить (зомбировать) наш сервер/компьютер - сделать его частью ботнета, а далее уже только фантазия брутфорсера решит как этим воспользоваться. Наш сервер, будучи зомби, может брутфорсить другие сервера для расширения ботнета или, скажем, быть атакующей машиной при DDoS-атаке (кстати, услуга DDoS-атаки сайта/сервера какого-нибудь конкурента стоит очень не дешево, но эта услуга востребована).
Проверьте свой сервер введя одну из команд:
sudo grep -a "Failed password" /var/log/auth.log
либо:
sudo egrep -a "Failed|Failure" /var/log/auth.log
Если, после введения этих команд, Вы увидели длинный список «Failed password» по разным портам - спешу Вас обрадовать огорчить: Вы атакованы, это всё неудачные попытки подобрать пароль от сервера:
На данном этапе у нас уже настроено соединение по SSH-ключам и отключен вход по паролям и, в принципе, нам уже не страшен брутфорс так как вход по паролям отключен и подбирать нечего, НО…
Атака брутфорс всё равно продолжается и создаёт некую нагрузку на наш сервер, пусть и не большую, но создаёт и в следующей части, данной инструкции, мы настроим защиту от брутфорс и сведём нагрузку к нулю, в отличие от той же защиты с помощью File2Ban, которая, так или иначе, даёт нагрузку примерно в 5%.
На этом вторая часть данной инструкции (статьи) подошла к концу - переходим по ссылке к третьей части данной инструкции и настраиваем защиту от Brute-force attack.
Пожертвования и благодарность:
Яндекс (Ю.Money): https://sobe.ru/na/nuzhdy_Andrey_N
IDNA: 0x5d69be52a201f9d0a2f3ec49060112811a63e4d1