Полное руководство по аудиту и защите серверов: от базовой настройки до мониторинга в 2026 году | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Полное руководство по аудиту и защите серверов: от базовой настройки до мониторинга в 2026 году

23 апреля 2026 12 мин. чтения

Это практическое руководство предоставляет DevOps инженерам и системным администраторам готовые инструменты для системного повышения безопасности серверов под управлением Linux и Windows Server. Вы получите пошаговый чек-лист базового харденинга, проверенные скрипты для автоматизации рутинных проверок, детальные инструкции по настройке SSH, RDP и брандмауэров, а также методики централизованного сбора логов и внедрения систем обнаружения вторжений. Все инструкции проверены на практике и актуальны для 2026 года, что позволяет немедленно применять их в рабочей среде, экономя время и снижая риски.

Быстрый доступ к готовым решениям:

Безопасность сервера строится на последовательных действиях: от установки последних обновлений и удаления неиспользуемых служб до настройки минимальных необходимых политик доступа. В этом руководстве мы разберем каждый этап, предоставив конкретные команды для Linux (apt, yum) и Windows Server 2026, сравним инструменты вроде iptables и firewalld, а также покажем, как автоматизировать аудит пользователей и привилегий с помощью bash и PowerShell скриптов. Это системный подход, который превращает разрозненные рекомендации в единый рабочий процесс.

Базовый харденинг серверов: фундамент безопасности в 2026

Начальная настройка безопасности определяет устойчивость всей системы к угрозам. Этот процесс включает обновление ПО, отключение лишних служб и установку базовых политик доступа. Последовательное выполнение чек-листа минимизирует риск упустить критический этап.

Чек-лист базовой безопасности: от первого включения до рабочего состояния

Выполните эти действия в указанном порядке после развертывания нового сервера или перед аудитом существующего.

1. Обновление системных пакетов и ядра

Установите последние стабильные обновления безопасности. Для систем на базе Debian/Ubuntu:

sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y

Для RHEL/CentOS/Rocky Linux с менеджером пакетов dnf:

sudo dnf update -y
sudo dnf autoremove -y

Для Windows Server 2026 откройте PowerShell с правами администратора и выполните:

Install-Module -Name PSWindowsUpdate -Force
Get-WindowsUpdate -Install -AcceptAll -AutoReboot

2. Анализ и отключение неиспользуемых служб

Лишние службы увеличивают поверхность атаки. Используйте этот bash-скрипт для анализа запущенных служб в Linux:

#!/bin/bash
echo "Службы в состоянии 'active (running)'"
systemctl list-units --type=service --state=running --no-pager --no-legend | awk '{print $1}'
echo ""
echo "Рекомендуется отключить (пример):"
echo "bluetooth.service cups.service avahi-daemon.service"

Для отключения и запрета автозапуска службы, например, bluetooth:

sudo systemctl stop bluetooth.service
sudo systemctl disable bluetooth.service
sudo systemctl mask bluetooth.service

В Windows Server используйте PowerShell для получения списка служб с типом запуска «Автоматически»:

Get-Service | Where-Object {$_.StartType -eq 'Automatic' -and $_.Status -eq 'Running'} | Select-Object Name, DisplayName

Измените тип запуска на «Вручную» для необязательных служб, например, «Fax»:

Set-Service -Name Fax -StartupType Manual

3. Настройка базовых политик паролей и блокировки учетных записей

В Linux отредактируйте файл /etc/security/pwquality.conf или используйте pam_pwquality. Минимальная настройка:

minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
minclass = 3

Установите политику блокировки после 5 неудачных попыток в /etc/security/faillock.conf:

deny = 5
unlock_time = 900

В Windows Server 2026 настройте политики через «Локальную политику безопасности» (secpol.msc) или PowerShell:

# Установка минимальной длины пароля в 12 символов
net accounts /minpwlen:12
# Блокировка учетной записи после 5 неудачных попыток на 15 минут
net accounts /lockoutthreshold:5 /lockoutduration:15 /lockoutwindow:15

Более глубокие настройки, включая интеграцию с LDAP для централизованного управления пользователями, рассмотрены в практическом руководстве по системному администрированию Linux.

Актуальность в 2026: что изменилось и на что обратить внимание

Подходы к безопасности эволюционируют. В 2026 году актуальны эти изменения:

  • Windows Server 2026 по умолчанию включает более строгие настройки Windows Defender Firewall с Advanced Security и усиливает требования к Network Level Authentication для RDP. Групповые политики безопасности получили новые шаблоны, упрощающие соответствие стандартам CIS Benchmarks.
  • Дистрибутивы Linux продолжают переход с iptables на nftables как базового бэкенда, но firewalld (который может использовать и iptables, и nftables) остается стандартным инструментом управления для RHEL, Rocky Linux и Fedora. В Ubuntu по умолчанию используется ufw, базирующийся на iptables.
  • Устаревшие практики, от которых следует отказаться:
    • Использование протокола SSH версии 1.
    • Разрешение аутентификации по паролю для root по SSH.
    • Использование слабых алгоритмов шифрования в SSH, таких как CBC-mode или устаревшие хэши (MD5, SHA-1). Современный sshd_config должен включать Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com.
    • Хранение паролей в открытом виде или с использованием устаревших хэш-функций. В Linux используйте yescrypt или sha512, в Windows - обязательное использование NTLMv2 и отключение LM-хэшей.

Контроль доступа: тонкая настройка SSH, RDP и политик

SSH и RDP - основные векторы удаленного управления, требующие особого внимания. Их некорректная настройка открывает прямой путь для компрометации.

SSH: от запрета root-логина до двухфакторной аутентификации

Отредактируйте основной файл конфигурации SSH-сервера: /etc/ssh/sshd_config. После любых изменений перезагрузите службу: sudo systemctl reload sshd.

Базовый уровень безопасности (минимум для любого сервера):

Port 22                    # Рассмотрите смену порта (например, 2222) для снижения шума от автоматических сканеров.
PermitRootLogin no         # Ключевая настройка. Запрещает прямой вход под root.
PubkeyAuthentication yes   # Включает аутентификацию по ключам.
PasswordAuthentication no  # Отключает аутентификацию по паролю. Убедитесь, что ключи добавлены, прежде чем применять!
PermitEmptyPasswords no
Protocol 2                 # Используйте только протокол 2.
X11Forwarding no           # Отключите, если не используете.
MaxAuthTries 3             # Ограничьте количество попыток аутентификации.
ClientAliveInterval 300
ClientAliveCountMax 2

Строгий уровень (для серверов с повышенными требованиями):

# Все настройки базового уровня +
AllowUsers user1 user2@192.168.1.0/24  # Разрешает подключение только указанным пользователям, возможно, с определенных IP.
DenyUsers baduser
LoginGraceTime 1m
UseDNS no                               # Ускоряет подключение и избегает проблем с резолвингом.
# Ограничение используемых шифров и MAC:
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

Настройка двухфакторной аутентификации (2FA) с Google Authenticator (PAM):

Установите библиотеку для Linux (на примере Ubuntu/Debian):

sudo apt install libpam-google-authenticator -y

Запустите утилиту для каждого пользователя, который будет использовать 2FA:

google-authenticator

Ответьте «y» на вопросы о создании токена, обновлении файла ~/.google_authenticator и разрешении нескольких попыток. Отредактируйте файл /etc/pam.d/sshd, добавив строку:

auth required pam_google_authenticator.so

В /etc/ssh/sshd_config убедитесь, что установлено:

ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

RDP в Windows Server 2026: безопасность без компромиссов для удобства

Безопасная настройка RDP требует комбинации политик и сетевых ограничений.

1. Включение Network Level Authentication (NLA)

NLA требует аутентификации до установки RDP-сессии, что защищает от некоторых типов атак. Включите через PowerShell:

Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name "UserAuthentication" -Value 1

Или через графический интерфейс: «Свойства системы» -> «Удаленный доступ» -> выбрать «Разрешить удаленные подключения к этому компьютеру» и отметить «Разрешать подключения только с компьютеров, на которых работает удаленный рабочий стол с проверкой подлинности на уровне сети».

2. Ограничение доступа через Windows Defender Firewall

Создайте правило, разрешающее RDP-трафик только с доверенных подсетей. Через PowerShell:

New-NetFirewallRule -DisplayName "RDP Restricted" -Direction Inbound -LocalPort 3389 -Protocol TCP -Action Allow -RemoteAddress 192.168.1.0/24,10.0.0.0/8

3. Использование Remote Desktop Gateway (RD Gateway)

RD Gateway позволяет туннелировать RDP-соединения через HTTPS (порт 443), что упрощает безопасный доступ извне без прямого открытия порта 3389 в интернет. Развертывание RD Gateway - отдельная роль в «Диспетчере серверов».

4. Настройка через групповые политики (GPO)

Для доменных сред используйте GPO. Ключевые параметры находятся в: Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Security. Установите «Требовать использование определенных настроек безопасности для удаленного рабочего стола (RDP)» в состояние «Включено» и выберите «SSL (TLS 1.2)».

Аудит пользователей и привилегий: кто что может делать?

Неконтролируемый рост числа учетных записей и размытие привилегий - типичные уязвимости. Регулярный аудит позволяет выявить неактивных пользователей, избыточные права и аномалии.

Linux: от `getent` до скриптов автоматического аудита

Базовые команды для ручной проверки:

  • Список всех пользователей: getent passwd или cat /etc/passwd.
  • Список всех групп: getent group.
  • Пользователи, которые могут выполнять команды от root: getent group sudo или getent group wheel (в зависимости от дистрибутива).

Bash-скрипт для расширенного аудита пользователей и привилегий:

#!/bin/bash
echo "=== Аудит пользователей и привилегий ==="
echo ""
echo "1. Пользователи с оболочкой (возможность входа):"
getent passwd | awk -F: '{ if ($7 != "/usr/sbin/nologin" && $7 != "/bin/false") print $1,"->",$7 }'
echo ""
echo "2. Пользователи в группе sudo/wheel:"
for group in sudo wheel; do
    if getent group $group &>/dev/null; then
        echo "Группа $group:"
        getent group $group | cut -d: -f4 | tr ',' '\n' | sort
        echo ""
    fi
done
echo "3. Файлы с SUID/SGID битами (потенциально опасные):"
find / -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null | head -20
echo ""
echo "4. Проверка прав на критичные каталоги (/etc, /bin, /sbin):"
for dir in /etc /bin /sbin; do
    perms=$(stat -c "%a %U:%G" $dir 2>/dev/null)
    echo "$dir: $perms"
done

Для анализа последней активности пользователей можно проверять логи (/var/log/auth.log, /var/log/secure) или использовать команду lastlog.

Windows Server: PowerShell как инструмент глубокой проверки

PowerShell предоставляет мощные cmdlets для аудита. Скрипт для экспорта информации о локальных пользователях и группах:

# Аудит локальных пользователей и групп Windows
$Report = @()

# 1. Получение всех локальных пользователей
$LocalUsers = Get-LocalUser
foreach ($User in $LocalUsers) {
    $LastLogon = if ($User.LastLogon) { $User.LastLogon.ToString("yyyy-MM-dd HH:mm:ss") } else { "Never" }
    $UserObj = [PSCustomObject]@{
        Name = $User.Name
        Enabled = $User.Enabled
        LastLogon = $LastLogon
        SID = $User.SID.Value
        MemberOf = (Get-LocalGroup | Where-Object { $_.Members -contains $User.SID.Value }).Name -join ", "
    }
    $Report += $UserObj
}

# 2. Вывод пользователей, входящих в административные группы
$AdminGroups = @("Administrators", "Remote Desktop Users", "Backup Operators")
echo "Пользователи в административных группах:"
foreach ($Group in $AdminGroups) {
    $Members = Get-LocalGroupMember -Group $Group -ErrorAction SilentlyContinue
    if ($Members) {
        echo "Группа: $Group"
        $Members | ForEach-Object { echo "  - $($_.Name)" }
    }
}

# 3. Экспорт отчета в CSV
$Report | Export-Csv -Path "C:\Audit\LocalUsers_Report_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8

Для анализа журналов безопасности (события входа, изменения привилегий) используйте cmdlet Get-WinEvent с фильтрами по ID событий.

Брандмауэры: iptables, firewalld и Windows Firewall в действии

Сетевой экран - обязательный элемент защиты, фильтрующий входящий и исходящий трафик на основе правил.

iptables vs firewalld: выбор и базовые правила для Linux

iptables - низкоуровневый инструмент, предоставляющий детальный контроль. firewalld - высокоуровневая демон-служба с концепцией зон и динамическим управлением, упрощающая администрирование.

Базовые правила iptables для защиты сервера:

# 1. Очистка существующих правил и установка политик по умолчанию DROP
sudo iptables -F
sudo iptables -X
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 2. Разрешение loopback-интерфейса
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

# 3. Разрешение установленных и связанных соединений
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 4. Разрешение SSH (например, на порту 22) для доверенной сети
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT

# 5. Разрешение HTTP/HTTPS для всех (если это веб-сервер)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 6. Лимитирование запросов на SSH для защиты от брутфорса
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

# 7. Сохранение правил (зависит от дистрибутива)
sudo iptables-save | sudo tee /etc/iptables/rules.v4

Эквивалентные действия в firewalld:

# Установка firewalld (если не установлен)
sudo dnf install firewalld -y  # или apt install firewalld
sudo systemctl enable --now firewalld

# Добавление служб в зону public (по умолчанию)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# Ограничение доступа SSH по IP (используя богатые правила)
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
sudo firewall-cmd --permanent --zone=public --remove-service=ssh  # Удаляем общее правило для ssh, если хотим только по IP

# Блокировка исходящего трафика на определенный порт (пример)
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p tcp --dport 25 -j DROP

# Применение изменений
sudo firewall-cmd --reload

Windows Firewall: от графического интерфейса до Advanced Security

Windows Defender Firewall с расширенными функциями безопасности - мощный встроенный инструмент.

Создание правил через PowerShell:

# 1. Разрешение RDP только с определенной подсети
New-NetFirewallRule -DisplayName "Allow RDP from Trusted LAN" -Direction Inbound -LocalPort 3389 -Protocol TCP -Action Allow -RemoteAddress 192.168.1.0/24

# 2. Запрет исходящих соединений на нестандартный порт (например, 4444)
New-NetFirewallRule -DisplayName "Block Outbound TCP 4444" -Direction Outbound -LocalPort 4444 -Protocol TCP -Action Block

# 3. Создание правила для конкретного приложения (например, для веб-сервера nginx.exe)
New-NetFirewallRule -DisplayName "Allow Nginx HTTP" -Direction Inbound -Program "C:\nginx\nginx.exe" -Action Allow

# 4. Просмотр всех активных правил
Get-NetFirewallRule -Enabled True | Select-Object DisplayName, Direction, Action | Format-Table -AutoSize

Логика лучших практик: применяйте принцип наименьших привилегий. Создавайте правила, разрешающие только необходимый для работы трафик. Для веб-серверов ограничьте входящие подключения к портам 80 и 443, для почтовых серверов - к портам 25, 465, 587, 993, 995. Регулярно проводите аудит правил, удаляя устаревшие. Для комплексного мониторинга сетевой активности и выявления аномалий полезно интегрировать логи брандмауэра в централизованную систему, как описано в разделе про сбор логов, или использовать готовые команды для анализа логов.

Готовые скрипты для автоматизации рутинных проверок безопасности

Автоматизация устраняет человеческий фактор и экономит время. Ниже представлены скрипты для регулярного запуска (например, по cron в Linux или через планировщик задач в Windows).

Bash-скрипт для комплексной проверки безопасности Linux-сервера:

#!/bin/bash
# comprehensive_security_audit.sh
LOG_FILE="/var/log/security_audit_$(date +%Y%m%d).log"
{
echo "=== Начало аудита безопасности $(date) ==="
echo ""
# 1. Проверка обновлений
if command -v apt &> /dev/null; then
    echo "[Проверка обновлений для Debian/Ubuntu]"
    apt update && apt list --upgradable 2>/dev/null | grep -v "Listing..."
elif command -v dnf &> /dev/null; then
    echo "[Проверка обновлений для RHEL/Fedora]"
    dnf check-update --quiet
fi
echo ""
# 2. Аудит пользователей (адаптация скрипта из раздела 3.1)
echo "[Аудит пользователей с оболочкой]"
getent passwd | awk -F: '{ if ($7 != "/usr/sbin/nologin" && $7 != "/bin/false") print $1 }'
echo ""
# 3. Проверка корректности настроек SSH
echo "[Проверка ключевых параметров sshd_config]"
for param in PermitRootLogin PasswordAuthentication Protocol; do
    value=$(grep -i "^$param" /etc/ssh/sshd_config 2>/dev/null | tail -1 | awk '{print $2}')
    echo "$param = $value"
done
echo ""
# 4. Проверка состояния брандмауэра
echo "[Проверка состояния firewalld/iptables]"
if systemctl is-active --quiet firewalld; then
    echo "Firewalld активен. Правила:"
    firewall-cmd --list-all
else
    echo "Firewalld не активен. Проверяем iptables:"
    iptables -L -n -v | head -30
fi
echo ""
echo "=== Аудит завершен ==="
} | tee -a "$LOG_FILE"

Настройте регулярный запуск, добавив в crontab (crontab -e):

# Ежедневный запуск в 3:00
0 3 * * * /root/scripts/comprehensive_security_audit.sh

PowerShell-скрипт для проверки безопасности Windows Server:

# Windows_Security_Check.ps1
$LogPath = "C:\Audit\SecurityCheck_$(Get-Date -Format 'yyyyMMdd').log"
Start-Transcript -Path $LogPath -Append

Write-Host "=== Аудит безопасности Windows Server ===" -ForegroundColor Cyan

# 1. Проверка последних установленных обновлений
Write-Host "`n[Последние 10 установленных обновлений]" -ForegroundColor Yellow
Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 HotFixID, InstalledOn, Description

# 2. Проверка учетных записей с истекшим паролем или отключенных
Write-Host "`n[Учетные записи, требующие внимания]" -ForegroundColor Yellow
Get-LocalUser | Where-Object { $_.PasswordExpires -lt (Get-Date) -or $_.Enabled -eq $false } | Format-Table Name, Enabled, PasswordExpires

# 3. Проверка правил брандмауэра для RDP
Write-Host "`n[Правила брандмауэра для RDP (порт 3389)]" -ForegroundColor Yellow
Get-NetFirewallRule -DisplayName "*RDP*" -ErrorAction SilentlyContinue | Get-NetFirewallAddressFilter | Select-Object DisplayName, RemoteAddress | Format-Table

# 4. Проверка служб с автоматическим запуском
Write-Host "`n[Службы с автозапуском, но остановленные]" -ForegroundColor Yellow
Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } | Select-Object Name, DisplayName, Status

Stop-Transcript
Write-Host "`nАудит записан в $LogPath" -ForegroundColor Green

Настройте выполнение через Планировщик заданий Windows.

Для масштабирования автоматизации на множество серверов и интеграции в процессы развертывания рассмотрите использование конфигурационных менеджеров, таких как Ansible, методы работы с которыми описаны в практическом гайде по автоматизации инфраструктуры.

Централизованный сбор логов и мониторинг: видеть всё

Логи с отдельных серверов бесполезны, если их не анализировать централизованно. Система сбора ло

Поделиться:
Сохранить гайд? В закладки браузера