initial commit
This commit is contained in:
366
01/01-k-server-initial-setup.00.sh
Executable file
366
01/01-k-server-initial-setup.00.sh
Executable file
@@ -0,0 +1,366 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# КОНФИГУРАЦИЯ И ФУНКЦИИ ДЛЯ ПЕРВОНАЧАЛЬНОЙ НАСТРОЙКИ СЕРВЕРА
|
||||
#===============================================================================
|
||||
# Этот файл подключается ко всем остальным скриптам через source (.)
|
||||
#
|
||||
# Структура файлов:
|
||||
# 00.sh - конфигурация и функции (этот файл)
|
||||
# 01.sh - базовая настройка (hostname, timezone, locale)
|
||||
# 02.sh - настройка сети (netplan)
|
||||
# 03.sh - обновление системы
|
||||
# 04.sh - установка базовых пакетов
|
||||
# 05.sh - создание администратора
|
||||
# 06.sh - настройка SSH
|
||||
# 07.sh - настройка firewall (nftables)
|
||||
# 08.sh - настройка Fail2ban
|
||||
# 09.sh - настройка swap
|
||||
# 99.sh - финальная проверка
|
||||
# all.sh - запуск всех шагов
|
||||
#===============================================================================
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# КОНФИГУРАЦИЯ
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# Параметры сервера (ИЗМЕНИТЕ ПОД ВАШИ НУЖДЫ!)
|
||||
SERVER_HOSTNAME='mygit'
|
||||
SERVER_DOMAIN='git.example.com'
|
||||
ADMIN_USER='admin'
|
||||
SERVER_TIMEZONE='Europe/Minsk'
|
||||
|
||||
# Сетевые интерфейсы
|
||||
IFACE_EXT='ens192'
|
||||
IFACE_INT='ens160'
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# НАСТРОЙКА СЕТИ (NETPLAN)
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# Внешний интерфейс (IFACE_EXT)
|
||||
# Используйте DHCP или статический IP
|
||||
|
||||
# DHCP для внешнего интерфейса (true/false)
|
||||
NET_EXT_DHCP=false
|
||||
|
||||
# Статический IP для внешнего интерфейса (если NET_EXT_DHCP=false)
|
||||
NET_EXT_ADDRESS='123.4.5.6/24' # IP-адрес с маской
|
||||
NET_EXT_GATEWAY='123.4.5.250' # Шлюз
|
||||
NET_EXT_DNS='8.8.8.8,8.8.4.4' # DNS-серверы (через запятую)
|
||||
|
||||
# Внутренний интерфейс (IFACE_INT)
|
||||
# DHCP для внутреннего интерфейса (true/false)
|
||||
NET_INT_DHCP=false
|
||||
|
||||
# Статический IP для внутреннего интерфейса (если NET_INT_DHCP=false)
|
||||
NET_INT_ADDRESS='10.10.10.30/24' # IP-адрес с маской
|
||||
# NET_INT_GATEWAY='' # Шлюз (обычно не нужен)
|
||||
# NET_INT_DNS='' # DNS (обычно не нужен)
|
||||
|
||||
# Лог-файл
|
||||
LOG_FILE="/var/log/server-setup.log"
|
||||
|
||||
# Цвета для вывода
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# БАЗОВЫЕ ФУНКЦИИ
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# Инициализация логирования
|
||||
init_log() {
|
||||
exec > >(tee -a "$LOG_FILE") 2>&1
|
||||
echo ""
|
||||
echo "==============================================================================="
|
||||
echo " Лог: $(date '+%Y-%m-%d %H:%M:%S')"
|
||||
echo " Скрипт: $(basename "$0")"
|
||||
echo "==============================================================================="
|
||||
}
|
||||
|
||||
# Заголовок секции
|
||||
print_header() {
|
||||
echo -e "\n${BLUE}================================================================${NC}"
|
||||
echo -e "${BLUE} $1${NC}"
|
||||
echo -e "${BLUE}================================================================${NC}\n"
|
||||
}
|
||||
|
||||
# Подзаголовок
|
||||
print_subheader() {
|
||||
echo -e "\n${CYAN}--- $1 ---${NC}\n"
|
||||
}
|
||||
|
||||
# Успешное выполнение
|
||||
print_success() {
|
||||
echo -e "${GREEN}[OK]${NC} $1"
|
||||
}
|
||||
|
||||
# Предупреждение
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
# Ошибка
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Информация
|
||||
print_info() {
|
||||
echo -e "${CYAN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# ФУНКЦИИ ПРОВЕРКИ
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# Проверка прав root
|
||||
check_root() {
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
print_error "Скрипт должен запускаться от root (sudo)"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Проверка ОС
|
||||
check_os() {
|
||||
if [[ ! -f /etc/os-release ]]; then
|
||||
print_error "Не удалось определить ОС"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! grep -q "Ubuntu 24" /etc/os-release; then
|
||||
print_warning "Этот скрипт тестировался на Ubuntu 24.04"
|
||||
else
|
||||
print_success "Ubuntu 24.04 подтверждена"
|
||||
fi
|
||||
}
|
||||
|
||||
# Проверка сетевых интерфейсов
|
||||
check_network_interfaces() {
|
||||
print_info "Сетевые интерфейсы:"
|
||||
ip -br addr show
|
||||
|
||||
echo ""
|
||||
|
||||
# Проверка внешнего интерфейса
|
||||
if ip link show "$IFACE_EXT" &>/dev/null; then
|
||||
print_success "Внешний интерфейс $IFACE_EXT найден"
|
||||
else
|
||||
print_error "Внешний интерфейс $IFACE_EXT не найден"
|
||||
print_info "Доступные интерфейсы:"
|
||||
ip link show | grep -E "^[0-9]:" | awk '{print " " $2}' | tr -d ':'
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Проверка внутреннего интерфейса
|
||||
if ip link show "$IFACE_INT" &>/dev/null; then
|
||||
print_success "Внутренний интерфейс $IFACE_INT найден"
|
||||
else
|
||||
print_warning "Внутренний интерфейс $IFACE_INT не найден"
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Проверка установленного пакета
|
||||
is_installed() {
|
||||
dpkg -l "$1" 2>/dev/null | grep -q "^ii"
|
||||
}
|
||||
|
||||
# Проверка существования пользователя
|
||||
user_exists() {
|
||||
id "$1" &>/dev/null
|
||||
}
|
||||
|
||||
# Проверка запущенного сервиса
|
||||
service_running() {
|
||||
systemctl is-active --quiet "$1"
|
||||
}
|
||||
|
||||
# Проверка существования файла/директории
|
||||
path_exists() {
|
||||
[[ -e "$1" ]]
|
||||
}
|
||||
|
||||
# Проверка swap
|
||||
has_swap() {
|
||||
swapon --show | grep -q .
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# ФУНКЦИИ УСТАНОВКИ
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# Установка пакетов с проверкой
|
||||
install_packages() {
|
||||
local packages=("$@")
|
||||
local to_install=()
|
||||
|
||||
for pkg in "${packages[@]}"; do
|
||||
if ! is_installed "$pkg"; then
|
||||
to_install+=("$pkg")
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#to_install[@]} -eq 0 ]]; then
|
||||
print_success "Все пакеты уже установлены"
|
||||
return 0
|
||||
fi
|
||||
|
||||
print_info "Установка пакетов: ${to_install[*]}"
|
||||
apt install -y "${to_install[@]}"
|
||||
print_success "Пакеты установлены"
|
||||
}
|
||||
|
||||
# Создание директории с правами
|
||||
create_dir() {
|
||||
local path="$1"
|
||||
local owner="${2:-root:root}"
|
||||
local mode="${3:-755}"
|
||||
|
||||
if [[ ! -d "$path" ]]; then
|
||||
mkdir -p "$path"
|
||||
print_success "Создана директория: $path"
|
||||
else
|
||||
print_info "Директория существует: $path"
|
||||
fi
|
||||
|
||||
chown "$owner" "$path"
|
||||
chmod "$mode" "$path"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# ФУНКЦИИ ПОЛЬЗОВАТЕЛЬСКОГО ВВОДА
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# Запрос подтверждения
|
||||
confirm() {
|
||||
local prompt="${1:-Продолжить?}"
|
||||
local default="${2:-N}"
|
||||
|
||||
local response
|
||||
read -p "$prompt [$default]: " response
|
||||
response=${response:-$default}
|
||||
|
||||
[[ "$response" =~ ^[Yy]$ ]]
|
||||
}
|
||||
|
||||
# Запрос ввода с значением по умолчанию
|
||||
prompt_input() {
|
||||
local prompt="$1"
|
||||
local default="$2"
|
||||
local var_name="$3"
|
||||
|
||||
local response
|
||||
read -p "$prompt [$default]: " response
|
||||
response=${response:-$default}
|
||||
|
||||
eval "$var_name='$response'"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# ФУНКЦИИ КОНФИГУРАЦИИ
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# Установка hostname
|
||||
set_hostname() {
|
||||
local hostname="$1"
|
||||
local domain="$2"
|
||||
|
||||
hostnamectl set-hostname "$hostname"
|
||||
|
||||
# Добавить в /etc/hosts если нет
|
||||
if ! grep -q "$hostname" /etc/hosts; then
|
||||
echo "127.0.1.1 $hostname.$domain $hostname" >> /etc/hosts
|
||||
fi
|
||||
|
||||
print_success "Hostname установлен: $hostname"
|
||||
}
|
||||
|
||||
# Установка timezone
|
||||
set_timezone() {
|
||||
local timezone="$1"
|
||||
timedatectl set-timezone "$timezone"
|
||||
print_success "Timezone установлен: $timezone"
|
||||
}
|
||||
|
||||
# Установка локали
|
||||
set_locale() {
|
||||
local locale="${1:-en_US.UTF-8}"
|
||||
localectl set-locale LANG="$locale"
|
||||
locale-gen "$locale" 2>/dev/null || true
|
||||
print_success "Локаль установлена: $locale"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# ФУНКЦИИ SSH
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# Создание SSH-директории для пользователя
|
||||
setup_ssh_dir() {
|
||||
local user="$1"
|
||||
local home_dir
|
||||
|
||||
home_dir=$(getent passwd "$user" | cut -d: -f6)
|
||||
|
||||
mkdir -p "$home_dir/.ssh"
|
||||
chmod 700 "$home_dir/.ssh"
|
||||
touch "$home_dir/.ssh/authorized_keys"
|
||||
chmod 600 "$home_dir/.ssh/authorized_keys"
|
||||
chown -R "$user:$user" "$home_dir/.ssh"
|
||||
|
||||
print_success "SSH-директория создана: $home_dir/.ssh"
|
||||
}
|
||||
|
||||
# Генерация пароля
|
||||
generate_password() {
|
||||
openssl rand -base64 12
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# ФУНКЦИИ FIREWALL
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# Проверка nftables
|
||||
check_nftables() {
|
||||
if command -v nft &>/dev/null; then
|
||||
print_success "nftables установлен"
|
||||
return 0
|
||||
else
|
||||
print_warning "nftables не установлен"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Показать текущие правила nftables
|
||||
show_nftables_rules() {
|
||||
if nft list ruleset &>/dev/null; then
|
||||
nft list ruleset
|
||||
else
|
||||
print_info "Нет активных правил nftables"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# ИНИЦИАЛИЗАЦИЯ ПРИ ПОДКЛЮЧЕНИИ
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# Показать текущую конфигурацию
|
||||
show_config() {
|
||||
echo ""
|
||||
echo -e "${CYAN}Текущая конфигурация:${NC}"
|
||||
echo " Hostname: $SERVER_HOSTNAME"
|
||||
echo " Domain: $SERVER_DOMAIN"
|
||||
echo " Admin user: $ADMIN_USER"
|
||||
echo " Timezone: $SERVER_TIMEZONE"
|
||||
echo ""
|
||||
echo -e "${CYAN}Сетевые интерфейсы:${NC}"
|
||||
echo " IFACE_EXT: $IFACE_EXT ($( [[ "$NET_EXT_DHCP" == "true" ]] && echo "DHCP" || echo "$NET_EXT_ADDRESS"))"
|
||||
echo " IFACE_INT: $IFACE_INT ($( [[ "$NET_INT_DHCP" == "true" ]] && echo "DHCP" || echo "$NET_INT_ADDRESS"))"
|
||||
echo ""
|
||||
}
|
||||
63
01/01-k-server-initial-setup.01.sh
Executable file
63
01/01-k-server-initial-setup.01.sh
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 1: БАЗОВАЯ НАСТРОЙКА СИСТЕМЫ
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 01-k-server-initial-setup.01.sh
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 1: БАЗОВАЯ НАСТРОЙКА СИСТЕМЫ"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 1.1 Проверка ОС
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка операционной системы"
|
||||
check_os
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 1.2 Установка hostname
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Установка hostname"
|
||||
|
||||
CURRENT_HOSTNAME=$(hostname)
|
||||
print_info "Текущий hostname: $CURRENT_HOSTNAME"
|
||||
|
||||
if [[ "$CURRENT_HOSTNAME" == "$SERVER_HOSTNAME" ]]; then
|
||||
print_success "Hostname уже установлен: $SERVER_HOSTNAME"
|
||||
else
|
||||
set_hostname "$SERVER_HOSTNAME" "$SERVER_DOMAIN"
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 1.3 Установка timezone
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Установка timezone"
|
||||
|
||||
CURRENT_TZ=$(timedatectl show --property=Timezone --value 2>/dev/null || echo "unknown")
|
||||
print_info "Текущий timezone: $CURRENT_TZ"
|
||||
|
||||
if [[ "$CURRENT_TZ" == "$SERVER_TIMEZONE" ]]; then
|
||||
print_success "Timezone уже установлен: $SERVER_TIMEZONE"
|
||||
else
|
||||
set_timezone "$SERVER_TIMEZONE"
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 1.4 Установка локали
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Настройка локали"
|
||||
|
||||
set_locale "en_US.UTF-8"
|
||||
|
||||
# Также добавляем русскую локаль (опционально)
|
||||
if ! locale -a | grep -q "ru_RU.utf8"; then
|
||||
print_info "Добавление русской локали..."
|
||||
locale-gen ru_RU.UTF-8 2>/dev/null || true
|
||||
fi
|
||||
|
||||
print_success "Шаг 1 завершён: Базовая настройка выполнена"
|
||||
168
01/01-k-server-initial-setup.02.sh
Executable file
168
01/01-k-server-initial-setup.02.sh
Executable file
@@ -0,0 +1,168 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 2: НАСТРОЙКА СЕТИ
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 01-k-server-initial-setup.02.sh
|
||||
#
|
||||
# Параметры сети настраиваются в файле 00.sh:
|
||||
# NET_EXT_DHCP, NET_EXT_ADDRESS, NET_EXT_GATEWAY, NET_EXT_DNS
|
||||
# NET_INT_DHCP, NET_INT_ADDRESS
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 2: НАСТРОЙКА СЕТИ"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 2.1 Проверка интерфейсов
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка сетевых интерфейсов"
|
||||
|
||||
check_network_interfaces
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 2.2 Установка netplan
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка netplan"
|
||||
|
||||
if is_installed netplan.io; then
|
||||
print_success "netplan.io установлен"
|
||||
else
|
||||
print_info "Установка netplan.io..."
|
||||
apt install -y netplan.io
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 2.3 Показать текущую конфигурацию сети
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Параметры сети из конфигурации"
|
||||
|
||||
echo " Внешний интерфейс ($IFACE_EXT):"
|
||||
if [[ "$NET_EXT_DHCP" == "true" ]]; then
|
||||
echo " Режим: DHCP"
|
||||
else
|
||||
echo " Режим: Статический IP"
|
||||
echo " Адрес: $NET_EXT_ADDRESS"
|
||||
echo " Шлюз: $NET_EXT_GATEWAY"
|
||||
echo " DNS: $NET_EXT_DNS"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo " Внутренний интерфейс ($IFACE_INT):"
|
||||
if [[ "$NET_INT_DHCP" == "true" ]]; then
|
||||
echo " Режим: DHCP"
|
||||
else
|
||||
echo " Режим: Статический IP"
|
||||
echo " Адрес: $NET_INT_ADDRESS"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 2.4 Создание конфигурации netplan
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Создание конфигурации netplan"
|
||||
|
||||
NETPLAN_FILE="/etc/netplan/01-netcfg.yaml"
|
||||
|
||||
# Проверка существующей конфигурации
|
||||
if [[ -f "$NETPLAN_FILE" ]]; then
|
||||
print_warning "Конфигурация netplan уже существует"
|
||||
read -p "Перезаписать? [y/N]: " REWRITE
|
||||
if [[ ! "$REWRITE" =~ ^[Yy]$ ]]; then
|
||||
print_info "Конфигурация оставлена без изменений"
|
||||
print_success "Шаг 2 завершён (пропуск)"
|
||||
exit 0
|
||||
fi
|
||||
# Backup
|
||||
cp "$NETPLAN_FILE" "${NETPLAN_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
fi
|
||||
|
||||
# Генерация конфигурации в зависимости от настроек
|
||||
{
|
||||
echo "# Netplan configuration for Git Server"
|
||||
echo "# Автоматически сгенерировано скриптом 01-k-server-initial-setup.02.sh"
|
||||
echo ""
|
||||
echo "network:"
|
||||
echo " version: 2"
|
||||
echo " renderer: networkd"
|
||||
echo " ethernets:"
|
||||
echo " ${IFACE_EXT}:"
|
||||
|
||||
if [[ "$NET_EXT_DHCP" == "true" ]]; then
|
||||
# DHCP для внешнего интерфейса
|
||||
echo " dhcp4: true"
|
||||
else
|
||||
# Статический IP для внешнего интерфейса
|
||||
echo " dhcp4: false"
|
||||
echo " addresses:"
|
||||
echo " - ${NET_EXT_ADDRESS}"
|
||||
echo " routes:"
|
||||
echo " - to: default"
|
||||
echo " via: ${NET_EXT_GATEWAY}"
|
||||
# DNS
|
||||
IFS=',' read -ra DNS_ARRAY <<< "$NET_EXT_DNS"
|
||||
echo " nameservers:"
|
||||
echo " addresses:"
|
||||
for dns in "${DNS_ARRAY[@]}"; do
|
||||
echo " - ${dns}"
|
||||
done
|
||||
fi
|
||||
|
||||
echo " ${IFACE_INT}:"
|
||||
|
||||
if [[ "$NET_INT_DHCP" == "true" ]]; then
|
||||
# DHCP для внутреннего интерфейса
|
||||
echo " dhcp4: true"
|
||||
else
|
||||
# Статический IP для внутреннего интерфейса
|
||||
echo " dhcp4: false"
|
||||
echo " addresses:"
|
||||
echo " - ${NET_INT_ADDRESS}"
|
||||
fi
|
||||
|
||||
} > "$NETPLAN_FILE"
|
||||
|
||||
print_success "Конфигурация netplan создана: $NETPLAN_FILE"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 2.5 Показать созданную конфигурацию
|
||||
#-------------------------------------------------------------------------------
|
||||
echo ""
|
||||
echo -e "${CYAN}Созданная конфигурация:${NC}"
|
||||
echo ""
|
||||
cat "$NETPLAN_FILE"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 2.6 Применение
|
||||
#-------------------------------------------------------------------------------
|
||||
echo ""
|
||||
print_warning "Внимание! Применение новой сетевой конфигурации может нарушить подключение."
|
||||
echo ""
|
||||
|
||||
read -p "Применить сетевую конфигурацию сейчас? [y/N]: " APPLY_NET
|
||||
|
||||
if [[ "$APPLY_NET" =~ ^[Yy]$ ]]; then
|
||||
print_info "Проверка конфигурации..."
|
||||
|
||||
# Попробовать netplan try с таймаутом (вернёт старую конфигурацию при проблемах)
|
||||
if netplan try --timeout 15 2>&1; then
|
||||
print_success "Сетевая конфигурация применена"
|
||||
else
|
||||
print_error "Ошибка в конфигурации netplan или прервано пользователем"
|
||||
print_info "Конфигурация не применена. Проверьте и исправьте $NETPLAN_FILE"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
print_warning "Конфигурация не применена"
|
||||
echo ""
|
||||
echo "Примените вручную после проверки:"
|
||||
echo " sudo netplan try --timeout 30"
|
||||
echo " # или"
|
||||
echo " sudo netplan apply"
|
||||
fi
|
||||
|
||||
print_success "Шаг 2 завершён: Сеть настроена"
|
||||
50
01/01-k-server-initial-setup.03.sh
Executable file
50
01/01-k-server-initial-setup.03.sh
Executable file
@@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 3: ОБНОВЛЕНИЕ СИСТЕМЫ
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 01-k-server-initial-setup.03.sh
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 3: ОБНОВЛЕНИЕ СИСТЕМЫ"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 3.1 Обновление списков пакетов
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Обновление списков пакетов"
|
||||
|
||||
apt update
|
||||
print_success "Списки пакетов обновлены"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 3.2 Обновление установленных пакетов
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Обновление установленных пакетов"
|
||||
|
||||
apt upgrade -y
|
||||
print_success "Пакеты обновлены"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 3.3 Обновление системы (dist-upgrade)
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Обновление системы (dist-upgrade)"
|
||||
|
||||
apt dist-upgrade -y
|
||||
print_success "Система обновлена"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 3.4 Очистка
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Очистка неиспользуемых пакетов"
|
||||
|
||||
apt autoremove -y
|
||||
apt autoclean
|
||||
|
||||
print_success "Очистка выполнена"
|
||||
|
||||
print_success "Шаг 3 завершён: Система обновлена"
|
||||
81
01/01-k-server-initial-setup.04.sh
Executable file
81
01/01-k-server-initial-setup.04.sh
Executable file
@@ -0,0 +1,81 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 4: УСТАНОВКА БАЗОВЫХ ПАКЕТОВ
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 01-k-server-initial-setup.04.sh
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 4: УСТАНОВКА БАЗОВЫХ ПАКЕТОВ"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 4.1 Системные утилиты
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Системные утилиты"
|
||||
|
||||
install_packages \
|
||||
vim \
|
||||
nano \
|
||||
curl \
|
||||
wget \
|
||||
git \
|
||||
htop \
|
||||
iotop \
|
||||
ncdu \
|
||||
tree \
|
||||
rsync \
|
||||
unzip \
|
||||
zip \
|
||||
tmux \
|
||||
screen \
|
||||
\
|
||||
open-vm-tools \
|
||||
less
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 4.2 Сеть и диагностика
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Сеть и диагностика"
|
||||
|
||||
install_packages \
|
||||
net-tools \
|
||||
dnsutils \
|
||||
iputils-ping \
|
||||
traceroute \
|
||||
mtr \
|
||||
tcpdump \
|
||||
ethtool
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 4.3 Безопасность
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Безопасность"
|
||||
|
||||
install_packages \
|
||||
nftables \
|
||||
fail2ban \
|
||||
openssl
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 4.4 Дополнительно
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Дополнительные пакеты"
|
||||
|
||||
install_packages \
|
||||
software-properties-common \
|
||||
apt-transport-https \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
lsb-release \
|
||||
\
|
||||
vim-tiny \
|
||||
logrotate \
|
||||
bash-completion \
|
||||
command-not-found
|
||||
|
||||
print_success "Шаг 4 завершён: Базовые пакеты установлены"
|
||||
84
01/01-k-server-initial-setup.05.sh
Executable file
84
01/01-k-server-initial-setup.05.sh
Executable file
@@ -0,0 +1,84 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 5: СОЗДАНИЕ АДМИНИСТРАТОРА
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 01-k-server-initial-setup.05.sh
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 5: СОЗДАНИЕ АДМИНИСТРАТОРА"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 5.1 Проверка существования пользователя
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка пользователя"
|
||||
|
||||
if user_exists "$ADMIN_USER"; then
|
||||
print_warning "Пользователь $ADMIN_USER уже существует"
|
||||
|
||||
# Проверка членства в sudo
|
||||
if groups "$ADMIN_USER" | grep -q sudo; then
|
||||
print_success "Пользователь уже в группе sudo"
|
||||
else
|
||||
print_info "Добавление в группу sudo..."
|
||||
usermod -aG sudo "$ADMIN_USER"
|
||||
print_success "Пользователь добавлен в sudo"
|
||||
fi
|
||||
else
|
||||
# Создание пользователя
|
||||
print_info "Создание пользователя $ADMIN_USER..."
|
||||
adduser --gecos "" --disabled-password "$ADMIN_USER"
|
||||
|
||||
# Добавление в группы
|
||||
usermod -aG sudo,adm,systemd-journal "$ADMIN_USER"
|
||||
|
||||
print_success "Пользователь $ADMIN_USER создан"
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 5.2 Установка пароля
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Пароль пользователя"
|
||||
|
||||
echo ""
|
||||
print_warning "Установка пароля для $ADMIN_USER (для console доступа)"
|
||||
echo ""
|
||||
|
||||
read -p "Установить пароль сейчас? [Y/n]: " SET_PASS
|
||||
SET_PASS=${SET_PASS:-Y}
|
||||
|
||||
if [[ "$SET_PASS" =~ ^[Yy]$ ]]; then
|
||||
passwd "$ADMIN_USER"
|
||||
print_success "Пароль установлен"
|
||||
else
|
||||
print_info "Пароль можно установить позже: sudo passwd $ADMIN_USER"
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 5.3 Настройка SSH-директории
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Настройка SSH"
|
||||
|
||||
setup_ssh_dir "$ADMIN_USER"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 5.4 Информация
|
||||
#-------------------------------------------------------------------------------
|
||||
echo ""
|
||||
echo -e "${YELLOW}============================================================${NC}"
|
||||
echo -e "${YELLOW} ВАЖНО: Добавьте SSH-ключ для входа!${NC}"
|
||||
echo -e "${YELLOW}============================================================${NC}"
|
||||
echo ""
|
||||
echo " Добавьте ваш публичный SSH-ключ:"
|
||||
echo " sudo nano /home/$ADMIN_USER/.ssh/authorized_keys"
|
||||
echo ""
|
||||
echo " Или командой:"
|
||||
echo " echo 'ssh-ed25519 AAAA...' | sudo tee /home/$ADMIN_USER/.ssh/authorized_keys"
|
||||
echo ""
|
||||
|
||||
print_success "Шаг 5 завершён: Администратор создан"
|
||||
141
01/01-k-server-initial-setup.06.sh
Executable file
141
01/01-k-server-initial-setup.06.sh
Executable file
@@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 6: НАСТРОЙКА SSH
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 01-k-server-initial-setup.06.sh
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 6: НАСТРОЙКА SSH"
|
||||
|
||||
SSH_CONFIG="/etc/ssh/sshd_config"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 6.1 Проверка SSH-сервиса
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка SSH"
|
||||
|
||||
if service_running sshd || service_running ssh; then
|
||||
print_success "SSH-сервер запущен"
|
||||
else
|
||||
print_warning "SSH-сервер не запущен"
|
||||
print_info "Установка OpenSSH..."
|
||||
apt install -y openssh-server
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 6.2 Backup конфигурации
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Резервная копия"
|
||||
|
||||
if [[ -f "$SSH_CONFIG" ]]; then
|
||||
cp "$SSH_CONFIG" "${SSH_CONFIG}.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
print_success "Backup создан"
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 6.3 Создание новой конфигурации
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Создание конфигурации"
|
||||
|
||||
cat > "$SSH_CONFIG" << 'EOF'
|
||||
# SSH Server Configuration - Ubuntu 24.04
|
||||
# АВТОРИЗАЦИЯ ТОЛЬКО ПО КЛЮЧАМ
|
||||
|
||||
# Сетевые настройки
|
||||
Port 22
|
||||
AddressFamily any
|
||||
ListenAddress 0.0.0.0
|
||||
ListenAddress ::
|
||||
|
||||
# Ключи хоста
|
||||
HostKey /etc/ssh/ssh_host_rsa_key
|
||||
HostKey /etc/ssh/ssh_host_ecdsa_key
|
||||
HostKey /etc/ssh/ssh_host_ed25519_key
|
||||
|
||||
# Аутентификация - ТОЛЬКО КЛЮЧИ
|
||||
PermitRootLogin prohibit-password
|
||||
PubkeyAuthentication yes
|
||||
AuthorizedKeysFile .ssh/authorized_keys
|
||||
|
||||
# ОТКЛЮЧИТЬ парольную аутентификацию
|
||||
PasswordAuthentication no
|
||||
PermitEmptyPasswords no
|
||||
KbdInteractiveAuthentication no
|
||||
ChallengeResponseAuthentication no
|
||||
UsePAM no
|
||||
|
||||
# Безопасность сессий
|
||||
X11Forwarding no
|
||||
AllowAgentForwarding yes
|
||||
AllowTcpForwarding no
|
||||
PermitTunnel no
|
||||
PermitUserEnvironment no
|
||||
|
||||
# Логирование
|
||||
SyslogFacility AUTH
|
||||
LogLevel VERBOSE
|
||||
|
||||
# Таймауты
|
||||
LoginGraceTime 30
|
||||
ClientAliveInterval 300
|
||||
ClientAliveCountMax 2
|
||||
MaxAuthTries 3
|
||||
MaxSessions 5
|
||||
|
||||
# Криптография (современные алгоритмы)
|
||||
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
|
||||
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
|
||||
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
|
||||
|
||||
# Разрешённые пользователи (раскомментируйте и настройте)
|
||||
AllowUsers admin git komisar
|
||||
|
||||
# SFTP подсистема
|
||||
Subsystem sftp /usr/lib/openssh/sftp-server
|
||||
EOF
|
||||
|
||||
print_success "SSH конфигурация создана"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 6.4 Проверка конфигурации
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка конфигурации"
|
||||
|
||||
if sshd -t; then
|
||||
print_success "Конфигурация SSH валидна"
|
||||
else
|
||||
print_error "Ошибка в конфигурации SSH!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 6.5 Перезапуск SSH
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Перезапуск SSH"
|
||||
|
||||
systemctl restart sshd 2>/dev/null || systemctl restart ssh
|
||||
systemctl enable sshd 2>/dev/null || systemctl enable ssh
|
||||
|
||||
print_success "SSH перезапущен"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 6.6 Предупреждение
|
||||
#-------------------------------------------------------------------------------
|
||||
echo ""
|
||||
echo -e "${YELLOW}============================================================${NC}"
|
||||
echo -e "${YELLOW} ВАЖНО: Парольная авторизация ОТКЛЮЧЕНА!${NC}"
|
||||
echo -e "${YELLOW}============================================================${NC}"
|
||||
echo ""
|
||||
echo " Убедитесь, что SSH-ключ добавлен для $ADMIN_USER:"
|
||||
echo " cat /home/$ADMIN_USER/.ssh/authorized_keys"
|
||||
echo ""
|
||||
echo " Проверьте вход с другой консоли ПЕРЕД закрытием текущей сессии!"
|
||||
echo ""
|
||||
|
||||
print_success "Шаг 6 завершён: SSH настроен (только ключи)"
|
||||
143
01/01-k-server-initial-setup.07.sh
Executable file
143
01/01-k-server-initial-setup.07.sh
Executable file
@@ -0,0 +1,143 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 7: НАСТРОЙКА FIREWALL (nftables)
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 01-k-server-initial-setup.07.sh
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 7: НАСТРОЙКА FIREWALL (nftables)"
|
||||
|
||||
NFT_CONF="/etc/nftables.conf"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 7.1 Проверка nftables
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка nftables"
|
||||
|
||||
if ! is_installed nftables; then
|
||||
print_info "Установка nftables..."
|
||||
apt install -y nftables
|
||||
fi
|
||||
|
||||
print_success "nftables установлен"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 7.2 Backup существующей конфигурации
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Резервная копия"
|
||||
|
||||
if [[ -f "$NFT_CONF" ]]; then
|
||||
cp "$NFT_CONF" "${NFT_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
print_success "Backup создан"
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 7.3 Создание конфигурации
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Создание конфигурации"
|
||||
|
||||
cat > "$NFT_CONF" << EOF
|
||||
#!/usr/sbin/nft -f
|
||||
|
||||
# Firewall для Git Server
|
||||
# $IFACE_EXT - внешний интерфейс (ограниченный доступ)
|
||||
# $IFACE_INT - внутренний интерфейс (доверенная зона)
|
||||
|
||||
flush ruleset
|
||||
|
||||
table inet filter {
|
||||
chain input {
|
||||
type filter hook input priority 0; policy drop;
|
||||
|
||||
# Разрешить loopback
|
||||
iif lo accept
|
||||
|
||||
# Установленные соединения
|
||||
ct state established,related accept
|
||||
|
||||
# Блокировать invalid пакеты
|
||||
ct state invalid drop
|
||||
|
||||
# ICMP (ограниченно)
|
||||
ip protocol icmp icmp type echo-request limit rate 1/second accept
|
||||
ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 1/second accept
|
||||
ip protocol icmp icmp type { destination-unreachable, time-exceeded } accept
|
||||
ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, time-exceeded } accept
|
||||
|
||||
# === ВНЕШНИЙ ИНТЕРФЕЙС ($IFACE_EXT) ===
|
||||
# SSH для администрирования
|
||||
iifname $IFACE_EXT tcp dport 22 accept
|
||||
# HTTP (для Let's Encrypt)
|
||||
iifname $IFACE_EXT tcp dport 80 accept
|
||||
# HTTPS
|
||||
iifname $IFACE_EXT tcp dport 443 accept
|
||||
|
||||
# === ВНУТРЕННИЙ ИНТЕРФЕЙС ($IFACE_INT) - доверенная зона ===
|
||||
iifname $IFACE_INT tcp dport 22 accept
|
||||
iifname $IFACE_INT tcp dport 80 accept
|
||||
iifname $IFACE_INT tcp dport 443 accept
|
||||
iifname $IFACE_INT tcp dport 3000 accept
|
||||
|
||||
# Логирование заблокированных (опционально)
|
||||
# log prefix "nft drop: " counter
|
||||
|
||||
# Счётчик отброшенных
|
||||
counter
|
||||
}
|
||||
|
||||
chain forward {
|
||||
type filter hook forward priority 0; policy drop;
|
||||
}
|
||||
|
||||
chain output {
|
||||
type filter hook output priority 0; policy accept;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
print_success "Конфигурация создана"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 7.4 Проверка синтаксиса
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка синтаксиса"
|
||||
|
||||
if nft -c -f "$NFT_CONF" 2>&1; then
|
||||
print_success "Синтаксис валиден"
|
||||
else
|
||||
print_error "Ошибка синтаксиса nftables"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 7.5 Применение
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Применение правил"
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}Внимание! После применения firewall могут быть заблокированы подключения.${NC}"
|
||||
echo ""
|
||||
|
||||
read -p "Применить правила firewall? [y/N]: " APPLY_FW
|
||||
|
||||
if [[ "$APPLY_FW" =~ ^[Yy]$ ]]; then
|
||||
nft -f "$NFT_CONF"
|
||||
systemctl enable nftables
|
||||
print_success "Firewall применён"
|
||||
|
||||
# Показать правила
|
||||
echo ""
|
||||
print_info "Активные правила:"
|
||||
nft list ruleset | head -40
|
||||
else
|
||||
print_warning "Правила не применены"
|
||||
print_info "Примените вручную: sudo nft -f $NFT_CONF"
|
||||
fi
|
||||
|
||||
print_success "Шаг 7 завершён: Firewall настроен"
|
||||
87
01/01-k-server-initial-setup.08.sh
Executable file
87
01/01-k-server-initial-setup.08.sh
Executable file
@@ -0,0 +1,87 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 8: НАСТРОЙКА FAIL2BAN
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 01-k-server-initial-setup.08.sh
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 8: НАСТРОЙКА FAIL2BAN"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 8.1 Проверка установки
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка fail2ban"
|
||||
|
||||
if ! is_installed fail2ban; then
|
||||
print_info "Установка fail2ban..."
|
||||
apt install -y fail2ban
|
||||
fi
|
||||
|
||||
print_success "fail2ban установлен"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 8.2 Создание конфигурации
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Создание конфигурации"
|
||||
|
||||
cat > /etc/fail2ban/jail.local << EOF
|
||||
# Fail2ban configuration for Git Server
|
||||
|
||||
[DEFAULT]
|
||||
# Время бана
|
||||
bantime = 1h
|
||||
# Время наблюдения
|
||||
findtime = 10m
|
||||
# Количество попыток
|
||||
maxretry = 3
|
||||
# Backend
|
||||
backend = systemd
|
||||
# Email для уведомлений (опционально)
|
||||
# destemail = admin@example.com
|
||||
# sendername = Fail2Ban
|
||||
|
||||
[sshd]
|
||||
enabled = true
|
||||
port = ssh
|
||||
filter = sshd
|
||||
logpath = /var/log/auth.log
|
||||
maxretry = 3
|
||||
bantime = 1h
|
||||
findtime = 10m
|
||||
EOF
|
||||
|
||||
print_success "Конфигурация создана"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 8.3 Запуск сервиса
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Запуск fail2ban"
|
||||
|
||||
systemctl enable fail2ban
|
||||
systemctl restart fail2ban
|
||||
|
||||
if service_running fail2ban; then
|
||||
print_success "fail2ban запущен"
|
||||
else
|
||||
print_error "fail2ban не запустился"
|
||||
systemctl status fail2ban --no-pager
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 8.4 Проверка статуса
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Статус fail2ban"
|
||||
|
||||
echo ""
|
||||
fail2ban-client status
|
||||
echo ""
|
||||
fail2ban-client status sshd 2>/dev/null || true
|
||||
|
||||
print_success "Шаг 8 завершён: Fail2ban настроен"
|
||||
104
01/01-k-server-initial-setup.09.sh
Executable file
104
01/01-k-server-initial-setup.09.sh
Executable file
@@ -0,0 +1,104 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 9: НАСТРОЙКА SWAP
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 01-k-server-initial-setup.09.sh
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 9: НАСТРОЙКА SWAP"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 9.1 Проверка существующего swap
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка swap"
|
||||
|
||||
if has_swap; then
|
||||
print_success "Swap уже настроен:"
|
||||
swapon --show
|
||||
free -h
|
||||
print_success "Шаг 9 завершён (пропуск)"
|
||||
exit 0
|
||||
else
|
||||
print_info "Swap не найден"
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 9.2 Запрос размера
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Создание swap"
|
||||
|
||||
echo ""
|
||||
echo "Рекомендуемый размер swap: 1-2GB"
|
||||
echo ""
|
||||
|
||||
read -p "Размер swap в GB [2]: " SWAP_SIZE
|
||||
SWAP_SIZE=${SWAP_SIZE:-2}
|
||||
|
||||
SWAP_FILE="/swapfile"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 9.3 Создание swap-файла
|
||||
#-------------------------------------------------------------------------------
|
||||
print_info "Создание swap-файла ${SWAP_SIZE}GB..."
|
||||
|
||||
# Проверка свободного места
|
||||
FREE_SPACE=$(df -BG / | tail -1 | awk '{print $4}' | tr -d 'G')
|
||||
if [[ "$FREE_SPACE" -lt "$SWAP_SIZE" ]]; then
|
||||
print_error "Недостаточно свободного места: ${FREE_SPACE}GB < ${SWAP_SIZE}GB"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Создание
|
||||
fallocate -l "${SWAP_SIZE}G" "$SWAP_FILE"
|
||||
chmod 600 "$SWAP_FILE"
|
||||
mkswap "$SWAP_FILE"
|
||||
swapon "$SWAP_FILE"
|
||||
|
||||
print_success "Swap создан"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 9.4 Добавление в fstab
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Настройка fstab"
|
||||
|
||||
if ! grep -q "$SWAP_FILE" /etc/fstab; then
|
||||
echo "$SWAP_FILE none swap sw 0 0" >> /etc/fstab
|
||||
print_success "Swap добавлен в fstab"
|
||||
else
|
||||
print_info "Swap уже в fstab"
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 9.5 Оптимизация swappiness
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Оптимизация swappiness"
|
||||
|
||||
# Установить swappiness = 10 (меньше использовать swap)
|
||||
SWAPPINESS=10
|
||||
sysctl vm.swappiness=$SWAPPINESS
|
||||
|
||||
if ! grep -q "vm.swappiness" /etc/sysctl.conf; then
|
||||
echo "vm.swappiness = $SWAPPINESS" >> /etc/sysctl.conf
|
||||
print_success "swappiness настроен"
|
||||
else
|
||||
sed -i "s/vm.swappiness.*/vm.swappiness = $SWAPPINESS/" /etc/sysctl.conf
|
||||
print_success "swappiness обновлён"
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# 9.6 Проверка
|
||||
#-------------------------------------------------------------------------------
|
||||
print_subheader "Проверка"
|
||||
|
||||
echo ""
|
||||
free -h
|
||||
echo ""
|
||||
swapon --show
|
||||
|
||||
print_success "Шаг 9 завершён: Swap настроен"
|
||||
161
01/01-k-server-initial-setup.99.sh
Executable file
161
01/01-k-server-initial-setup.99.sh
Executable file
@@ -0,0 +1,161 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ШАГ 99: ФИНАЛЬНАЯ ПРОВЕРКА
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 01-k-server-initial-setup.99.sh
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
print_header "ШАГ 99: ФИНАЛЬНАЯ ПРОВЕРКА"
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}================================================================${NC}"
|
||||
echo -e "${BLUE} СТАТУС СИСТЕМЫ${NC}"
|
||||
echo -e "${BLUE}================================================================${NC}"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Системная информация
|
||||
#-------------------------------------------------------------------------------
|
||||
echo ""
|
||||
echo "Система:"
|
||||
echo " Hostname: $(hostname)"
|
||||
echo " OS: $(lsb_release -d 2>/dev/null | cut -f2 || cat /etc/os-release | grep PRETTY_NAME | cut -d\" -f2)"
|
||||
echo " Kernel: $(uname -r)"
|
||||
echo " Uptime: $(uptime -p)"
|
||||
echo " Timezone: $(timedatectl show --property=Timezone --value 2>/dev/null || cat /etc/timezone)"
|
||||
echo ""
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Проверка сервисов
|
||||
#-------------------------------------------------------------------------------
|
||||
echo "Сервисы:"
|
||||
|
||||
# SSH
|
||||
if service_running sshd || service_running ssh; then
|
||||
echo -e " SSH: ${GREEN}OK${NC}"
|
||||
else
|
||||
echo -e " SSH: ${RED}FAILED${NC}"
|
||||
fi
|
||||
|
||||
# nftables
|
||||
if nft list table inet filter &>/dev/null; then
|
||||
echo -e " Firewall: ${GREEN}OK${NC}"
|
||||
else
|
||||
echo -e " Firewall: ${YELLOW}НЕ НАСТРОЕН${NC}"
|
||||
fi
|
||||
|
||||
# Fail2ban
|
||||
if service_running fail2ban; then
|
||||
echo -e " Fail2ban: ${GREEN}OK${NC}"
|
||||
else
|
||||
echo -e " Fail2ban: ${YELLOW}НЕ ЗАПУЩЕН${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Проверка пользователя
|
||||
#-------------------------------------------------------------------------------
|
||||
echo "Пользователь:"
|
||||
|
||||
if user_exists "$ADMIN_USER"; then
|
||||
echo -e " $ADMIN_USER: ${GREEN}OK${NC}"
|
||||
if groups "$ADMIN_USER" | grep -q sudo; then
|
||||
echo " Группы: $(groups $ADMIN_USER | cut -d: -f2)"
|
||||
fi
|
||||
if [[ -f "/home/$ADMIN_USER/.ssh/authorized_keys" ]]; then
|
||||
KEY_COUNT=$(wc -l < "/home/$ADMIN_USER/.ssh/authorized_keys")
|
||||
echo " SSH ключи: $KEY_COUNT"
|
||||
else
|
||||
echo -e " SSH ключи: ${YELLOW}НЕ ДОБАВЛЕНЫ${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e " $ADMIN_USER: ${RED}НЕ СОЗДАН${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Сеть
|
||||
#-------------------------------------------------------------------------------
|
||||
echo "Сеть:"
|
||||
echo " Интерфейсы:"
|
||||
|
||||
for iface in $IFACE_EXT $IFACE_INT; do
|
||||
if ip link show "$iface" &>/dev/null; then
|
||||
STATE=$(ip link show "$iface" | grep -oP 'state \K\w+')
|
||||
IP=$(ip -4 addr show "$iface" | grep -oP 'inet \K[\d.]+' | head -1)
|
||||
if [[ "$iface" == "$IFACE_EXT" ]]; then
|
||||
echo " $iface (внешний): $STATE, $IP"
|
||||
else
|
||||
echo " $iface (внутренний): $STATE, $IP"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Ресурсы
|
||||
#-------------------------------------------------------------------------------
|
||||
echo "Ресурсы:"
|
||||
|
||||
# Память
|
||||
MEM_TOTAL=$(free -h | grep Mem | awk '{print $2}')
|
||||
MEM_USED=$(free -h | grep Mem | awk '{print $3}')
|
||||
echo " Память: $MEM_USED / $MEM_TOTAL"
|
||||
|
||||
# Swap
|
||||
if has_swap; then
|
||||
SWAP_TOTAL=$(free -h | grep Swap | awk '{print $2}')
|
||||
SWAP_USED=$(free -h | grep Swap | awk '{print $3}')
|
||||
echo " Swap: $SWAP_USED / $SWAP_TOTAL"
|
||||
else
|
||||
echo " Swap: не настроен"
|
||||
fi
|
||||
|
||||
# Диск
|
||||
DISK_USAGE=$(df -h / | tail -1 | awk '{print $3 " / " $2 " (" $5 ")"}')
|
||||
echo " Диск /: $DISK_USAGE"
|
||||
|
||||
echo ""
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Firewall правила
|
||||
#-------------------------------------------------------------------------------
|
||||
echo "Firewall (открытые порты):"
|
||||
nft list table inet filter 2>/dev/null | grep "dport" | grep -oE "dport [0-9]+" | sort -u | awk '{print " " $2}' | tr '\n' ' '
|
||||
echo ""
|
||||
echo ""
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Итог
|
||||
#-------------------------------------------------------------------------------
|
||||
echo -e "${GREEN}================================================================${NC}"
|
||||
echo -e "${GREEN} ПЕРВОНАЧАЛЬНАЯ НАСТРОЙКА ЗАВЕРШЕНА${NC}"
|
||||
echo -e "${GREEN}================================================================${NC}"
|
||||
echo ""
|
||||
|
||||
if [[ ! -f "/home/$ADMIN_USER/.ssh/authorized_keys" ]] || [[ ! -s "/home/$ADMIN_USER/.ssh/authorized_keys" ]]; then
|
||||
echo -e "${YELLOW}============================================================${NC}"
|
||||
echo -e "${YELLOW} ВАЖНО: Добавьте SSH-ключ для $ADMIN_USER!${NC}"
|
||||
echo -e "${YELLOW}============================================================${NC}"
|
||||
echo ""
|
||||
echo " sudo nano /home/$ADMIN_USER/.ssh/authorized_keys"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo "Следующие шаги:"
|
||||
echo " 1. Добавьте SSH-ключ для $ADMIN_USER"
|
||||
echo " 2. Проверьте вход по SSH с другой консоли"
|
||||
echo " 3. Проверьте сетевую конфигурацию: /etc/netplan/01-netcfg.yaml"
|
||||
echo " 4. Перезагрузите сервер: reboot"
|
||||
echo " 5. Запустите скрипт развёртывания Git-сервера"
|
||||
echo ""
|
||||
echo "Лог установки: $LOG_FILE"
|
||||
echo ""
|
||||
151
01/01-k-server-initial-setup.all.sh
Executable file
151
01/01-k-server-initial-setup.all.sh
Executable file
@@ -0,0 +1,151 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# ГЛАВНЫЙ СКРИПТ: ЗАПУСК ВСЕХ ШАГОВ ПЕРВОНАЧАЛЬНОЙ НАСТРОЙКИ
|
||||
#===============================================================================
|
||||
# Запуск: sudo bash 01-k-server-initial-setup.all.sh [step_number]
|
||||
#
|
||||
# Без аргументов - запуск всех шагов по порядку
|
||||
# С номером шага - запуск конкретного шага
|
||||
#
|
||||
# Примеры:
|
||||
# sudo bash 01-k-server-initial-setup.all.sh # все шаги
|
||||
# sudo bash 01-k-server-initial-setup.all.sh 6 # только шаг 6 (SSH)
|
||||
# sudo bash 01-k-server-initial-setup.all.sh 6-8 # шаги с 6 по 8
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
init_log
|
||||
check_root
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Список шагов
|
||||
#-------------------------------------------------------------------------------
|
||||
declare -A STEPS=(
|
||||
["01"]="Базовая настройка (hostname, timezone)"
|
||||
["02"]="Настройка сети (netplan)"
|
||||
["03"]="Обновление системы"
|
||||
["04"]="Установка базовых пакетов"
|
||||
["05"]="Создание администратора"
|
||||
["06"]="Настройка SSH"
|
||||
["07"]="Настройка Firewall (nftables)"
|
||||
["08"]="Настройка Fail2ban"
|
||||
["09"]="Настройка Swap"
|
||||
["99"]="Финальная проверка"
|
||||
)
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Функция запуска шага
|
||||
#-------------------------------------------------------------------------------
|
||||
run_step() {
|
||||
local step="$1"
|
||||
local script="$SCRIPT_DIR/01-k-server-initial-setup.${step}.sh"
|
||||
|
||||
if [[ ! -f "$script" ]]; then
|
||||
print_error "Скрипт не найден: $script"
|
||||
return 1
|
||||
fi
|
||||
|
||||
print_header "ЗАПУСК ШАГА ${step}: ${STEPS[$step]}"
|
||||
|
||||
if bash "$script"; then
|
||||
print_success "Шаг $step завершён успешно"
|
||||
return 0
|
||||
else
|
||||
print_error "Шаг $step завершился с ошибкой"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Обработка аргументов
|
||||
#-------------------------------------------------------------------------------
|
||||
if [[ -n "$1" ]]; then
|
||||
# Запуск конкретного шага или диапазона
|
||||
|
||||
if [[ "$1" =~ ^([0-9]+)-([0-9]+)$ ]]; then
|
||||
# Диапазон шагов
|
||||
START_STEP="${BASH_REMATCH[1]}"
|
||||
END_STEP="${BASH_REMATCH[2]}"
|
||||
|
||||
print_info "Запуск шагов с $START_STEP по $END_STEP"
|
||||
|
||||
for step in $(echo "${!STEPS[@]}" | tr ' ' '\n' | sort); do
|
||||
if [[ "$step" -ge "$START_STEP" && "$step" -le "$END_STEP" ]]; then
|
||||
run_step "$step" || exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
elif [[ "$1" =~ ^[0-9]+$ ]]; then
|
||||
# Один шаг
|
||||
run_step "$1" || exit 1
|
||||
else
|
||||
print_error "Неверный аргумент: $1"
|
||||
echo "Использование: $0 [step_number|start-end]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
else
|
||||
# Запуск всех шагов
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}================================================================${NC}"
|
||||
echo -e "${BLUE} ПОЛНЫЙ ЗАПУСК ПЕРВОНАЧАЛЬНОЙ НАСТРОЙКИ СЕРВЕРА${NC}"
|
||||
echo -e "${BLUE}================================================================${NC}"
|
||||
echo ""
|
||||
|
||||
# Показать конфигурацию
|
||||
show_config
|
||||
|
||||
echo "Будут выполнены следующие шаги:"
|
||||
echo ""
|
||||
|
||||
for step in $(echo "${!STEPS[@]}" | tr ' ' '\n' | sort); do
|
||||
echo " [$step] ${STEPS[$step]}"
|
||||
done
|
||||
|
||||
echo ""
|
||||
read -p "Начать настройку? [y/N]: " CONFIRM
|
||||
|
||||
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
|
||||
echo "Отменено."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Запуск шагов
|
||||
FAILED_STEPS=()
|
||||
|
||||
for step in $(echo "${!STEPS[@]}" | tr ' ' '\n' | sort); do
|
||||
echo ""
|
||||
echo -e "${CYAN}============================================================${NC}"
|
||||
echo -e "${CYAN} ШАГ $step: ${STEPS[$step]}${NC}"
|
||||
echo -e "${CYAN}============================================================${NC}"
|
||||
|
||||
if run_step "$step"; then
|
||||
:
|
||||
else
|
||||
FAILED_STEPS+=("$step")
|
||||
echo ""
|
||||
read -p "Продолжить со следующим шагом? [y/N]: " CONTINUE
|
||||
if [[ ! "$CONTINUE" =~ ^[Yy]$ ]]; then
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Итог
|
||||
echo ""
|
||||
echo -e "${BLUE}================================================================${NC}"
|
||||
echo -e "${BLUE} ИТОГ ВЫПОЛНЕНИЯ${NC}"
|
||||
echo -e "${BLUE}================================================================${NC}"
|
||||
|
||||
if [[ ${#FAILED_STEPS[@]} -eq 0 ]]; then
|
||||
echo -e "${GREEN}Все шаги выполнены успешно!${NC}"
|
||||
else
|
||||
echo -e "${RED}Завершились с ошибкой: ${FAILED_STEPS[*]}${NC}"
|
||||
echo ""
|
||||
echo "Для повторного запуска:"
|
||||
echo " sudo bash $0 <номер_шага>"
|
||||
fi
|
||||
fi
|
||||
85
01/01-k-server-initial-setup.help.sh
Executable file
85
01/01-k-server-initial-setup.help.sh
Executable file
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# СПРАВКА ПО СКРИПТАМ ПЕРВОНАЧАЛЬНОЙ НАСТРОЙКИ СЕРВЕРА
|
||||
#===============================================================================
|
||||
# Запуск: bash 01-k-server-initial-setup.help.sh
|
||||
#===============================================================================
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
source "$SCRIPT_DIR/01-k-server-initial-setup.00.sh"
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}================================================================${NC}"
|
||||
echo -e "${BLUE} СПРАВКА ПО СКРИПТАМ ПЕРВОНАЧАЛЬНОЙ НАСТРОЙКИ${NC}"
|
||||
echo -e "${BLUE}================================================================${NC}"
|
||||
echo ""
|
||||
|
||||
echo "СТРУКТУРА ФАЙЛОВ:"
|
||||
echo ""
|
||||
echo " 00.sh - Конфигурация и функции (подключается автоматически)"
|
||||
echo " 01.sh - Базовая настройка (hostname, timezone, locale)"
|
||||
echo " 02.sh - Настройка сети (netplan)"
|
||||
echo " 03.sh - Обновление системы"
|
||||
echo " 04.sh - Установка базовых пакетов"
|
||||
echo " 05.sh - Создание администратора"
|
||||
echo " 06.sh - Настройка SSH (только ключи)"
|
||||
echo " 07.sh - Настройка Firewall (nftables)"
|
||||
echo " 08.sh - Настройка Fail2ban"
|
||||
echo " 09.sh - Настройка Swap"
|
||||
echo " 99.sh - Финальная проверка"
|
||||
echo " all.sh - Запуск всех шагов"
|
||||
echo ""
|
||||
|
||||
echo "ИСПОЛЬЗОВАНИЕ:"
|
||||
echo ""
|
||||
echo " Полный запуск:"
|
||||
echo " sudo bash 01-k-server-initial-setup.all.sh"
|
||||
echo ""
|
||||
echo " Конкретный шаг:"
|
||||
echo " sudo bash 01-k-server-initial-setup.06.sh # только SSH"
|
||||
echo ""
|
||||
echo " Диапазон шагов:"
|
||||
echo " sudo bash 01-k-server-initial-setup.all.sh 6-8 # SSH, Firewall, Fail2ban"
|
||||
echo ""
|
||||
|
||||
echo "ВАЖНЫЕ МОМЕНТЫ:"
|
||||
echo ""
|
||||
echo " 1. Сначала отредактируйте 00.sh - укажите свои параметры:"
|
||||
echo " SERVER_HOSTNAME, SERVER_DOMAIN, ADMIN_USER, SERVER_TIMEZONE,"
|
||||
echo " IFACE_EXT, IFACE_INT"
|
||||
echo ""
|
||||
echo " 2. После шага 06 (SSH) проверьте вход по ключу с ДРУГОЙ консоли!"
|
||||
echo " Парольная авторизация отключается."
|
||||
echo ""
|
||||
echo " 3. После завершения - добавьте SSH-ключ:"
|
||||
echo " sudo nano /home/admin/.ssh/authorized_keys"
|
||||
echo ""
|
||||
|
||||
echo "КОНФИГУРАЦИЯ ПО УМОЛЧАНИЮ:"
|
||||
echo ""
|
||||
show_config
|
||||
|
||||
echo "ПОЛЕЗНЫЕ КОМАНДЫ:"
|
||||
echo ""
|
||||
echo " Статус SSH: systemctl status sshd"
|
||||
echo " Статус firewall: nft list ruleset"
|
||||
echo " Статус fail2ban: fail2ban-client status"
|
||||
echo " Лог установки: cat /var/log/server-setup.log"
|
||||
echo ""
|
||||
|
||||
echo "УСТРАНЕНИЕ ПРОБЛЕМ:"
|
||||
echo ""
|
||||
echo " Потерян доступ SSH:"
|
||||
echo " - Используйте console-доступ (IPMI, VNC провайдера)"
|
||||
echo " - Временно включите пароли в /etc/ssh/sshd_config:"
|
||||
echo " PasswordAuthentication yes"
|
||||
echo ""
|
||||
echo " Firewall блокирует:"
|
||||
echo " - Очистите правила: nft flush ruleset"
|
||||
echo " - Или временно разрешите всё:"
|
||||
echo " nft add rule inet filter input accept"
|
||||
echo ""
|
||||
echo " Сеть не работает:"
|
||||
echo " - Проверьте конфигурацию: cat /etc/netplan/01-netcfg.yaml"
|
||||
echo " - Примените: netplan apply"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user