Create setup.sh

This commit is contained in:
6ministers
2026-01-10 22:24:55 +03:00
parent ea0e882422
commit db737e572f
+230
View File
@@ -0,0 +1,230 @@
#!/bin/bash
# --- НАСТРОЙКИ ---
# Работаем только от root
if [[ $EUID -ne 0 ]]; then
echo "Этот скрипт должен быть запущен от имени root"
exit 1
fi
set -e
# --- ЦВЕТА ---
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
RED='\033[1;31m'
NC='\033[0m' # No Color
info() { echo -e "${GREEN}[INFO]${NC} $1"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
ask_yes_no() {
local prompt="$1"
while true; do
read -p "$prompt (y/n): " INPUT < /dev/tty
case "$INPUT" in
[yY]|[yY][eE][sS]) CONFIRM="y"; return 0 ;;
[nN]|[nN][oO]) CONFIRM="n"; return 1 ;;
*) echo -e "${YELLOW}Введите 'y' или 'n'.${NC}" ;;
esac
done
}
# --- 1. ОБНОВЛЕНИЕ СИСТЕМЫ ---
update_system() {
info "Обновление пакетов и установка зависимостей..."
export DEBIAN_FRONTEND=noninteractive
apt-get -qqy update
apt-get -qqy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get -y autoremove
# Установка утилит:
# putty-tools - для конвертации ключей
# jq, git, curl, wget - нужны для работы многих скриптов и Coolify
# htop - для мониторинга ресурсов
apt-get install -y putty-tools curl wget jq git htop
info "Система обновлена и базовые утилиты установлены."
}
# --- 2. НАСТРОЙКА SWAP (4GB) ---
configure_swap() {
info "--- ПРОВЕРКА SWAP ---"
# Проверяем, включен ли swap
if swapon --show | grep -q "partition\|file"; then
info "Swap уже активен. Пропуск создания."
elif [ -f /swapfile ]; then
warn "Файл /swapfile существует, но не активен. Пропуск во избежание конфликтов."
else
# OnlyOffice требователен к памяти, ставим 4GB для надежности
info "Создание Swap-файла размером 4GB..."
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# Добавляем в fstab для автозагрузки
if ! grep -q "/swapfile" /etc/fstab; then
echo '/swapfile none swap sw 0 0' >> /etc/fstab
info "Swap добавлен в автозагрузку."
fi
info "✅ Swap (4GB) успешно создан и подключен."
fi
}
# --- 3. ГЕНЕРАЦИЯ КЛЮЧЕЙ ---
generate_keys() {
info "--- ГЕНЕРАЦИЯ КЛЮЧЕЙ ---"
KEY_PATH="/root/coolify_root_key"
rm -f "${KEY_PATH}" "${KEY_PATH}.pub" "${KEY_PATH}.ppk"
info "Генерация Ed25519 ключа..."
ssh-keygen -t ed25519 -C "root-coolify-access" -f "$KEY_PATH" -N "" -q
info "Конвертация в PPK (для PuTTY)..."
puttygen "$KEY_PATH" -o "${KEY_PATH}.ppk" -O private
mkdir -p /root/.ssh
chmod 700 /root/.ssh
# Добавляем публичный ключ в authorized_keys
if ! grep -qf "${KEY_PATH}.pub" /root/.ssh/authorized_keys 2>/dev/null; then
cat "${KEY_PATH}.pub" >> /root/.ssh/authorized_keys
info "Ключ добавлен в authorized_keys."
fi
chmod 600 /root/.ssh/authorized_keys
# Сохраняем ключи в переменные перед удалением
PRIVATE_KEY_OPENSSH=$(cat "$KEY_PATH")
PRIVATE_KEY_PPK=$(cat "${KEY_PATH}.ppk")
# Удаляем ключи с диска (для безопасности)
rm -f "$KEY_PATH" "${KEY_PATH}.ppk" "${KEY_PATH}.pub"
info "Временные файлы ключей удалены с диска."
}
# --- 4. ФАЕРВОЛ ---
setup_firewall() {
info "--- НАСТРОЙКА UFW ---"
if ! command -v ufw &> /dev/null; then
apt-get install -y ufw
fi
ufw --force reset > /dev/null
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp comment 'SSH'
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw allow 443/udp comment 'HTTP/3'
echo "y" | ufw enable
info "✅ Порты 22, 80, 443 открыты."
}
# --- 5. SSH HARDENING (ROOT) ---
harden_ssh() {
info "--- НАСТРОЙКА SSH ---"
warn "ВНИМАНИЕ: Парольный вход будет отключен!"
SSHD_CONFIG="/etc/ssh/sshd_config"
cp $SSHD_CONFIG "${SSHD_CONFIG}.bak"
# Разрешаем root только по ключам, отключаем пароли
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin prohibit-password/' "$SSHD_CONFIG"
sed -i 's/^#\?PubkeyAuthentication .*/PubkeyAuthentication yes/' "$SSHD_CONFIG"
sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication no/' "$SSHD_CONFIG"
sed -i 's/^#\?ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' "$SSHD_CONFIG"
# UsePAM оставляем (или yes), полное отключение может ломать сессии на некоторых OS
systemctl restart ssh
info "✅ SSH настроен: Root разрешен (только ключи), пароли отключены."
}
# --- 6. DOCKER ---
install_docker() {
info "--- УСТАНОВКА DOCKER ---"
if ! command -v docker &> /dev/null; then
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
rm get-docker.sh
info "Docker установлен."
else
info "Docker уже установлен."
fi
}
# --- 7. FAIL2BAN ---
install_fail2ban() {
info "--- FAIL2BAN ---"
if ! command -v fail2ban-client &> /dev/null; then
apt-get install -y fail2ban
fi
cat <<EOF > /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
EOF
systemctl restart fail2ban
systemctl enable fail2ban
info "✅ Fail2Ban активен."
}
# --- ЗАПУСК ---
echo ""
echo "Этот скрипт подготовит сервер для Coolify/Docker."
echo "Будет настроен: Swap (4GB), Docker, UFW, SSH (Key-only), Fail2ban."
echo ""
ask_yes_no "Начать настройку?"
if [[ "$CONFIRM" == "n" ]]; then exit 0; fi
update_system
configure_swap
generate_keys
setup_firewall
install_docker
harden_ssh
install_fail2ban
# --- ОТЧЕТ ---
clear
echo ""
echo -e "${GREEN}==========================================================${NC}"
echo -e "${GREEN} НАСТРОЙКА ЗАВЕРШЕНА УСПЕШНО${NC}"
echo -e "${GREEN}==========================================================${NC}"
echo ""
echo "IP сервера: $(curl -s4 https://ifconfig.me)"
echo "Пользователь: root"
echo "Порт SSH: 22"
echo "Swap: Активен (4GB)"
echo "Docker: $(docker --version)"
echo ""
echo -e "${YELLOW}!!! СКОПИРУЙТЕ КЛЮЧИ ПРЯМО СЕЙЧАС !!!${NC}"
echo "Ключи УДАЛЕНЫ с диска сервера. Вы видите их в последний раз."
echo "Если вы закроете терминал без сохранения, доступ будет утерян."
echo ""
echo "----------------------------------------------------------"
echo "PRIVATE KEY (OpenSSH) - Вставьте этот ключ в Coolify:"
echo "----------------------------------------------------------"
echo "$PRIVATE_KEY_OPENSSH"
echo ""
echo "----------------------------------------------------------"
echo "PRIVATE KEY (PuTTY .ppk) - Если нужен доступ через Windows:"
echo "----------------------------------------------------------"
echo "$PRIVATE_KEY_PPK"
echo "----------------------------------------------------------"
echo ""
echo -e "${GREEN}Готово. Теперь добавьте этот сервер в Coolify, используя OpenSSH ключ.${NC}"
echo ""