ansible_os_hardening

os-hardening (Ansible роль)

Статус сборки Чат Gitter Ansible Galaxy

Описание

Эта роль предоставляет множество настроек, связанных с безопасностью, обеспечивая всестороннюю базовую защиту. Она предназначена для соответствия DevSec Linux Baseline.

Она настраивает:

  • Менеджер пакетов, например, разрешает только подписанные пакеты
  • Удаляет пакеты с известными проблемами
  • Настраивает модули pam и pam_limits
  • Конфигурация набора паролей Shadow
  • Настраивает права доступа к системным путям
  • Отключает дампы памяти через мягкие лимиты
  • Ограничивает входы в систему под пользователем root
  • Устанавливает SUID
  • Настраивает параметры ядра через sysctl
  • Устанавливает и настраивает auditd

Она не будет:

  • Обновлять системные пакеты
  • Устанавливать исправления безопасности

Требования

  • Ansible 2.5.0

Предупреждение

Если вы используете inspec для тестирования ваших машин после применения этой роли, убедитесь, что добавили пользователя, который подключается, в переменную os_ignore_users. В противном случае inspec не пройдет. Для получения дополнительной информации смотрите issue #124.

Если вы используете Docker / Kubernetes+Docker, вам нужно будет переопределить настройку ipv4 ip forward в sysctl.

- hosts: localhost
  roles:
    - dev-sec.os-hardening
  vars:
    sysctl_overwrite:
      # Включить переадресацию IPv4-трафика.
      net.ipv4.ip_forward: 1

Переменные

Имя Значение по умолчанию Описание
os_desktop_enable false true, если это настольная система, т.е. Xorg, KDE/GNOME/Unity и т.д.
os_env_extra_user_paths [] добавляет дополнительные пути в переменную PATH пользователя (по умолчанию пусто).
os_env_umask 027 задает разрешения по умолчанию для новых файлов на 750
os_auth_pw_max_age 60 максимальный срок действия пароля (установите 99999, чтобы фактически отключить его)
os_auth_pw_min_age 7 минимальный срок действия пароля (перед любым другим изменением пароля)
os_auth_retries 5 максимальное количество попыток аутентификации перед блокировкой аккаунта на некоторое время
os_auth_lockout_time 600 время в секундах, которое должно пройти, если аккаунт был заблокирован из-за слишком многих неудачных попыток аутентификации
os_auth_timeout 60 время ожидания аутентификации в секундах, вход в систему завершится, если это время истечет
os_auth_allow_homeless false true, если разрешить пользователям без домашней директории входить в систему
os_auth_pam_passwdqc_enable true true, если вы хотите использовать проверку надежности пароля в PAM с помощью passwdqc
os_auth_pam_passwdqc_options "min=disabled,disabled,16,12,8" установите любое значение (в виде строки), которое хотите передать passwdqc
os_security_users_allow [] список действий, которые разрешено выполнять пользователю. Может содержать change_user.
os_security_kernel_enable_module_loading true true, если хотите разрешить изменение модулей ядра, когда система работает (например, modprobe, rmmod)
os_security_kernel_enable_core_dump false ядро гибнет или неправильно ведет себя, и создается дамп ядра
os_security_suid_sgid_enforce true true, если хотите уменьшить биты SUID/SGID. Есть уже список элементов, которые ищутся для настройки, но вы можете добавить свои
os_security_suid_sgid_blacklist [] список путей, из которых должны быть удалены их биты SUID/SGID
os_security_suid_sgid_whitelist [] список путей, для которых не должны изменяться их биты SUID/SGID
os_security_suid_sgid_remove_from_unknown false true, если хотите удалить биты SUID/SGID из любого файла, который не явно указан в blacklist. Это заставит каждый запуск Ansible искать через смонтированные файловые системы все SUID/SGID биты, которые не настроены по умолчанию и в пользовательском черном списке. Если он найдет бит SUID/SGID, он будет удален, если не будет в вашем whitelist.
os_security_packages_clean true удаляет пакеты с известными проблемами. Смотрите раздел пакетов.
ufw_manage_defaults true true означает применение всех настроек с префиксом ufw_
ufw_ipt_sysctl '' по умолчанию отключает IPT_SYSCTL в /etc/default/ufw. Если вы хотите переопределить значения /etc/sysctl.conf, используя ufw - установите его в ваш словарь sysctl, например /etc/ufw/sysctl.conf
ufw_default_input_policy DROP установить политику по умолчанию для входящих ufw на DROP
ufw_default_output_policy ACCEPT установить политику по умолчанию для исходящих ufw на ACCEPT
ufw_default_forward_policy DROP установить политику по умолчанию для пересылки ufw на DROP
os_auditd_enabled true Установите в false, чтобы отключить установку и настройку auditd.

Пакеты

Мы удаляем следующие пакеты:

  • xinetd (NSA, Глава 3.2.1)
  • inetd (NSA, Глава 3.2.1)
  • tftp-server (NSA, Глава 3.2.5)
  • ypserv (NSA, Глава 3.2.4)
  • telnet-server (NSA, Глава 3.2.2)
  • rsh-server (NSA, Глава 3.2.3)
  • prelink (open-scap)

Отключенные файловые системы

Мы отключаем следующие файловые системы, так как они, скорее всего, не используются:

  • "cramfs"
  • "freevxfs"
  • "jffs2"
  • "hfs"
  • "hfsplus"
  • "squashfs"
  • "udf"
  • "vfat" # только если не используется uefi

Чтобы предотвратить отключение некоторых файловых систем, добавьте их в переменную os_filesystem_whitelist.

Установка

Установите роль с помощью ansible-galaxy:

ansible-galaxy install dev-sec.os-hardening

Пример playbook

- hosts: localhost
  roles:
    - dev-sec.os-hardening

Изменение переменных sysctl

Если вы хотите переопределить переменные sysctl, вы можете использовать переменную sysctl_overwrite (в более старых версиях нужно было переопределять весь sysctl_dict). Так, если вы хотите изменить значение переменной переадресации трафика IPv4 на 1, делайте это так:

- hosts: localhost
  roles:
    - dev-sec.os-hardening
  vars:
    sysctl_overwrite:
      # Включить переадресацию IPv4-трафика.
      net.ipv4.ip_forward: 1

Вы также можете изменить hash-behaviour Ansible на merge, тогда вам нужно будет переопределить только тот хэш, который вам необходим. Но помните, что изменение этого поведения повлияет на все ваши playbook и не рекомендуется Ansible.

Локальное тестирование

Предпочтительный способ локального тестирования этой роли - использовать Docker. Вам нужно установить Docker на вашу систему. Смотрите Get started для получения пакета Docker, подходящего для вашей системы.

Также вы можете использовать Vagrant и VirtualBox или VMWare для локального тестирования. Вам нужно установить VirtualBox и Vagrant на вашу систему. Смотрите Vagrant Downloads для получения пакета Vagrant, подходящего для вашей системы. Для всех наших тестов мы используем test-kitchen. Если вы не знакомы с test-kitchen, пожалуйста, ознакомьтесь с их руководством.

Затем установите test-kitchen:

# Установите зависимости
gem install bundler
bundle install

Тестирование с Docker

# Быстрое тестирование на одной машине
bundle exec kitchen test default-ubuntu-1404

# Тест на всех машинах
bundle exec kitchen test

# Для разработки
bundle exec kitchen create default-ubuntu-1404
bundle exec kitchen converge default-ubuntu-1404

Тестирование с VirtualBox

# Быстрое тестирование на одной машине
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test default-ubuntu-1404

# Тест на всех машинах
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test

# Для разработки
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create default-ubuntu-1404
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge default-ubuntu-1404

Для получения дополнительной информации смотрите test-kitchen

Участники + Спасибо

...

Эта роль в значительной степени основана на руководствах:

Спасибо всем вам!

Участие

Смотрите руководство для участников.

Лицензия и автор

  • Автор: Себастьян Гумприх

Лицензировано под лицензией Apache, версия 2.0 (далее "Лицензия"); вы не можете использовать этот файл, кроме как в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу:

http://www.apache.org/licenses/LICENSE-2.0

Если иное не требуется действующим законодательством или согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях "КАК ЕСТЬ", БЕЗ ГАРАНТИЙ И УСЛОВИЙ ЛЮБОГО РОДА, как явных, так и подразумеваемых. Смотрите Лицензию для получения конкретной информации о правомерности и ограничениях по Лицензии.

О проекте

This role provides numerous security-related configurations, providing all-round base protection.

Установить
ansible-galaxy install kmonticolo/ansible-os-hardening
Лицензия
Unknown
Загрузки
62
Владелец
DevSecOps Engineer