🎯 Введение #

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

🔐 Базовая защита SSH #

Отключение входа под пользователем root #

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

sudo nano /etc/ssh/sshd_config
# В файле изменить строки:
PermitRootLogin no
Protocol 2
Port 2222  # Изменение стандартного порта SSH
AllowUsers username1 username2  # Список разрешенных пользователей
MaxAuthTries 3  # Максимальное количество попыток аутентификации
LoginGraceTime 60  # Время на ввод пароля в секундах
# Сохранить изменения и перезапустить SSH:
sudo systemctl restart sshd

Использование аутентификации по SSH-ключам #

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

# На локальной машине:
ssh-keygen -t ed25519 -a 100  # Современный алгоритм с высокой стойкостью
# Или для RSA с увеличенной длиной ключа:
ssh-keygen -t rsa -b 4096

# Скопировать публичный ключ на сервер:
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip

# На сервере настроить права доступа:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

# Отключить аутентификацию по паролю:
sudo nano /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no
sudo systemctl restart sshd

🔑 Управление паролями и доступом #

Усиление политики паролей #

sudo nano /etc/security/pwquality.conf
# Добавить или изменить параметры:
minlen = 14        # Минимальная длина пароля
minclass = 4       # Минимальное количество классов символов
maxrepeat = 2      # Максимальное количество повторяющихся символов
dcredit = -1       # Требовать минимум 1 цифру
ucredit = -1       # Требовать минимум 1 заглавную букву
lcredit = -1       # Требовать минимум 1 строчную букву
ocredit = -1       # Требовать минимум 1 специальный символ
enforce_for_root   # Применять политику и для root

Настройка PAM (Pluggable Authentication Modules) #

sudo nano /etc/pam.d/common-password
# Добавить:
password requisite pam_pwquality.so retry=3
password required pam_pwhistory.so remember=5 use_authtok

sudo nano /etc/pam.d/common-auth
# Добавить:
auth required pam_tally2.so deny=5 unlock_time=1800

🛡️ Мандатное управление доступом #

Настройка SELinux #

SELinux (Security-Enhanced Linux) обеспечивает дополнительный уровень безопасности через мандатное управление доступом.

# Установка SELinux
sudo apt install selinux-basics selinux-policy-default
sudo selinux-activate

# Проверка статуса
sestatus

# Настройка политики
sudo semanage port -a -t ssh_port_t -p tcp 2222  # Для нестандартного порта SSH
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -R /var/www/html

Настройка AppArmor #

AppArmor - альтернативная система мандатного управления доступом.

# Проверка статуса
sudo aa-status

# Создание нового профиля
sudo aa-genprof /path/to/application

# Настройка профиля
sudo nano /etc/apparmor.d/usr.sbin.nginx
# Пример правил:
/etc/nginx/** r,
/var/log/nginx/* w,
/var/www/** r,

🔍 Система обнаружения вторжений #

Установка и настройка AIDE #

AIDE (Advanced Intrusion Detection Environment) отслеживает изменения в файловой системе.

# Установка AIDE
sudo apt install aide

# Инициализация базы данных
sudo aideinit

# Настройка правил
sudo nano /etc/aide/aide.conf
# Пример правил:
/etc/passwd CONTENT_EX
/etc/shadow CONTENT_EX
/usr/bin CONTENT_EX
/usr/sbin CONTENT_EX

# Проверка системы
sudo aide --check

Настройка Snort IDS #

Snort - мощная система обнаружения вторжений на основе анализа сетевого трафика.

# Установка Snort
sudo apt install snort

# Базовая настройка
sudo nano /etc/snort/snort.conf
# Настройка сетевых интерфейсов и правил

# Запуск в режиме NIDS
sudo snort -A console -q -c /etc/snort/snort.conf -i eth0

🔐 Криптографическая защита #

Шифрование дисков с LUKS #

# Создание зашифрованного раздела
sudo cryptsetup luksFormat /dev/sdb1

# Открытие зашифрованного раздела
sudo cryptsetup luksOpen /dev/sdb1 secure_data

# Создание файловой системы
sudo mkfs.ext4 /dev/mapper/secure_data

# Монтирование
sudo mount /dev/mapper/secure_data /mnt/secure

Настройка dm-crypt #

# Создание зашифрованного swap
sudo cryptsetup -y -v luksFormat /dev/sdb2
sudo cryptsetup luksOpen /dev/sdb2 cryptswap
sudo mkswap /dev/mapper/cryptswap

🌐 Защита сетевых служб #

Настройка ModSecurity WAF #

ModSecurity - веб-фаервол для защиты веб-приложений.

# Установка
sudo apt install libapache2-mod-security2

# Активация базовых правил
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

# Настройка правил
sudo nano /etc/modsecurity/modsecurity.conf
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On

Защита почтового сервера #

# Настройка Postfix
sudo nano /etc/postfix/main.cf
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_recipient_restrictions = 
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination

📊 Расширенный мониторинг #

Настройка Ossec HIDS #

Ossec - комплексная система обнаружения вторжений на хосте.

# Установка
wget https://github.com/ossec/ossec-hids/archive/3.7.0.tar.gz
tar -zxf 3.7.0.tar.gz
cd ossec-hids-3.7.0
./install.sh

# Настройка правил
sudo nano /var/ossec/etc/ossec.conf
<rule id="100001" level="12">
    <if_sid>530</if_sid>
    <match>^Attempt to login using a non-existent user</match>
    <description>Non-existent user login attempt</description>
</rule>

Интеграция с Elastic Stack #

# Установка Filebeat
sudo apt install filebeat

# Настройка сбора логов
sudo nano /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/auth.log
    - /var/log/syslog

🔧 Автоматизация безопасности #

Настройка автоматических бэкапов #

# Установка Duplicity
sudo apt install duplicity

# Создание скрипта бэкапа
sudo nano /usr/local/bin/backup.sh
#!/bin/bash
duplicity --no-encryption /path/to/backup sftp://user@backup-server/path/

Автоматизация проверок безопасности #

# Создание скрипта проверки
sudo nano /usr/local/bin/security_check.sh
#!/bin/bash
# Проверка открытых портов
netstat -tuln
# Проверка активных сервисов
systemctl list-units --type=service --state=running
# Проверка последних входов
last -n 20

📝 Заключение #

Безопасность Linux-сервера требует комплексного подхода и постоянного внимания. Важно регулярно:

  • Обновлять систему и программное обеспечение
  • Проводить аудит безопасности
  • Мониторить систему на предмет подозрительной активности
  • Тестировать и обновлять политики безопасности
  • Поддерживать актуальные резервные копии

🔍 Полезные ресурсы #