ansible_os_hardening
os-hardening (Ansible роль)
Описание
Эта роль предоставляет множество настроек, связанных с безопасностью, обеспечивая всестороннюю базовую защиту. Она предназначена для соответствия 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
Участники + Спасибо
...
Эта роль в значительной степени основана на руководствах:
- Arch Linux wiki, Усиление sysctl
- NSA: Руководство по безопасной конфигурации Red Hat Enterprise Linux 5
- Ubuntu Безопасность/Особенности
- Deutsche Telekom, Группа ИТ-безопасности, Требования к безопасности (нем)
Спасибо всем вам!
Участие
Смотрите руководство для участников.
Лицензия и автор
- Автор: Себастьян Гумприх
Лицензировано под лицензией 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