gotburnout

Настройка Hetzner VPS

От пустого сервера до защищенной production-ready машины. Выберите, как вы хотите настроить свой сервер.

Автоматически (AI)
Универсальный навык для Claude Code, Cursor, Windsurf и Antigravity.
Вручную
14 шагов для полного ручного контроля над процессом.

Подготовка переменных

В командах ниже вам нужно будет подставлять свои значения вместо фигурных скобок:

  • {username} — имя вашего обычного пользователя (напр. dev)
  • {nickname} — короткое название сервера для удобства (напр. hetzner-main)
  • {SERVER_IP} — публичный IP-адрес вашего нового сервера

1 Создание SSH-ключа (Локально)

Выполняется на вашем компьютере (Mac или Linux) ДО того, как вы подключитесь к серверу.

Terminal (Local)
ssh-keygen -t ed25519 -C "{username}@{nickname}" -f ~/.ssh/{nickname}_key -N "" cat ~/.ssh/{nickname}_key.pub

Скопируйте вывод второй команды (он начинается на ssh-ed25519 ...). Это ваш публичный ключ.

2 Вход как Root

Подключитесь к серверу с помощью пароля, который Hetzner прислал на почту.

Terminal
ssh root@{SERVER_IP}
Hetzner может попросить сменить пароль. Введите текущий пароль, затем дважды новый временный. Если после этого соединение разорвется — просто подключитесь снова с помощью нового пароля.

3 Обновление системы

Обновление всех пакетов в неинтерактивном режиме (без всплывающих окон grub).

Root Terminal
apt update && DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a apt upgrade -y

4 Создание пользователя с sudo

Работать из-под root опасно. Создаем обычного пользователя и даем ему права администратора.

Root Terminal
useradd -m -s /bin/bash {username} echo "{username}:ВАШ_НОВИЙ_СКЛАДНИЙ_ПАРОЛЬ" | chpasswd usermod -aG sudo {username}

5 Развертывание SSH-ключа

Запишем ваш публичный ключ, который вы скопировали в Шаге 1, на сервер.

Root Terminal
mkdir -p /home/{username}/.ssh echo "{PUBLIC_KEY_CONTENT}" > /home/{username}/.ssh/authorized_keys chmod 700 /home/{username}/.ssh chmod 600 /home/{username}/.ssh/authorized_keys chown -R {username}:{username} /home/{username}/.ssh

6 Проверка входа

ОБЯЗАТЕЛЬНЫЙ ЧЕКПОИНТ

Не закрывайте сессию root! Откройте новое окно терминала на своем ПК и попробуйте зайти по ключу. Только после успешного входа можно продолжать.

New Terminal (Local)
ssh -i ~/.ssh/{nickname}_key {username}@{SERVER_IP}

Проверьте, работает ли sudo (система должна попросить пароль, который вы задали в Шаге 4, и вывести "root"):

User Terminal
sudo whoami

7 Firewall (UFW)

Все последующие команды выполняйте от имени вашего нового пользователя (с sudo). Настраиваем политику "запретить все входящие, кроме SSH, HTTP и HTTPS".

User Terminal
sudo apt install -y ufw sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw --force enable sudo ufw status

8 Защита ядра (sysctl)

Применяем параметры для защиты от сетевых атак.

User Terminal
sudo tee /etc/sysctl.d/99-security.conf << 'EOF' net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.tcp_syncookies = 1 net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 EOF sudo sysctl -p /etc/sysctl.d/99-security.conf

9 Базовые пакеты и время

Точное время критично для логов, SSL-сертификатов и fail2ban.

User Terminal
sudo apt install -y chrony curl wget git unzip net-tools sudo systemctl enable chrony

10 Локальный SSH-конфиг

Настройка ярлыка на вашем локальном ПК, чтобы в дальнейшем подключаться короткой командой ssh {nickname}.

Terminal (Local)
mkdir -p ~/.ssh && touch ~/.ssh/config && chmod 600 ~/.ssh/config cat >> ~/.ssh/config << 'EOF' Host {nickname} HostName {SERVER_IP} User {username} IdentityFile ~/.ssh/{nickname}_key IdentitiesOnly yes EOF

11 Проверка безопасности

Проверьте, работает ли короткая команда с локального ПК и включены ли базовые защиты.

Terminal (Local)
ssh {nickname} # Після успішного входу: sudo ufw status sudo sysctl net.ipv4.conf.all.rp_filter

12 Финальная блокировка

Устанавливаем защиту от брутфорса (fail2ban) и навсегда запрещаем вход по паролю и вход для root.

User Terminal
sudo apt install -y fail2ban && sudo tee /etc/fail2ban/jail.local << JAILEOF [DEFAULT] bantime = 1h findtime = 10m maxretry = 5 [sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 24h JAILEOF sudo systemctl enable fail2ban && sudo systemctl restart fail2ban sudo sed -i "s/^#\?PermitRootLogin.*/PermitRootLogin no/" /etc/ssh/sshd_config sudo sed -i "s/^#\?PasswordAuthentication.*/PasswordAuthentication no/" /etc/ssh/sshd_config sudo systemctl restart sshd
Готово! Сервер полностью настроен и защищен.