audit
Ansible Роль: аудит
Роль Ansible, которая устанавливает и настраивает аудит на RHEL/CentOS, Fedora и Debian/Ubuntu.
Стандартные правила основаны на критериях CIS для RedHat/Ubuntu/Debian и также на этом репозитории github: https://github.com/Neo23x0/auditd
Отказ от ответственности: Я не являюсь экспертом по безопасности, и вы ни в коем случае не должны использовать эту роль, не изучив предварительно, как работает аудит и какие правила настроены в этой роли. Безопасность ваших серверов — ВАША ответственность!
Требования
Операционная система, работающая напрямую на сервере или на гипервизоре виртуализации. На контейнеризованных системах может работать только один процесс auditd, обычно на хост-системе. Эта роль не будет пытаться запустить демон auditd в контейнерах.
Переменные роли
Доступные переменные перечислены ниже, вместе со значениями по умолчанию (см. defaults/main.yml
):
audit_local_events: true
Это ключевое слово «да/нет» указывает, следует ли включать локальные события. Обычно вы хотите видеть локальные события, поэтому значение по умолчанию — да. Установить его в «нет» стоит, если вы хотите агрегировать события только из сети.
#audit_log_file: /var/log/audit/audit.log
Это ключевое слово указывает полный путь к файлу журнала, где будут храниться записи аудита. Это должен быть обычный файл.
audit_write_logs: true
Это ключевое слово «да/нет» определяет, следует ли записывать логи на диск. Обычно вы хотите это, поэтому значение по умолчанию — истинно.
audit_log_format: ENRICHED
Формат журнала описывает, как информация должна храниться на диске. Есть 2 варианта: raw (сырые) и enriched (более детализированные).
audit_log_group: root
Это ключевое слово определяет группу, которая будет применена к правам доступа к файлу журнала. По умолчанию это root. Имя группы может быть как числовым, так и текстовым.
audit_priority_boost: 4
Это неотрицательное число, которое указывает демону аудита, насколько увеличить приоритет. Значение по умолчанию — 4. Нет изменений — 0.
audit_flush: INCREMENTAL_ASYNC
Допустимые значения: none, incremental, incremental_async, data и sync.
audit_freq: 50
Это неотрицательное число, которое указывает демону аудита, сколько записей записывать перед явной командой сброса на диск. Это значение действительно только тогда, когда ключевое слово flush установлено в incremental или incremental_async.
audit_num_logs: 5
Это ключевое слово определяет количество файлов журнала, которые следует хранить, если rotate указано как max_log_file_action. Если число < 2, логи не ротируются. Это число должно быть 999 или меньше.
audit_name_format: NONE
Эта опция определяет, как имена узлов компьютера включаются в поток событий аудита. Доступные варианты: none, hostname, fqd, numeric и user. None означает, что имя компьютера не вставляется в событие аудита.
#audit_name: mydomain
Это строка, определенная администратором, которая идентифицирует машину, если в качестве опции указано имя пользователя.
audit_max_log_file: 256
Это ключевое слово указывает максимальный размер файла в мегабайтах. Когда этот лимит достигнут, это приведет к выполнению настраиваемого действия.
audit_max_log_file_action: keep_logs
Этот параметр говорит системе, какое действие предпринять, когда будет обнаружено, что достигнут лимит максимального размера файла. Допустимые значения: ignore, syslog, suspend, rotate и keep_logs.
audit_verify_email: true
Эта опция определяет, проверяется ли указанный в action_mail_acct адрес электронной почты на возможность разрешения доменного имени. Эта опция должна быть указана перед action_mail_acct, иначе будет использоваться значение по умолчанию — да.
audit_action_mail_acct: root
Эта опция должна содержать действительный адрес электронной почты или псевдоним. Адрес по умолчанию — root. Если адрес электронной почты не локален для машины, вы должны убедиться, что почта правильно настроена на вашей машине и в сети. Также эта опция требует, чтобы на машине существовал /usr/lib/sendmail.
audit_space_left: 75
Если свободное пространство в файловой системе, содержащей log_file, упадет ниже этого значения, демон аудита выполнит действие, указанное в space_left_action. Если значение space_left указано как целое число, оно интерпретируется как абсолютный размер в мегабайтах (MiB). Если значение указано как число от 1 до 99 с последующим знаком процента (например, 5%), демон аудита рассчитывает абсолютный размер в мегабайтах на основе размера файловой системы, содержащей log_file.
audit_space_left_action: email
Этот параметр говорит системе, какое действие предпринять, когда было обнаружено, что система начинает испытывать нехватку дискового пространства. Допустимые значения: ignore, syslog, rotate, email, exec, suspend, single и halt.
audit_admin_space_left: 50
Это числовое значение в мегабайтах, которое указывает демону аудита, когда выполнять настраиваемое действие из-за нехватки дискового пространства. Это следует считать последним шансом что-то сделать, прежде чем закончится дисковое пространство.
audit_admin_space_left_action: suspend
Этот параметр говорит системе, какое действие предпринять, когда было обнаружено, что система испытывает нехватку дискового пространства. Допустимые значения: ignore, syslog, rotate, email, exec, suspend, single и halt.
audit_disk_full_action: SUSPEND
Этот параметр говорит системе, какое действие предпринять, когда было обнаружено, что раздел, в который записываются файлы журнала, заполнился. Допустимые значения: ignore, syslog, rotate, exec, suspend, single и halt.
audit_disk_error_action: SUSPEND
Этот параметр говорит системе, какое действие предпринять, когда происходит ошибка при записи событий аудита на диск или ротации логов. Допустимые значения: ignore, syslog, exec, suspend, single и halt.
#audit_tcp_listen_port: 60
Это числовое значение в диапазоне 1..65535, которое, если указано, заставляет auditd слушать соответствующий TCP порт для получения записей аудита от удаленных систем. Демон аудита может быть связан с tcp_wrappers. Вам может понадобиться контролировать доступ через записи в файлах hosts.allow и deny. Если это развернуто на системе с systemd, вам возможно потребуется настроить директиву 'After'.
#audit_tcp_listen_queue: 5
Это числовое значение, которое указывает, сколько ожидающих (запрошенных, но не принятых) соединений разрешено. По умолчанию — 5. Если установить это значение слишком маленьким, может произойти отказ в соединении, если слишком много хостов одновременно запустятся, например, после сбоя питания. Эта настройка используется только для агрегирующих серверов. Клиенты, которые подключаются к удаленному серверу, должны оставить это закомментированным.
#audit_tcp_max_per_addr: 1
Это числовое значение, которое указывает, сколько одновременных соединений с одного IP-адреса разрешено. Значение по умолчанию — 1, максимальное — 1024. Установка этого значения слишком большим может позволить провести атаку на сервер ведения журналов.
audit_use_libwrap: true
Эта настройка определяет, следует ли использовать tcp_wrappers для распознавания попыток подключения от разрешенных машин.
#audit_tcp_client_ports: 1024-65535
Этот параметр может быть единичным числовым значением или двумя значениями, разделенными дефисом (пробелы не допускаются). Он указывает, какие клиентские порты разрешены для входящих соединений. Если не указано, разрешен любой порт.
audit_tcp_client_max_idle: 0
Этот параметр указывает количество секунд, в течение которых клиент может быть бездействующим (т.е. не отправляя данных) перед тем, как auditd начнет жаловаться. Это используется для закрытия неактивных соединений, если клиентская машина не может корректно завершить соединение. Обратите внимание, что это общее значение, оно должно быть выше, чем у любого индивидуального настроенного heartbeat_timeout клиента, желательно в два раза. Значение по умолчанию — ноль, что отключает эту проверку.
audit_transport: TCP
Если установлен на TCP, будут использоваться только владельцы открытых текстовых tcp-соединений. Если установлен на KRB5, будет использоваться Kerberos 5 для аутентификации и шифрования.
audit_krb5_principal: auditd
Это принципал для этого сервера. Значение по умолчанию — "auditd". Учитывая это значение по умолчанию, сервер будет искать ключ, названный как auditd/hostname@EXAMPLE.COM, хранящийся в /etc/audit/audit.key для аутентификации, где hostname — это каноническое имя хоста сервера, возвращаемое DNS-запросом его IP-адреса.
#audit_krb5_key_file: /etc/audit/audit.key
Расположение ключа для принципала этого клиента. Обратите внимание, что файл ключа должен принадлежать root и иметь права 0400.
audit_distribute_network: false
Если установлен на true, события, исходящие из сети, будут распределяться к диспетчеру аудита для обработки.
audit_q_depth: 400
Это числовое значение, которое указывает, какого размера будет внутренняя очередь диспетчера событий аудита. Более большая очередь позволяет лучше обрабатывать поток событий, но может удерживать не обработанные события, когда демон завершает работу. Если в syslog появляются сообщения о сброшенных событиях, увеличьте это значение.
audit_overflow_action: SYSLOG
Эта опция определяет, как демон должен реагировать на переполнение своей внутренней очереди. Когда это происходит, это означает, что приходит больше событий, чем он может передать дочерним процессам. Эта ошибка означает, что он потеряет текущее событие, которое пытается отправить. Эта опция имеет следующие варианты: ignore, syslog, suspend, single и halt.
audit_max_restarts: 10
Это неотрицательное число, которое говорит диспетчеру событий аудита, сколько раз он может попытаться перезапустить сбойный плагин.
audit_plugin_dir: /etc/audit/plugins.d
Это местоположение, которое auditd будет использовать для поиска своих файлов конфигурации плагинов.
force_overwrite_audit: true
Если файл аудита уже существует, принудительно перезаписать? Он перезапишет только если содержимое целевого файла отличается от исходного.
audit_sudo_log: "{{ sudo_log | default('/var/log/sudo.log') }}"
Если роль sudo определена, возьмите значение из переменной sudo_log, иначе используйте значение по умолчанию: /var/log/sudo.log. Это позволяет избежать многократного указания одной и той же информации. Но роль sudo не является зависимостью для этой роли.
Переменные, перечисленные ниже, не нужно изменять для целевых систем (см. vars/main.yml):
audit_packages: ['audit', 'audit-libs']
Эта переменная определена в vars/main.yml и установлена в соответствии с дистрибутивом Linux. Пользователям не нужно изменять эту переменную для целевых систем этой роли.
audit_config_path: /etc/audit/auditd.conf
Эта переменная определена в vars/main.yml и контролирует, где находится файл auditd.conf.
audit_rulesd_path: /etc/audit/rules.d
Эта переменная определена в vars/main.yml и контролирует, где располагается директория rules.d.
audit_rules_files:
- 01-init.rules
- 10-self-audit.rules
- 20-filters.rules
- 30-kernel.rules
- 40-identity.rules
- 40-login.rules
- 40-mount.rules
- 40-stunnel.rules
- 40-swap.rules
- 40-time.rules
- 50-cron.rules
- 50-dac.rules
- 50-hostname.rules
- 50-ip-connections.rules
- 50-network.rules
- 50-pkg-manager.rules
- 50-remote-shell.rules
- 50-sudoers.rules
- 50-system-libs.rules
- 50-system-startup.rules
- 55-privileged.rules
- 60-mail.rules
- 60-pam.rules
- 60-sshd.rules
- 60-systemd.rules
- 70-access.rules
- 70-mac-policy.rules
- 70-power-state.rules
- 70-sessions.rules
- 70-shell-profiles.rules
- 80-data-compression.rules
- 80-network.rules
- 80-privilege-abuse.rules
- 80-reconnaissance.rules
- 80-socket-creation.rules
- 80-suspicious.rules
- 80-suspicious-shells.rules
- 80-virtualization.rules
- 90-cred-in-files.rules
- 90-IPC.rules
- 90-root-exec.rules
- 90-special-sw.rules
- 95-32bit-api-exploitation.rules
Укажите файлы правил для копирования. По умолчанию ни один файл не выбран для копирования. Указанные выше файлы предоставляются ролью, но пользователь может создать свои собственные файлы по мере необходимости. Роль предоставляет правила, разделенные на несколько небольших файлов (вместо одного большого), чтобы облегчить их повторное использование: вы можете выбрать, какие правила реализовать, и можете создать свои собственные пользовательские правила. Правила основаны на CIS и других стандартах безопасности.
Зависимости
Нет зависимостей.
Пример плейбука
- hosts: servers
vars_files:
- vars/main.yml
roles:
- { role: guidugli.audit }
Лицензия
MIT / BSD
Информация об авторе
Эта роль была создана в 2020 году Карлосом Гидугли.
ansible-galaxy install guidugli/ansible-role-audit