Интерактивный скрипт базовой настройки чистого VPS на Ubuntu. Выполняет пошаговую настройку безопасности, Docker, swap, фаервола и защиты от брутфорса.
- ОС: Ubuntu 20.04 / 22.04 / 24.04
- Доступ: root (через
sudo) - Интернет: для установки пакетов и Docker
bash <(curl -s https://raw.githubusercontent.com/CosmoFox/cook-server/main/setup-server.sh)Или через wget:
bash <(wget -qO- https://raw.githubusercontent.com/CosmoFox/cook-server/main/setup-server.sh)# Со своего локального компьютера:
scp setup-server.sh root@<IP-сервера>:/<Путь>/Или клонируйте репозиторий:
git clone https://github.com/CosmoFox/cook-server.git /opt/cook-server
cd /opt/cook-serverchmod +x setup-server.sh./setup-server.sh| Файл | Назначение |
|---|---|
setup-server.sh |
Основной скрипт настройки |
.token |
Содержит SSH-публичный ключ для авторизации. Если файла нет — скрипт предложит сгенерировать пару ключей |
id_ed25519_* / id_rsa_* |
Закрытый SSH-ключ (создаётся при генерации). Имя зависит от выбора: hostname, IP или вручную. Скачайте и удалите с сервера! |
После запуска вы видите чекбокс-меню:
▸ [ ] 1. Обновление системы
[ ] 2. Установка базовых пакетов
[X] 3. Установка Docker
...
Управление:
| Клавиша | Действие |
|---|---|
Пробел |
Отметить / снять текущий шаг |
↑ ↓ |
Навигация между шагами |
A |
Выбрать все |
N |
Снять все |
Enter |
Запустить выбранные |
apt update→apt upgrade→apt autoremove- Обновляет репозитории, устанавливает последние версии пакетов, удаляет ненужные
| Пакет | Зачем |
|---|---|
curl |
HTTP-запросы из командной строки |
htop |
Интерактивный мониторинг процессов |
mcedit |
Простой текстовый редактор |
fail2ban |
Защита от брутфорса (настраивается в шаге 7) |
openssh-server |
SSH-сервер |
- Подключает официальный репозиторий Docker
- Устанавливает:
docker-ce,docker-compose-plugin,docker-buildx-plugin - Включает и запускает сервис
docker - Пропускает установку, если Docker уже есть
- Создаёт
/swapfileна 2048 МБ - Права
600, форматирует, активирует - Добавляет запись в
/etc/fstabдля автоподключения - Пропускает, если swap уже активен
- Сбрасывает существующие правила
- Default: deny incoming, allow outgoing
- Открывает порты:
| Порт | Протокол | Назначение |
|---|---|---|
| 2288 | TCP | SSH |
| 80 | TCP | HTTP |
| 443 | TCP | HTTPS |
- Включает UFW
⚠ ВНИМАНИЕ: Этот шаг полностью перезаписывает файл /etc/ssh/sshd_config. Все текущие пользовательские настройки SSH будут удалены и заменены стандартными значениями скрипта.
Полная перезапись /etc/ssh/sshd_config:
| Параметр | Значение |
|---|---|
Port |
2288 |
PermitRootLogin |
yes |
PasswordAuthentication |
no |
PubkeyAuthentication |
yes |
MaxAuthTries |
3 |
X11Forwarding |
no |
- Устанавливает публичный ключ из
.tokenв/root/.ssh/authorized_keys - Рестартует SSH-сервер
- Банит на 24 часа после 3 неудачных попыток за 10 минут
- Мониторит
/var/log/auth.logна порту 2288 - Включает сервис
Если файл .token отсутствует при запуске, скрипт предложит сгенерировать пару ключей:
-
Выберите тип ключа:
1— ED25519 (рекомендуется, быстрее, компактнее)2— RSA 4096-bit (для совместимости со старыми системами)
-
Выберите имя файла ключа:
1— по hostname сервера:id_ed25519_web-12— по IP-адресу:id_ed25519_10.0.0.53— hostname + IP:id_ed25519_web-1_10.0.0.54— ввести вручную (дополнительная метка)
-
Ключи генерируются без passphrase:
- Открытый ключ →
.token - Закрытый ключ → файл с выбранным именем (рядом со скриптом)
- Открытый ключ →
-
⚠ Скрипт покажет предупреждение — обязательно скачайте закрытый ключ до продолжения, иначе потеряете доступ к серверу!
-
Опционально: генерация .ppk для PuTTY — после создания ключа скрипт спросит, нужен ли формат PuTTY:
y— конвертирует ключ в.ppkчерезputtygen(установка:apt install -y putty-tools)N/ Enter — пропустить
ssh -i /путь/к/id_ed25519_web-1 -p 2288 root@<IP-сервера>Рекомендуется запускать шаги в таком порядке:
- Обновление системы
- Установка базовых пакетов
- Установка Docker
- Настройка swap
- Настройка UFW
- Настройка SSH ← после этого парольный доступ отключается!
- Настройка fail2ban
Для полной настройки — нажмите A (выбрать все) → Enter.
Проверьте:
# SSH подключается только по ключу на порту 2288:
ssh -i ~/.ssh/id_ed25519 -p 2288 root@<IP>
# Фаервол активен:
ufw status verbose
# Docker работает:
docker run hello-world
# fail2ban активен:
fail2ban-client status- Скрипт идемпотентен — повторный запуск безопасен (Docker, swap, UFW пропускаются, если уже настроены)
- Если
.tokenпустой или отсутствует — скрипт не продолжит работу - Порт SSH изменён со стандартного 22 на 2288
- Парольная аутентификация SSH отключена