🎯 Введение #
Обеспечение безопасности 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-сервера требует комплексного подхода и постоянного внимания. Важно регулярно:
- Обновлять систему и программное обеспечение
- Проводить аудит безопасности
- Мониторить систему на предмет подозрительной активности
- Тестировать и обновлять политики безопасности
- Поддерживать актуальные резервные копии