Настройка безопасности нового VPS за 10 минут
Узнайте, как защитить новый VPS: настройка SSH keys, создание пользователя с sudo и настройка firewall для предотвращения атак на root сразу после запуска.
Первые 10 минут определяют безопасность вашего сервера
Новый VPS не защищен. Как только он получает публичный IP, сканеры начинают попытки входа. Стандартный образ предоставляет им широкие возможности: часто доступен root, часто разрешены пароли, отсутствует firewall, нет автоматического обновления патчей. Хорошая новость заключается в том, что закрытие всех этих уязвимостей занимает около десяти минут и требует всего несколько команд. Это регламент (runbook), который я выполняю на каждом новом сервере перед установкой любого ПО.
Выполняйте шаги по порядку, так как они зависят друг от друга. К каждому шагу прилагается отдельное руководство; эта страница — быстрый путь, объединяющий их.
Минута 1: Обновите всё
Войдите под пользователем root, используя учетные данные вашего провайдера, и полностью обновите систему перед выполнением любых других действий:
apt update && apt upgrade -yНепропатченная система — самая легкая цель, поэтому это действие выполняется первым. После завершения настройте автоматические обновления безопасности, чтобы система оставалась актуальной без вашего участия.
Минута 2: Создайте обычного пользователя с sudo
Не продолжайте работу под root. Создайте пользователя для себя и предоставьте ему права sudo:
adduser matt
usermod -aG sudo mattПосле этого входите под этим пользователем и используйте sudo для административных задач. Постоянная работа под root означает, что любая ошибка или компрометация произойдет с неограниченными правами, а именно для предотвращения этого существует работа под непривилегированным пользователем.
Минута 4: Настройте SSH-ключи
Пароли можно подобрать; ключи — нет. На вашем личном ноутбуке, если у вас еще нет ключа, создайте его:
ssh-keygen -t ed25519Затем скопируйте публичную часть на сервер:
ssh-copy-id matt@YOUR_SERVERДля нового пользователя должен быть включен вход по паролю в ssh-copy-id; если он уже отключен, скопируйте ~/.ssh/authorized_keys пользователя root в /home/matt/.ssh/authorized_keys (владелец matt) или вставьте ваш публичный ключ в этот файл вручную.
Модель, лежащая в основе этого шага (один ключ на одно устройство), права доступа, которые блокируют вход по ключу, и отзыв утерянного ключа, описаны в основах управления SSH-ключами.
Выйдите из системы и войдите снова под пользователем matt, используя ключ, и убедитесь, что он работает, прежде чем переходить к следующему шагу. Блокировка SSH до того, как вы сможете войти по ключу — это способ случайно заблокировать самого себя.
Минута 6: Отключите вход по root и вход по паролю
Теперь, когда ваш ключ работает, закройте две «двери», на которые полагаются сканеры. Используйте drop-in файл, чтобы обновления пакетов не перезаписали ваши настройки. Назовите его 00-, чтобы он шел перед 50-cloud-init.conf, который поставляется в облачных образах Ubuntu с PasswordAuthentication yes; sshd использует первое прочитанное значение, поэтому файл с более поздней сортировкой может незаметно перекрыть настройки:
sudo nano /etc/ssh/sshd_config.d/00-hardening.confPasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin noЗатем перезапустите SSH:
sudo systemctl restart sshЗатем проверьте настройки, которые фактически использует sshd, чтобы некорректный drop-in файл не ввел вас в заблуждение:
sudo sshd -T | grep -Ei 'passwordauthentication|permitrootlogin'Когда вход по паролю и вход под root отключены, постоянный brute-force трафик против вашего сервера не сможет быть успешным. Полный процесс, включая опциональную смену порта, описан в укреплении SSH на VPS.
Минута 8: Включите firewall
Установите политику запрета (deny) для всех входящих соединений по умолчанию, затем разрешите только необходимое. Разрешите SSH до того, как включите firewall, иначе вы разорвете собственное соединение:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enableДобавьте правила allow для любого запущенного вами сервиса, например, 80/tcp и 443/tcp для веб-сайта. Убедитесь, что охвачены и IPv4, и IPv6, так как firewall, фильтрующий только IPv4, оставляет сторону IPv6 полностью открытой. Полное руководство доступно в Firewalls 101 на VPS.
Минута 10: Замедлите сканеры с помощью Fail2ban
Наконец, установите Fail2ban, чтобы блокировать адреса, которые атакуют ваши порты:
sudo apt install -y fail2banВ Ubuntu 24.04 стандартная установка защищает SSH с первого запуска. Поскольку вход по ключам уже требуется, это служит дополнительной мерой, которая уменьшает объем логов и блокирует повторных нарушителей, а не основной защитой.
Ваш чек-лист
Это регламент. Используйте генератор ниже, чтобы отметить каждый элемент контроля и создать персональный чек-лист для хранения вместе с сервером, включая точную команду для каждого шага:
Выполняйте этот список один раз для каждого нового сервера, и действия станут автоматическими. Десять минут сейчас избавят вас от очень плохого дня, который наступит после взлома сервера.
После настройки основных параметров автоматические обновления безопасности на Ubuntu будут поддерживать актуальность системы без вашего участия.
FAQ
Что мне нужно сделать в первую очередь на новом VPS?
Обновите систему с помощью apt update && apt upgrade -y, затем создайте обычного пользователя с sudo и прекратите работу под root. После этого настройте SSH-ключи, отключите вход по root и аутентификацию по паролю, включите firewall с политикой запрета по умолчанию и установите Fail2ban. Выполнение этих действий в таком порядке гарантирует безопасность каждого шага без риска самоблокировки.
Как избежать блокировки доступа при настройке SSH?
Настройте и протестируйте вход по SSH-ключу до того, как отключите пароли или root. Выйдите из системы и войдите снова с помощью ключа, чтобы подтвердить работоспособность, и только после этого отключите PasswordAuthentication и PermitRootLogin. При включении firewall разрешите порт 22 перед запуском ufw enable. Если вы все же потеряете доступ, веб-консоль вашего провайдера позволит войти в систему без SSH.
Действительно ли мне нужны все эти меры на маленьком сервере?
Да, потому что сканерам неважно, насколько мал ваш сервер. Они одинаково проверяют каждый публичный IP. Весь регламент занимает около десяти минут и устраняет легкие пути атаки: нет входа под root, нет подбора паролей, нет незаданных вами открытых портов и известные ошибки исправляются автоматически.
Какой шаг является самым важным?
SSH только по ключам с отключенным входом под root. Большинство атак на новый VPS — это автоматизированный подбор паролей для root; отключение обоих параметров делает этот тип атаки невозможным. Firewall и Fail2ban затем ограничивают то, что остается доступным, и замедляют любые оставшиеся попытки.
Как убедиться, что сервер действительно защищен?
Перед тем как доверять серверу, проверьте три вещи вручную. Выполните sudo ss -tlnp и убедитесь, что прослушиваются только те порты, которые вы планировали открыть, без забытых сервисов 0.0.0.0 или [::]. Выполните sudo ufw status verbose и убедитесь, что политика входящих соединений по умолчанию — deny, и что присутствуют правила для обычного трафика и для (v6). И всегда открывайте вторую SSH-сессию перед тем, как закрыть первую, чтобы ошибка в конфигурации SSH не заблокировала вас. Если все три пункта верны, основные меры защиты применены.