О нас Руководства Проекты Контакты
Админка
пожалуйста подождите

Введение

Безопасность сервера — это не разовая задача, а непрерывная практика. Одна неверная настройка или неустановленное исправление уязвимости могут привести к полной компрометации системы. В этом руководстве рассматриваются ключевые практики усиления защиты Linux-сервера, которые формируют основу безопасной инфраструктуры.

Первоначальная настройка сервера

Создание пользователя без прав root

# Создать пользователя
adduser deployer
# Добавить в группу sudo
usermod -aG sudo deployer
# Или в CentOS/RHEL
usermod -aG wheel deployer
# Проверить доступ sudo
su - deployer
sudo whoami

Настройка SSH

# Сгенерировать SSH-ключ на локальной машине
ssh-keygen -t ed25519 -C "[email protected]"
# Скопировать публичный ключ на сервер
ssh-copy-id -i ~/.ssh/id_ed25519.pub deployer@server

Отредактируйте /etc/ssh/sshd_config:

# Отключить вход для root
PermitRootLogin no
# Отключить аутентификацию по паролю
PasswordAuthentication no
# Использовать только SSH-ключ
PubkeyAuthentication yes
# Отключить пустые пароли
PermitEmptyPasswords no
# Ограничить пользователей, которым разрешен SSH-доступ
AllowUsers deployer
# Изменить порт по умолчанию (необязательно)
Port 2222
# Настройки тайм-аута
ClientAliveInterval 300
ClientAliveCountMax 2
# Отключить X11-forwarding
X11Forwarding no

Перезапустите SSH:

sudo systemctl restart sshd

Настройка firewall

UFW (Ubuntu/Debian)

# Установить
sudo apt install ufw
# Политики по умолчанию
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Разрешить SSH (до включения!)
sudo ufw allow 22/tcp
# Или пользовательский порт
sudo ufw allow 2222/tcp
# Разрешить web-трафик
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Включить firewall
sudo ufw enable
# Проверить статус
sudo ufw status verbose

firewalld (CentOS/RHEL)

# Запустить и включить
sudo systemctl start firewalld
sudo systemctl enable firewalld
# Добавить сервисы
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# Доверять внутренней сети
sudo firewall-cmd --zone=trusted --add-source=10.0.0.0/8 --permanent
# Перезагрузить
sudo firewall-cmd --reload
# Проверить статус
sudo firewall-cmd --list-all

Поддерживайте систему в актуальном состоянии

Автоматические обновления безопасности

Ubuntu/Debian

# Установить unattended-upgrades
sudo apt install unattended-upgrades
# Настроить
sudo dpkg-reconfigure -plow unattended-upgrades

Отредактируйте /etc/apt/apt.conf.d/50unattended-upgrades:

Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";

CentOS/RHEL

# Установить
sudo dnf install dnf-automatic
# Настроить только для обновлений безопасности
sudo vi /etc/dnf/automatic.conf
# Установить: upgrade_type = security
# Включить timer
sudo systemctl enable --now dnf-automatic.timer

Fail2ban — защита от brute force

# Установить
sudo apt install fail2ban # Debian/Ubuntu
sudo dnf install fail2ban # CentOS/RHEL
# Настроить
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Отредактируйте /etc/fail2ban/jail.local:

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
banaction = iptables-multiport
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
# Запустить
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Проверить статус
sudo fail2ban-client status sshd

Безопасность пользователей и прав доступа

Политики паролей

Отредактируйте /etc/login.defs:

PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 14
PASS_MIN_LEN 12

Защита конфиденциальных файлов

# Ограничить доступ к файлу shadow
sudo chmod 640 /etc/shadow
# Защитить cron
sudo chmod 700 /etc/crontab
# Ограничить каталог SSH
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Контроль привилегированного доступа

# Логировать команды sudo
echo 'Defaults logfile="/var/log/sudo.log"' | sudo tee -a /etc/sudoers.d/logging

Усиление защиты сервисов

Отключение ненужных сервисов

# Вывести список включенных сервисов
sudo systemctl list-unit-files --type=service --state=enabled
# Отключить ненужные сервисы
sudo systemctl disable bluetooth
sudo systemctl disable cups
sudo systemctl disable avahi-daemon

Удаление неиспользуемых пакетов

# Debian/Ubuntu
sudo apt autoremove
# CentOS/RHEL
sudo dnf autoremove

Обнаружение вторжений

AIDE (Advanced Intrusion Detection Environment)

# Установить
sudo apt install aide # Debian/Ubuntu
# Инициализировать базу данных
sudo aideinit
# Проверить изменения
sudo aide --check

Мониторинг логов

# Установить logwatch
sudo apt install logwatch
# Настроить ежедневные письма
sudo vi /etc/cron.daily/00logwatch
# Добавить: /usr/sbin/logwatch --output mail --mailto [email protected] --detail high

Безопасность ядра

Усиление защиты sysctl

Создайте /etc/sysctl.d/99-security.conf:

# Отключить IP forwarding (если сервер не является router/VPN)
net.ipv4.ip_forward = 0
# Игнорировать ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Отключить source routing
net.ipv4.conf.all.accept_source_route = 0
# Включить защиту от SYN flood
net.ipv4.tcp_syncookies = 1
# Игнорировать ping broadcasts
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Логировать martian packets
net.ipv4.conf.all.log_martians = 1
# Отключить IPv6 (если не требуется)
net.ipv6.conf.all.disable_ipv6 = 1

Примените:

sudo sysctl -p /etc/sysctl.d/99-security.conf

AppArmor/SELinux

AppArmor (Ubuntu)

# Проверить статус
sudo aa-status
# Принудительно применять профили
sudo aa-enforce /etc/apparmor.d/*

SELinux (CentOS/RHEL)

# Проверить статус
getenforce
# Установить enforcing (отредактируйте /etc/selinux/config)
SELINUX=enforcing
# Проверить denials
sudo ausearch -m avc -ts today

Аудит и мониторинг

auditd

# Установить
sudo apt install auditd # Debian/Ubuntu
# Мониторить конфиденциальные файлы
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/shadow -p wa -k shadow_changes
sudo auditctl -w /etc/sudoers -p wa -k sudoers_changes
# Сделать правила постоянными
# Добавить в /etc/audit/rules.d/audit.rules
# Просмотреть audit logs
sudo ausearch -k passwd_changes

Проверка резервных копий

# Создать скрипт резервного копирования
cat << 'EOF' > /usr/local/bin/backup-verify.sh
##!/bin/bash
BACKUP_DIR=/backup
DATE=$(date +%Y%m%d)
# Создать резервную копию
tar -czf $BACKUP_DIR/etc-$DATE.tar.gz /etc
# Проверить резервную копию
tar -tzf $BACKUP_DIR/etc-$DATE.tar.gz > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Backup verified successfully"
else
echo "Backup verification FAILED" | mail -s "Backup Alert" [email protected]
fi
EOF
chmod +x /usr/local/bin/backup-verify.sh

Чек-лист безопасности

Первоначальная настройка

  • [ ] Создать пользователя без прав root с sudo
  • [ ] Отключить SSH-вход для root
  • [ ] Включить только аутентификацию по SSH-ключам
  • [ ] Настроить firewall (запрет по умолчанию)
  • [ ] Установить и настроить fail2ban

Регулярные действия

  • [ ] Включить автоматические обновления безопасности
  • [ ] Регулярно просматривать логи
  • [ ] Отслеживать несанкционированные изменения
  • [ ] Ежемесячно тестировать резервные копии
  • [ ] Ежеквартально проводить аудит учетных записей пользователей
  • [ ] Ежегодно обновлять и ротировать SSH-ключи

Заключение

Безопасность сервера требует нескольких уровней защиты. Начните с усиления SSH и настройки firewall, добавьте защиту от brute force с помощью fail2ban и внедрите обнаружение вторжений. Регулярные обновления и мониторинг обеспечивают сохранение надежного уровня безопасности с течением времени.

 
 
 
Языки
Темы
Copyright © 1999 — 2026
Зетка Интерактив