gotburnout

Hetzner VPS Setup

Від порожнього сервера до захищеної 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
Готово! Сервер повністю налаштовано та захищено.