Настройка защиты SSH-соединений (подключений)
Как только у Вас появился сервер LINUX (ОС: Ubuntu, CentOS, Fedora, Debian и т. д.) первым делом нужно подумать о защите!
Поверьте, это действительно нужно сделать так как начиная чуть ли не с первого для ваш сервер будет атакован хакерами - в интернете это самое обычное дело, это как за хлебом в магазин сходить.
Собственно защитой мы и займемся прямо сейчас.
Я очень постараюсь объяснить все очень подробно, так чтобы и ребенок разобрался, но если у Вас что-то не будет получаться - я постараюсь помочь.
НАСТРОЙКА SSH-КЛЮЧЕЙ С ПОМОЩЬЮ КОНСОЛИ (ТЕРМИНАЛА) PUTTY
Скачать консоль на свой локальный ПК (в данном примере – это PuTTY ). Сайт с русской версией: https://putty.org.ru/download.html
Скачиваем и устанавливаем (с этим проблем возникнуть не должно)!
Лично я выбрал русскую версию без установки (Portable) – скачал архив, распаковал в удобном месте и всё, установка не требуется.
При выборе версии Portable (любой программы, а не только PuTTY) - не рекомендую держать сами программы на рабочем столе. Программы должны находиться где-нибудь на диске, а вот ярлык можно поместить на рабочий стол, для удобства.
Скачиваем, устанавливаем и запускаем.
В моем случае: скачиваю --> открываю --> распаковываю архив в удобное место --> кидаю ярлык на рабочий стол --> запускаю:
Выбираю куда распаковать (можно указать любой путь):
Зажимаем Правую Кнопку Мыши (далее «ПКМ») на файле «putty_portable» и перетаскиваем его на рабочий стол и выбираем «Создать ярлыки», далее его можно переименовать при желании.
Данное действие не является обязательным - пример для тех кому это может понадобиться
Создание SSH-ключей
В каталоге с терминалом запускаем файл «puttygen.exe» (если расширения файлов не отображаются файл будет выглядеть так: «puttygen», но мне удобнее видеть расширения файлов – это и безопаснее так как всегда видишь какой файл запускаешь).
PuttyGen – это утилита для создания SSH-ключей (безопасное соединение с сервером).
Тип ключа: RSA
Длина генерируемого ключа (в битах): можно оставить как есть, но я меняю на 4096.
Нажимаем кнопку: «Генерировать» и далее, беспорядочно, водим мышкой по окну «утилиты генерации ключей» до полного создания SSH-ключей. Движения мышкой делаются для создания случайных величин, используемых при генерации ключей. Нам ведь нужен супер уникальные ключи?! :)
По завершению генерации SSH-ключей появится вот такое окно:
* Поле «Комментарий»: Поле не является обязательным (можно оставить совсем пустым т.е. стереть то, что в нем напишется автоматически), но в нём можно дать комментарий к ключу (например придумать название: rootSSH-test). Сам комментарий дописывается в конец открытого (публичного) ключа, но фактически ключом не является.
Рекомендую заполнить его удобным именем - в дальнейшем будет удобнее ориентироваться в ключах.
* Поле заполняется без пробелов и только латиницей!
Парольная фраза – защищает личный (приватный) ключ паролем и в случае попадания приватного ключа в руки злоумышленника воспользоваться им, не зная пароля, не получится. Поле НЕ является обязательным (можно оставить совсем пустым), но я рекомендую его заполнить – данный пароль, впоследствии, нужно будет вводить при входе на сервер.
После заполнения всех полей нужно сохранить «Открытый» и «Личный» ключи в надежном месте.
Как правило, файл с открытым (публичным) ключом имеет расширение файла «.pub»(если не указано - допишите самостоятельно, например: andrey.pub), а файл с личным (приватным) ключом имеет расширение файла «.ppk» (обычно дописывается автоматически).
Окно с утилитой генерации ключей оставляем открытым – оно нам еще пригодится. Но если Вы уже закрыли окно - ничего страшного, нажимаем кнопку «Загрузить», выбираем файл приватного ключа, откроется окно с ранее сгенерированными ключами.
Примечание: Если у Вас несколько серверов – НЕ обязательно генерировать для каждого сервера отдельные SSH-ключи, вполне можно использовать одни и те же ключи на множестве серверов, это безопасно и очень удобно.
Подключение к серверу (VPS /VDS )
Первичное подключение к серверу
После генерации SSH-ключей нужно настроить подключение к серверу (в нашем случае VPS) с помощью сгенерированных ключей.
Изначально, подключение к новому серверу происходит с данными, которые прислал хостинг-провайдер (в простонародье – Хостер).
Открываем окно терминала – файл putty.exe (в моем случае putty_portable.exe)
В разделе «Сеанс» вводим Имя хоста или IP -адрес и Порт (как правило, по умолчанию, 22) полученные от хостера (обычно присылает на электронную почту).
Тип соединения: выбираем SSH
Примечание: В разделе «Окно» можно настроить размер окна, в пикселях.
Нажимаем на кнопку «Соединиться» - появится вот такое окно:
Не стоит пугаться этого предупреждения – оно появляется только при первом подключении.
Нажимаем на кнопку «ДА» т.е. мы доверяем этому серверу.
Если появится вот такая ошибка – не пугаемся, это просто долго не вводили данные:
Закрываем окно с ошибкой и окно терминала, и снова подключаемся к серверу.
После того как мы подтвердили доверие серверу появится вот такое окно:
На этом этапе нас просят ввести логин.
Вводим Login полученный от хостера, в большинстве случаев это root (маленькими буквами), и нажимаем на клавиатуре клавишу «Enter».
Примечание: root - это пользователь с наивысшими правами! Производить рядовую, ежедневную, работу от имени root является НЕ безопасным, но об этом дальше - всему своё время.
На этом этапе нужно ввести пароль. Вводим пароль полученный от хостера и нажимаем «Enter».
Внимание: Отображение ввода пароля не происходит – ни точек, ни звёздочек, ничего иного и это нормальное явление. Вводим пароль и жмем «Enter».
В окно консоли вставка, ранее скопированного, пароля происходит однократным нажатием Правой Кнопки Мыши (далее ПКМ).
Примечание: Копирование в окне консоли происходит Левой Кнопкой Мыши (далее ЛКМ), даже обычное выделение текста ЛКМ приведет к его копированию.
Пароль присланный хостером, в большинстве случаев, является временным и если это так, тогда после ввода Логина и Пароля будет предложено изменить временный пароль:
На этом этапе нужно повторить временный пароль и нажать «Enter».
Появится запрос нового пароля:
На этом этапе нужно придумать и ввести новый пароль и нажать «Enter»
Данный пароль будет использоваться редко. Рекомендую придумать пароль, который отличается от пароля SSH-ключей.
Появится запрос повторить придуманный пароль. Повторяем пароль и попадаем на сервер – вот так это выглядит:
С этого момента пароль выданный хостером является не действительным т.к. он был временным. Все последующие входы на сервер (до полной настройки) будут по новому паролю.
Настройка входа по SSH-ключу
Сейчас наша задача настроить подключение по ранее созданным SSH-ключам для пользователя root, для этого:
Сначала нужно проверить существует ли на сервере, у пользователя root, директория (в простонародье - «папка» или «каталог») «.ssh» так как не у каждого хостера данная директория создается автоматически.
Для этого вводим команду и нажимаем «Enter»:
ls -la
это отображение содержимого текущей директории.
Появится вот такой список и среди этого списка должна присутствовать директория «.ssh»:
Если такой директории нет - ее нужно создать!
Для создания директории «.ssh» вводим команду:
mkdir .ssh
обратите внимание на то, что перед ssh стоит точка.
Если папка существует вводить команду «mkdir .ssh» не требуется, но если вы ввели команду, при уже имеющейся директории, с точно таким же названием ничего страшного не произойдет - сервер сообщит, что такая директория уже существует:
Идём дальше!
Для сведения: Переход в корневую директорию текущего пользователя осуществляется вводом команды (ввести команду и нажать «Enter»):
cd
Введена команда «cd» и где бы мы не находились нас переместит в корневую директорию
В данном случае ничего не изменилось так как мы и так находимся в корневой директории.
Ввод следующей команды нужно делать находясь в корневой директории пользователя root.
Пишем в консоли (можно копировать и вставлять):
cat >> .ssh/authorized_keys << EOF
Нажимаем «Enter», затем вставляем публичный ключ, еще раз нажимаем «Enter», пишем:
EOF
и еще раз нажимаем «Enter».
*Примечание: Публичный ключ – это всё, от начала до конца, что находится в этом поле:
*Обращаю внимание на маленькую стрелочку справа – ей я хотел сказать то, что ключ длинный и он не умещается в выделенное поле т.е. нужно зажать ЛКМ на самом начале ключа, начиная с ssh-rsa и тянуть мышкой вниз пока не выделится весь ключ.
После того как мы ввели команду, вставили ключ, ввели EOF (естественно после каждого этапа нажимая «Enter») – ключ добавлен на сервер.
Можно пойти немного другим путем:
В ниже представленном блоке, аккуратно меняем мой SSH-ключ на свой (SSH-ключ это всё что между EOF и EOF), выделяем весь блок (включая саму команду - от «cat» до второго «EOF»), копируем и вставляем в окно консоли (при выделении и копировании, случайно, не зацепите лишний пробел так как пробел – это тоже символ):
cat >> .ssh/authorized_keys << EOF
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAgEAg4MAL6YHXew1bq8YLp0fuWqDOCY7sA2t8SglVYJ1AXqcc76txvhu6wL1G5ZYCzW/KfeMySQEgYgbiib8WtCOL+J3gIa1hdrzfEAqUaiK+lfpa0zsqW9IYRPQyBUfEW91YAki32i3eJLmFDKtYltssMXgrTHmNGVwcpL0P+zbC5Q2SF8vLjDIdCVTaA/p/VsUnmF0bvqM4ej38D/WTtWmCixMg9CP7Nq0dmkDI0mxp9axACy7AXcu0Zxn651bvwPTa+4BIZ/m2/qJI4jVsN1M7f1RlDWZH3+Nay7koURkIyafWyx1eBB7P8Y1K5lyZW9htdOtKfCh6IRwLyvLnq7OkNiI4AdyeaOLTz2fDkI4ar+hSpOiLrEPadRFczdb2W4JiM/anYiPNfwtzo66gBmIW4bmpMW2HeTr+6k7glb9J7tSzE3vD+TtWnPaal03sh7AOYdHABgdY25lQviE4hkTfn+z3ZR5zgcS0UfmSCEYGqmKX/BurPwl8ihRcO8PipxzehqwDQ5vyrrInPGntdJjc4rdwlMc570PTtVnAtDGZ5OIQDBL3hb0VkuDRqvRCdPYFqjnOM4yE7CHuTkWuDf3ukDy4X/jrCYEc/mBzY/Ngsj9+bCxNUqfOwNSL/2h811+G1Y2IYLYXSU8SODeT0gRk1ovzvdPPNLrsOCvZEIpA0s= rootSSH-test
EOF
Нажимаем «Enter»
Ниже на скриншоте я добавил открытый SSH-ключ на сервер вставив консоль целый блок:
Отлично, ключ добавлен!
Для удобства очищаем экран – для этого нажимаем сочетание клавиш «Ctrl+L» и экран консоли очистится, вернее вся писанина переместится за пределы экрана консоли, но ее всё равно можно посмотреть пролистав экран колёсиком мышки (это можно делать в любой момент когда нужно чистое окно консоли):
Далее проверим добавился ключ на сервер или нет.
Поочередно вводим команды и нажимаем «Enter»
cd .ssh
это мы попали в директорию «.ssh», в которой должен был создаться файл с нашим публичным SSH-ключом.
ls -la
это отображение содержимого текущей директории.
Видим, что файл «authorized_keys» существует.
Далее можем проверить содержимое файла – для этого вводим команду и нажимаем «Enter»
cat authorized_keys
Отобразится содержимое файла «authorized_keys»:
На скриншоте выше мы видим то, что наш публичный SSH-ключ добавлен на сервер, сам сервер ожидает от нас ввода следующей команды.
Проверка соединения по SSH-ключу
Сейчас нужно проверить само подключение по SSH-ключу, для этого полностью закрываем окно консоли, если открыто и открываем PuTTY - файл putty.exe (в моем случае putty_portable.exe)
Переходим в раздел «Соединение», далее в подраздел «SSH»
В разделе «SSH» нужно убедиться в том, что предпочтительная версия SSH: «SSH-2»:
Далее, в подразделе «SSH» есть еще один подраздел – «Аутентификация»:
Здесь нужно нажать кнопку «Обзор», далее найти и выбрать ранее сохраненный приватный SSH-ключ.
Примечание: Путь к ключу к всех разный – ищите куда сохраняли SSH-ключи при их создании.
Возвращаемся в раздел «Сеанс» вводим имя хоста (или IP -адрес) полученный от хостера, в моем случае это 135.181.193.125
Тип соединения: SSH
Управление сеансами: Вводим, абсолютно, любое имя (хоть абра-кадабру) и жмем кнопку «Сохранить».
Делается это для того, чтобы в последствии каждый раз не настраивать PuTTY для входа на сервер.
После того, как все настроили и сохранили нажимаем кнопку «Соединиться» (в английской версии – кнопка «Open»).
Вводим Логин (обязательно тот логин ключ которого добавлен при соединении, другой не подойдёт если все настроено верно):
Я, при создании SSH-ключей, заполнял поле «Комментарий» и в моем случае отображается этот комментарий, и я понимаю, что сервер запрашивает у меня пароль именно от этого SSH-ключа:
Таким образом мы видим, что данное соединение происходит именно с использованием SSH-ключей.
Вводим пароль НЕ от пользователя «root» (тот который мы вводили при замене временного пароля выданного хостером), а от самого SSH-ключа.
После ввода пароля от SSH-ключа мы попадаем на сервер в корневую директорию пользователя, в данном случае пользователя «root»:
Замечательно, теперь мы знаем, что соединение по SSH-ключу работает нормально.
ВАЖНО! Для каждого пользователя нужно создавать отдельные SSH-ключи!
На этом первая часть данной инструкции (статьи) подошла к концу, но это далеко не конец.
В следующей части инструкции (статьи) мы создадим пользователя под которым будем работать на постоянной основе, создадим для него SSH-ключи и потом закроем возможность входу по паролю пользователя оставив вход только с помощью SSH-ключей.
Пожертвования и благодарность:
Яндекс (Ю.Money): https://sobe.ru/na/nuzhdy_Andrey_N
IDNA: 0x5d69be52a201f9d0a2f3ec49060112811a63e4d1