19 Commits

Author SHA1 Message Date
97031d15f2 alpha 0.1 2026-01-17 13:12:11 +07:00
f41b83dff0 fix 2026-01-13 11:39:48 +07:00
d135b81c61 fix 2026-01-13 11:21:57 +07:00
8c9b451437 fix 2026-01-13 08:56:25 +07:00
f48effabb2 fix 2026-01-13 08:55:14 +07:00
3dd558c0f9 fix 2026-01-13 08:53:25 +07:00
3bcb4ffbb7 bugfix 2026-01-12 21:14:37 +07:00
e5dfc19f55 bugfix 2026-01-12 21:05:11 +07:00
e565b73e8b gugfix 2026-01-12 20:58:30 +07:00
c11638b178 обновление 2026-01-12 20:55:51 +07:00
65f46ad74d Readme.md update 2026-01-12 20:44:48 +07:00
ca36be6812 Readme.md 2026-01-12 20:42:00 +07:00
a257391a97 v.1.2.1 2026-01-12 20:41:14 +07:00
03ce460a4e v.1.2.1 2026-01-12 20:30:35 +07:00
ca0c66687a v.1.2.1 2026-01-12 20:19:49 +07:00
968f377e41 v.1.2 2026-01-12 20:13:46 +07:00
959afaddcf v.1.0.5 2026-01-12 20:08:31 +07:00
c67a2fe0e1 v.1.0.4 2026-01-12 19:24:19 +07:00
2f1fa03509 v.1.0.3 2026-01-12 19:19:39 +07:00
16 changed files with 420 additions and 114 deletions

124
Readme.md Normal file
View File

@@ -0,0 +1,124 @@
🚀 Server Ultimate Setup — Универсальный серверный комбайн
Единственный скрипт для полной автоматизации настройки любого Linux сервера!
Ubuntu - Debian - AlmaLinux - Rocky - CentOS - Fedora
✨ Что делает скрипт (15+ функций)
Категория Функция Описание
🔧 База Часовой пояс + пакеты mc, htop, gdu, curl, git, net-tools
👤 Пользователи Создание + SSH + sudo Только ключ / пароль+ключ, sudo NOPASSWD
🔒 SSH Hardening Отключение root/паролей, только ключи
📊 Аудит auditd + ротация 400MB логов, sudo/ssh/passwd мониторинг
🔄 Обновления Unattended Upgrades Ежедневные security updates
🐳 Docker + Compose Plugin Официальная установка
🌐 VPN WireGuard + OpenVPN Официальные скрипты (wg-quick, Angristan)
🛡️ Безопасность Fail2Ban Защита SSH от брутфорса
📈 Мониторинг glances + htop Реал-тайм статистика
🎯 Поддерживаемые ОС
✅ Debian-based ✅ RHEL-based
Ubuntu 20.04/22.04/24.04 AlmaLinux 8/9
Debian 11/12 Rocky Linux 8/9
CentOS Stream 8/9
Fedora 38+
🚀 Быстрый старт (30 секунд)
```bash
# 1. Скачать
curl -fsSL http://10.0.1.48:3010/smolkik_adm/scripts/src/branch/main/ib.sh -o ib.sh
# 2. Права
chmod +x ib.sh
# 3. Запуск
sudo ./ib.sh
````
📋 Интерактивное меню
```text
🚀 SERVER ULTIMATE v1.2.1 (ubuntu 24.04) 🚀
==============================================
1) 📛 Hostname 2) 🌍 Часовой пояс + база
3) 👤 Пользователь 4) 🔒 SSH безопасность
5) 📊 Аудит + ротация логов 6) 🐳 Docker + Compose
7) 🌐 WireGuard 8) 🔐 OpenVPN
9) 📈 Мониторинг 10) 🛡️ Fail2Ban
11) 🧹 Очистка 12) 🔄 Автообновления
S) 📊 Статус сервисов 0) ❌ Выход
````
🔐 Безопасность (НЕ закроет вас снаружи!)
```text
⚠️ ВНИМАНИЕ: Только root в системе!
✅ Сначала пункт 3 → Создать пользователя
````
Бэкап SSH перед изменениями (sshd_config.bak.20260112_2017)
Тест конфига sshd -t перед рестартом
Автовосстановление при ошибках
Проверка пользователей перед hardening
🛡️ Что устанавливается
1. Базовые утилиты
```text
mc htop zip wget curl git net-tools gnupg2 unzip gdu
```
2. Безопасность
```text- SSH: только ключи, no root
- auditd: 400MB ротация логов
- Fail2Ban: защита SSH
- Unattended-Upgrades: ежедневные security updates
```
3. DevOps
```text
Docker + docker compose v2
WireGuard (wg-quick)
OpenVPN (Angristan script)
```
```text
📊 СТАТУС СИСТЕМЫ
==============================================
🔄 Unattended: active 🛡️ Fail2Ban: active
🔒 SSH: active 📊 Auditd: active
🐳 Docker: active 👥 Пользователей: 2
📅 Время: Mon Jan 12 20:17:23 UTC 2026
```
🎨 Кросс-платформенность
Команда Ubuntu AlmaLinux
Пакеты apt dnf
SSH ssh sshd
Docker get.docker.com docker-ce.repo
Аудит auditd audit
📚 Полная документация
Создание пользователя
```text
1) Только SSH ключ (рекомендуется)
2) Пароль + SSH ключ
→ sudo NOPASSWD: ALL
```
Логи аудита
```text
ausearch -k ssh_config # Изменения SSH
ausearch -k sudoers # sudo команды
ausearch -k identity # Изменения /etc/passwd
````
Unattended Upgrades
```text
📅 Ежедневно в 6:00 UTC
🔒 Только security + updates
📋 /var/log/unattended-upgrades/
````
🐛 Частые проблемы и решения
```text
Проблема Решение
❌ "Кракозябры" Используйте printf вместо echo -e
❌ SSH недоступен Пункт 4 только после пункта 3!
❌ Docker не стартует systemctl status docker
````

7
bit/server-rollback Normal file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
BASE="/var/backups/server-ultimate"
select D in "$BASE"/*; do
cp -av "$D"/* /
systemctl restart sshd smbd fail2ban
break
done

2
config/main.conf Normal file
View File

@@ -0,0 +1,2 @@
BACKUP_DIR="/var/backups/server-ultimate"
LOG_FILE="/opt/server-ultimate/logs/server.log"

114
ib.sh
View File

@@ -1,114 +0,0 @@
#!/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() {
# Считаем пользователей с 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}"
return 1
fi
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
EOF
service auditd restart
echo "Аудит запущен. Просмотр логов: ausearch -k sshd_config"
}
setup_ssh_security() {
if ! check_other_users; then pause; return; fi
echo -e "${YELLOW}ВНИМАНИЕ: Сейчас будет произведена настройка безопасности SSH.${NC}"
read -p "Отключить вход по ПАРОЛЮ и оставить только КЛЮЧИ? (y/n): " SSH_CONFIRM
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 отменена."
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
}
# --- МЕНЮ ---
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
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 ;;
0) break ;;
esac
done

12
install.sh Normal file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
set -e
echo "🔧 Установка server-ultimate"
mkdir -p /opt/server-ultimate/{lib,config,logs}
cp -r ./* /opt/server-ultimate/
chmod +x /opt/server-ultimate/server.sh
ln -sf /opt/server-ultimate/server.sh /usr/local/bin/server
echo "✅ Установлено. Запуск: server"

23
lib/backup.sh Normal file
View File

@@ -0,0 +1,23 @@
source /opt/server-ultimate/config/main.conf
backup_create() {
local COMP="$1"; shift
local FILES="$@"
TS="$(date +%F_%H-%M-%S)"
DEST="$BACKUP_DIR/$COMP/$TS"
mkdir -p "$DEST"
for f in $FILES; do
[ -f "$f" ] && cp -a "$f" "$DEST/"
done
echo "$DEST"
}
backup_restore() {
local COMP="$1"
ls "$BACKUP_DIR/$COMP"
read -p "Snapshot: " TS
cp -av "$BACKUP_DIR/$COMP/$TS"/* /
}

4
lib/colors.sh Normal file
View File

@@ -0,0 +1,4 @@
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'

21
lib/fail2ban.sh Normal file
View File

@@ -0,0 +1,21 @@
setup_fail2ban() {
$PKG install -y fail2ban
CONF="/etc/fail2ban/jail.local"
SNAP=$(backup_create fail2ban "$CONF")
cat > "$CONF" <<EOF
[sshd]
enabled = true
bantime = 1d
findtime = 10m
maxretry = 3
EOF
fail2ban-client -t || {
cp "$SNAP/jail.local" "$CONF"
err "Fail2Ban rollback"
}
systemctl enable --now fail2ban
pause
}

21
lib/os-detect.sh Normal file
View File

@@ -0,0 +1,21 @@
detect_os() {
. /etc/os-release
OS_ID=$ID
OS_VERSION=$VERSION_ID
case $OS_ID in
ubuntu|debian)
PKG=apt
SSHD=sshd
;;
almalinux|rocky|centos|fedora)
PKG=dnf
SSHD=sshd
;;
*)
err "Неподдерживаемая ОС"
exit 1
esac
log "ОС: $OS_ID $OS_VERSION"
}

52
lib/samba.sh Normal file
View File

@@ -0,0 +1,52 @@
create_or_use_directory() {
read -p "Путь к папке: " DIR
if [ -d "$DIR" ]; then
log "Используем $DIR"
else
read -p "Создать $DIR ? (y/N): " Y
[[ "$Y" != "y" ]] && return 1
mkdir -p "$DIR"
chmod 770 "$DIR"
fi
echo "$DIR"
}
setup_samba() {
$PKG install -y samba
CONF="/etc/samba/smb.conf"
SNAP=$(backup_create samba "$CONF")
cat > "$CONF" <<EOF
[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
EOF
while true; do
read -p "Имя шары (Enter=выход): " NAME
[ -z "$NAME" ] && break
PATH=$(create_or_use_directory) || continue
read -p "Пользователи (guest или user1,user2): " USERS
if [[ "$USERS" == "guest" ]]; then
GUEST="yes"; VALID=""
else
GUEST="no"; VALID="valid users = $USERS"
fi
cat >> "$CONF" <<EOF
[$NAME]
path = $PATH
guest ok = $GUEST
writable = yes
$VALID
EOF
done
testparm || { cp "$SNAP/smb.conf" "$CONF"; }
systemctl restart smbd
pause
}

48
lib/ssh.sh Normal file
View File

@@ -0,0 +1,48 @@
secure_ssh() {
CONF="/etc/ssh/sshd_config"
PROFILE="/opt/server-ultimate/config/ssh-hardening.conf"
SNAP=$(backup_create ssh "$CONF")
echo ""
read -p "Отключить вход по паролю? (y/N): " DISABLE_PASS
if [[ "$DISABLE_PASS" == "y" ]]; then
confirm_ssh_key_works || {
err "Ключ не подтверждён. Операция отменена."
pause
return
}
fi
# Удаляем старые параметры
sed -i '/^PermitRootLogin/d
/^PasswordAuthentication/d
/^PubkeyAuthentication/d
/^MaxAuthTries/d
/^ClientAliveInterval/d
/^ClientAliveCountMax/d
/^X11Forwarding/d
/^AllowTcpForwarding/d
/^TCPKeepAlive/d
/^UseDNS/d' "$CONF"
# Применяем профиль
cat "$PROFILE" >> "$CONF"
# Пароль — по выбору
if [[ "$DISABLE_PASS" != "y" ]]; then
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' "$CONF"
fi
if sshd -t; then
systemctl restart sshd
log "SSH security профиль применён"
else
err "Ошибка SSH → rollback"
cp "$SNAP/sshd_config" "$CONF"
systemctl restart sshd
fi
pause
}

13
lib/sysctl.sh Normal file
View File

@@ -0,0 +1,13 @@
harden_sysctl() {
CONF="/etc/sysctl.d/99-hardening.conf"
SNAP=$(backup_create sysctl "$CONF")
cat > "$CONF" <<EOF
net.ipv4.conf.all.accept_redirects = 0
kernel.kptr_restrict = 2
fs.protected_symlinks = 1
EOF
sysctl --system || rm -f "$CONF"
pause
}

44
lib/users.sh Normal file
View File

@@ -0,0 +1,44 @@
create_user() {
clear
read -p "Имя пользователя: " USER
id "$USER" &>/dev/null && { err "Уже существует"; pause; return; }
echo "Способ входа:"
echo "1) 🔑 Только ключ"
echo "2) 🔐 Пароль + ключ"
echo "3) 🔐 Только пароль"
read -p "> " MODE
useradd -m -s /bin/bash "$USER"
mkdir -p /home/$USER/.ssh
chmod 700 /home/$USER/.ssh
case "$MODE" in
1)
read -p "Вставь публичный ключ: " KEY
echo "$KEY" > /home/$USER/.ssh/authorized_keys
chmod 600 /home/$USER/.ssh/authorized_keys
passwd -l "$USER"
;;
2)
passwd "$USER"
read -p "Публичный ключ (Enter чтобы пропустить): " KEY
[[ -n "$KEY" ]] && echo "$KEY" > /home/$USER/.ssh/authorized_keys
;;
3)
passwd "$USER"
;;
*)
userdel -r "$USER"
err "Отмена"
pause
return
;;
esac
chown -R $USER:$USER /home/$USER/.ssh
usermod -aG sudo "$USER"
log "Создан пользователь $USER"
pause
}

20
lib/utils.sh Normal file
View File

@@ -0,0 +1,20 @@
require_root() {
[[ $EUID -ne 0 ]] && { echo "❌ Запусти от root"; exit 1; }
}
log() {
echo "[+] $1"
echo "$(date) | $1" >> "$LOG_FILE"
}
warn() {
echo "[!] $1"
}
err() {
echo "[x] $1"
}
pause() {
read -p "Нажмите Enter..."
}

18
menu.sh Normal file
View File

@@ -0,0 +1,18 @@
main_menu() {
while true; do
clear
echo "🛡 SERVER-ULTIMATE v2.1"
echo "1) 👤 Создать пользователя"
echo "2) 🔒 Настроить SSH"
echo "3) ♻ Rollback конфигов"
echo "0) Выход"
read -p "> " C
case "$C" in
1) create_user ;;
2) secure_ssh ;;
3) backup_restore ssh ;;
0) exit ;;
esac
done
}

11
server.sh Normal file
View File

@@ -0,0 +1,11 @@
#!/bin/bash
BASE="/opt/server-ultimate"
source "$BASE/lib/utils.sh"
source "$BASE/lib/backup.sh"
source "$BASE/lib/users.sh"
source "$BASE/lib/ssh.sh"
source "$BASE/lib/menu.sh"
require_root
main_menu