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

206 lines
7.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
}
# --- ФУНКЦИИ ---
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