From ca0c66687a0f416acadb611f50010371b176f109 Mon Sep 17 00:00:00 2001 From: smolkik-code Date: Mon, 12 Jan 2026 20:19:49 +0700 Subject: [PATCH] v.1.2.1 --- ib.sh | 92 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 45 insertions(+), 47 deletions(-) diff --git a/ib.sh b/ib.sh index 278267d..28a88fa 100644 --- a/ib.sh +++ b/ib.sh @@ -1,8 +1,8 @@ #!/bin/bash # ============================================================================= -# УНИВЕРСАЛЬНЫЙ СЕРВЕРНЫЙ КОМБАЙН v1.2 -# Ubuntu/Debian/AlmaLinux/Rocky/CentOS/Fedora + Unattended Upgrades +# 🌍 УНИВЕРСАЛЬНЫЙ СЕРВЕРНЫЙ КОМБАЙН v5.1 +# Ubuntu/Debian/AlmaLinux/Rocky/CentOS/Fedora + Unattended Upgrades (ФИКС цветов) # ============================================================================= GREEN='\033[0;32m' @@ -12,15 +12,13 @@ BLUE='\033[0;34m' PURPLE='\033[0;35m' NC='\033[0m' -# Глобальные переменные OS_ID="" OS_VERSION="" PKG_MGR="" SSH_SERVICE="" if [ "$EUID" -ne 0 ]; then - echo -e "${RED}🚫 Запустите от root!${NC}" + echo "🚫 Запустите от root!" exit 1 fi -# --- ДЕТЕКЦИЯ ОС --- detect_os() { if [ -f /etc/os-release ]; then . /etc/os-release @@ -41,15 +39,14 @@ detect_os() { SSH_SERVICE="sshd" DOCKER_CMD="dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin" ;; - *) echo -e "${RED}❌ Неподдерживаемая ОС: $OS_ID${NC}"; exit 1 ;; + *) echo "❌ Неподдерживаемая ОС: $OS_ID"; exit 1 ;; esac - echo -e "${BLUE}🖥️ ОС: ${OS_ID}${NC} | Пакеты: ${PKG_MGR} | SSH: ${SSH_SERVICE}" + echo "🖥️ ОС: $OS_ID | Пакеты: $PKG_MGR | SSH: $SSH_SERVICE" } -# --- УТИЛИТЫ --- pause(){ read -p " Нажмите [Enter]..." fackEnterKey; } -pkg_install() { echo -e "${PURPLE}📦 Установка: $@${NC}"; $PKG_MGR update -y && $PKG_MGR install -y "$@"; } +pkg_install() { echo "📦 Установка: $@"; $PKG_MGR update -y && $PKG_MGR install -y "$@"; } service_restart() { if command -v systemctl >/dev/null; then systemctl restart "$1" @@ -61,7 +58,7 @@ service_enable() { if command -v systemctl >/dev/null; then systemctl enable --now "$1" else - service "$1" start && chkconfig "$1" on + service "$1" start && chkconfig "$1" on 2>/dev/null || true fi } @@ -69,10 +66,9 @@ check_other_users() { awk -F: '$3 >= 1000 && $3 != 65534 {print $1}' /etc/passwd | wc -l } -# --- ФУНКЦИИ --- setup_timezone_interactive() { clear - echo -e "${GREEN}🌍 ЧАСОВОЙ ПОЯС${NC}" + echo "${GREEN}🌍 ЧАСОВОЙ ПОЯС${NC}" echo "1) Europe/Moscow 2) Europe/Kiev 3) Asia/Almaty" echo "4) Asia/Yekaterinburg 5) Asia/Novosibirsk 6) Europe/Berlin" echo "7) America/New_York 8) Asia/Tokyo 0) Ручной ввод" @@ -85,29 +81,28 @@ setup_timezone_interactive() { 5) TZ="Asia/Novosibirsk";; 6) TZ="Europe/Berlin";; 7) TZ="America/New_York";; 8) TZ="Asia/Tokyo";; 0) read -p "Зона (ex: Europe/Moscow): " TZ;; - *) echo -e "${RED}Неверный выбор${NC}"; pause; return;; + *) echo "Неверный выбор"; pause; return;; esac timedatectl set-timezone "$TZ" 2>/dev/null && timedatectl set-ntp true 2>/dev/null - echo -e "${GREEN}✅ $TZ | $(date)${NC}" + echo "${GREEN}✅ $TZ | $(date)${NC}" pause } install_base_pkgs() { - echo -e "${GREEN}📦 БАЗОВЫЕ ПАКЕТЫ${NC}" + echo "${GREEN}📦 БАЗОВЫЕ ПАКЕТЫ${NC}" case $PKG_MGR in apt) pkg_install mc htop zip wget curl git net-tools gnupg2 unzip ;; dnf) pkg_install mc htop zip wget curl git net-tools gnupg2 unzip ;; esac - # gdu для всех curl -L "https://github.com/dundee/gdu/releases/latest/download/gdu_linux_amd64.tgz" | tar xz chmod +x gdu_linux_amd64 && mv gdu_linux_amd64 /usr/local/bin/ - echo -e "${GREEN}✅ gdu установлен${NC}" + echo "${GREEN}✅ gdu установлен${NC}" } create_user_full() { - echo -e "${GREEN}👤 СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ${NC}" + echo "${GREEN}👤 СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ${NC}" read -p "Имя: " UNAME echo "1) Только SSH ключ 🔑 2) Пароль + SSH 🔐" read -p "► " AUTH_METHOD @@ -116,17 +111,17 @@ create_user_full() { usermod -aG wheel,sudo "$UNAME" 2>/dev/null || usermod -aG sudo "$UNAME" if [ "$AUTH_METHOD" == "1" ]; then - echo -e "${GREEN}🔑 SSH ПУБЛИЧНЫЙ КЛЮЧ:${NC}" + echo "${GREEN}🔑 SSH ПУБЛИЧНЫЙ КЛЮЧ:${NC}" read -p "> " UKEY mkdir -p /home/$UNAME/.ssh echo "$UKEY" > /home/$UNAME/.ssh/authorized_keys passwd -l "$UNAME" - echo -e "${GREEN}✅ Только SSH ключ${NC}" + echo "${GREEN}✅ Только SSH ключ${NC}" else read -s -p "🔐 Пароль: " PASS1; echo read -s -p "Повторить: " PASS2; echo [ "$PASS1" = "$PASS2" ] && echo "$UNAME:$PASS1" | chpasswd - echo -e "${GREEN}✅ Пароль установлен${NC}" + echo "${GREEN}✅ Пароль установлен${NC}" read -p "🔑 SSH ключ (опционально): " UKEY [ -n "$UKEY" ] && echo "$UKEY" > /home/$UNAME/.ssh/authorized_keys fi @@ -137,25 +132,25 @@ create_user_full() { echo "$UNAME ALL=(ALL) NOPASSWD: ALL" > "/etc/sudoers.d/${UNAME}" chmod 440 "/etc/sudoers.d/${UNAME}" - echo -e "${GREEN}✅ $UNAME готов (sudo без пароля)${NC}" + echo "${GREEN}✅ $UNAME готов (sudo без пароля)${NC}" pause } setup_ssh_security() { clear - echo -e "${RED}🔒 НАСТРОЙКА SSH БЕЗОПАСНОСТИ${NC}" + echo "${RED}🔒 НАСТРОЙКА SSH БЕЗОПАСНОСТИ${NC}" USER_COUNT=$(check_other_users) if [ "$USER_COUNT" -eq 0 ]; then - echo -e "${RED}🚫 ОШИБКА: Только root!${NC}" - echo -e "${YELLOW}✅ Сначала пункт 3 → Создать пользователя${NC}" + echo "${RED}🚫 ОШИБКА: Только root!${NC}" + echo "${YELLOW}✅ Сначала пункт 3 → Создать пользователя${NC}" pause; return fi - echo -e "${YELLOW}⚠️ Будет изменено:${NC}" - echo " ${RED}✖${NC} Вход root" - echo " ${RED}✖${NC} Пароли" - echo " ${GREEN}✔${NC} Только SSH ключи" + echo "${YELLOW}⚠️ Будет изменено:${NC}" + echo " ✖ Вход root" + echo " ✖ Пароли" + echo " ✔ Только SSH ключи" echo "" read -p "ПРОДОЛЖИТЬ? (y/N): " CONFIRM @@ -170,9 +165,9 @@ setup_ssh_security() { if command -v "${SSH_SERVICE}" >/dev/null && "${SSH_SERVICE}" -t 2>/dev/null; then service_restart "$SSH_SERVICE" - echo -e "${GREEN}✅ SSH защищён!${NC}" + echo "${GREEN}✅ SSH защищён!${NC}" else - echo -e "${RED}❌ Ошибка конфига! Восстановление...${NC}" + echo "${RED}❌ Ошибка конфига! Восстановление...${NC}" cp "${SSHD_CONFIG}.bak.$(date +%Y%m%d_%H%M)" "$SSHD_CONFIG" service_restart "$SSH_SERVICE" fi @@ -180,10 +175,10 @@ setup_ssh_security() { } install_unattended_upgrades() { - echo -e "${GREEN}🔄 АВТООБНОВЛЕНИЯ БЕЗОПАСНОСТИ${NC}" + echo "${GREEN}🔄 АВТООБНОВЛЕНИЯ БЕЗОПАСНОСТИ${NC}" if [[ "$OS_ID" != "ubuntu" && "$OS_ID" != "debian" ]]; then - echo -e "${YELLOW}⚠️ Только Ubuntu/Debian (RHEL: dnf-automatic)${NC}" + echo "${YELLOW}⚠️ Только Ubuntu/Debian${NC}" pause; return fi @@ -207,14 +202,16 @@ EOF dpkg-reconfigure -plow unattended-upgrades service_enable unattended-upgrades - echo -e "${GREEN}✅ Ежедневные обновления безопасности${NC}" - echo " 📅 Логи: /var/log/unattended-upgrades/" - echo " ⚠️ Авто-ребут: ${RED}отключен${NC}" + echo "${GREEN}✅ НАСТРОЕНО:${NC}" + echo " 📅 Обновления: ежедневно" + echo " 🔒 Только: security + updates" + echo " 📋 Логи: /var/log/unattended-upgrades/" + echo " ⚠️ Авто-ребут: отключен" pause } install_audit_with_rotation() { - echo -e "${GREEN}🔒 АУДИТ + РОТАЦИЯ ЛОГОВ${NC}" + echo "${GREEN}🔒 АУДИТ + РОТАЦИЯ ЛОГОВ${NC}" case $PKG_MGR in apt) pkg_install auditd audispd-plugins logrotate ;; dnf) pkg_install audit policycoreutils-python-utils logrotate ;; @@ -235,14 +232,15 @@ EOF fi echo 'num_logs = 8' >> /etc/audit/auditd.conf - service_restart auditd; service_enable auditd - echo -e "${GREEN}✅ Аудит: /var/log/audit/audit.log${NC}" + service_restart auditd 2>/dev/null || true + service_enable auditd 2>/dev/null || true + echo "${GREEN}✅ Аудит: /var/log/audit/audit.log${NC}" pause } status_all() { clear - echo -e "${GREEN}📊 СТАТУС СИСТЕМЫ${NC}" + echo "${GREEN}📊 СТАТУС СИСТЕМЫ${NC}" echo "==============================================" echo "🔄 Unattended: $(systemctl is-active unattended-upgrades 2>/dev/null || echo 'Неактивен')" echo "🔒 SSH: $(systemctl is-active $SSH_SERVICE 2>/dev/null || echo 'Неактивен')" @@ -250,8 +248,8 @@ status_all() { echo "📊 Auditd: $(systemctl is-active auditd 2>/dev/null || echo 'Неактивен')" echo "🐳 Docker: $(systemctl is-active docker 2>/dev/null || echo 'Неактивен')" echo "==============================================" - echo "Пользователей: $(check_other_users)" - echo "Время: $(date)" + echo "👥 Пользователей: $(check_other_users)" + echo "📅 Время: $(date)" pause } @@ -261,14 +259,14 @@ detect_os while true; do clear echo "==============================================" - echo " 🚀 SERVER ULTIMATE v5.0 ($OS_ID $OS_VERSION) 🚀" + echo " 🚀 SERVER ULTIMATE v5.1 ($OS_ID $OS_VERSION) 🚀" echo "==============================================" echo "1) 📛 Hostname 2) 🌍 Часовой пояс + база" - echo "3) 👤 ${GREEN}Пользователь${NC} 4) 🔒 SSH безопасность" + echo "3) 👤 Пользователь 4) 🔒 SSH безопасность" echo "5) 📊 Аудит + ротация 6) 🐳 Docker + Compose" echo "7) 🌐 WireGuard 8) 🔐 OpenVPN (Angristan)" echo "9) 📈 Мониторинг 10) 🛡️ Fail2Ban" - echo "11) 🧹 Очистка пакетов 12) 🔄 ${GREEN}Автообновления${NC}" + echo "11) 🧹 Очистка пакетов 12) 🔄 Автообновления" echo "S) 📊 Статус всех сервисов 0) ❌ Выход" echo "==============================================" read -p "► " opt @@ -288,8 +286,8 @@ while true; do 12) install_unattended_upgrades ;; [Ss]) status_all ;; 0) break ;; - *) echo -e "${RED}❌ Неверный пункт!${NC}"; sleep 1 ;; + *) echo "❌ Неверный пункт!"; sleep 1 ;; esac done -echo -e "${GREEN}🎉 Настройка завершена! Сервер готов к работе!${NC}" +echo "🎉 Настройка завершена! Сервер готов к работе!"