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.



















