Доброго времени суток, хабр! В этом туториале я кратко распишу базовую настройку безопасного vps сервера для личного пользования(например pet проектов) на ubuntu 22.04. На истину в последней инстанции не претендую, поэтому с радостью буду дополнять статью советами и коммандами из комментариев) Везде где я использую vim для работы с текстовыми файлами, вы можете использовать nano, так как он более понятный. В этом туториале предполагается, что vps вы уже выбрали и приобрели, с выбором оного может помочь вот эта статья После покупки vps обычно вы получаете пароль от рута и ip адрес вашего севера, используйте их для входа. Подключаемся на сервер, нажимаем yes и вводим пароль. Обновляем данные о пакетах, апгрейдим все что есть на сервере и перезагружаемся, после чего заново входим на сервер. Я использую apt dist-upgrade, вместо apt upgrade потому что это безопаснее и надежнее, подробнее можно почитать тут Создаем пользователя по имени super для работы с правами на sudo, собственной директорией и с bash в шелла. Отдельного пользователя для работы мы делаем, так как работать из под рута небезопасно из-за неограниченных привилегий. Правим sudo конфиг через специальную тулзу, встроенную в sudo. Здесь нам нужно исправить несколько вещей:  1. Даем возможность пользователям группы sudo использовать sudo без ввода пароля, добавляя NOPASSWD, так как мы не будем устанавливать пароли.  2.  Запрещаем использовать дополнительные конфиги для безопасности, поэтому комментируем удаляем эту строчку.  3. Запрещаем группе admin использовать sudo, комментируя эту строчку.  Заходим под созданным пользователем в его домашнюю директорию для дальнейшей настройки. Ставим маску на все создаваемые файлы, чтобы максимально ограничить доступ к ним. Создаем папку для хранения ssh ключей и оставляем доступ только пользователю. Почему именно 700 можно почитать здесь Для безопасного входа на сервер нам нужно сгенерировать ssh ключи, чтобы использовать их вместо паролей. На этом этапе нужно две консоли, одна на сервере, а другая на локале. Альтернативный способ: При использовании альтернативного способа все делается так же, кроме того что ключ по умолчанию называется id_ed25519 . Про различие алгоритмов можно почитать тут Генерируем ssh ключи на локальном компьютере, не на сервере!  И получаем два ключа в папке ~/.ssh/: публичный(у него на конце .pub), который мы грузим на сервер, и приватный, который мы никуда никогда не загружаем! Загружаем полученный на предыдущем шаге ключ на сервер в папку нашего пользователя. В консоли которая уже на сервере 'передаем' загруженный ключ под нашего пользователя, т.к. загружали мы его под рутом, ограничиваем права доступа к нему и переименовываем в authorized_key. Проверяем, что удачно можем авторизоваться на сервере с помощью ключа под нашим пользователем  и продолжаем настройку. Выключаем пользователя root, чтобы никаким способом нельзя было работать из под него. Меняем его shell на /usr/sbin/nologin, должно получиться вот так: Теперь нам нужно настроить ssh сервер. Нам нужно исправить следующие строчки: Меняем порт на нестандартный Явно запрещаем авторизацию под root, меняя yes на no Запрещаем авторизацию по паролю, оставляя только по ключу: Ставим принудительную авторизацию по ключу Из комментария @aruslantsev  Еще стоит проверить, что в конфиге явно указано KbdInteractiveAuthentication no или ChallengeResponseAuthentication no. Иначе такая команда может привести к удивительным результатам: ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no example.com Выходим и сохраняем конфиг, после чего перезапускаем ssh сервер.  Настраиваем ssh config, чтобы каждый раз не прописывать ip адрес, путь до ключа и пользователя. Теперь мы можем подключаться на сервер с помощью команды: Подключаемся на сервер и продолжаем настройку. Устанавливаем дефолтные тулзы для работы. ufw - надстройка над iptables, упрощает настройку файрволла сервера. git - часто необходим для скачивания и развертывания программ на сервере, лишним не будет. nmap - для 'простукивания' портов, помогает проверить что на сервере лишние порты не открыты. net-tools - сюда входит популярный ifconfig и netstat, часто облегчает работу. curl - для выполнения http запросов прямо из консоли. (Опционально) Если нужен докер, то инструкция здеcь Разрешаем подключение по ssh. Запрещаем все входящие подключения и разрешаем все выходящие. Включаем firewall. На этом базовая настройка сервера закончена, надеюсь туториал вам помог :-) @aborouhin  Раз уж мы про безопасность - то можно добавить к списку для установки и настройки fail2ban. Вот здесь есть хорошая инструкция по настройке fail2ban на ssh. Если кратко, то он автоматически банит подключение с ip адреса при опеределнном количестве неудачных попыток авторизации, что помогает против ботов.  No pain no code