Добавить в корзинуПозвонить
Найти в Дзене
Andrey N

Работа с сервером (VPS/VDS) ч. 2

Настройка защиты SSH-соединений (подключений) В первой части инструкции (статьи) мы создали SSH-ключи для пользователя root (главного администратора), но работать под пользователем root является НЕ безопасным. Поэтому во второй части инструкции (то есть вы данной статье) мы создадим пользователя под которым будем работать, а так же создадим для этого пользователя SSH-ключи и в конце статьи закроем возможность входа по паролю пользователя оставив вход только с помощью SSH-ключей. Ну что же, давайте приступим! СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ С ПОМОЩЬЮ КОНСОЛИ (ТЕРМИНАЛА) PUTTY Создание нового пользователя Работать под пользователем «root» (главный администратор) ну очень небезопасно, поэтому нужно создать нового пользователя, у которого будет меньше прав на администрирование. На данном этапе подразумевается, что консоль уже запущена, соединение с сервером произведено, логин и пароль от SSH-ключа пользователя «root» введены. Иными словами: Мы уже соединились с сервером с помощью SSH-ключа пользоват
Оглавление

Настройка защиты SSH-соединений (подключений)

В первой части инструкции (статьи) мы создали SSH-ключи для пользователя root (главного администратора), но работать под пользователем root является НЕ безопасным.

Поэтому во второй части инструкции (то есть вы данной статье) мы создадим пользователя под которым будем работать, а так же создадим для этого пользователя SSH-ключи и в конце статьи закроем возможность входа по паролю пользователя оставив вход только с помощью SSH-ключей.

Ну что же, давайте приступим!

СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ С ПОМОЩЬЮ КОНСОЛИ (ТЕРМИНАЛА) PUTTY

Создание нового пользователя

Работать под пользователем «root» (главный администратор) ну очень небезопасно, поэтому нужно создать нового пользователя, у которого будет меньше прав на администрирование.

На данном этапе подразумевается, что консоль уже запущена, соединение с сервером произведено, логин и пароль от SSH-ключа пользователя «root» введены.

Иными словами: Мы уже соединились с сервером с помощью SSH-ключа пользователя «root».

Вводим команду и нажимаем «Enter»:

adduser USERNAME

где USERNAMEэто имя желаемого пользователя (пишем любое маленькими буквами/цифрами латинского алфавита).

Например: adduser vasya или adduser lena или adduser andrey

Придумываем и вводим пароль для нового пользователя (им будем пользоваться не часто, но будем):

Ожидание ввода нового пароля для создаваемого пользователя andrey
Ожидание ввода нового пароля для создаваемого пользователя andrey

Напоминаю: Пароль от пользователя и пароль для SSH-ключа – это разные пароли.

Для данного пользователя тоже будем делать SSH-ключи.

Повторяем пароль для нового пользователя:

Ожидание повтора нового пароля для создаваемого пользователя andrey
Ожидание повтора нового пароля для создаваемого пользователя andrey

Далее будет несколько полей которые никакой роли не играют, по желанию можно заполнить, но я этого делать не буду, а просто нажму «Enter» 5 раз.

Ожидание подтверждение того, что информация введена корректна (Да или нет)
Ожидание подтверждение того, что информация введена корректна (Да или нет)

Нажимаем на клавиатуре клавишу «y» (латинская) и клавишу «Enter» - подтверждаем, что данные введены корректно.

Система приняла все данные, не выдав никакой ошибки и ожидает от нас дальнейших команд:

Окно консоли PuTTY Ожидание ввода следующих команд
Окно консоли PuTTY Ожидание ввода следующих команд

Далее нужно дать созданному пользователю права sudo – это выполнение некоторых команд от имени администратора, вводим команду:

usermod -aG sudo USERNAME

где USERNAMEэто имя пользователя, которому даются права «sudo»

Я ввел: usermod -aG sudo andrey

Примечание: с текущего момента, при работе под данным пользователем, для ввода команд, требующих права администратора нужно использовать приставку sudo .

Переключаемся на созданного пользователя:

su - USERNAME

где USERNAMEэто имя пользователя на которого переключаемся, в моем случае команда выглядит так: «su - andrey»

Видим, что переключение на пользователя прошло успешно:

Окно консоли PuTTY Ожидание ввода следующих команд (пользователь «andrey»)
Окно консоли PuTTY Ожидание ввода следующих команд (пользователь «andrey»)

(экран консоли очищен «Ctrl + L»)

Окно консоли PuTTY очищено (пользователь andrey)
Окно консоли PuTTY очищено (пользователь andrey)

Сейчас, что нужно сделать в первую очередь?

Правильно – нужно, для данного пользователя, настроить соединение по SSH-ключу.

Возвращаемся к инструкции (первая часть данной инструкции) по генерации ключей и генерируем ключи для нового пользователя!

Сгенерировали? Замечательно, идем дальше!

Данный пользователь не имеет под собой директории «.ssh» в которой должен хранится его SSH-ключ – эту директорию нужно создать.

Команда создания директории «.ssh»:

mkdir .ssh

создавать директорию «.ssh» нужно из корневой директории текущего пользователя, на всякий случай напоминаю команду перехода в корневую директорию: «cd»)

Проверяем создалась ли директория:

ls -la
Директория «.ssh» присутствует
Директория «.ssh» присутствует

Директория на месте, у нужного пользователя!

Возвращаемся в корневую директорию текущего пользователя:

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»

Ключ вставлен от имени пользователя andrey
Ключ вставлен от имени пользователя andrey

Ключ добавлен от имени пользователя!

Проверяем добавление ключа на сервер.

Поочередно вводим команды и нажимаем «Enter»:

cd .ssh

это мы попали в директорию «.ssh», в которую должен был добавиться наш публичный ключ.

ls -la

это отображение содержимого текущей директории

Окно консоли PuTTY - файл authorized_keys создан от пользователя andrey
Окно консоли PuTTY - файл authorized_keys создан от пользователя andrey

Видим, что файл «authorized_keys» существует от нужного нам пользователя.

Далее можем проверить содержимое файла – для этого вводим команду и нажимаем «Enter»

cat authorized_keys

Отобразится содержимое файла «authorized_keys»:

Окно консоли PuTTY - содержимое файл authorized_keys
Окно консоли PuTTY - содержимое файл authorized_keys

Далее проверка соединения по SSH-ключу…

Все то же самое, как и в прошлый раз (при настройке SSH-ключа для пользователя «root»), только нужно выбрать приватный SSH-ключ пользователя и перед сохранением задать другое имя.

Для ускорения можно сделать так:

В PuTTY однократное нажатие ЛКМ на ранее созданном пользователе.

Далее нажать кнопку «Загрузить» тем самым мы подтянем настройки указанного пользователя.

После этого, в поле «Управления сеансами» меняем имя пользователя на другое:

Нужно придумать другое название, отличное от того, которое на пользователе root
Нужно придумать другое название, отличное от того, которое на пользователе root

Идем в подраздел «Аутентификация», меняем SSH-ключ:

Нужно выбрать SSH-ключ созданный для пользователя (в моем случае для andrey)
Нужно выбрать SSH-ключ созданный для пользователя (в моем случае для andrey)

Возвращаемся на вкладку «Сеанс» и нажимаем на кнопку «Сохранить» (под нужным названием)

После этого нажимаем «Соединиться», вводим Логин пользователя (в моем случае andrey) и видим, что просит пароль пользовательского SSH-ключа:

Запрос пароля от SSH-ключа «andreySSH-test» - именно так я назвал его в комментарии
Запрос пароля от SSH-ключа «andreySSH-test» - именно так я назвал его в комментарии

Теперь мы понимаем, что оба пользователя подключаются с помощью 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

Нужно выставить: «PasswordAuthentication no»
Нужно выставить: «PasswordAuthentication no»

Далее нажимаем «Ctrl+X»

Запрос на сохранение введенных изменений
Запрос на сохранение введенных изменений

Потом для подтверждения сохранения изменений нажимаем клавишу «y» (латиница)

Далее вот такое окно:

Здесь нужно нажать  «Enter»
Здесь нужно нажать «Enter»

Нажимаем «Enter» - нас вернет в основной экран, в директорию «.ssh».

Находимся в директории  «.ssh» (после сохранения изменений файла «sshd_config»)
Находимся в директории «.ssh» (после сохранения изменений файла «sshd_config»)

Остается только перезапустить сервис SSH.

Вводим команду и нажимаем «Enter»:

service ssh restart

Команда введена и принята без ошибок:

Сервис «SSH» перезапущен с измененными настройками
Сервис «SSH» перезапущен с измененными настройками

ВСЁ! С этого момента вход на сервер по паролю пользователей невозможен. Для доступа на сервер нужно использовать 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