Базовая настройка VPS.
Nikolay Gushcharin августа 24, 2025 Изменено: августа 24, 2025 #linux #vps #serversПредставь, что ты только что создал новый VPS-сервер и готов использовать его в качестве надежного шлюза для своих домашних серверов? Первые несколько минут жизни сервера — самые критичные с точки зрения безопасности. Свежие серверы в облаке — любимая мишень для автоматических сканеров и ботов.
В этом руководстве мы шаг за шагом разберем необходимый и достаточный минимум первоначальной настройки Ubuntu Server, который превратит "голую" систему в удобный и хорошо защищенный форпост для твоих сервисов. Наша цель — не только обезопасить его от атак, но и сделать работу с ним комфортной.
Шаг 0: Предварительные требования
- VPS-сервер с установленной Ubuntu Server 22.04 LTS или 24.04 LTS.
- Root-доступ к серверу (логин и пароль, который тебе предоставил хостинг-провайдер, или SSH-ключ).
- SSH-клиент на твоем компьютере (обычно подходит стандартный терминал).
Шаг 1: Первое подключение и обновление системы
Первым делом подключимся к серверу. Если провайдер предоставил пароль root, команда будет выглядеть так (нужно заменить your_server_ip на реальный IP-адрес):
Появится запрос на подтверждение fingerprint. Нужно ответить «yes» на вопрос о доверии fingerprint и ввести пароль.
Сразу после входа:
-
Обновляем индекс пакетов и устанавливаем обновления:
&&Это гарантирует, что все системные компоненты и библиотеки имеют последние патчи безопасности.
-
Устанавливаем базовые полезные утилиты:
· curl, wget — для загрузки файлов из интернета. · nano — простой текстовый редактор для новичков (вы можете использовать vim, если знакомы с ним). · ufw — фаервол для простого управления сетевым трафиком. · fail2ban — система для блокировки bruteforce-атак (подбор паролей).
-
Перезагружаем сервер (если обновление затрагивало ядро):
Подождем минуту и подключаемся снова.
Шаг 2: Создаем нового пользователя и запрещаем root-логин по SSH
Работать под root — плохая практика. Создадим нового пользователя с привилегированными правами.
-
Создаем пользователя (вместо username подставьте ваше имя пользователя):
Задай надежный пароль и заполни информацию (можно пропустить).
-
Добавляем пользователя в группу sudo: Это даст ему право выполнять команды с правами root.
-
Настраиваем SSH-ключи для безопасного входа (рекомендуется): · На своем компьютере (не на сервере!) сгенерируй пару SSH-ключей, если у тебя её еще нет:
· Скопируй публичный ключ на сервер для твоего нового пользователя:
(На Windows без ssh-copy-id можно скопировать содержимое файла ~/.ssh/id_ed25519.pub и вручную добавить его на сервер в файл ~/.ssh/authorized_keys).
-
Настраиваем SSH-демон для повышения безопасности: Откроем конфигурационный файл:
Найди и измени следующие директивы (если строки закомментированы #, раскомментируй их):
Внимание! Убедись, что твой SSH-ключ скопирован и работает, прежде чем перезапускать SSH! Иначе ты потеряете доступ. И придется заходить через админ панель хост провайдера.
-
Перезагружаем SSH-сервис для применения изменений:
Теперь открой новое окно терминала и попробуй подключиться как новый пользователь: ssh username@your_server_ip. Если все работает, можно закрывать сессию root.
Шаг 3: Изменение стандартного порта для SSH подключения (опционально)
Изменение порта SSH по умолчанию — это не про настоящую безопасность. Безопасность в этом случае выражается через неясность (Security through obscurity). Изменение значения порта не отменяет необходимость использования SSH-ключей и Fail2Ban. Это дополнительный, очень легкий в реализации слой, который значительно снижает уровень шума от автоматических сканеров.
Безопасно ли оставлять порт 22? Да, если и только если ты уже реализовал:
- Полный запрет на вход по паролю (PasswordAuthentication no).
- Использование только SSH-ключей (PubkeyAuthentication yes).
- Запрет входа под root (PermitRootLogin no).
- Защиту с помощью Fail2Ban.
При этих условиях оставить порт 22 — абсолютно безопасное решение. Автоматические боты, сканирующие порт 22, просто будут получать отказ на попытку аутентификации и уходить ни с чем.
Хотя это и не добавляет криптографической стойкости, я настоятельно рекомендую заменить стандартный порт. Это дает практические преимущества:
- Резкое снижение "шума" в логах. Твои логи
/var/log/auth.logи таблица бановFail2Banне будут засоряться тысячами попыток от примитивных ботов, которые сканируют только порт22. Это упрощает анализ логов и снижает небольшую, но бесполезную нагрузку на систему. - Затруднение для целевых атак. Злоумышленник, который целенаправленно ищет твою систему, все равно найдет
SSH-портсканером всего диапазона портов (Nmap). Но это уже не низкоуровневый скрипт-бот, а более продвинутая атака. Вы отсекаете99.9%автоматического мусора.
Недостаток:
· Удобство. Тебе всегда нужно указывать нестандартный порт при подключении: ssh -p 12345 user@server.ip. Однако это легко решается настройкой конфига SSH на твоей клиентском машине.
Какой порт выбрать? Лучшие практики.
Главное правило: не выбирай порт, который занят другим известным сервисом (например, 80 — HTTP, 443 — HTTPS, 21 — FTP), чтобы не создать конфликт в будущем.
Хороший выбор:
· Порты из диапазона 1024-49151 (зарегистрированные/пользовательские).
· Избегай "модных" нестандартных портов для SSH, типа 2222, 22222, 22225. Их тоже массово сканируют, потому что их популярность сделала их очевидными.
· Выбери случайное, ничем не примечательное число.
Примеры хороших портов: 53982, 28465, 49123, 13574
Примеры плохих портов: 22 (стандартный), 2222 (очевидный), 22222 (очевидный), 9022 (очевидная вариация), 21, 80, 443 (конфликтующие).
Как сменить порт
-
Подключись к серверу и открой конфигурационный файл SSH:
-
Найди строку #Port 22. Раскомментируй ее (убери знак комментария #) и измени номер порта на выбранный ранее.
Port 53982 # Замени 53982 на свой порт -
Сохрани файл и перезагрузи SSH-сервис.
ВНИМАНИЕ! Не закрывай текущую сессию SSH! Убедись, что новое подключение работает.
-
Открой новое окно терминала и попробуй подключиться к серверу, указав новый порт.
Если подключение прошло успешно, можно закрыть старую сессию.
Шаг 4: Настраиваем базовый фаервол (UFW)
Мы разрешим только самые необходимые порты: SSH для управления и позже — порт для нашей сети связывающий локальные машины и удаленный сервер.
-
Разрешаем
SSH-соединения: Важно сделать это до включения фаервола.Если ты планируешь использовать нестандартный порт для
SSH, укажи его явно:ufw allow 2222/tcp(пример для порта 2222).- Если же уже был выставлен базовый порт для SSH, то обнови правила фаервола
UFW. Сначала удали старое правило дляOpenSSH(которое открывало порт22), затем добавь новое.
- Если же уже был выставлен базовый порт для SSH, то обнови правила фаервола
-
Включаем фаервол:
Ответь y. Фаервол активирован и уже блокирует все неразрешенные входящие соединения.
-
Проверяем статус:
Ты должен увидеть, что разрешен только
OpenSSHили новый порт дляSSH.
Шаг 5: Настраиваем Fail2Ban для защиты от атак
Fail2Ban будет мониторить логи SSH и автоматически блокировать IP-адреса, которые пытаются подобрать пароль.
-
Создаем простую конфигурацию для
SSH: Скопируем стандартный файл настроек дляjail:Отредактируем его:
В секции [sshd] убедись, что настройки выглядят так:
[sshd] true ssh %(sshd_log)s %(sshd_backend)s 3 1h 1hmaxretry= 3: количество неудачных попыток перед блокировкой.bantime= 1h: время блокировки (1 час). Можно поставить -1 для перманентной блокировки.findtime= 1h: окно времени, в котором считаются неудачные попытки.
-
Запускаем и активируем
Fail2Ban: -
Проверяем статус:
Ты увидишь список забаненных
IP-адресов, если атаки уже были. -
(Важно!) Обнови конфигурацию
Fail2Banесли был изменен стандартный порт дляSSH.Fail2Banпо умолчанию следит за портом22. Нужно сказать ему, чтобы он смотрел на новый порт.- Отредактируй конфиг
Fail2BanдляSSH:
- В секции [sshd] найди параметр
portи измени его:
[sshd] true 53982- Перезапусти
Fail2Ban:
- Отредактируй конфиг
Шаг 6: Настройка часового пояса, локализации и мониторинга
-
Установим правильный часовой пояс:
-
Установим нужную локаль (язык системы):
Выбери en_US.UTF-8 UTF-8 (рекомендуется для серверов) или ru_RU.UTF-8 UTF-8.
-
Установим утилиты для мониторинга ресурсов:
htop — отличная замена стандартной top, позволяет интерактивно следить за нагрузкой на CPU, RAM и процессы.
Шаг 7: (Опционально, но рекомендуется) Настройка резервного копирования
Твой VPS — это важная инфраструктура. Его поломка не должна стать катастрофой. Поэтому очень рекомендую организовать резервное копирование критически важный директорий (/etc, /home, /root). Можно использовать как встроенные утилиты, предоставляемые провайдером. Либо же создать свое хранилище, и отправлять информацию в тот же S3.
Шаг 8: Можно провести аудит безопасности
В сети есть утилиты, которые могут провести базовый аудит безопасности вашего сервера. Например есть bash script VPS Audit. Запустив который можно получить отчет по анализу системы. Отчет сохраняется в отдельный файлик, чтобы потом можно было еще раз его проанализировать.
В рамках анализа проверяется не только те пункты, которые мы затронули, но и такие не обычные вещи, как автоматическое обновление критически важных пакетов, или установку правила для установки пароля пользователя. Список проводимых проверок
System Restart- Проверяется, нужен ли перезапуск сервера после обновленияSSH Root Login- Проверка, включен ли логин из под root пользователя через SSHSSH Password Auth- Проверка, включен ли метод аутентификации SSH через парольSSH Port- Проверяет стандартный порт для SSH, если выставлен в 22 то рекомендуется изменитьFirewall Status (UFW)- Проверка статуса UFW firewallUnattended Upgrades- Проверка на автоматическое обновление пакетов безопасностиIntrusion Prevention- Наличие Fail2ban или CrowdSec а так же статус их активностиFailed Logins- Проверка количества ошибочных попыток входаSystem Updates- Проверяется все ли системные пакеты обновленыRunning Services- Проверка количества запущенных сервисов, если больше 16 то это уже не хорошоPort Security- Проверяется открытые порты, если их много, то это тоже не хорошоDisk Usage- Проверяем доступное место на дискеMemory Usage- Проверяем количество использованной оперативной памятиCPU Usage- Проверяем нагрузку на CPU, если большая нагрузка, то это тоже повод задуматьсяSudo Logging- Проверяем включение/отключение логирование sudo командPassword Policy- Проверяется настройка парольных политикSUID Files- Поиск наличия SUID файлов
Шаг 9: Включение логирования всех sudo команд
Для включения логирования необходимо отредактировать файл конфигурации sudo. Для этого, достаточно выполнить команду
Которая откроет редактор с конфигурацией утилиты. По умолчанию открывается редактор nano. После этого необходимо прописать следующие строки, после блока со всеми настройками Defaults
Defaults logfile=/var/log/sudo.log
Defaults log_input,log_output
Шаг 10: Настройка автоматического обновления пакетов безопасности
Чтобы настроить автоматическое обновление пакетов безопасности на большинстве дистрибутивов Linux достаточно установить и сконфигурировать приложения unattended-upgrades (Для дистрибутивов Debian/Ubuntu) или dnf-automatic (для Fedora/RHEL), а так же включить их, настроив сами сервиса или таймеры. Ты можешь впоследствии кастомизировать утилиты, включив только обновление пакетов безопасности.
Установка и настройка для Debian/Ubuntu
-
Нужно установить пакет
unattended-upgrades -
Теперь нужно сконфигурировать утилиту
Появится окно подтверждения на котором нужно будет ответить
yesдля включения автоматического обновления. -
Проверяем конфигурацию. Для этого можно запустить обновление в режиме
--dry-run
Установка и настройка для Fedora и RHEL
-
Устанавливаем пакет
dnf-automatic -
Настраиваем файл конфигурации
dnf-automatic.confтам нужно будет прописать строки
apply_updates = yes upgrade_type = security -
Нужно включить и запустить таймер
-
И проверить статус работы
Помимо этого можно сконфигурировать
- Оповещения по Email. Для обоих систем можно активировать алерты по факту действий. Для этого необходимо отредактировать файл
/etc/apt/apt.conf.d/50unattended-upgradesи установить адрес для отправки сообщений системному администратору - Автоматическая перезагрузка. Так же можно настроить и ее, но тут нужно быть осторожным, и не желательно включать эту функцию в продакшн среде.
- А так же нужно контролировать файл логирования после обновлений. Например для
unattended-upgradesэтот файл располагается тут/var/log/unattended-upgrades
Шаг 11: Настройка политики использования сильных паролей
Подключаемые модули аутентификации (PAM) установлены по умолчанию в системах на базе DEB (Ubuntu/Debian). Однако тебе необходимо установить дополнительный модуль libpam-cracklib.
В системах на базе Debian политики паролей определяются в файле /etc/pam.d/common-password. Прежде чем вносить в него какие-либо изменения, лучше всего сделать резервную копию файла.
Теперь отредактируй файл /etc/pam.d/common-password:
Нужно найти следующую строку и отредактировать ее, если такой строки нет, то нужно будет ее создать.
password required pam_cracklib.so try_first_pass retry=3 minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1 difok=2 reject_username
Что каждая опция обозначает
- try_first_pass retry=N – Максимальное количество повторных попыток смены пароля. N указывает на число. По умолчанию этот параметр равен 1.
- minlen=N – Минимально допустимый размер нового пароля (плюс один, если кредиты не отключены, что является значением по умолчанию). В дополнение к количеству символов в новом пароле, за каждый символ (другой, верхний, нижний и цифру) дается кредит (+1 в длину). Значение по умолчанию равно 9.
- lcredit=N – Определить максимальный кредит за содержание строчных букв в пароле. Значение по умолчанию равно 1.
- ucredit=N – Определить максимальное количество заглавных букв в пароле. Значение по умолчанию равно 1.
- dcredit=N – Определить максимальный кредит для содержания цифр в пароле. Значение по умолчанию равно 1.
- ocredit=N – Определить максимальный кредит для содержания других символов в пароле. Значение по умолчанию равно 1.
- ifok=N – Определить количество символов, которые должны отличаться от предыдущего пароля.
- reject_username – Запретить пользователям использовать свое имя в качестве пароля.
Пользователи теперь должны использовать пароль с показателем сложности пароля, равным 12. Один “кредит” будет даваться за 1 строчную букву, 1 кредит за 1 заглавную букву, 1 кредит за минимум 2 цифры и 1 кредит за 1 другой символ.
Можно так же отключить кредиты, присвоив им отрицательные значения, и заставить пользователя использовать комбинацию различных символов минимальной длины.
Разберем работу на примере:
password required pam_cracklib.so minlen=8 lcredit=-1 ucredit=-1 dcredit=-2 ocredit=-1 difok=2 reject_username
Как определено выше, пользователи должны использовать пароль сложности 8 символов, включая 1 строчную букву, 1 заглавную букву, 2 цифры и 1 другой символ. Обратим внимание, эти ограничения будут применяться только для обычных пользователей, но не для пользователя root. Пользователь root может использовать любой тип пароля.
Проверка сложности пароля
После определения самой политики, нужно проверить работает ли она вообще. Назначим простой пароль, который не соответствует политике паролей, и посмотрим, что произойдет. Чтобы изменить или назначить пароль текущему пользователю, выполните команду:
Получается пользователь не может установить пароль, поскольку заданный пароль не соответствует требованиям.