This commit is contained in:
2026-01-12 19:19:39 +07:00
parent 5d3d59e1b2
commit 2f1fa03509

229
ib.sh
View File

@@ -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