Первичная настройка Ubuntu-сервера для продакшена: чек-лист
Практика3 минРедакция Innovialabs
Коротко
На новом сервере обновите систему, создайте sudo-пользователя с входом по SSH-ключу, закройте вход root и по паролю, включите ufw, настройте время, swap, fail2ban и автоматические обновления безопасности.
Короткий ответ
Свежий сервер с публичным IP начинают сканировать почти сразу. Поэтому до установки приложения пройдите базовый чек-лист:
- Обновить пакеты.
- Создать пользователя с sudo и входом по SSH-ключу.
- Запретить вход под root и по паролю.
- Включить файрвол ufw.
- Настроить часовой пояс и синхронизацию времени.
- Добавить swap, если памяти мало.
- Установить fail2ban и unattended-upgrades.
- Поставить базовый софт.
Команды ниже — для актуальных 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.
- Открыть порт базы данных в интернет.
- Не настроить бэкапы и мониторинг диска — сервер «работает», пока не закончится место.