【Глава 4】 Обеспечение безопасности
4.1 Зачем нужна безопасность?
Безопасность Linux-серверов — это обширная и сложная тема. Бесчисленные веб-сайты, приложения, сервисы и даже критически важная инфраструктура построены на базе Linux. За всем этим стоят огромные деньги и коммерческие интересы, что, естественно, привлекает злоумышленников. В то же время надёжная работа этих сервисов крайне важна, поэтому любые серьёзные уязвимости недопустимы. Именно поэтому множество специалистов по безопасности изо дня в день ведут борьбу на передовой, обеспечивая стабильную работу цифрового мира, к которому мы все привыкли.
Теперь, когда у вас есть собственный VPS-сервер, и вы собираетесь открыть на нём порты для перенаправления трафика, вы фактически оказываетесь на передовой этой борьбы и подвергаетесь тем же рискам. В то же время, новички, не обладающие достаточными знаниями и информацией, склонны впадать в крайности: либо они считают, что им ничего не угрожает, либо же, наоборот, впадают в паранойю.
Первым я бы посоветовал не относиться к безопасности легкомысленно и изучить этот вопрос более подробно, чтобы потом не пришлось кусать локти.
Вторым я бы посоветовал не паниковать. Ваш сервер вряд ли представляет собой лакомую цель для серьёзных злоумышленников, поэтому вам достаточно базовых мер защиты от автоматических сканеров и ботов, о которых мы и поговорим в этой главе.
4.2 Какие именно риски существуют?
Как мы уже говорили в главе про удалённое подключение, для доступа к вашему VPS достаточно знать четыре вещи: IP-адрес, порт, имя пользователя и пароль. Очевидно, что эти четыре элемента нужно защищать в первую очередь. Давайте разберём каждый из них:
IP-адрес: злоумышленники могут сканировать целые диапазоны IP-адресов в поисках уязвимых серверов. Ваш IP-адрес — это публичная информация, которую невозможно скрыть.
Порт: если вы используете настройки по умолчанию, то порт SSH равен
22
.Имя пользователя: если вы используете настройки по умолчанию, то имя пользователя —
root
.Пароль: пароль не имеет значения по умолчанию. Он либо генерируется автоматически при создании VPS, либо задаётся вами. Таким образом, если вы не меняли настройки сервера, то три из четырёх элементов уже известны злоумышленникам, и вся безопасность вашего сервера держится на одном только пароле. Возможны следующие варианты:
Вы используете автоматически сгенерированный пароль из панели управления VPS. Такие пароли обычно состоят из случайного набора символов (букв в разных регистрах, цифр и спецсимволов) и достаточно надёжны.
Вы установили простой пароль, например,
123456
. Взломать такой сервер не составит труда.Вы установили сложный пароль, который используете где-то ещё. Это тоже небезопасно. Злоумышленники используют специальные программы, которые перебирают миллионы ранее скомпрометированных паролей из утечек данных.
Важно понимать, что никакой хакер не будет лично подбирать ваш пароль. Все атаки выполняются автоматически с помощью специальных скриптов, которые работают круглосуточно. Пока вы спите, ваш сервер может подвергаться атакам.
Если пароль будет подобран, злоумышленники получат полный доступ к вашему серверу (права пользователя
root
), смогут установить на него вредоносное ПО и использовать его в своих целях (например, для майнинга криптовалюты, рассылки спама, фишинговых атак, организации торрент-трекера, размещения публичных узлов для доступа к даркнету и т.д.). При этом злоумышленники могут действовать очень скрытно, и вы даже не заметите, что ваш сервер взломан, пока не получите уведомление от хостинг-провайдера о блокировке вашего аккаунта или, что ещё хуже, повестку в суд.Не забывайте, что при покупке VPS вы, скорее всего, указывали свои реальные платёжные данные. А при посещении сайтов и использовании социальных сетей ваш IP-адрес также сохраняется. Всё это может быть использовано против вас. Поэтому, если на вашем сервере произойдёт что-то противозаконное, отвечать за это придётся вам.
4.3 Какие меры безопасности нужно предпринять?
Исходя из всего вышесказанного, нам нужно защитить порт, имя пользователя и пароль, чтобы снизить риск взлома. Для этого необходимо:
- Изменить порт SSH на нестандартный (отличный от 22) (см. раздел 4.4).
- Создать нового пользователя (не
root
) и запретить удалённое подключение по SSH для пользователяroot
(см. разделы 4.5 и 4.6). - Настроить аутентификацию по SSH-ключам и запретить аутентификацию по паролю (см. раздел 4.7).
Выполняйте эти действия по порядку, чтобы не оказаться случайно заблокированным на своём же сервере.
4.4 Изменение порта SSH
Давайте решим проблему с портом SSH, который по умолчанию равен 22
(обратите внимание: у некоторых хостинг-провайдеров порт SSH по умолчанию уже отличается от 22. В этом случае вы можете пропустить этот шаг, но можете и изменить порт ещё раз, следуя инструкциям ниже).
Базовые команды Linux:
Номер Команда Описание cmd-03
nano
Текстовый редактор cmd-04
systemctl restart
Перезапуск службы Важные файлы конфигурации Linux:
Номер Путь к файлу Описание conf-01
/etc/ssh/sshd_config
Настройки SSH-сервера Первое, что нужно сделать, — это открыть файл настроек SSH-сервера (
/etc/ssh/sshd_config
) в текстовом редактореnano
. В Windows вы бы просто нашли этот файл и дважды кликнули по нему. А как это сделать в Linux? Если вы внимательно читали предыдущие разделы, то наверняка уже догадались! Правильно, нужно выполнить команду:nano /etc/ssh/sshd_config
После открытия файла вы увидите интерфейс редактора
nano
. Обратите внимание на нижнюю часть экрана, где перечислены основные горячие клавиши (на скриншоте ниже выделены красной рамкой). Не нужно ничего заучивать, всё необходимое всегда перед глазами!
Второе, что нужно сделать, — это найти строку, начинающуюся с
Port
, и изменить номер порта. Число послеPort
— это номер порта SSH. Рекомендуется использовать число в диапазоне от1024
до65535
(в этой статье мы будем использовать порт9753
). Как это сделать, используя горячие клавишиnano
? Вы уже наверняка догадались!- Нажмите
Ctrl+W
, чтобы открыть поиск, введитеPort 22
и нажмите Enter. - Замените
22
на9753
. - Примечание: если в начале строки стоит символ
#
, значит, эта строка закомментирована и не будет применяться. Вы можете либо раскомментировать её (удалив#
), либо добавить новую строку без#
в конце файла, как показано на скриншоте.
Внимание
Использование порта
9753
в этой статье делает его менее безопасным, поскольку злоумышленники могут начать сканировать этот порт в первую очередь. Кроме того, этот порт может быть заблокирован некоторыми провайдерами. Поэтому настоятельно рекомендуем использовать другой порт. У вас в распоряжении более 60 тысяч портов, так что выбрать есть из чего.- Нажмите
Третье, что нужно сделать, — это сохранить изменения и выйти из редактора.
- Как вы уже могли заметить, для сохранения файла используется не
Ctrl+S
, как в большинстве программ. - Горячие клавиши:
Ctrl+O
— сохранить,Ctrl+X
— выйти.
- Как вы уже могли заметить, для сохранения файла используется не
Добавьте новое правило в брандмауэр, чтобы открыть новый порт SSH. В противном случае, после перезагрузки инстанса, подключение по SSH будет недоступно.
Пример для Ubuntu с использованием
ufw
:sudo ufw allow 9753/tcp
И последнее, что нужно сделать, — это перезапустить SSH-сервер, чтобы изменения вступили в силу.
systemctl restart ssh
Затем можно попробовать открыть новую сессию в SSH-клиенте и проверить подключение. Если возникнут проблемы, можно изменить конфигурацию в старой SSH-сессии (открытые SSH-соединения не будут разорваны при перезапуске службы SSHD).
Весь процесс показан на гифке ниже:
Изменение настроек PuTTY
Теперь, когда вы изменили порт SSH, вам нужно указать новый порт (
9753
) в настройках PuTTY. Вы ведь помните, где это делается? (Если нет, вернитесь и перечитайте предыдущие разделы!)
4.5 Создание нового пользователя
Перейдём ко второму шагу — избавлению от пользователя root
.
Прежде всего, нужно понимать, что пользователь root
в Linux — это не просто администратор. Это корень системы, её основа, верховный правитель. Если безопасность учётной записи root
будет нарушена, под угрозой окажется вся система.
Базовые команды Linux:
Номер Команда Описание cmd-05
adduser
Добавление нового пользователя cmd-06
apt install
Установка программного обеспечения cmd-07
visudo
Редактор файла sudoers Первое, что нужно сделать, — это создать нового пользователя и установить для него пароль. Имя пользователя может быть любым, в этой статье мы будем использовать имя
vpsadmin
.adduser vpsadmin
Следуйте инструкциям на экране. Обязательно укажите пароль для нового пользователя (и не удивляйтесь, что при вводе пароля символы не отображаются). Далее система может запросить дополнительную информацию о пользователе. Можете пропустить эти пункты, нажав Enter.
Внимание
Использование имени пользователя
vpsadmin
в этой статье делает его менее безопасным, поскольку злоумышленники могут начать перебирать пароли для этого имени в первую очередь. Поэтому, как и в случае с портом, настоятельно рекомендуем использовать другое имя пользователя.Весь процесс показан на гифке ниже:
Второе, что нужно сделать, — это установить пакет
sudo
(sudo
позволяет обычным пользователям временно получать права суперпользователяroot
, чтобы выполнять задачи, требующие повышенных привилегий).apt update && apt install sudo
Вы, наверное, заметили, что эта строка содержит две команды. Первая команда,
apt update
, уже знакома вам — она обновляет информацию о доступных пакетах. Вторая команда,apt install
, используется для установки программного обеспечения. В данном случае мы обновляем информацию о пакетах и устанавливаем последнюю версиюsudo
. Символы&&
используются для объединения нескольких команд в одну строку.Третье, что нужно сделать, — это добавить пользователя
vpsadmin
в группуsudo
, чтобы он мог использовать командуsudo
.visudo
Добавьте следующую строку в раздел
User Privilege Specification
:vpsadmin ALL=(ALL) NOPASSWD: ALL
.Внимание
Обратите внимание на опцию
NOPASSWD
. Она означает, что пользователюvpsadmin
не нужно будет вводить пароль при использовании командыsudo
. Это противоречит общепринятым рекомендациям по безопасности. Однако я рекомендую сделать именно так, потому что многие новички используют учётную записьroot
именно потому, что им не нужно каждый раз вводить пароль. Я считаю, что риски от использования учётной записиroot
гораздо выше, чем риски от использованияsudo
без пароля.Если вы всё же хотите, чтобы при каждом использовании
sudo
запрашивался пароль, используйте следующую строку:vpsadmin ALL=(ALL:ALL) ALL
.Весь процесс показан на гифке ниже:
4.6 Запрет удалённого подключения по SSH для пользователя root
Вы уже немного освоились в Linux, поэтому попробуйте сами догадаться, что нужно сделать в первую очередь. Правильно, нужно снова открыть файл настроек SSH-сервера (
/etc/ssh/sshd_config
) в редактореnano
. Не помните, как это сделать? Вернитесь и перечитайте предыдущие разделы! ... Правильный ответ:nano /etc/ssh/sshd_config
Найдите строку
PermitRootLogin Yes
и заменитеyes
наno
. Помните, как это сделать? ... Правильный ответ:- Нажмите
Ctrl+W
, чтобы открыть поиск, введитеPermitRootLogin
и нажмите Enter. - Замените
yes
наno
.
- Нажмите
Сохраните изменения и выйдите из редактора. Помните, как это сделать? ... Правильный ответ:
Ctrl+O
— сохранить,Enter
— подтвердить сохранение.Ctrl+X
— выйти.
Перезапустите SSH-сервер, чтобы изменения вступили в силу. Помните... Ладно, вот правильный ответ:
systemctl restart ssh
Весь процесс показан на гифке ниже:
Теперь при попытке подключения по SSH с помощью PuTTY под пользователем
root
вы получите ошибку. Используйте имя пользователяvpsadmin
для подключения. Для удобства вы можете указатьvpsadmin
в качестве имени пользователя по умолчанию в настройках PuTTY (не забудьте сохранить сеанс!).
4.7 Настройка аутентификации по SSH-ключам и запрет аутентификации по паролю
Перейдём к третьему шагу — защите от подбора пароля.
Как мы уже говорили, хакеры не будут подбирать ваш пароль вручную. Они используют специальные программы и базы данных с миллионами скомпрометированных паролей. Если вы не используете случайно сгенерированный пароль достаточной длины (например, с помощью менеджера паролей, такого как 1Password или Keychain в macOS), ваш пароль могут подобрать.
Конечно, можно использовать длинный и сложный пароль, но такой пароль сложно запомнить и легко ввести неправильно. Чтобы решить эту проблему, можно вообще отказаться от аутентификации по паролю и использовать более безопасный способ — аутентификацию по SSH-ключам.
Аутентификация по SSH-ключам основана на использовании пары связанных ключей — публичного и приватного. Публичный ключ помещается на сервер, а приватный ключ хранится у вас на компьютере. При подключении по SSH клиент предъявляет серверу публичный ключ, а сервер, в свою очередь, шифрует с помощью него случайное сообщение и отправляет клиенту. Клиент расшифровывает сообщение с помощью приватного ключа и отправляет результат обратно на сервер. Если результат совпадает с ожидаемым, аутентификация считается успешной (таким образом, вам не нужно запоминать и вводить сложный пароль, достаточно лишь защитить свой приватный ключ от кражи).
Внимание
В этой статье мы рассмотрим использование RSA-ключей, поскольку они поддерживаются практически всеми SSH-клиентами и до сих пор считаются достаточно надёжными. Однако это не единственный вариант.
Существуют и другие алгоритмы:
- DSA: этот алгоритм считается небезопасным, поэтому использовать его не рекомендуется.
- ECDSA: этот алгоритм обеспечивает высокий уровень безопасности при меньшем размере ключа, однако существуют подозрения, что в нём есть уязвимости, которые могут быть использованы АНБ. Поэтому, если вы храните на своём сервере что-то действительно важное, лучше не использовать этот алгоритм.
- Ed25519: этот алгоритм похож на ECDSA, но считается более безопасным, поскольку его код открыт и доступен для изучения.
Поэтому, если ваше оборудование и программное обеспечение поддерживают этот алгоритм, рекомендуется использовать именно его.
Итак, давайте настроим аутентификацию по SSH-ключам.
Запустите программу PuTTYgen (генератор ключей PuTTY). Она находится в меню «Пуск» --> «Все программы» --> «PuTTY (64-bit)» --> «PuTTYgen».
Нажмите кнопку Generate, чтобы сгенерировать ключи (поводите курсором мыши по пустому пространству окна, чтобы добавить энтропии).
Внимание
На скриншоте показан пример генерации 2048-битного RSA-ключа. Однако для достижения уровня безопасности, со comparableного с 256-битным ключом ECDSA/Ed25519, вам нужно сгенерировать 3072-битный RSA-ключ (т.е. ввести значение
3072
в поле «Number of bits in a generated key»).Вы можете установить пароль для защиты приватного ключа.
Нажмите кнопку Save public key, чтобы сохранить публичный ключ в файл
id_rsa.pub
.Нажмите кнопку Save private key, чтобы сохранить приватный ключ в файл
id_rsa
(приватные ключи PuTTY имеют расширение.ppk
).Важно! Скопируйте содержимое поля, выделенного красной рамкой (не забудьте прокрутить текст до конца!), и сохраните его в файл
authorized_keys
. (Если вы будете использовать для этого VSCode, файл будет сохранён с расширением.txt
—authorized_keys.txt
. Это нормально, позже мы переименуем файл).
Скопируйте публичный ключ на VPS в домашний каталог пользователя
vpsadmin
.Для этого используйте программу WinSCP, которую мы установили ранее.
Скачайте и установите WinSCP с официального сайта. При первом запуске программа предложит импортировать настройки из PuTTY. Согласитесь на импорт.
Если вам не предложили импортировать настройки или вы уже настроили WinSCP ранее, настройте подключение к VPS, как показано на скриншоте ниже.
В левой части окна WinSCP отображаются файлы и папки на вашем компьютере, а в правой — на VPS. Перейдите в папку с сохранёнными ключами на вашем компьютере.
В правой части окна (VPS) по умолчанию открыт каталог
/home/vpsadmin/
. Нажмите кнопку «Show hidden files» (скрытые файлы), чтобы отобразить скрытые файлы и папки.щёлкните правой кнопкой мыши в правой части окна (VPS) и создайте новую папку с именем
.ssh
(обратите внимание на точку в начале имени).Скопируйте файл
authorized_keys
в папку.ssh
.При копировании файла
authorized_keys.txt
переименуйте его вauthorized_keys
(удалите расширение.txt
).Весь процесс показан на гифке ниже:
Настройте SSH-сервер на использование ключей и отключите аутентификацию по паролю.
Базовые команды Linux:
Номер Команда Описание cmd-08
sudo
Выполнение команды от имени root cmd-09
chmod
Изменение прав доступа к файлам и папкам Подключитесь к VPS по SSH (PuTTY).
Измените права доступа к файлу
authorized_keys
на600
(только владелец может читать и записывать файл).chmod 600 ~/.ssh/authorized_keys
Откройте файл настроек SSH. Мы уже делали это раньше, но теперь мы работаем не под пользователем
root
, а под пользователемvpsadmin
. У этого пользователя нет прав на редактирование системных файлов, поэтому нужно использовать командуsudo
:sudo nano /etc/ssh/sshd_config
Найдите (
Ctrl+W
) строкуPasswordAuthentication
и измените значение наno
.Найдите (
Ctrl+W
) строкуPubkeyAuthentication
и измените значение наyes
. Сохраните изменения (Ctrl+O
) и выйдите из редактора (Ctrl+X
).Перезапустите SSH-сервер (не забудьте, что теперь вам нужно использовать команду
sudo
):sudo systemctl restart ssh
Весь процесс показан на гифке ниже:
Теперь, когда на сервере настроен публичный ключ, нужно указать PuTTY путь к приватному ключу (не забудьте сохранить сеанс!).
Готово! Теперь у вас настроена аутентификация по SSH-ключам, а аутентификация по паролю отключена. Кроме того, вы сохранили имя пользователя и путь к приватному ключу в сеансе PuTTY. Теперь для подключения к VPS достаточно будет выбрать сохранённый сеанс
VPS-SERVER
и нажать кнопку «Open».Если вы установили пароль для защиты приватного ключа, вам нужно будет ввести его при подключении, как показано на скриншоте ниже:
Не забудьте настроить аутентификацию по ключам и в WinSCP. В противном случае вы не сможете подключаться к серверу для передачи файлов:
Внимание
Теперь для подключения к вашему серверу по SSH требуется авторизация по ключам. Мы рассмотрели настройку PuTTY и WinSCP, но существует множество других программ, которые также используют SSH. Настройте их самостоятельно при необходимости.
4.8 Ваш прогресс
На этом этапе ваш VPS защищён базовыми мерами безопасности. Конечно, это не панацея, но большинство автоматизированных атак вам уже не страшны!
Теперь у нас есть надёжный фундамент, и в следующей главе мы можем приступить к установке и настройке необходимых компонентов Xray (а именно, веб-сервера и SSL-сертификата).
⬛⬛⬛⬛⬜⬜⬜⬜ 50%