Полная начальная настройка сервера за один запуск. Устанавливает базовые пакеты, настраивает файрвол, Fail2ban, кастомный MOTD и shell-алиасы.
Доступны два варианта:
-
install.sh— классическая версия с цветным меню (ввод числа + Enter) -
install-tui.sh— TUI-версия с навигацией стрелками, выбором языка EN/RU и красивым интерфейсом через gum -
📦 Обновляет пакеты и устанавливает базовый набор утилит
-
🔄 Настраивает автоматические security-обновления
-
👤 Создаёт sudo-пользователя с SSH-ключом
-
💾 Настраивает swap-файл с persist в fstab
-
🛡️ Управляет UFW и Fail2ban через интерактивные подменю
-
🔑 Подменю SSH: смена порта, отключение парольной аутентификации, ограничение root-входа
-
🔒 Хардение ядра через sysctl: защита от SYN-флуда, IP-спуфинга, ICMP-редиректов
-
🐳 Устанавливает Docker через официальный скрипт
-
🖥️ Устанавливает кастомный MOTD с системной информацией и запущенными контейнерами
-
🗂️ Запускает утилиты из папки
scripts/через отдельное подменю -
🌐 Устанавливает 1Panel через встроенный установщик
-
⏰ Настраивает cron для автоматической перезагрузки при обновлении ядра
-
⚡ Добавляет полезные алиасы в
.bashrc -
🧹 Очищает APT-кэш и удаляет неиспользуемые пакеты
-
📝 Логирует все действия и создаёт резервные копии
-
🌐 Выбор языка (English / Русский) при каждом запуске (TUI-версия)
bash <(curl -Ls https://raw.githubusercontent.com/MrCerber/Server-Tools/refs/heads/main/install.sh)bash <(curl -fsSL https://raw.githubusercontent.com/MrCerber/Server-Tools/refs/heads/main/get-tui.sh)curl -fsSL https://github.com/MrCerber/Server-Tools/archive/refs/heads/main.tar.gz \
| tar -xz -C /tmp && bash /tmp/Server-Tools-main/install-tui.shImportant
Скрипт запускается от root. SSH-ключи должны быть установлены заранее.
TUI-версия автоматически устанавливает gum при первом запуске.
| Требование | |
|---|---|
| ОС | Ubuntu / Debian (другие дистрибутивы — на свой страх и риск) |
| Права | root |
| Интернет | нужен для установки пакетов и загрузки MOTD |
Навигация стрелками ↑↓, выбор — Enter. Можно начать вводить название пункта — список фильтруется на лету.
📋 Показать структуру TUI-меню
╭─────────────────────────────────╮
│ MrCerber Server Tools │
╰─────────────────────────────────╯
Ubuntu / Debian | Run as root
UFW: active Fail2ban: active
─── Quick Setup ───
▶ Create launcher alias (mrc-tools)
─── System ───
Full base setup
Update / upgrade only
Install base packages
Enable auto-updates
Create sudo user
Setup swap
─── MOTD & SSH ───
Install custom MOTD
Restore default MOTD
Preview MOTD
SSH settings >
─── Security ───
UFW firewall >
Fail2ban >
Kernel hardening
─── Panels ───
Install Docker
Install 1Panel
─── Extras ───
Install shell aliases
APT cleanup
Auto-reboot cron
Show action log
─── Scripts ───
Scripts >
Exit
📋 Показать структуру классического меню
MrCerber — New Server Bootstrap
UFW: active Fail2ban: active
────────────────────────────────────────────────────
Quick Setup
1) Create launcher alias alias mrc-tools -> run from anywhere
System
2) Full base setup update + packages + auto-updates
3) Update / upgrade only apt-get update && upgrade
4) Install base packages curl, git, htop, btop, jq, ufw...
5) Enable auto-updates unattended-upgrades
6) Create sudo user add non-root user with sudo + SSH key
7) Setup swap create /swapfile + persist in fstab
MOTD & SSH
8) Install custom MOTD disable default + install 99-mrcerber
9) Restore default MOTD re-enable system MOTD scripts
10) Preview MOTD run-parts /etc/update-motd.d
11) SSH submenu port, password auth, root login hardening
Security
12) UFW submenu firewall rules & management
13) Fail2ban submenu SSH brute-force protection
14) Kernel hardening sysctl: SYN cookies, anti-spoof, redirects
Panels
15) Install Docker official get.docker.com installer
16) Install 1Panel web-based server management panel
Extras
17) Install aliases bench, geoip -> /root/.bashrc
18) APT cleanup autoremove + clean apt cache
19) Auto-reboot cron install/manage Cron/Restart.sh
20) Show action log last 20 entries from bootstrap log
Scripts
21) Scripts submenu run utility scripts (DNS, BBR...)
0) Exit
📦 Full base setup
Запускает три шага последовательно и выводит итоговый summary:
apt-get update && apt-get upgrade- Установка базовых пакетов
- Включение
unattended-upgrades
Устанавливаемые пакеты:
ca-certificates curl wget gnupg lsb-release
unzip zip tar nano vim
htop btop net-tools iproute2 dnsutils
jq git ufw fail2ban
unattended-upgrades apt-listchanges openssh-server
👤 Create sudo user
Создаёт нового пользователя с правами sudo — для работы без прямого входа под root.
- Запрашивает имя пользователя и создаёт его через
adduser - Добавляет в группу
sudo - Опционально устанавливает SSH-публичный ключ в
~/.ssh/authorized_keys
💾 Setup swap
Настраивает swap-файл — полезно для VPS с небольшим объёмом RAM (1–2 ГБ).
- Проверяет, не настроен ли swap уже (с предложением заменить)
- Запрашивает размер файла (например:
1G,2G,512M) - Создаёт
/swapfileчерезfallocate(fallback наdd) - Прописывает в
/etc/fstabдля автомонтирования при перезагрузке - Устанавливает
vm.swappiness=10иvm.vfs_cache_pressure=50через sysctl
🖥️ Кастомный MOTD
При SSH-входе вместо стандартного MOTD отображается:
System
────────────────────────────────────────────────────
Host server01
IP 1.2.3.4
OS Ubuntu 22.04.3 LTS
Kernel 5.15.0-91-generic
Uptime up 3 days, 2 hours, 15 minutes
CPU Intel Xeon E5-2680 (8 cores / 16 threads)
Load 0.12 / 0.08 / 0.05 (1m/5m/15m)
Load% 1% (normalized: 0.01 per thread)
RAM 1.2G / 8.0G
Last Login root from 10.0.0.1 at Mon Jan 6 12:00:00 2025
Storage
────────────────────────────────────────────────────
Disk / [████████░░░░░░░░░░░░░░░░] 33% (16G/48G)
Services
────────────────────────────────────────────────────
docker: ● active fail2ban: ● active ufw: ● active
Containers
────────────────────────────────────────────────────
nginx-proxy Up 2 days nginx:latest
app Up 5 hours myapp:v1.2
Updates
────────────────────────────────────────────────────
Status System is up to date
Секция Containers отображается только если Docker установлен и запущен.
Файлы 99-mrcerber и logo.txt берутся из папки рядом со скриптом.
Если не найдены — скачиваются автоматически с GitHub.
🔑 SSH submenu — хардение SSH
| Пункт | Действие |
|---|---|
| Status | показать текущие настройки sshd_config (порт, auth, root login) |
| Disable password auth | PasswordAuthentication no — только ключи |
| Restrict root login | PermitRootLogin prohibit-password — root только по ключу |
| Change SSH port | сменить порт в sshd_config |
Все операции делают бэкап файла, проверяют конфиг через sshd -t перед перезагрузкой и автоматически восстанавливают бэкап при ошибке.
[!WARNING] Отключение парольной аутентификации заблокирует SSH-вход по паролю. Убедитесь, что SSH-ключ установлен перед применением.
🔒 Kernel hardening — хардение ядра
Записывает параметры безопасности в /etc/sysctl.d/99-mrcerber-hardening.conf и применяет через sysctl --system.
| Параметр | Назначение |
|---|---|
tcp_syncookies = 1 |
Защита от SYN-флуда |
accept_source_route = 0 |
Запрет IP source routing |
accept_redirects = 0 |
Запрет входящих ICMP-редиректов |
send_redirects = 0 |
Запрет исходящих ICMP-редиректов |
rp_filter = 1 |
Reverse path filtering (защита от IP-спуфинга) |
log_martians = 1 |
Логирование подозрительных пакетов |
ipv6 forwarding = 0 |
Отключение IPv6-форвардинга |
Операция идемпотентна: повторный запуск покажет предупреждение и запросит подтверждение перезаписи.
🛡️ UFW — управление файрволом
| Пункт | Действие |
|---|---|
| Status | ufw status verbose |
| Apply defaults | deny incoming / allow outgoing |
| Allow SSH | открыть 22/tcp |
| Allow HTTP+HTTPS | открыть 80 + 443 |
| Allow custom port | ввести порт и протокол (tcp / udp / both) |
| Allow from IP/CIDR | открыть порт только для конкретного IP или подсети |
| Delete rule | удалить правило по номеру |
| Enable / Disable | включить / выключить UFW |
| Reset | сбросить все правила (с подтверждением) |
🚫 Fail2ban — защита SSH
| Пункт | Действие |
|---|---|
| Install + enable | установить и запустить сервис |
| Configure SSH jail | записать /etc/fail2ban/jail.local |
| Status | статус сервиса + sshd jail |
| Unban IP | разбанить IP из sshd jail |
Конфигурация jail.local — VPS-уровень защиты:
[DEFAULT]
# Прогрессивные баны: каждый повтор × 24
bantime.increment = true
bantime.multiplier = 24
bantime.maxtime = 720h ; максимум 30 дней
bantime = 1h ; первый бан
findtime = 10m
maxretry = 3
backend = systemd
banaction = ufw
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
mode = aggressive ; ловит pre-auth флуд
[recidive]
enabled = true
bantime = 720h ; 30 дней для рецидивистов
findtime = 1d
maxretry = 5🐳 Panels — Docker и 1Panel
Docker — устанавливается через официальный скрипт get.docker.com. Перед запуском показывает URL источника и запрашивает подтверждение. Если Docker уже установлен — предлагает переустановку.
1Panel — современная веб-панель управления сервером с поддержкой Docker, сайтов, баз данных и мониторинга. Устанавливается через официальный инсталлятор.
⏰ Auto-reboot cron
Устанавливает скрипт Cron/Restart.sh как cron-задачу для автоматической перезагрузки при наличии ожидающих обновлений ядра.
- Скрипт копируется в
/usr/local/sbin/mrcerber-auto-reboot.sh - Cron-файл создаётся в
/etc/cron.d/mrcerber-auto-reboot(запуск каждый час) - Лог пишется в
/var/log/mrcerber-auto-reboot.log - Перезагружает только при наличии файла
/var/run/reboot-required
Через тот же пункт меню можно отключить cron или переустановить.
⚡ Scripts — утилиты
Подменю запускает скрипты из папки scripts/ рядом со скриптом.
| Скрипт | Описание |
|---|---|
| Cloudflare DNS Manager | Интерактивный менеджер A-записей Cloudflare (просмотр, добавление, редактирование, удаление) |
| Enable BBR | Включает TCP BBR + fq на уровне ядра для оптимизации пропускной способности |
Скрипты также можно запустить напрямую из папки scripts/. Подробности — в scripts/README.md.
🧹 APT cleanup
Освобождает место на диске:
apt-get autoremove— удаляет неиспользуемые зависимостиapt-get clean— очищает кэш загруженных пакетов
Выводит размер кэша до и после очистки.
⚡ Алиасы
Добавляет в /root/.bashrc (только если алиас ещё не существует):
# Быстрый тест производительности сервера
alias bench='wget -qO- bench.sh | bash'
# Геолокация текущего IP
alias geoip='bash <(wget -qO- https://github.com/vernette/ipregion/raw/master/ipregion.sh)'После установки применить в текущей сессии:
source ~/.bashrc| Механизм | Детали |
|---|---|
| Резервные копии | Каждый изменяемый файл бэкапится в /root/.mrcerber-bootstrap-backups/ с timestamp |
| Логирование | Все действия пишутся в /root/.mrcerber-bootstrap.log |
| Подтверждение | Деструктивные операции требуют явного [y/N] |
| Проверка OS | Предупреждение при запуске не на Ubuntu / Debian |
| Проверка сети | Ping-тест перед загрузкой файлов |
| Идемпотентность | Большинство операций безопасно запускать повторно |
| Блокировка параллельного запуска | flock предотвращает одновременный запуск двух копий скрипта |
| Валидация SSH-конфига | sshd -t проверяет конфиг перед перезагрузкой; при ошибке бэкап восстанавливается автоматически |
| Таймаут загрузки | curl --max-time 30 предотвращает зависание при медленном соединении |
| Проверка SSH-ключа | ssh-keygen -l валидирует публичный ключ перед записью в authorized_keys (TUI) |
| SHA256 для установщиков | Docker/1Panel: скачивается во временный файл, показывается хэш, запрашивается подтверждение (TUI) |
📄 Пример лога
[2025-01-06 12:00:01] OS check passed: Ubuntu 22.04.3 LTS
[2025-01-06 12:00:05] full_base_setup START
[2025-01-06 12:00:05] apt-get update
[2025-01-06 12:01:30] apt-get upgrade
[2025-01-06 12:02:10] install_base_packages
[2025-01-06 12:03:45] enable_auto_updates
[2025-01-06 12:03:46] full_base_setup END (221s)
[2025-01-06 12:05:10] install_custom_motd
[2025-01-06 12:05:11] disable_last_login
[2025-01-06 12:05:30] ufw allow 22/tcp
[2025-01-06 12:05:35] ufw enable
[2025-01-06 12:06:00] create_sudo_user deploy
[2025-01-06 12:06:01] ssh key added for deploy
[2025-01-06 12:06:30] setup_swap 2G
[2025-01-06 12:07:00] apply_sysctl_hardening
[2025-01-06 12:07:05] ssh_disable_password_auth
[2025-01-06 12:07:10] install_docker START
[2025-01-06 12:08:45] install_docker END
[2025-01-06 12:09:00] setup_auto_reboot_cron ENABLED
Server-Tools/
├── install.sh # Классическая версия (read/case меню)
├── install-tui.sh # TUI-версия с gum и выбором языка EN/RU
├── get-tui.sh # Bootstrap: скачать и запустить TUI одной командой
├── lib/
│ ├── lang.sh # Строки EN + RU, функция choose_language
│ ├── ui.sh # gum-обёртки: header, confirm, pause, spin
│ ├── utils.sh # Общие утилиты, валидаторы, backup
│ ├── system.sh # APT, swap, sudo, aliases, cron, hardening
│ ├── motd.sh # MOTD install/restore/preview
│ ├── ssh.sh # SSH настройки и подменю
│ ├── ufw.sh # UFW правила и подменю
│ ├── fail2ban.sh # Fail2ban и подменю
│ ├── docker.sh # Docker и 1Panel (с SHA256)
│ └── scripts.sh # Cloudflare DNS, BBR
├── 99-mrcerber # Скрипт кастомного MOTD
├── logo.txt # ASCII-арт логотип для MOTD
├── README.md # Документация
├── Cron/
│ └── Restart.sh # Скрипт автоматической перезагрузки (cron)
└── scripts/
├── cf_dns_manager.sh # Менеджер DNS-записей Cloudflare
├── enable_bbr.sh # Включение TCP BBR
└── README.md # Документация скриптов
Сделано с ❤️ MrCerber
