Основы безопасности Ubuntu сервера

Введение

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

В этой статье мы рассмотрим фундаментальные практики безопасности Ubuntu сервера, которые должен знать и применять каждый системный администратор. Эти меры создают базовый уровень защиты, который можно дополнять специализированными решениями в зависимости от конкретных требований вашей инфраструктуры.

Обновление системы

Регулярное обновление системы — первая и важнейшая линия защиты от известных уязвимостей. Ubuntu предоставляет постоянные обновления безопасности, которые закрывают обнаруженные бреши в программном обеспечении.

После установки свежего сервера первым делом выполните обновление всех пакетов:

sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y

Команда apt update обновляет списки доступных пакетов, apt upgrade устанавливает новые версии установленных пакетов, а dist-upgrade дополнительно умеет разрешать зависимости при обновлении.

Для автоматизации обновлений безопасности можно использовать пакет 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";
};

Регулярно проверяйте логи обновлений в /var/log/unattended-upgrades/ для отслеживания установленных патчей и возможных проблем.

Настройка SSH

SSH (Secure Shell) — основной способ удаленного доступа к серверу, и его безопасность критически важна. Стандартная конфигурация SSH требует серьезного усиления.

Отключение root-доступа

Прямой доступ под пользователем root через SSH создает очевидную цель для атак. Всегда используйте обычного пользователя с правами sudo:

sudo nano /etc/ssh/sshd_config

Измените или добавьте строку:

PermitRootLogin no

Изменение стандартного порта

Изменение порта SSH с 22 на нестандартный значительно снижает количество автоматизированных атак:

Port 2222

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

Использование ключей вместо паролей

Аутентификация по ключам гораздо безопаснее паролей. На локальной машине создайте пару ключей:

ssh-keygen -t ed25519 -C "your_email@example.com"

Алгоритм Ed25519 обеспечивает отличную безопасность при небольшом размере ключа. Скопируйте публичный ключ на сервер:

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip

После успешного копирования ключа отключите парольную аутентификацию в sshd_config:

PasswordAuthentication no
PubkeyAuthentication yes

Дополнительные меры защиты SSH

Ограничьте список пользователей, которым разрешен SSH-доступ:

AllowUsers username1 username2

Установите таймаут для неактивных соединений:

ClientAliveInterval 300
ClientAliveCountMax 2

Отключите пересылку X11 и TCP, если они не используются:

X11Forwarding no
AllowTcpForwarding no

После любых изменений перезапустите SSH:

sudo systemctl restart sshd

Файрвол и сетевая безопасность

Правильно настроенный файрвол контролирует входящий и исходящий трафик, разрешая только необходимые соединения.

UFW (Uncomplicated Firewall)

UFW — удобный интерфейс для управления iptables в Ubuntu. Установка и базовая настройка:

sudo apt install ufw

Сначала разрешите SSH (используйте ваш настроенный порт):

sudo ufw allow 2222/tcp

Установите политики по умолчанию:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Разрешите необходимые сервисы:

sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS

Включите файрвол:

sudo ufw enable

Проверьте статус:

sudo ufw status verbose

Расширенные правила UFW

Ограничение доступа по IP-адресу:

sudo ufw allow from 203.0.113.5 to any port 2222

Ограничение частоты соединений для защиты от брутфорса:

sudo ufw limit 2222/tcp

Это правило разрешает максимум 6 соединений за 30 секунд с одного IP.

Защита от сканирования портов

Для скрытия закрытых портов настройте iptables так, чтобы отбрасывать пакеты вместо отправки ответов:

sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Fail2Ban — защита от брутфорс-атак

Fail2Ban анализирует логи и автоматически блокирует IP-адреса, демонстрирующие подозрительную активность.

Установка:

sudo apt install fail2ban

Создайте локальный конфигурационный файл:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Настройте базовые параметры:

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
destemail = your_email@example.com
sendername = Fail2Ban
action = %(action_mwl)s

enabled = true port = 2222 logpath = /var/log/auth.log maxretry = 3 bantime = 86400

Эта конфигурация блокирует IP на 24 часа после трех неудачных попыток входа в течение 10 минут.

Проверьте статус Fail2Ban:

sudo fail2ban-client status
sudo fail2ban-client status sshd

Разблокировка IP вручную:

sudo fail2ban-client set sshd unbanip 192.168.1.100

Управление пользователями и привилегиями

Принцип наименьших привилегий — каждый пользователь и процесс должен иметь минимально необходимые права доступа.

Создание пользователей с ограниченными правами

Создайте пользователя для администрирования:

sudo adduser admin_user
sudo usermod -aG sudo admin_user

Для сервисных аккаунтов без возможности входа:

sudo adduser --system --no-create-home --disabled-login service_user

Настройка sudo

Ограничьте sudo-доступ конкретными командами. Отредактируйте конфигурацию:

sudo visudo

Пример разрешения только перезапуска nginx:

username ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx

Требуйте пароль при использовании sudo:

Defaults timestamp_timeout=0

Логируйте все sudo-команды:

Defaults logfile=/var/log/sudo.log

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

Установите модуль для усиления политик паролей:

sudo apt install libpam-pwquality

Настройте требования в /etc/security/pwquality.conf:

minlen = 14
dcredit = -1
ucredit = -1
ocredit = -1
lcredit = -1

Это требует минимум 14 символов с хотя бы одной цифрой, заглавной буквой, специальным символом и строчной буквой.

Настройте истечение срока действия паролей:

sudo chage -M 90 username  # Пароль действителен 90 дней
sudo chage -m 7 username   # Минимум 7 дней между сменами
sudo chage -W 14 username  # Предупреждение за 14 дней

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

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

Системные логи

Основные логи Ubuntu находятся в /var/log/:

  • /var/log/auth.log — попытки аутентификации
  • /var/log/syslog — общие системные сообщения
  • /var/log/kern.log — сообщения ядра
  • /var/log/ufw.log — логи файрвола

Регулярно проверяйте неудачные попытки входа:

sudo grep "Failed password" /var/log/auth.log | tail -20

Проверка последних подключений:

last -20
lastb -20  # Неудачные попытки

Ротация логов

Настройте logrotate для предотвращения переполнения диска:

sudo nano /etc/logrotate.d/custom
/var/log/custom/*.log {
    weekly
    rotate 4
    compress
    delaycompress
    missingok
    notifempty
}

Установка средств мониторинга

Для простого мониторинга можно использовать logwatch:

sudo apt install logwatch

Настройте ежедневную отправку отчетов:

sudo nano /etc/cron.daily/00logwatch
#!/bin/bash
/usr/sbin/logwatch --output mail --mailto your_email@example.com --detail high

Защита файловой системы

Правильные права доступа и атрибуты файлов предотвращают несанкционированный доступ к конфиденциальным данным.

Базовые права доступа

Проверьте и исправьте права критических файлов:

sudo chmod 600 /etc/ssh/sshd_config
sudo chmod 700 /root
sudo chmod 644 /etc/passwd
sudo chmod 640 /etc/shadow
sudo chown root:shadow /etc/shadow

Найдите файлы с небезопасными правами:

find / -type f -perm -002 2>/dev/null  # World-writable файлы
find / -type d -perm -002 2>/dev/null  # World-writable директории

Неизменяемые файлы

Защитите критические файлы от изменения атрибутом immutable:

sudo chattr +i /etc/passwd
sudo chattr +i /etc/group
sudo chattr +i /etc/shadow

Для снятия защиты используйте -i вместо +i.

Использование AppArmor

AppArmor — система обязательного контроля доступа (MAC), включенная по умолчанию в Ubuntu:

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

Проверьте, что критические сервисы защищены профилями AppArmor. При необходимости создайте собственные профили или переведите профили в режим enforce:

sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx

Шифрование и защита данных

Шифрование защищает данные в случае физического доступа к серверу или компрометации.

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

При установке Ubuntu можно выбрать шифрование диска с помощью LUKS. Для существующих систем зашифруйте отдельные разделы данных:

sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup open /dev/sdb1 encrypted_volume
sudo mkfs.ext4 /dev/mapper/encrypted_volume

Шифрование в транзите

Всегда используйте шифрованные протоколы:

  • SSH вместо Telnet
  • HTTPS вместо HTTP
  • SFTP/SCP вместо FTP
  • IMAPS/POP3S вместо IMAP/POP3

Настройте SSL/TLS сертификаты с помощью Let’s Encrypt:

sudo apt install certbot
sudo certbot --nginx -d yourdomain.com

Безопасное хранение секретов

Никогда не храните пароли и ключи в открытом виде. Используйте менеджеры секретов вроде HashiCorp Vault или минимально — зашифрованные файлы:

gpg -c secrets.txt  # Шифрование
gpg secrets.txt.gpg  # Расшифровка

Аудит безопасности

Регулярный аудит помогает выявить потенциальные уязвимости до их эксплуатации.

Lynis — инструмент аудита безопасности

Lynis — комплексный инструмент для аудита Linux-систем:

sudo apt install lynis
sudo lynis audit system

Lynis проверяет сотни аспектов безопасности и предоставляет детальный отчет с рекомендациями.

Сканирование открытых портов

Регулярно сканируйте свой сервер извне:

sudo apt install nmap
nmap -sV -sC your_server_ip

Любые неожиданные открытые порты требуют немедленного расследования.

Проверка целостности файлов

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

sudo apt install aide
sudo aideinit
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

Регулярная проверка:

sudo aide --check

Резервное копирование

Резервные копии — последняя линия защиты при любом инциденте безопасности.

Создайте автоматизированное резервное копирование критических данных:

#!/bin/bash
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)

tar -czf $BACKUP_DIR/config_$DATE.tar.gz /etc
tar -czf $BACKUP_DIR/home_$DATE.tar.gz /home
tar -czf $BACKUP_DIR/web_$DATE.tar.gz /var/www

# Удаление старых бэкапов (старше 30 дней)
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

Храните резервные копии на отдельном сервере или в облаке с шифрованием.

План реагирования на инциденты

Подготовьте план действий на случай компрометации:

  1. Изоляция — отключите скомпрометированный сервер от сети
  2. Анализ — изучите логи для определения масштаба инцидента
  3. Сохранение доказательств — создайте копии логов и важных файлов
  4. Устранение угрозы — удалите вредоносное ПО, закройте точку входа
  5. Восстановление — восстановите систему из проверенных резервных копий
  6. Анализ причин — определите, как произошел инцидент
  7. Улучшение защиты — внедрите меры для предотвращения повторения

Заключение

Безопасность Ubuntu сервера — это многоуровневая система защиты, требующая комплексного подхода. Рассмотренные меры создают прочный фундамент безопасности, но не являются исчерпывающими. Ландшафт угроз постоянно меняется, и администратор должен непрерывно обучаться, следить за новостями безопасности и адаптировать защиту под конкретные требования своей инфраструктуры.

Основные принципы, которые следует помнить: принцип наименьших привилегий, глубокая эшелонированная защита, регулярные обновления, постоянный мониторинг и готовность к инцидентам. Соблюдение этих принципов и внедрение описанных практик значительно повысит устойчивость вашего сервера к современным угрозам.

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