Введение
Безопасность сервера — это не разовая задача, а непрерывный процесс, требующий системного подхода и постоянного внимания. 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
Храните резервные копии на отдельном сервере или в облаке с шифрованием.
План реагирования на инциденты
Подготовьте план действий на случай компрометации:
- Изоляция — отключите скомпрометированный сервер от сети
- Анализ — изучите логи для определения масштаба инцидента
- Сохранение доказательств — создайте копии логов и важных файлов
- Устранение угрозы — удалите вредоносное ПО, закройте точку входа
- Восстановление — восстановите систему из проверенных резервных копий
- Анализ причин — определите, как произошел инцидент
- Улучшение защиты — внедрите меры для предотвращения повторения
Заключение
Безопасность Ubuntu сервера — это многоуровневая система защиты, требующая комплексного подхода. Рассмотренные меры создают прочный фундамент безопасности, но не являются исчерпывающими. Ландшафт угроз постоянно меняется, и администратор должен непрерывно обучаться, следить за новостями безопасности и адаптировать защиту под конкретные требования своей инфраструктуры.
Основные принципы, которые следует помнить: принцип наименьших привилегий, глубокая эшелонированная защита, регулярные обновления, постоянный мониторинг и готовность к инцидентам. Соблюдение этих принципов и внедрение описанных практик значительно повысит устойчивость вашего сервера к современным угрозам.
Помните, что абсолютной безопасности не существует, но правильная конфигурация и бдительность делают ваш сервер намного менее привлекательной целью для атакующих, которые обычно ищут легкие жертвы с очевидными уязвимостями.