Files
scripts/ib.sh
2026-01-12 19:24:19 +07:00

238 lines
8.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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
}
setup_timezone_interactive() {
echo -e "${GREEN}🌍 Настройка часового пояса${NC}"
echo ""
echo "Популярные зоны:"
echo "1) Europe/Moscow (МСК)"
echo "2) Europe/Kiev (Киев)"
echo "3) Asia/Almaty (Алматы)"
echo "4) Asia/Yekaterinburg (Екатеринбург)"
echo "5) Asia/Novosibirsk (Новосибирск)"
echo "6) Europe/Berlin (Берлин)"
echo "7) America/New_York (Нью-Йорк)"
echo "8) Asia/Tokyo (Токио)"
echo "0) Ручной ввод"
echo ""
read -p "Выберите зону (0-8): " TZ_CHOICE
case $TZ_CHOICE in
1) TZ="Europe/Moscow" ;;
2) TZ="Europe/Kiev" ;;
3) TZ="Asia/Almaty" ;;
4) TZ="Asia/Yekaterinburg" ;;
5) TZ="Asia/Novosibirsk" ;;
6) TZ="Europe/Berlin" ;;
7) TZ="America/New_York" ;;
8) TZ="Asia/Tokyo" ;;
0)
echo "Доступные зоны: timedatectl list-timezones | grep"
read -p "Введите зону (например Europe/Moscow): " TZ
;;
*) echo "Неверный выбор!"; pause; return ;;
esac
timedatectl set-timezone "$TZ"
timedatectl set-ntp true
echo -e "${GREEN}✅ Часовой пояс: $TZ${NC}"
echo "📅 Текущее время: $(date)"
echo "🔄 NTP синхронизация включена"
}
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
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
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
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.2 🚀 "
echo "============================================="
echo "1) 📛 Сменить Hostname"
echo "2) 🌍 ${GREEN}ЧАСОВОЙ ПОЯС${NC} + база (mc, htop, gdu)"
echo "3) 👤 СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ (пароль/ключ)"
echo "4) 🔒 БЕЗОПАСНОСТЬ SSH (только после 3!)"
echo "5) 📊 Аудит + ротация логов"
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) setup_timezone_interactive; 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; pause ;;
0) break ;;
*) echo -e "${RED}❌ Неверный пункт!${NC}"; sleep 1 ;;
esac
done
echo -e "${GREEN}✅ Настройка завершена!${NC}"