Новый облачный сервер получает публичный IPv4-адрес сразу после создания, и уже через несколько минут на SSH-порт начинают приходить попытки подбора паролей. Поэтому первые полчаса стоит потратить на базовую защиту: вход по ключу, ограничение доступа файрволом, обычный пользователь вместо root, автоматические обновления и резервные снимки. Ниже — порядок действий для Ubuntu 24.04 LTS в Hetzner Cloud; те же команды подходят для большинства Debian-подобных дистрибутивов. Если вы выбираете между облаком и физическим сервером, сначала прочитайте сравнение Hetzner Cloud и выделенных серверов.
Что понадобится
- Аккаунт Hetzner с рабочим способом оплаты. Условия регистрации и оплаты описаны в статье Как оплатить Hetzner.
- Компьютер с OpenSSH-клиентом (Linux, macOS или Windows 10/11 с OpenSSH).
- 15–30 минут. Не закрывайте рабочую SSH-сессию, пока не проверите вход в новой.
Шаг 1. Создайте SSH-ключ
Ключ — пара файлов: закрытый остаётся у вас, открытый отправляется на сервер. Современный алгоритм — ed25519:
ssh-keygen -t ed25519 -C "my-laptop" -f ~/.ssh/hetzner_ed25519
Задайте парольную фразу на закрытый ключ. Публичный ключ — файл hetzner_ed25519.pub; его содержимое вставляется в консоль Hetzner. Закрытый ключ (файл без .pub) никому не передавайте и не вставляйте в чаты и репозитории.
Шаг 2. Создайте проект и сервер
- В Hetzner Console создайте проект: ресурсы (серверы, сети, файрволы, ключи) относятся к проекту.
- Добавьте SSH-ключ в раздел Security → SSH keys: вставьте содержимое
.pub. - Нажмите «Add Server» и выберите локацию. Для европейской аудитории подойдут Германия и Финляндия; для остальных задач учитывайте задержку (измерьте её
pingиmtrдо тестового адреса). - Выберите образ — Ubuntu 24.04.
- Выберите тип сервера. Актуальные линейки и доступность смотрите в консоли: цены в 2026 году менялись дважды, а часть тарифов бывает недоступна (подробности).
- Отметьте добавленный SSH-ключ. Если ключ не отметить, Hetzner отправит пароль root на почту — такой вариант лучше не использовать.
- В разделе Firewalls выберите файрвол (создадим его на шаге 3) или создайте после сервера.
- Включите резервные копии (Backups), если вам нужны автоматические копии: это отдельная платная опция. Для снимков вручную достаточно Snapshots.
- Нажмите «Create & Buy now».
После создания консоль покажет IP-адрес сервера. Подключитесь:
ssh -i ~/.ssh/hetzner_ed25519 root@IP_СЕРВЕРА
При первом соединении SSH спросит, доверять ли отпечатку ключа сервера — ответьте yes.
Шаг 3. Настройте Cloud Firewall
Cloud Firewall работает на уровне сети Hetzner, до того как пакеты дойдут до сервера, и не нагружает систему. По документации, если не задано ни одного правила, весь входящий трафик блокируется, а исходящий разрешён. Firewall не оплачивается отдельно. Лимиты: до 5 файрволов на сервер, до 500 правил на файрвол, до 50 файрволов во всех проектах; на сервер приходится до 80 000 одновременных соединений.
Создайте файрвол в разделе Firewalls → Create Firewall и добавьте входящие правила:
| Протокол | Порт | Источник | Зачем |
|---|---|---|---|
| TCP | 22 | Ваш IP (или диапазон) | SSH. Если IP динамический, откройте для всех и защитите ключами |
| TCP | 80 | Любой | HTTP для сайта и выпуска сертификатов |
| TCP | 443 | Любой | HTTPS |
| ICMP | — | Любой | ping и диагностика сети (по желанию) |
Примените файрвол к серверу (вручную или по label selector). Прежде чем закрывать правило для SSH, убедитесь, что в консоли есть вход через Console (веб-консоль) — это запасной способ попасть на сервер при ошибке.
Шаг 4. Создайте пользователя с sudo
Работа под root опасна: ошибка команды затрагивает всё. Создайте обычного пользователя:
adduser deploy
usermod -aG sudo deploy
mkdir -p /home/deploy/.ssh
cp /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh && chmod 600 /home/deploy/.ssh/authorized_keys
Откройте новый терминал и проверьте вход и права:
ssh -i ~/.ssh/hetzner_ed25519 deploy@IP_СЕРВЕРА
sudo whoami # должно вывести root
Шаг 5. Отключите вход root и вход по паролю
В Ubuntu 24.04 настройки sshd удобнее класть в отдельный файл в /etc/ssh/sshd_config.d/:
sudo tee /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF
sudo sshd -t && sudo systemctl reload ssh
Команда sshd -t проверяет синтаксис; если она вывела ошибку, перезагрузку делать не нужно. Не закрывая текущую сессию, откройте ещё одну и убедитесь, что вход работает. Если не получилось — исправьте файл в оставшейся сессии. Этот приём не даёт «запереть» себя за дверью.
В некоторых образах параметры могут быть заданы и в /etc/ssh/sshd_config.d/50-cloud-init.conf; проверьте итоговую конфигурацию: sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication'.
Шаг 6. Защита от подбора паролей и сканеров
Когда пароли отключены, подбор не опасен, но он засоряет журнал и грузит процессор. Чтобы снизить шум, поставьте fail2ban:
sudo apt update
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Если вы используете Cloud Firewall с ограничением SSH по IP, fail2ban нужен меньше; но для веб-серверов его фильтры (nginx-http-auth, nginx-botsearch) остаются полезными. Для самого сервера можно добавить ещё локальный файрвол ufw — не как замену Cloud Firewall, а как второй рубеж:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable
Не включайте ufw, пока не добавили правило для SSH. Подробности по настройке межсетевого экрана на выделенных серверах — в справке Межсетевой экран — FAQ.
Шаг 7. Автоматические обновления безопасности
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
По умолчанию в Ubuntu устанавливаются обновления безопасности. Для обновлений ядра может потребоваться перезагрузка: команда [ -f /var/run/reboot-required ] && echo нужна перезагрузка подскажет, нужна ли она. Для продуктивных систем планируйте окно обслуживания.
Шаг 8. Время, имя хоста и swap
- Часовой пояс:
sudo timedatectl set-timezone Europe/Berlin(или другой нужный), проверка —timedatectl. - Имя хоста:
sudo hostnamectl set-hostname web1. - Swap на небольших серверах помогает пережить пики памяти:
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile. Чтобы swap сохранился после перезагрузки, добавьте в/etc/fstabстроку/swapfile none swap sw 0 0.
Шаг 9. Снимки, резервные копии и rDNS
Снимок (Snapshot) делается кнопкой в консоли и хранит состояние диска на момент создания; автоматические бэкапы — отдельная платная опция, которая включается для сервера. Снимок удобно делать перед рискованными изменениями. Для файловых бэкапов вне сервера подойдёт Storage Box. Если сервер отправляет почту, настройте обратную запись DNS: Облачный сервер rDNS. Приватные сети между серверами — в справке Конфигурация Hetzner Cloud Networks.
Шаг 10. Управление через hcloud
CLI hcloud позволяет создавать серверы из скриптов. Токен создаётся в проекте: Security → API tokens (права Read & Write). Токен показывается один раз и даёт доступ ко всему проекту, храните его как пароль.
hcloud context create my-project
hcloud server list
hcloud firewall list
Вопросы по API Hetzner разобраны на странице API Hetzner — частые вопросы.
Чек-лист после настройки
- Вход по ключу работает, вход по паролю и под root отключён.
- В Cloud Firewall открыты только нужные порты.
- Автообновления безопасности включены.
- Есть хотя бы один снимок или бэкап и проверено восстановление.
- Токены API и закрытые ключи не лежат на сервере без необходимости.
Типичные ошибки
- Закрыли SSH-порт файрволом и потеряли доступ: используйте веб-консоль и исправьте правила.
- Включили
PasswordAuthentication noдо того, как проверили вход по ключу. - Сделали выход из единственной сессии root, не создав пользователя sudo.
- Оставили открытыми порты баз данных (3306, 5432, 6379) на весь интернет: закройте их в Cloud Firewall.
- Забыли удалить тестовый сервер: Hetzner списывает деньги, пока он существует, даже если выключен.
Частые вопросы
Можно ли войти на сервер по паролю?
Можно, если не указать SSH-ключ при создании, но это небезопасно. Лучше всегда использовать ключи и отключить вход по паролю.
Что делать, если я потерял доступ по SSH?
Откройте веб-консоль сервера в Hetzner Console и исправьте правила файрвола или настройки sshd. Если доступа нет и там, включите режим Rescue для облачного сервера и смонтируйте диск.
Нужен ли ufw, если есть Cloud Firewall?
Это необязательно. Cloud Firewall блокирует трафик до сервера, ufw добавляет второй уровень на самой системе и защищает при ошибках в облачных правилах.
Сколько стоит остановленный сервер?
Выключенный облачный сервер продолжает тарифицироваться, пока существует: ресурсы за ним закреплены. Чтобы не платить, сделайте снимок и удалите сервер.
Что делать, если нужен Windows?
Смотрите справку Windows в облаке Hetzner.
