Перейти к содержанию
Innovialabs

Первичная настройка Ubuntu-сервера для продакшена: чек-лист

Практика3 мин

Коротко

На новом сервере обновите систему, создайте sudo-пользователя с входом по SSH-ключу, закройте вход root и по паролю, включите ufw, настройте время, swap, fail2ban и автоматические обновления безопасности.

Короткий ответ

Свежий сервер с публичным IP начинают сканировать почти сразу. Поэтому до установки приложения пройдите базовый чек-лист:

  1. Обновить пакеты.
  2. Создать пользователя с sudo и входом по SSH-ключу.
  3. Запретить вход под root и по паролю.
  4. Включить файрвол ufw.
  5. Настроить часовой пояс и синхронизацию времени.
  6. Добавить swap, если памяти мало.
  7. Установить fail2ban и unattended-upgrades.
  8. Поставить базовый софт.

Команды ниже — для актуальных LTS-версий Ubuntu.

1. Обновления

apt update && apt upgrade -y
reboot   # если обновилось ядро

2. Пользователь с sudo

Работать постоянно под root опасно: любая ошибка выполняется с полными правами.

adduser deploy
usermod -aG sudo deploy

Скопируйте свой публичный ключ на сервер (с локальной машины):

ssh-copy-id deploy@IP_СЕРВЕРА

Проверьте вход под новым пользователем в отдельном окне, прежде чем менять настройки SSH.

3. Защита SSH

В /etc/ssh/sshd_config (или файле в /etc/ssh/sshd_config.d/) задайте:

PermitRootLogin no
PasswordAuthentication no

Затем sudo systemctl restart ssh. Смена порта SSH уменьшает шум в логах, но не заменяет вход по ключам.

4. Файрвол ufw

sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable
sudo ufw status

Сначала разрешите SSH, потом включайте ufw — иначе можно потерять доступ. Базы данных и внутренние сервисы наружу не открывайте.

Учтите: Docker публикует порты в обход правил ufw. Если используете Docker, привязывайте порты к 127.0.0.1 или настраивайте фильтрацию отдельно.

5. Время

sudo timedatectl set-timezone Asia/Tashkent
timedatectl

Убедитесь, что синхронизация времени активна. Многие команды держат серверы в UTC, чтобы логи разных систем совпадали — выберите один вариант и придерживайтесь его.

6. Swap

На серверах с небольшим объёмом RAM swap спасает от падения процессов при пиках памяти:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Размер подбирайте под нагрузку. Swap — страховка, а не замена памяти.

7. fail2ban и автообновления

sudo apt install -y fail2ban unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

fail2ban блокирует IP после серии неудачных попыток входа. unattended-upgrades автоматически ставит обновления безопасности.

8. Базовый софт

Типичный набор: git, curl, htop, nginx как reverse proxy, Docker или нужный runtime, certbot для HTTPS. Ставьте только то, что действительно используется.

Частые ошибки

  • Отключить вход по паролю, не проверив вход по ключу.
  • Включить ufw без правила для SSH.
  • Открыть порт базы данных в интернет.
  • Не настроить бэкапы и мониторинг диска — сервер «работает», пока не закончится место.

Частые вопросы

Это необязательно. Смена порта сокращает количество автоматических попыток входа в логах, но реальную защиту дают вход только по ключам, запрет root и fail2ban.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.