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) или используйте инструменты сканирования уязвимостей, чтобы проактивно выявлять слабые места в защите вашей системы.