guidugli.audit
Ansible角色:审计
这是一个在RHEL/CentOS、Fedora和Debian/Ubuntu上安装和配置审计的Ansible角色。
默认规则基于CIS RedHat/Ubuntu/Debian基准,同时也参考了这个GitHub仓库 https://github.com/Neo23x0/auditd。
免责声明:我不是安全专家,你绝对不应该在没有先了解审计工作原理和此角色配置规则的情况下使用此角色。服务器的安全性是你自己的责任!
要求
操作系统运行在裸机或在虚拟化的hypervisor上。在容器化系统中,只有一个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个选项:原始和丰富。
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
这是管理员定义的字符串,如果使用者被作为name_format选项,则用于识别机器。
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
此参数表示客户端在没有任何数据发送之前可以闲置的秒数。当客户端机器无法正常关闭连接时,这用于关闭不活动连接。请注意,这是全局设置,必须高于任何单个客户端的heartbeat_timeout设置,最好是高出两倍。默认值为零,表示禁用此检查。
audit_transport: TCP
如果设置为TCP,则仅使用明文tcp连接。如果设置为KRB5,则将使用Kerberos 5进行身份验证和加密。
audit_krb5_principal: auditd
这是此服务器的主体。默认值为"auditd"。凭借此默认值,服务器将在/etc/audit/audit.key中查找名为auditd/hostname@EXAMPLE.COM的密钥以进行身份验证,其中hostname是通过其IP地址的DNS查询返回的主机的规范名称。
#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
作者信息
此角色由Carlos Guidugli在2020年创建。