Каждый раз когда поднимаю новый сервер, делаю примерно одно и то же. Записал чтобы не держать в голове.

Обновляем пакеты

apt update && apt upgrade -y

Всегда первым делом. Свежеустановленный Ubuntu обычно отстаёт от актуальных версий пакетов.

Создаём нормального пользователя

Работать под root постоянно — плохая практика. Создаю пользователя, добавляю в sudoers, копирую SSH-ключ:

adduser deploy
usermod -aG sudo deploy
rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy

Закрываем SSH для root

В /etc/ssh/sshd_config меняю:

PermitRootLogin no
PasswordAuthentication no

Рестартую sshd и проверяю что новый пользователь заходит нормально — только потом закрываю рутовую сессию.

Настраиваем firewall

ufw allow OpenSSH
ufw allow 80
ufw allow 443
ufw enable

Остальные порты — по необходимости. Принцип: закрыто всё что не открыто явно.

Ставим что нужно

apt install -y htop tmux git curl fail2ban

fail2ban блокирует IP после нескольких неудачных попыток SSH. Ставлю всегда — количество брутфорс-попыток на любой публичный сервер удивляет.

Настраиваем автообновления безопасности

apt install unattended-upgrades
dpkg-reconfigure unattended-upgrades

Только security-обновления, не всё подряд. Критические патчи ставятся автоматически, остальное — руками когда готов.

После этого сервер готов к работе. Занимает минут 15, иногда меньше.