1. Введение
Безопасность Linux-сервера является критически важным аспектом системного администрирования. Несмотря на репутацию Linux как относительно безопасной операционной системы, без должной настройки и регулярного обслуживания серверы могут стать легкой мишенью для злоумышленников.
В этой статье мы рассмотрим основные угрозы безопасности для Linux-серверов и практические меры защиты от них. Руководство подходит для всех популярных дистрибутивов, включая Ubuntu, Debian, CentOS, RHEL и другие.
Важно понимать
Безопасность — это процесс, а не конечная точка. Даже после внедрения всех рекомендаций из этой статьи важно продолжать следить за обновлениями безопасности, проводить регулярные аудиты и адаптировать стратегию защиты к меняющемуся ландшафту угроз.
2. Начальная настройка сервера
Безопасность начинается с правильной начальной настройки. Вот ключевые шаги, которые следует выполнить сразу после установки свежей ОС:
2.1. Минимальная установка
Устанавливайте только те пакеты, которые действительно необходимы для работы вашего сервера. Каждый дополнительный компонент — это потенциальная уязвимость.
# Проверка установленных пакетов # Debian/Ubuntu dpkg -l # RHEL/CentOS rpm -qa # Удаление ненужных пакетов # Debian/Ubuntu apt purge package-name # RHEL/CentOS yum remove package-name
2.2. Сложные пароли
Используйте сложные пароли для всех учетных записей. Можно сгенерировать надежный пароль с помощью командной строки:
# Генерация случайного пароля длиной 16 символов openssl rand -base64 16 # Изменение пароля пользователя passwd username
2.3. Настройка временного пояса и синхронизация времени
Точное время важно для правильной работы многих служб безопасности, включая журналирование событий:
# Установка временного пояса timedatectl set-timezone Europe/Moscow # Установка NTP-клиента # Debian/Ubuntu apt install chrony # RHEL/CentOS yum install chrony # Запуск и включение службы systemctl start chronyd systemctl enable chronyd
2.4. Настройка хостнейма и конфигурации сети
Правильная настройка сетевого имени и конфигурации помогает избежать проблем с идентификацией сервера:
# Установка имени хоста hostnamectl set-hostname secure-server # Добавление в /etc/hosts echo "127.0.0.1 secure-server" >> /etc/hosts
3. Управление пользователями и правами
Правильное управление пользователями и правами доступа — один из фундаментальных аспектов безопасности Linux.
3.1. Создание непривилегированного пользователя
Никогда не используйте учетную запись root для повседневных задач. Вместо этого создайте отдельного пользователя с правами sudo:
# Создание нового пользователя adduser admin # Добавление пользователя в группу sudo (Debian/Ubuntu) usermod -aG sudo admin # Добавление пользователя в группу wheel (RHEL/CentOS) usermod -aG wheel admin
3.2. Настройка sudo
Настройте sudo для более детального контроля над привилегированными командами:
# Редактирование конфигурации sudo visudo # Ограничение sudo для определенных команд admin ALL=(ALL) /sbin/iptables, /usr/bin/systemctl # Требование пароля при каждом использовании sudo Defaults timestamp_timeout=0
3.3. Ограничение прав доступа к файлам
Регулярно проверяйте и исправляйте права доступа к критичным файлам и директориям:
# Поиск файлов с избыточными правами find / -type f -perm -4000 -o -perm -2000 2>/dev/null # Поиск файлов с мировой записью find / -type f -perm -o+w 2>/dev/null # Исправление прав на конфигурационные файлы chmod 600 /etc/ssh/sshd_config chmod 640 /etc/shadow chmod 644 /etc/passwd
3.4. Настройка политик паролей
Используйте модуль PAM для настройки требований к паролям:
# Установка libpam-pwquality # Debian/Ubuntu apt install libpam-pwquality # RHEL/CentOS yum install libpwquality # Редактирование настроек в /etc/security/pwquality.conf minlen = 12 # Минимальная длина minclass = 4 # Минимальное количество классов символов maxrepeat = 2 # Не более 2 одинаковых символов подряд gecoscheck = 1 # Запретить использование личной информации dictcheck = 1 # Проверка по словарю # Настройка срока действия пароля chage -M 90 -m 7 -W 7 username
Осторожно
Избегайте хранения паролей в открытом виде в скриптах или конфигурационных файлах. Используйте хранилища секретов, такие как HashiCorp Vault или AWS Secrets Manager для управления чувствительными данными.
4. Защита SSH
SSH (Secure Shell) часто является основным методом удаленного доступа к серверам Linux, что делает его важной целью для атак.
4.1. Изменение порта по умолчанию
Хотя это не является полноценной мерой безопасности, изменение стандартного порта SSH (22) может снизить количество автоматизированных атак:
# Редактирование конфигурации SSH
sudo nano /etc/ssh/sshd_config
# Изменение порта (выберите любой неиспользуемый порт выше 1024)
Port 2222
# Перезапуск службы SSH
sudo systemctl restart sshd
4.2. Аутентификация по ключам
Аутентификация по ключам гораздо безопаснее, чем использование паролей. Настройте её следующим образом:
# На локальной машине: генерация ключей
ssh-keygen -t ed25519 -a 100
# Копирование публичного ключа на сервер
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
# На сервере: отключение парольной аутентификации
sudo nano /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
# Перезапуск службы SSH
sudo systemctl restart sshd
4.3. Ограничение доступа через SSH
Ограничьте список пользователей, которые могут подключаться по SSH:
# Редактирование конфигурации SSH
sudo nano /etc/ssh/sshd_config
# Запретить вход для root
PermitRootLogin no
# Разрешить доступ только определенным пользователям
AllowUsers admin developer
# Разрешить доступ только из определенных IP-адресов
# (добавьте в sshd_config или используйте TCP Wrappers)
echo "sshd: 192.168.1.0/24" >> /etc/hosts.allow
echo "sshd: ALL" >> /etc/hosts.deny
4.4. Дополнительные настройки безопасности SSH
Для усиления защиты SSH рекомендуются следующие настройки:
# Редактирование конфигурации SSH
sudo nano /etc/ssh/sshd_config
# Использование только протокола SSH версии 2
Protocol 2
# Ограничение времени неактивности сессии (в секундах)
ClientAliveInterval 300
ClientAliveCountMax 0
# Отключение пересылки X11 и агента аутентификации
X11Forwarding no
AllowAgentForwarding no
# Отключение туннелирования TCP
AllowTcpForwarding no
# Отключение аутентификации с пустыми паролями
PermitEmptyPasswords no
# Ограничение числа попыток аутентификации
MaxAuthTries 3
# Использование строгих алгоритмов шифрования
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group16-sha512
4.5. Двухфакторная аутентификация
Для критически важных серверов можно настроить двухфакторную аутентификацию с Google Authenticator:
# Установка Google Authenticator
# Debian/Ubuntu
sudo apt install libpam-google-authenticator
# RHEL/CentOS
sudo yum install google-authenticator
# Настройка для пользователя
google-authenticator
# Настройка PAM
sudo nano /etc/pam.d/sshd
# Добавить строку
auth required pam_google_authenticator.so
# Редактирование конфигурации SSH
sudo nano /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
# Перезапуск службы SSH
sudo systemctl restart sshd
5. Настройка брандмауэра
Брандмауэр является важнейшим компонентом защиты сервера от сетевых атак.
5.1. Настройка iptables
Iptables — мощный инструмент управления пакетной фильтрацией:
# Базовые правила iptables
# Очистка всех правил
iptables -F
# Установка политик по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Разрешить установленные соединения
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Разрешить локальные соединения
iptables -A INPUT -i lo -j ACCEPT
# Разрешить SSH на порту 2222
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# Разрешить веб-трафик (если нужно)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Сохранение правил
# Debian/Ubuntu
iptables-save > /etc/iptables/rules.v4
# RHEL/CentOS
iptables-save > /etc/sysconfig/iptables
5.2. Использование UFW (Uncomplicated Firewall)
UFW — упрощенный интерфейс для iptables, популярный в Ubuntu и Debian:
# Установка UFW
sudo apt install ufw
# Настройка базовых правил
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Разрешение SSH (на порту 2222)
sudo ufw allow 2222/tcp
# Разрешение веб-сервисов
sudo ufw allow http
sudo ufw allow https
# Включение UFW
sudo ufw enable
# Проверка статуса
sudo ufw status verbose
5.3. Использование firewalld
Firewalld — более современный брандмауэр, используемый в RHEL, CentOS и Fedora:
# Установка firewalld
sudo yum install firewalld
# Запуск и включение службы
sudo systemctl start firewalld
sudo systemctl enable firewalld
# Базовая настройка
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# Применение изменений
sudo firewall-cmd --reload
# Проверка статуса
sudo firewall-cmd --list-all
5.4. Защита от распространенных сетевых атак
Дополнительные правила для защиты от сетевых атак:
# Защита от сканирования портов (для iptables)
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# Ограничение скорости соединений SSH (для защиты от брутфорса)
iptables -A INPUT -p tcp --dport 2222 -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport 2222 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
# В firewalld то же самое настраивается через rich rules
sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" accept limit value="4/m"'
6. Защита сетевых сервисов
Помимо SSH, необходимо обеспечить безопасность других сетевых сервисов, работающих на сервере.
6.1. Общие принципы защиты сервисов
- Отключите или удалите ненужные сервисы
- Обновляйте сервисы до последних версий
- Используйте HTTPS вместо HTTP
- Настройте минимально необходимые привилегии для сервисов
- Изолируйте сервисы с помощью chroot, контейнеров или виртуализации
6.2. Управление сервисами systemd
Проверьте и отключите ненужные сервисы:
# Список всех служб
systemctl list-units --type=service
# Отключение и остановка ненужной службы
systemctl stop unneeded-service
systemctl disable unneeded-service
# Проверка открытых портов
ss -tuln
6.3. Защита веб-сервера
Если на сервере работает веб-сервер (Apache, Nginx), важно настроить его безопасно:
# Пример настроек безопасности для Nginx
# Редактирование конфигурации
sudo nano /etc/nginx/nginx.conf
# Скрыть информацию о версии
server_tokens off;
# Защита от clickjacking
add_header X-Frame-Options "SAMEORIGIN";
# Защита от XSS
add_header X-XSS-Protection "1; mode=block";
# Запретить MIME-сниффинг
add_header X-Content-Type-Options "nosniff";
# Настройка HTTPS с современными параметрами
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Перезапуск Nginx
sudo systemctl restart nginx
6.4. Защита базы данных
Если на сервере размещена база данных (MySQL/MariaDB, PostgreSQL), следует принять дополнительные меры:
# Для MySQL/MariaDB
# Запуск скрипта базовой защиты
sudo mysql_secure_installation
# Ограничение доступа только с localhost
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1
# Отключение ненужных функций
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
local-infile = 0
skip-symbolic-links = 1
# Ограничение привилегий пользователей
mysql -u root -p
REVOKE ALL PRIVILEGES ON *.* FROM 'user'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO 'user'@'localhost';
7. Защита от вредоносных программ
Хотя Linux менее подвержен вирусам, чем Windows, риск заражения вредоносными программами всё же существует.
7.1. Установка антивирусного ПО
ClamAV — популярное антивирусное решение для Linux:
# Установка ClamAV
# Debian/Ubuntu
sudo apt install clamav clamav-daemon
# RHEL/CentOS
sudo yum install clamav clamav-scanner clamav-update
# Обновление базы данных вирусов
sudo freshclam
# Сканирование директории
sudo clamscan -r /home
# Настройка периодического сканирования
echo "0 2 * * * root /usr/bin/clamscan -r /home --move=/var/quarantine" | sudo tee -a /etc/crontab
7.2. Обнаружение руткитов
Руткиты — вредоносные программы, предназначенные для скрытия своего присутствия:
# Установка rkhunter
# Debian/Ubuntu
sudo apt install rkhunter
# RHEL/CentOS
sudo yum install rkhunter
# Обновление базы данных
sudo rkhunter --update
# Проверка системы
sudo rkhunter --check
# Установка chkrootkit
# Debian/Ubuntu
sudo apt install chkrootkit
# RHEL/CentOS
sudo yum install chkrootkit
# Проверка системы
sudo chkrootkit
7.3. Мониторинг целостности файловой системы
AIDE (Advanced Intrusion Detection Environment) помогает обнаружить несанкционированные изменения файлов:
# Установка AIDE
# Debian/Ubuntu
sudo apt install aide
# RHEL/CentOS
sudo yum install aide
# Инициализация базы данных
sudo aideinit
# В RHEL/CentOS инициализация выполняется иначе
sudo aide --init
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# Проверка целостности файлов
sudo aide --check
# Настройка ежедневной проверки
echo "0 4 * * * root /usr/bin/aide --check | mail -s 'AIDE report' root@localhost" | sudo tee -a /etc/crontab
8. Обновления и патчи
Регулярное обновление системы и приложений — одна из важнейших мер безопасности.
8.1. Автоматические обновления
Настройка автоматических обновлений для критических патчей безопасности:
# Debian/Ubuntu
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades
# RHEL/CentOS
sudo yum install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
8.2. Мониторинг обновлений безопасности
Настройка уведомлений о доступных обновлениях безопасности:
# Debian/Ubuntu
sudo apt install apticron
sudo nano /etc/apticron/apticron.conf
EMAIL="admin@example.com"
# RHEL/CentOS
sudo yum install yum-utils
echo '#!/bin/bash
yum updateinfo summary | mail -s "Security updates for $(hostname)" admin@example.com' > /etc/cron.daily/security-updates
chmod +x /etc/cron.daily/security-updates
8.3. Проверка наличия уязвимостей
Инструменты для проверки системы на известные уязвимости:
# Установка Lynis
# Debian/Ubuntu
sudo apt install lynis
# RHEL/CentOS
sudo yum install lynis
# Аудит системы
sudo lynis audit system
# Использование debsecan в Debian/Ubuntu
sudo apt install debsecan
debsecan --suite=$(lsb_release -cs) --format=summary
9. Мониторинг и аудит
Мониторинг и аудит позволяют обнаружить попытки взлома и несанкционированную активность.
9.1. Настройка журналирования
Централизованное и безопасное хранение журналов:
# Настройка journald для долгосрочного хранения логов
sudo mkdir -p /var/log/journal
sudo nano /etc/systemd/journald.conf
[Journal]
Storage=persistent
SystemMaxUse=2G
SystemKeepFree=20%
# Перезапуск службы
sudo systemctl restart systemd-journald
# Настройка удаленного сервера логов (rsyslog)
sudo apt install rsyslog # Обычно уже установлен
sudo nano /etc/rsyslog.conf
# Добавьте в конец файла
*.* @logserver.example.com:514
# Перезапуск службы
sudo systemctl restart rsyslog
9.2. Аудит системных событий
Настройка auditd для отслеживания критичных событий:
# Установка auditd
# Debian/Ubuntu
sudo apt install auditd
# RHEL/CentOS
sudo yum install audit
# Базовая конфигурация
sudo nano /etc/audit/audit.rules
# Мониторинг доступа к системным файлам
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k identity
# Мониторинг системных вызовов
-a exit,always -F arch=b64 -S execve -k exec
-a exit,always -F arch=b32 -S execve -k exec
# Запуск службы
sudo systemctl enable auditd
sudo systemctl start auditd
# Просмотр журнала аудита
sudo ausearch -k identity
9.3. Мониторинг изменений файловой системы
Инструменты для отслеживания изменений файлов и обнаружения подозрительной активности:
# Установка inotify-tools
# Debian/Ubuntu
sudo apt install inotify-tools
# RHEL/CentOS
sudo yum install inotify-tools
# Мониторинг директории в реальном времени
inotifywait -m -r /etc
# Установка tripwire для мониторинга файловой системы
# Debian/Ubuntu
sudo apt install tripwire
# RHEL/CentOS
sudo yum install tripwire
# Следуйте инструкциям мастера настройки
# После настройки инициализируйте базу данных
sudo tripwire --init
9.4. Инструменты обнаружения вторжений
Системы обнаружения вторжений (IDS) помогают выявить подозрительную активность:
# Установка OSSEC HIDS
# Скачайте последнюю версию с официального сайта
wget https://github.com/ossec/ossec-hids/archive/3.6.0.tar.gz
tar -zxf 3.6.0.tar.gz
cd ossec-hids-3.6.0
./install.sh
# Следуйте инструкциям мастера установки
# После установки запустите OSSEC
sudo /var/ossec/bin/ossec-control start
# Установка Fail2ban для защиты от брутфорс-атак
# Debian/Ubuntu
sudo apt install fail2ban
# RHEL/CentOS
sudo yum install fail2ban
# Базовая конфигурация
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
# Настройте параметры
bantime = 3600
findtime = 600
maxretry = 3
# Включение защиты для SSH
[sshd]
enabled = true
# Запуск службы
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
10. План восстановления
Даже с наилучшей защитой всегда существует риск взлома. Важно иметь план восстановления.
10.1. Регулярное резервное копирование
Настройте автоматическое создание резервных копий важных данных:
# Установка инструмента для резервного копирования
# Debian/Ubuntu
sudo apt install rsnapshot
# RHEL/CentOS
sudo yum install rsnapshot
# Настройка конфигурации
sudo nano /etc/rsnapshot.conf
# Укажите директории для бэкапа
backup /home/ localhost/
backup /etc/ localhost/
backup /var/www/ localhost/
# Настройка периодичности бэкапов в cron
sudo nano /etc/cron.d/rsnapshot
0 */4 * * * root /usr/bin/rsnapshot hourly
30 3 * * * root /usr/bin/rsnapshot daily
0 3 * * 1 root /usr/bin/rsnapshot weekly
30 2 1 * * root /usr/bin/rsnapshot monthly
10.2. Проверка целостности резервных копий
Регулярно проверяйте целостность и возможность восстановления из резервных копий:
# Тестовое восстановление из бэкапа
sudo rsnapshot restore /path/to/backup/file /path/to/restore/
# Автоматическая проверка целостности (пример скрипта)
#!/bin/bash
BACKUP_DIR="/path/to/backups"
LOG_FILE="/var/log/backup_check.log"
echo "Backup check started at $(date)" >> $LOG_FILE
find $BACKUP_DIR -type f -name "*.tar.gz" -exec gzip -t {} \; -exec echo "{} OK" \; >> $LOG_FILE 2>&1 || echo "Errors found in backups!" | mail -s "Backup integrity check failed" admin@example.com
# Сохраните скрипт и добавьте его в cron
chmod +x /usr/local/bin/check_backups.sh
echo "0 5 * * * root /usr/local/bin/check_backups.sh" >> /etc/crontab
10.3. Документирование системы
Документируйте конфигурацию сервера для быстрого восстановления в случае необходимости:
# Сохранение списка установленных пакетов
# Debian/Ubuntu
dpkg --get-selections > /root/installed-packages.txt
# RHEL/CentOS
rpm -qa > /root/installed-packages.txt
# Сохранение конфигурации сервисов
tar -czf /root/etc-backup.tar.gz /etc/
# Список открытых портов
ss -tuln > /root/open-ports.txt
# Список системных пользователей
cut -d: -f1 /etc/passwd > /root/users.txt
10.4. План действий при обнаружении взлома
- Изолируйте сервер, отключив его от сети
- Сделайте полную копию системы для последующего анализа
- Определите вектор атаки и скомпрометированные данные
- Восстановите систему из заведомо чистой резервной копии
- Устраните уязвимости, которые привели к взлому
- Сбросьте все пароли и ключи доступа
- Проведите анализ инцидента и обновите стратегию безопасности
11. Заключение
Безопасность Linux-сервера — это непрерывный процесс, требующий постоянного внимания и адаптации к новым угрозам. Применение комплексного подхода, включающего защиту на уровне системы, сети и приложений, поможет значительно повысить безопасность вашего сервера.
Ключевые принципы, которые следует помнить:
- Принцип наименьших привилегий: предоставляйте минимально необходимые права
- Эшелонированная защита: используйте несколько уровней защиты
- Регулярное обновление: своевременно устанавливайте патчи безопасности
- Мониторинг и аудит: отслеживайте все важные события в системе
- Резервное копирование: всегда имейте актуальные резервные копии
- Обучение: следите за новыми угрозами и методами защиты
Следуя рекомендациям из этой статьи, вы сможете создать надежную систему защиты для вашего Linux-сервера и минимизировать риски, связанные с безопасностью.
Полезный совет
Регулярно проводите тесты на проникновение (penetration testing) или используйте инструменты сканирования уязвимостей, чтобы проактивно выявлять слабые места в защите вашей системы.