Перша година з VPS: повний гайд з налаштування з нуля до безпечної робочої системи (робимо твій OpenClaw безпечнішим)
Щойно куплений VPS — це як незачинені двері: скрипт-кіди з усього світу вже стукають у них. Ця стаття покаже, як надійно замкнути ці двері, щоб твій openclaw не розбігався і не накоїв дурниць.
0. Вступне слово
Тільки-но купив VPS, радісно отримав IP-адресу та root-пароль, а далі що?
Більшість людей робить так: одразу починають ставити софт і розгортати проєкти.
Це дуже небезпечна звичка.
Твій VPS має публічну IP-адресу, а отже будь-хто у світі може спробувати до нього підключитися. І за замовчуванням:
- відкритий порт 22
- всім відомий юзернейм root
- і лише один пароль захищає тебе
Щодня безліч автоматизованих скриптів сканують діапазони IP, намагаючись збрутити паролі по словниках. Твій сервер атакують ще з тієї самої миті, як він з’явився в мережі.
Тому перша справа після купівлі VPS — не ставити софт, а зробити базове налаштування безпеки.
1. Яка наша мета
Мета цієї статті:
- ✅ Налаштуй безпечний віддалений доступ: вхід через SSH-ключі + нестандартний порт
- ✅ Створи звичайного користувача: уникай прямого використання root
- ✅ Налаштуй фаєрвол: відкривай лише необхідні порти
- ✅ Увімкни прискорення мережі: BRR змусить мережу летіти
- ✅ Захистись від брутфорсу: fail2ban автоматично блокуватиме зловмисні IP
Після цього твій VPS матиме міцний фундамент, і ти зможеш спокійно розгортати будь-які сервіси.
2. План та роздуми
Навіщо все це робити?
Щойно куплений VPS — це як квартира в будинку, яку щойно здали в експлуатацію без оздоблення:
| Стандартний стан | Ризик | Наше рішення |
|---|---|---|
| Вхід прямо як root | Забагато прав, ризик фатальної помилки | Створюємо звичайного юзера + sudo |
| Вхід за паролем | Можна збрутфорсити | Вхід через SSH-ключ |
| Стандартний порт 22 | Сканери лізнуть до нього першими | Змінюємо на нестандартний порт |
| Фаєрвол вимкнено | Усі порти торчать назовні | UFW відкриває лише потрібне |
| Звичайна мережа | Високі втрати пакетів, пінги | Алгоритм контролю BBR |
Загальний процес

Робитимемо все крок за кроком у такому порядку, і я поясню, чому робимо саме так.
3. Кроки
3.1 Перший вхід і оновлення системи
Дістаємо IP сервера
Після покупки VPS провайдер видасть тобі:
- IP-адреса: наприклад
192.168.1.100 - Порт: зазвичай
22(деякі провайдери можуть змінювати його на інший) - Ім’я користувача: зазвичай
root - Пароль: випадково згенерований набір символів

Підключення через SSH
Для користувачів Mac / Linux: відкрийте термінал і просто введіть:
1 | ssh root@你的服务器IP |
Для користувачів Windows:
- Windows 10/11 має вбудований OpenSSH, тож ви можете виконати цю саму команду прямо в PowerShell або CMD
- Або скористайтеся інструментами на кшталт Termius або MobaXterm
Під час першого підключення ви побачите запит на підтвердження відбитка ключа:
1 | The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established. |
Це система питає: «Я не знаю цю машину, ти точно хочеш підключитися?»
Введіть yes і натисніть Enter. Далі введіть пароль (зверніть увагу: під час введення символи не відображаються — це стандартна функція безпеки) і натисніть Enter.

Якщо бачите приблизно таке повідомлення, значить, ви успішно увійшли:
1 | Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.x.x-x-generic x86_64) |
💡 Навіщо перевіряти відбиток?
Це захист від так званих атак «людина посередині» (Man-in-the-Middle). Коли ви підключаєтесь вперше, ви запам’ятовуєте відбиток сервера. Якщо під час наступних підключень він раптом зміниться — це червоний прапорець, хтось міг підмінити ваш сервер.

Знайомство з вашим сервером
Щойно зайшли, давай одразу розвідаемо обстановку і подивимось, що це за машина:
1 | # 查看系统版本 |

Запам’ятай ці дані, вони дуже стануть в пригоді, коли будемо копатися в проблемах пізніше.
Оновлення системи
Розвідку провели, тепер за першу справу беремось за оновлення системи. Образ на новому сервері може бути ще з кількох місяців тому, а за цей час вже могли вийти свіжі патчі безпеки:
1 | # 更新软件包列表 + 升级所有软件 + 清理 |
Що тут до чого:
apt update: оновлюємо індекс пакетівapt full-upgrade: апгрейдим усі пакети, включно з ядром-y: автоматично погоджуємось, щоб не вводити yes вручнуapt autoremove: підмітаємо вже непотрібні залежностіapt autoclean: чистимо кеш завантажених пакетів

⏱️ Цей крок може зайняти кілька хвилин, залежить від того, як багато накопилось оновлень. Якщо по ходу справи щось попросить підтвердити — просто йдемо за підказками, там все зрозуміло.
Перевірка, чи потрібен перезапуск
Після оновлення ядра зазвичай треба перезавантажитись, щоб воно запустилось:
1 | # 检查是否需要重启 |

Якщо напише, що перезавантаження необхідне:
1 | reboot |
Після рестарту просто підключаємось по SSH знову.
Встановлення базових утиліт
1 | apt install -y sudo curl wget git vim htop tree unzip net-tools ufw fail2ban neofetch |
Навіщо потрібні ці інструменти:
| Інструмент | Призначення | |
|---|---|---|
sudo |
Дозволяє звичайним юзерам виконувати команди від адміна | |
curl / wget |
Завантаження файлів | |
git |
Контроль версій | |
vim |
Текстовий редактор | |
htop |
Зручніший моніторинг процесів | |
tree |
Деревоподібний показ структури директорій | |
net-tools |
Мережеві утиліти (ifconfig, netstat тощо) | |
ufw |
Простий і зручний фаєрвол | |
fail2ban |
Захист від брутфорсу | |
neofetch |
Гарно виводить інформацію про систему | |
![]() |
3.2 Створюємо звичайного користувача (не root)
Чому не варто сидіти під root?
У root прав занадто багато — одна невелика помилка, і rm -rf / — прощавай, усе злетіло. Для щоденних завдань краще використовувати звичайного юзера, а права адміністратора підкидувати через sudo, коли вони реально потрібні.
Лобстер (openclaw) — це ж справжній монстр, хто йому root-права в руки дасть?
Створюємо користувача
1 | # 创建用户(把 ittinker 换成你想要的用户名) |
Система попросить задати пароль та заповнити кілька полів з інформацією:
1 | New password: # 输入密码(不会显示) |

Даємо права sudo
1 | # 把用户加入 sudo 组, ittinker 换成你自己上面创建的那个用户 |
Перевіряємо, чи все запрацювало:
1 | # 切换到新用户 ittinker 换成你自己上面创建的那个用户 |
Якщо у відповідь бачите root, значить, sudo налаштовано успішно.

💡 Маленький лайфхак
Введіть
exit, щоб повернутися до root. Далі ми ще трохи повозимося з налаштуваннями під root-ом, а коли закінчимо — просто перемкнемося назад на звичайного користувача.
3.3 Налаштовуємо вхід за SSH-ключем
Ключі замість паролів

Авторизація за ключем — це набагато безпечніше за паролі:
- Пароль можна збрутфорсити, а підібрати ключ — практично нереально
- Не треба вводити пароль щоразу, це просто зручніше
- Навіть якщо пароль злили, без приватного ключа ніхто не зможе увійти
Крок 1: Генеруємо пару ключів локально
Виконай на своєму комп’ютері (не на сервері):
1 | # 生成 ED25519 密钥(推荐,更安全更快) |
Скрипт запитає:
1 | Enter file in which to save the key (/Users/你/.ssh/id_ed25519): |
Просто натисни Enter, щоб лишити шлях за замовчуванням. Тут ми використали ./ittinker — це означає, що файл збережеться в поточній теці й називатиметься ittinker.
1 | Enter passphrase (empty for no passphrase): |
Можеш задати пароль для ключа (це додатковий шар захисту), або просто натиснути Enter, щоб лишити поле порожнім.

Кільки генерація завершиться, у теці ~/.ssh/ ти побачиш два файли (нижче наведено стандартні назви — так вони виглядатимуть, якщо ти просто натискав Enter):
id_ed25519: приватний ключ, нізащо не світити ним!id_ed25519.pub: публічний ключ, його треба завантажити на сервер
💡 ed25519 vs RSA
ed25519— це рекомендований алгоритм на сьогодні. Він безпечніший за традиційний RSA, а сам ключ коротший. Якщо твоя система застаріла й не підтримує його, бериssh-keygen -t rsa -b 4096.
Один нюанс: ключ ed25519 виходить досить компактним, а от файли RSA дуже здорові. Я спитав у ШІ, і виявилося, що розмір тут не при чому — це просто особливість самого алгоритму.
Крок 2: Завантажуємо публічний ключ на сервер
Спосіб А: Через ssh-copy-id (рекомендовано)
1 | # 在你的电脑上执行 |
Після вводу пароля публічний ключ автоматично скопіюється на сервер.

Спосіб Б: Копіюємо вручну
Якщо ssh-copy-id не спрацював, можна зробити все вручну:
1 | # 1. 在你的电脑上,查看公钥内容 |
Скопіюйте виведений текст (це довгий рядок, що починається з ssh-ed25519).
1 | # 2. 在服务器上,为新用户创建 .ssh 目录, ittinker 换成你刚刚创建的用户名 |
⚠️ Права доступу — це дуже важливо!
SSH дуже суворо ставиться до прав доступу на файли:
- Каталог
.ssh: 700 (доступ лише у самого користувача)- Файл
authorized_keys: 600 (читання та запис лише у самого користувача)Якщо права налаштовані неправильно, SSH просто не дасть увійти за ключем.
Крок 3: Перевіряємо вхід за ключем
Відкрийте нове вікно терміналу (старе не закривайте — якщо щось піде не так, зможете все виправити) і перевірте вхід за ключем:
1 | ssh ittinker@你的服务器IP |
Якщо зайшло без запиту пароля — вітаю, налаштування ключа пройшло успішно! 🎉
(Якщо ви задали passphrase для приватного ключа, система попросить його ввести — це абсолютно нормально)

Тут ми додали параметр -i, бо цей ключ лежить не за стандартним шляхом, а просто в поточній директорії. Якщо не вказати його явно, система спробує використати ключ за замовчуванням.
3.4 Посилення безпеки SSH
Отже, вхід за ключем уже працює. Тепер давайте трохи “захардкодимо” SSH:
- Змінимо стандартний порт (щоб не ловити зайвий шум від сканерів)
- Вимкнемо вхід за паролем
- Заборонимо прямий логін від імені root
Редагуємо конфіг SSH
1 | # 备份原配置 |

Знайдіть і змініть наступні параметри (деякі з них можуть бути закоментовані — просто приберіть # спереду):
1 | # 修改端口(选一个 1024-65535 之间的数字) |

Зберігайте та виходьте (ctrl + o).
У Nano збереження — це ctrl + o, він запитає ім’я файлу, просто натисніть Enter, а вихід — ctrl + x
Перезапускаємо службу SSH
1 | systemctl restart sshd.service |
⚠️ Важливе нагадування!
Не закривайте поточний термінал! Спочатку в новому вікні перевірте, чи нормально підключаєтесь із новими налаштуваннями:
1 ssh -p 22000 yourname@你的服务器IPЯкщо вдається увійти, тоді закривайте старе вікно. Якщо не пускає — у старому вікні ще можна полагодити конфіг.
Якщо ви купили легкий сервер, найімовірніше цей порт змінити не вийде, а от традиційний ECS це дозволяє — майте це на увазі.
3.5 Налаштовуємо фаєрвол UFW

UFW (Uncomplicated Firewall) — це стандартний інструмент фаєрвола в Ubuntu: налаштовується просто, але функціонал потужний.
Базове налаштування
1 | # 设置默认策略:拒绝所有入站,允许所有出站 |
Увімкнення фаєрвола
1 | ufw enable |
Видасть таке повідомлення:
1 | Command may disrupt existing ssh connections. Proceed with operation (y|n)? |
Введіть y для підтвердження.
Перевірка статусу
1 | ufw status verbose |

23022 — це я випадково помилився, просто використовуйте свої власні дані
Вивід буде приблизно таким:
1 | Status: active |
Швидка шпаргалка з команд
1 | # 查看状态 |
3.6 Вмикаємо прискорення BBR
BBR (Bottleneck Bandwidth and Round-trip propagation time) — це алгоритм контролю перешкод TCP від Google, який може суттєво підвищити продуктивність мережі.
Вмикаємо в один клік
1 | # 添加 BBR 配置 |
Перевіряємо, чи увімкнулося
1 | # 查看当前拥塞控制算法 |
Вивід має бути таким:
1 | net.ipv4.tcp_congestion_control = bbr |
1 | # 确认 BBR 模块已加载 |
Вивід буде приблизно таким:
1 | tcp_bbr 20480 3 |
💡 Який ефект дає BBR
Після увімкнення BBR, особливо за нестабільної мережі або високих затримок, ви чітко відчуєте:
- Швидше завантаження файлів
- Плавнішу роботу через SSH
- Швидше завантаження вебсторінок

3.7 Налаштовуємо fail2ban для захисту від брутфорсу
fail2ban моніторить логи і автоматично блокує IP-адреси, з яких було багато невдалих спроб входу.
Базове налаштування
1 | # 复制默认配置(不要直接修改 jail.conf) |
Знайдіть розділ [sshd] і переконайтеся, що там такі налаштування:
1 | [sshd] |

Запускаємо сервіс
1 | # 重启 fail2ban |
Перевіряємо статус
1 | # 查看 fail2ban 状态 |

Вивід буде приблизно таким:
1 | Status for the jail: sshd |
Корисні команди
1 | # 手动封禁 IP |
3.8 [Опціонально] Керування кількома серверами через SSH Config
Якщо у вас кілька серверів, щоразу вводити ssh -p 22000 user@ip — це морока. Можна спростити все за допомогою SSH Config.
Конфігураційний файл
Відредагуйте файл ~/.ssh/config на вашому локальному комп’ютері:
1 | vim ~/.ssh/config |
Додайте налаштування:
1 | # 第一台服务器 |
Як користуватися
Тепер можна підключатися напряму за аліасом:
1 | # 连接第一台服务器 |
Більше не треба тримати в голові IP, порти та імена користувачів!
3.9 [Опціонально] Дозвіл доступу лише для Cloudflare
Якщо ваш сайт повністю знаходиться за Cloudflare, можна налаштувати доступ до портів 80/443 лише для IP-адрес Cloudflare — це додатково підвищить безпеку.
⚠️ Важливо: цей конфіг вимагає, щоб ваш домен вже був підключений до Cloudflare CDN.
Скрипт автоматичного налаштування
1 | # 下载脚本 |
Цей скрипт:
- Тягнемо актуальні IP-діапазони прямо з офіційних джерел Cloudflare
- Додаємо правила в UFW, щоб пускати на 80/443 лише ці IP
- Перезавантажуємо UFW
Налаштовуємо автооновлення
IP-діапазони Cloudflare можуть змінюватися, тому налаштуємо щотижневе автооновлення:
1 | # 添加 cron 任务(每周一凌晨执行) |
3.10 Виставляємо часовий пояс
За замовчуванням там, ймовірно, UTC — змініть на свій пояс, щоб з логами було менше мороки:
1 | # 查看当前时区 |

3.11 [Опціонально] Налаштовуємо автоматичні оновлення безпеки
Дозволяємо системі самій ставити патчі безпеки — не доведеться щоразу робити це вручну:
1 | # 安装自动更新工具 |
Вибираємо «Yes», щоб увімкнути автооновлення.
💡 Ця фішка тягає лише оновлення безпеки й не стрибне на новий мажорний реліз, тож досить безпечно.
4. Підбиваємо підсумки
Чекліст після ініціалізації
Коли пройдемося по всьому вище, беремо цей чекліст і перевіряємо:
| Перевірка | Команда | Очікуваний результат |
|---|---|---|
| Систему оновлено | apt update && apt list --upgradable |
Немає пакетів для оновлення |
| Звичайний юзер має sudo | sudo whoami |
Виведе root |
| Вхід за ключем працює | ssh yourname@ip -p port |
Вхід без пароля |
| Вхід за паролем вимкнено | grep PasswordAuth /etc/ssh/sshd_config |
PasswordAuthentication no |
| SSH-порт змінено | grep Port /etc/ssh/sshd_config |
Порт, який ти задав |
| Фаєрвол увімкнено | ufw status |
Status: active |
| BBR увімкнено | sysctl net.ipv4.tcp_congestion_control |
= bbr |
| fail2ban працює | systemctl status fail2ban |
active (running) |
| Часовий пояс налаштовано | timedatectl |
Asia/Shanghai або твій часовий пояс |
| Локальний SSH Config | cat ~/.ssh/config |
Аліас сервера налаштовано |
Де лежать ключові файли
1 | /etc/ssh/sshd_config # SSH 服务端配置 |
Найкращі практики безпеки
- Регулярно оновлюй систему:
apt update && apt upgrade - Періодично перевіряй логи входу:
lastb(невдалі входи),last(успішні входи) - Слідкуй за банами у fail2ban
- Роби бекап перед тим, як змінювати важливі конфіги
5. Лог помилок і нюансів
Q1: Не пускає за ключем, все одно просить пароль?
Можливі причини:
-
Проблема з правами доступу (найчастіше)
1
2
3# 检查并修复权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys -
Публічний ключ скопійовано неправильно
1
2
3# 检查 authorized_keys 内容
cat ~/.ssh/authorized_keys
# 应该是一行完整的公钥,以 ssh-ed25519 或 ssh-rsa 开头 -
Втручання SELinux (для систем CentOS/RHEL)
1
restorecon -Rv ~/.ssh
Q2: Після зміни порту не можете підключитися?
Кроки для діагностики:
-
Переконайтеся, що новий порт відкрито у фаєрволі:
1
ufw status | grep 你的端口
-
Перевірте, чи правильно налаштовано SSH:
1
grep Port /etc/ssh/sshd_config
-
Переконайтеся, що служба SSH працює:
1
systemctl status sshd
-
Якщо підключитися взагалі не виходить, увійдіть через VNC/консоль вашого хостинг-провайдера і виправляйте все там.
Q2.5: Зміна порту взагалі не застосовується? (Для легких хмарних серверів)
Симптом: ви змінили /etc/ssh/sshd_config, але після перезапуску служби 22-й порт все ще активний, а новий порт не працює.
Як діагностувати:
bash
1 | # 查看是谁在监听 22 端口 |
Якщо вивід виглядає приблизно так:
1 | tcp 0 0.0.0.0:22 0.0.0.0:* LISTEN 1/init |
Це означає, що 22-й порт прослуховується процесом init (PID 1), а не sshd.
Причина: У деяких хмарних провайдерів SSH для «легких серверів додатків» або «контейнерних інстансів» проксіюється на рівні платформи, тому конфіг всередині вашого сервера (sshd_config) просто не спрацює.
Рішення:
| Тип інстансу | Як змінити SSH-порт |
|---|---|
| Класичний VPS/ECS | Редагуємо sshd_config ✅ |
| Легкий сервер | Можливо, треба міняти в панелі хмарного провайдера, або взагалі не підтримується |
| Контейнерний інстанс | Зазвичай зміна порта не підтримується |
Якщо ваш інстанс не дає змінити порт, інші заходи безпеки стають ще важливішими:
- ✅ Створюємо звичайного користувача + вимикаємо root-логін
- ✅ Логін за SSH-ключем + вимикаємо вхід за паролем
- ✅ fail2ban для захисту від брутфорсу
Якщо все це налаштувати, безпека все одно буде на високому рівні.
Q3: fail2ban заблокував мене самого?
1 | # 用 VNC 登录后解封 |
Q4: Після увімкнення UFW сайт перестав відкриватися?
1 | # 检查 80/443 是否开放 |
Q5: При виконанні команди пише, що sudo не знайдено?
У мінімалістичній установці Debian sudo може бути відсутнім. Встановіть його з-під root:
1 | apt install sudo |
6. Скрипт ініціалізації в один клік (для досвідчених)
Якщо ви вже освоїли всі кроки вище, можете скористатися цим скриптом для швидкої ініціалізації.
⚠️ Важливо: перед тим як запускати скрипт, переконайся, що в тебе вже готовий публічний SSH-ключ.
1 |
|
7. Гаразд, наскільки реально підвищилась безпека після всього цього?
| Крок | Що робили | Чому це важливо |
|---|---|---|
| Оновлення системи | Встановили свіжі патчі | Закриває відомі вразливості |
| Створення нового юзера | Відмовились логінитись root-ом напряму | Зменшує ризик випадкових помилок |
| SSH-ключі | Замінили паролі на ключі | Неможливо збрутфорсити |
| Зміна порту | Відійшли від дефолтного 22 | Менше шансів, що вас знайдуть сканери |
| Вимкнення пароля | Логін лише за ключами | Повністю прибирає атаки на паролі |
| Вимкнення root | root не може логінитись напряму | Ускладнює життя зловмисникам |
| Фаєрвол UFW | Відкрили лише потрібні порти | Зменшує поверхню атаки |
| Прискорення BBR | Оптимізували мережеву продуктивність | Робить доступ швидшим |
| fail2ban | Автоматично банить підозрілі IP | Захищає від постійних атак |
Після всього цього твій сервер уже обганяє за безпекою 90% VPS.
Анонс наступної статті
У наступній статті ми розберемо швидку довідку з налаштування входу по SSH-ключах, і там ми детальніше зупинимось на:
- Як генерувати ключі на різних ОС
- Менеджмент кількох ключів
- Налаштування SSH Agent
- Типові налаштування популярних SSH-клієнтів
Ця стаття востаннє оновлювалась: січень 2026 року
Серія «Набір інструментів інді-розробника», стежте за оновленнями!




