#!/bin/bash GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' if [ "$EUID" -ne 0 ]; then echo -e "${RED}Запустите скрипт от имени root!${NC}" exit 1 fi pause(){ read -p "Нажмите [Enter], чтобы продолжить..." fackEnterKey } # --- ПРОВЕРКИ --- check_other_users() { 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}⚠️ НАСТРОЙКА 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_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 # Ротация 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() { clear echo -e "${RED}🔒 НАСТРОЙКА БЕЗОПАСНОСТИ SSH${NC}" if ! check_other_users; then echo -e "${RED}🚫 Операция отменена!${NC}" pause return fi 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.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) 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