From 2f1fa03509f07d7c38d3c2f2f59c564e483f4375 Mon Sep 17 00:00:00 2001 From: smolkik-code Date: Mon, 12 Jan 2026 19:19:39 +0700 Subject: [PATCH] v.1.0.3 --- ib.sh | 229 ++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 160 insertions(+), 69 deletions(-) diff --git a/ib.sh b/ib.sh index c56da33..23696da 100644 --- a/ib.sh +++ b/ib.sh @@ -17,98 +17,189 @@ pause(){ # --- ПРОВЕРКИ --- check_other_users() { - # Считаем пользователей с UID >= 1000 (обычные пользователи) USER_COUNT=$(awk -F: '$3 >= 1000 && $3 != 65534 {print $1}' /etc/passwd | wc -l) if [ "$USER_COUNT" -eq 0 ]; then - echo -e "${RED}ВНИМАНИЕ: В системе только root!${NC}" - echo -e "${YELLOW}Сначала создайте обычного пользователя (пункт 3), прежде чем отключать SSH пароли.${NC}" + echo -e "${RED}🚫 ОШИБКА: В системе ТОЛЬКО root пользователь!${NC}" + echo -e "${YELLOW}⚠️ НАСТРОЙКА SSH БЕЗОПАСНОСТИ НЕВОЗМОЖНА!${NC}" + echo "" + echo -e "${GREEN}✅ РЕШЕНИЕ:${NC}" + echo " 1. Выберите пункт ${YELLOW}3${NC} — Создать пользователя" + echo " 2. Введите имя и SSH ключ" + echo " 3. Проверьте подключение по SSH ключу" + echo " 4. ТОЛЬКО ПОТОМ пункт ${YELLOW}4${NC} — Безопасность SSH" + echo "" + read -p "Вернуться в меню? (y/n): " BACK return 1 fi + echo -e "${GREEN}✅ Найдено пользователей: $USER_COUNT${NC}" return 0 } # --- ФУНКЦИИ --- -install_audit() { - echo -e "${GREEN}Установка и настройка аудита (auditd)...${NC}" - apt update && apt install -y auditd audispd-plugins - # Базовые правила аудита (логирование изменений в sudoers, passwd, и SSH) - cat > /etc/audit/rules.d/audit.rules << EOF --w /etc/sudoers -p wa -k scope --w /etc/passwd -p wa -k identity --w /etc/ssh/sshd_config -p wa -k sshd_config +install_audit_with_rotation() { + echo -e "${GREEN}🔒 Установка auditd с ротацией логов...${NC}" + apt update && apt install -y auditd audispd-plugins logrotate + + # Базовые правила аудита + cat > /etc/audit/rules.d/server-setup.rules << EOF +-w /etc/sudoers -p wa -k sudoers +-w /etc/passwd -p wa -k identity +-w /etc/group -p wa -k identity +-w /etc/ssh/sshd_config -p wa -k ssh_config +-a always,exit -F arch=b64 -S execve -k process_exec EOF - service auditd restart - echo "Аудит запущен. Просмотр логов: ausearch -k sshd_config" + + # Ротация auditd (8 файлов по 50MB) + cat >> /etc/audit/auditd.conf << EOF + +max_log_file = 50 +max_log_file_action = rotate +num_logs = 8 +space_left = 100 +space_left_action = rotate +EOF + + # Ротация через logrotate + cat > /etc/logrotate.d/auditd << EOF +/var/log/audit/audit.log { + weekly + rotate 12 + create 640 root root + postrotate + /bin/kill -HUP \`cat /var/run/auditd.pid 2> /dev/null\` 2> /dev/null || true + endscript +} +EOF + + systemctl restart auditd rsyslog + systemctl enable auditd + echo -e "${GREEN}✅ Аудит настроен. Логи: /var/log/audit/audit.log${NC}" + echo " Просмотр: ${YELLOW}ausearch -k ssh_config${NC}" +} + +create_user_full() { + echo -e "${GREEN}👤 Создание пользователя...${NC}" + read -p "Имя пользователя: " UNAME + + echo -e "${YELLOW}Выберите метод входа:${NC}" + echo "1) Только SSH ключ (рекомендуется)" + echo "2) Пароль + SSH ключ" + read -p "Выбор (1/2): " AUTH_METHOD + + # Создание пользователя + useradd -m -s /bin/bash "$UNAME" + usermod -aG sudo "$UNAME" + + if [ "$AUTH_METHOD" == "1" ]; then + echo -e "${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}" + else + read -s -p "Пароль: " PASS1 + echo + read -s -p "Повторите пароль: " PASS2 + echo + if [ "$PASS1" == "$PASS2" ]; then + echo "$UNAME:$PASS1" | chpasswd + echo -e "${GREEN}✅ Пароль установлен${NC}" + read -p "SSH ключ (опционально): " UKEY + if [ ! -z "$UKEY" ]; then + mkdir -p /home/$UNAME/.ssh + echo "$UKEY" > /home/$UNAME/.ssh/authorized_keys + fi + fi + fi + + # Sudo без пароля + chmod 700 /home/$UNAME/.ssh 2>/dev/null || true + chmod 600 /home/$UNAME/.ssh/authorized_keys 2>/dev/null || true + chown -R $UNAME:$UNAME /home/$UNAME/.ssh 2>/dev/null || true + echo "$UNAME ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$UNAME + chmod 440 /etc/sudoers.d/$UNAME + + echo -e "${GREEN}✅ Пользователь $UNAME готов!${NC}" } setup_ssh_security() { - if ! check_other_users; then pause; return; fi - - echo -e "${YELLOW}ВНИМАНИЕ: Сейчас будет произведена настройка безопасности SSH.${NC}" - read -p "Отключить вход по ПАРОЛЮ и оставить только КЛЮЧИ? (y/n): " SSH_CONFIRM + clear + echo -e "${RED}🔒 НАСТРОЙКА БЕЗОПАСНОСТИ SSH${NC}" - if [ "$SSH_CONFIRM" == "y" ]; then - SSHD_CONFIG="/etc/ssh/sshd_config" - cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak" - sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONFIG" - sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONFIG" - sshd -t && systemctl restart ssh - echo -e "${GREEN}SSH защищен. Вход под root и по паролю запрещен.${NC}" - else - echo "Настройка SSH отменена." + if ! check_other_users; then + echo -e "${RED}🚫 Операция отменена!${NC}" + pause + return fi -} - -install_openvpn_angristan() { - echo -e "${GREEN}Установка OpenVPN (by Angristan)...${NC}" - curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh - chmod +x openvpn-install.sh - ./openvpn-install.sh + + echo -e "${YELLOW}⚠️ ВНИМАНИЕ:${NC}" + echo " • Будет ${RED}ЗАПРЕЩЁН${NC} вход под root" + echo " • Будет ${RED}ЗАПРЕЩЁН${NC} вход по паролю" + echo " • Будет ${GREEN}РАЗРЕШЁН${NC} только SSH ключи" + echo "" + + read -p "ПРОДОЛЖИТЬ? (y/N): " CONFIRM + if [ "$CONFIRM" != "y" ]; then + echo "Отменено." + pause + return + fi + + SSHD_CONFIG="/etc/ssh/sshd_config" + cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak.$(date +%Y%m%d)" + + sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONFIG" + sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONFIG" + sed -i 's/^#*PubkeyAuthentication.*/PubkeyAuthentication yes/' "$SSHD_CONFIG" + + if sshd -t 2>/dev/null; then + systemctl restart ssh + echo -e "${GREEN}✅ SSH защищён!${NC}" + else + echo -e "${RED}❌ Ошибка в sshd_config! Восстановление...${NC}" + cp "${SSHD_CONFIG}.bak.$(date +%Y%m%d)" "$SSHD_CONFIG" + systemctl restart ssh + fi + pause } # --- МЕНЮ --- while true; do clear - echo "======================================" - echo " SERVER ULTIMATE SETUP v3.0 " - echo "======================================" - echo "1) Сменить Hostname" - echo "2) Настроить время и базу (mc, gdu...)" - echo "3) СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ (SSH Key + sudo)" - echo "4) БЕЗОПАСНОСТЬ SSH (Только после п.3!)" - echo "5) Аудит системы (auditd)" - echo "6) Установить Docker + Compose" - echo "7) Установить WireGuard" - echo "8) Установить OpenVPN (Angristan)" - echo "9) Мониторинг (Netdata/Glances)" - echo "10) Защита (Fail2Ban)" - echo "11) ОЧИСТКА: Удалить старые ядра" - echo "0) Выход" - echo "======================================" - read -p "Выберите пункт: " opt + echo "=============================================" + echo " 🚀 SERVER ULTIMATE SETUP v3.1 🚀 " + echo "=============================================" + echo "1) 📛 Сменить Hostname" + echo "2) ⏰ Время МСК + база (mc, htop, gdu)" + echo "3) 👤 ${GREEN}СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ${NC} (пароль/ключ)" + echo "4) 🔒 ${RED}БЕЗОПАСНОСТЬ SSH${NC} ${YELLOW}(только после 3!)${NC}" + echo "5) 📊 Аудит + ${GREEN}ротация логов${NC}" + echo "6) 🐳 Docker + Compose" + echo "7) 🌐 WireGuard" + echo "8) 🔐 OpenVPN (Angristan)" + echo "9) 📈 Мониторинг" + echo "10) 🛡️ Fail2Ban" + echo "11) 🧹 Очистка ядер" + echo "0) ❌ Выход" + echo "=============================================" + read -p "► " opt case $opt in - 1) hostnamectl set-hostname "$(read -p 'Name: ' name; echo $name)" ; systemctl restart systemd-hostnamed ; pause ;; - 2) timedatectl set-timezone Europe/Moscow ; apt update && apt install -y mc htop zip wget curl git net-tools gnupg2 ; pause ;; - 3) - read -p "Имя: " UNAME - read -p "SSH Key: " UKEY - useradd -m -s /bin/bash "$UNAME" - usermod -aG sudo "$UNAME" - mkdir -p /home/$UNAME/.ssh && echo "$UKEY" > /home/$UNAME/.ssh/authorized_keys - chown -R $UNAME:$UNAME /home/$UNAME/.ssh - echo "$UNAME ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$UNAME - echo -e "${GREEN}Пользователь $UNAME готов.${NC}" ; pause ;; - 4) setup_ssh_security ; pause ;; - 5) install_audit ; pause ;; - 6) curl -fsSL https://get.docker.com | sh ; apt install -y docker-compose-plugin ; pause ;; - 7) wget https://git.io/wireguard -O wg.sh && bash wg.sh ; pause ;; - 8) install_openvpn_angristan ; pause ;; - 9) apt install -y glances ; pause ;; - 10) apt install -y fail2ban ; systemctl enable --now fail2ban ; pause ;; - 11) apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1) -y ; apt autoremove -y ; pause ;; + 1) read -p "Имя хоста: " HN; hostnamectl set-hostname "$HN"; systemctl restart systemd-hostnamed; pause ;; + 2) timedatectl set-timezone Europe/Moscow; apt update -y && apt install -y mc htop zip wget curl git net-tools gnupg2; 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/bin/; pause ;; + 3) create_user_full ; pause ;; + 4) setup_ssh_security ;; + 5) install_audit_with_rotation ; pause ;; + 6) curl -fsSL https://get.docker.com | sh && apt install -y docker-compose-plugin; pause ;; + 7) curl -fsSL https://git.io/wireguard -o wg.sh && bash wg.sh; pause ;; + 8) curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh && chmod +x openvpn-install.sh && ./openvpn-install.sh; pause ;; + 9) apt install -y glances; pause ;; + 10) apt install -y fail2ban && systemctl enable --now fail2ban; pause ;; + 11) apt-get autoremove -y && apt-get autoclean -y && apt-get purge $(dpkg -l 'linux-*' | awk '/^ii/{ print $2}' | grep -E 'linux-image-[0-9]+' | grep -v $(uname -r | cut -d- -f1)) -y; pause ;; 0) break ;; + *) echo -e "${RED}❌ Неверный пункт!${NC}"; sleep 1 ;; esac done