Hardening Ubuntu Server: настройка по CIS Benchmark и NIST

0
13
Обложка статьи: Hardening Ubuntu Server: настройка по CIS Benchmark и NIST

Для Ubuntu есть готовый эталон: CIS Ubuntu Linux Benchmark для вашей LTS-версии. Ниже порядок настройки и способ проверить результат сканером, а не вручную. Общие принципы и соответствие требованиям ФСТЭК и NIST: hardening Linux.

Что взять за основу

Источник Зачем
CIS Ubuntu Linux Benchmark Пошаговые настройки Level 1 (безопасный минимум) и Level 2 (строже, возможны проблемы с совместимостью)
Ubuntu Security Guide (USG) Официальный инструмент проверки и применения профилей CIS (доступен с Ubuntu Pro)
NIST SP 800-123 Общие требования к защите серверов

Начните с Level 1. Level 2 включайте после проверки на тестовой копии.

Шаг 1. Обновления и автообновления

sudo apt update && sudo apt full-upgrade -y
sudo apt install -y unattended-upgrades needrestart
sudo dpkg-reconfigure -plow unattended-upgrades
sudo needrestart -r l

Проверьте, что LTS-релиз ещё получает обновления безопасности (ubuntu-security-status).

Шаг 2. SSH

Создайте файл /etc/ssh/sshd_config.d/10-hardening.conf:

PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
AllowUsers admin1
sudo sshd -t && sudo systemctl reload ssh

Не закрывайте текущую сессию, пока не проверите вход в новой. Подробно про ключи: включение SSH.

Шаг 3. UFW и AppArmor

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw limit 22/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo aa-status

В Ubuntu AppArmor включён по умолчанию. Профили должны быть в режиме enforce для сетевых сервисов. Если вместо UFW вы пользуетесь nftables, не смешивайте их: firewall в Linux.

Шаг 4. Пароли и блокировка подбора

sudo apt install -y libpam-pwquality
# /etc/security/pwquality.conf
minlen = 14
minclass = 3
# /etc/login.defs
PASS_MAX_DAYS 365
PASS_MIN_DAYS 1

Для защиты от подбора добавьте pam_faillock или поставьте CrowdSec. При входе только по ключам пароли нужны для sudo и консоли.

Шаг 5. Параметры ядра

Файл /etc/sysctl.d/90-hardening.conf:

net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_syncookies = 1
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
sudo sysctl --system

Если сервер выступает маршрутизатором или шлюзом VPN, параметры пересылки и редиректов нужно настроить иначе, не копируйте эти значения вслепую.

Шаг 6. Аудит и журналы

sudo apt install -y auditd
sudo tee /etc/audit/rules.d/90-identity.rules >/dev/null <<'EOF'
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudo
-w /etc/sudoers.d/ -p wa -k sudo
EOF
sudo augenrules --load

Отправляйте журналы на отдельный сервер: сбор логов.

Автоматическая проверка

# Ubuntu Pro (бесплатно для небольшого числа машин личного использования)
sudo pro attach TOKEN
sudo pro enable usg
sudo apt install -y usg
sudo usg audit cis_level1_server

# без подписки
sudo apt install -y lynis
sudo lynis audit system

USG создаёт отчёт с пунктами, не прошедшими проверку. Команду usg fix (автоматическое применение) запускайте только на тестовой копии: она меняет разделы диска, права и сетевые параметры.

Как проверить

  • sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication' показывает no.
  • sudo ufw status verbose: политика входящих — deny.
  • sudo aa-status: профили в enforce.
  • Отчёт USG или Lynis содержит меньше замечаний, чем до настройки, а оставшиеся вы можете объяснить.

Если защищаете систему по требованиям ФСТЭК, учтите, что Ubuntu не является сертифицированной ОС: для таких систем выбирайте Astra Linux или РЕД ОС.

Остальные разделы CIS: особенности Ubuntu

Полный перечень мер по разделам 1–7 дан в общей статье: hardening Linux. Ниже то, что в Ubuntu делается иначе.

Раздел 1. /tmp, загрузчик, баннеры

В Ubuntu /tmp удобно вынести в tmpfs через systemd и задать параметры монтирования:

sudo systemctl unmask tmp.mount
sudo mkdir -p /etc/systemd/system/tmp.mount.d
printf '[Mount]\nOptions=mode=1777,strictatime,noexec,nodev,nosuid\n' | sudo tee /etc/systemd/system/tmp.mount.d/override.conf
sudo systemctl daemon-reload && sudo systemctl enable --now tmp.mount
findmnt -no OPTIONS /tmp

Пароль загрузчика: сгенерируйте хеш grub-mkpasswd-pbkdf2, добавьте в /etc/grub.d/40_custom строки set superusers="root" и password_pbkdf2 root HASH, затем sudo update-grub. Чтобы сервер загружался без ввода пароля, в /etc/grub.d/10_linux добавьте к CLASS параметр --unrestricted. Без него загрузка будет требовать пароль при каждом старте.

Сообщение дня motd-news отключите, чтобы сервер не обращался к внешним адресам: sudo sed -i 's/ENABLED=1/ENABLED=0/' /etc/default/motd-news.

Раздел 5. PAM

sudo apt install -y libpam-pwquality
# блокировка подбора: /etc/security/faillock.conf
deny = 5
unlock_time = 900
# активировать модуль через pam-auth-update (отметьте нужные профили)
sudo pam-auth-update
# история паролей: в /etc/pam.d/common-password до pam_unix.so
password required pam_pwhistory.so remember=24 enforce_for_root use_authtok

Не редактируйте файлы common-* без второй открытой сессии root.

Раздел 6. Аудит и AppArmor

sudo apt install -y auditd audispd-plugins apparmor-utils
sudo aa-status                          # профили в enforce
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx   # пример: включить профиль
sudo grep -n GRUB_CMDLINE_LINUX= /etc/default/grub   # добавить audit=1 audit_backlog_limit=8192
sudo update-grub

Раздел 7. Обновления безопасности

Для LTS-релизов после окончания стандартной поддержки обновления безопасности поставляются по подписке Ubuntu Pro (ESM). Состояние покрытия: ubuntu-security-status и pro status. Livepatch применяет исправления ядра без перезагрузки: sudo pro enable livepatch.

Проверка соответствия профилю

sudo usg audit cis_level1_server
sudo usg audit cis_level2_server
sudo usg generate-tailoring cis_level1_server tailor.xml   # исключить пункты, которые вам не подходят
sudo usg audit --tailoring-file tailor.xml

Файл исключений (tailoring) нужен, чтобы осознанно отклонять пункты, а не оставлять их «красными»: каждое отклонение записывайте с причиной. Соответствие мерам ФСТЭК и разделам NIST дано в таблицах общей статьи.

Параметры ядра и права на файлы по методическому документу ФСТЭК, готовый sysctl-файл и скрипт проверки: рекомендации ФСТЭК по настройке Linux.

Оставьте свой ответ