darkwizard242.cis_ubuntu_2004
Ansible 角色:cis_ubuntu_2004 :computer:
Ansible 角色用于应用 CIS 基准检查 Ubuntu Linux 20.04 LTS。
当前支持的版本:
- CIS 基准检查 Ubuntu Linux 20.04 LTS v1.1.0
- CIS 基准检查 Ubuntu Linux 20.04 LTS v1.0.0
版本信息
下表显示了在 Ansible Galaxy 和 GitHub Releases 上可用的角色版本,对应于【CIS 基准检查 Ubuntu Linux 20.04 LTS】。
CIS Ubuntu 20.04 基准版本 | Ansible Galaxy 版本 | 存储库标签版本 |
---|---|---|
1.0.0 | 1.0.0, 1.0.1, 1.0.2 | 1.0.0, 1.0.1, 1.0.2 |
1.1.0 | 2.0.0, 2.0.1, 2.1.0, 3.0.0, 3.1.0, 3.2.0 | 2.0.0, 2.0.1, 2.1.0, 3.0.0, 3.1.0, 3.2.0 |
1. 安装/下载说明:
该角色在 Ansible Galaxy 上可用。您可以通过以下几种方法在 Ansible 控制节点上安装/下载 cis_ubuntu_2004
角色,无论是从 Ansible Galaxy 还是直接从存储库。
不使用 requirements.yml 文件:
安装/下载最新的(默认)可用标签版本:
ansible-galaxy install darkwizard242.cis_ubuntu_2004
安装/下载特定的可用标签版本(使用 3.2.0 作为示例):
ansible-galaxy install darkwizard242.cis_ubuntu_2004,3.2.0
从存储库安装/下载特定的可用分支版本(使用
master
分支作为示例,master
始终符合最新可用的 CIS Ubuntu 20.04 基准):ansible-galaxy install darkwizard242.cis_ubuntu_2004,master
从存储库安装/下载特定的可用分支版本(使用
feature/cis_version_1.1.0
分支作为示例,符合最新 CIS Ubuntu 20.04 基准 v1.1.0 的更新):ansible-galaxy install darkwizard242.cis_ubuntu_2004,feature/cis_version_1.1.0
从存储库安装/下载特定的可用分支版本(使用
feature/cis_version_1.0.0
分支作为示例,符合最新 CIS Ubuntu 20.04 基准 v1.0.0 的更新):ansible-galaxy install darkwizard242.cis_ubuntu_2004,feature/cis_version_1.0.0
使用 requirements.yml 文件:
将其添加到现有的 requirements.yml 文件中,或创建一个新的文件以安装 cis_ubuntu_2004
。
从 Ansible Galaxy 直接获取最新版本。
- name: darkwizard242.cis_ubuntu_2004
从 Ansible Galaxy 直接获取特定版本。
- name: darkwizard242.cis_ubuntu_2004 version: 3.2.0
从存储库获取特定分支。
- name: cis_ubuntu_2004 src: https://github.com/darkwizard242/cis_ubuntu_2004 version: master
添加到 requirements.yml 后,安装/下载:
ansible-galaxy install -r requirements.yml
注意: 上述安装角色仅会下载角色,以便在您的 ansible 剧本中使用。您可以在此处阅读角色安装/下载说明 here。
2. 一些注意事项:
关于 磁盘分区 和其 挂载点 的基准检查第一部分未在此角色中应用。原因很简单,因为每个个体/组织的系统架构和磁盘布局可能会有所不同。我建议您自己应用这些内容。以下是这些基准检查的列表:
- 1.1.10 确保存在单独的 /var 分区(自动化)
- 1.1.11 确保存在单独的 /var/tmp 分区(自动化)
- 1.1.12 确保 /var/tmp 分区包含 nodev 选项(自动化)
- 1.1.13 确保 /var/tmp 分区包含 nosuid 选项(自动化)
- 1.1.14 确保 /var/tmp 分区包含 noexec 选项(自动化)
- 1.1.15 确保存在单独的 /var/log 分区(自动化)
- 1.1.16 确保存在单独的 /var/log/audit 分区(自动化)
- 1.1.17 确保存在单独的 /home 分区(自动化)
- 1.1.18 确保 /home 分区包含 nodev 选项(自动化)
- 1.1.19 确保可移动介质分区设置 nodev 选项(手动)
- 1.1.20 确保可移动介质分区设置 nosuid 选项(手动)
- 1.1.21 确保可移动介质分区设置 noexec 选项(手动)
第四部分中的以下基准检查也未实施:
- 4.2.1.5 确保 rsyslog 被配置为向远程记录主机发送日志(自动化)
- 4.2.1.6 确保仅在指定的日志主机上接受远程 rsyslog 消息(手动)
- 4.3 确保配置了 logrotate(手动)
3. 需求
无。
4. 角色变量
角色默认变量在 defaults/main/
中使用。
defaults/main/main.yml 包含与整个 CIS 部分相关的变量,如以下内容及 重要变量 部分提到的系统破坏变量:
ubuntu_2004_cis_section1: true
ubuntu_2004_cis_section2: true
ubuntu_2004_cis_section3: true
ubuntu_2004_cis_section4: true
ubuntu_2004_cis_section5: true
ubuntu_2004_cis_section6: true
以上变量的目的是指明与这些部分相关的所有任务应通过 cis_ubuntu_2004
角色应用。
每个部分的变量位于各自的文件中。
- 第一部分变量在 defaults/main/section_01.yml
- 第二部分变量在 defaults/main/section_02.yml
- 第三部分变量在 defaults/main/section_03.yml
- 第四部分变量在 defaults/main/section_04.yml
- 第五部分变量在 defaults/main/section_05.yml
- 第六部分变量在 defaults/main/section_06.yml
在 cis_ubuntu_2004
角色中,一切的角色默认值可以通过在剧本中或任何其他 变量优先级方法 进行覆盖。
重要变量
CIS Ubuntu 20.04 加固基准要求清除许多可能被利用的服务,存在已知漏洞、导致攻击面暴露或在不需要的情况下应禁用的服务。根据基准,默认情况下将清除所有这些服务,并将其变量值设置为 false
。但是,如果您出于某种原因仍然需要使用这些服务,请将其值更改为 true
,以便在剧本中应用角色时,执行 清除 这些服务的角色任务可以被 跳过。
除了上述对一些变量的说明外,还有其他变量用于定义是否希望系统上有特定服务(例如 SSH 守护进程)、各种工具的配置参数(例如 auditd)等。这些在剧本中也可以被覆盖。
# 如果需要 IPv6,请设置为 `true`。
ubuntu_2004_cis_require_ipv6: false
# 如果需要无线,请设置为 `true`。
ubuntu_2004_cis_require_wireless: false
# 如果系统应该作为路由器,设置为 `true`。
ubuntu_2004_cis_require_router: false
# 如果不需要 SSH 守护进程,请设置为 `false`。
ubuntu_2004_cis_require_ssh_server: true
# 存储 SSH 守护进程强加密方式的变量。
ubuntu_2004_cis_require_ssh_ciphers: [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
# 存储 SSH 守护进程强 MAC 算法的变量。
ubuntu_2004_cis_require_ssh_macs: [email protected],[email protected],hmac-sha2-512,hmac-sha2-256
# 存储 SSH 守护进程强密钥交换算法的变量。
ubuntu_2004_cis_require_ssh_kexalgorithms: curve25519-sha256,[email protected],diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
# 存储 SSH 守护进程的客户端保持活动间隔(秒)。
ubuntu_2004_cis_require_ssh_clientaliveinterval: '300'
# 存储 SSH 守护进程的最大客户端活跃计数。
ubuntu_2004_cis_require_ssh_clientalivecountmax: '3'
# 存储 SSH 守护进程的登录宽限时间(秒)。
ubuntu_2004_cis_require_ssh_logingracetime: '60'
# 存储 SSH 守护进程的允许用户。
ubuntu_2004_cis_require_ssh_allowusers: ubuntu vagrant
# 存储 SSH 守护进程的允许用户组。
ubuntu_2004_cis_require_ssh_allowgroups: ubuntu vagrant
# 存储 SSH 守护进程的拒绝用户。
ubuntu_2004_cis_require_ssh_denyusers: bogus dummy
# 存储 SSH 守护进程的拒绝用户组。
ubuntu_2004_cis_require_ssh_denygroups: bogus dummy
# 存储 PAM 密码强度的最小长度和字符类。
ubuntu_2004_cis_require_pam_pwquality:
- key: 'minlen'
value: '14'
- key: 'minclass'
value: '4'
# 存储密码过期的 PASS_MAX_DAYS 值。
ubuntu_2004_cis_require_passmaxdays: '365'
# 存储密码修改的 PASS_MIN_DAYS 值。
ubuntu_2004_cis_require_passmindays: '1'
# 存储 PASS_WARN_AGE 的默认密码不活动期,设置为 30 天。
ubuntu_2004_cis_require_passwarnage: '7'
# 存储设置密码到期提醒的 PASS_WARN_AGE 值(天数)。
ubuntu_2004_cis_require_passinactive: '30'
# 存储 Shell 超时(秒)的值。
ubuntu_2004_cis_require_shell_timeout: '900'
# 存储使用 su 执行所需的组名。
ubuntu_2004_cis_require_su_group: sugroup
# 存储 cron 作业执行传播的审计系统文件权限日志文件(手动)任务以进行审核。
ubuntu_2004_cis_require_audit_system_file_permissions_logfile: /var/log/6_1_1_cis_audit_system.log
# 可以是 'iptables'、'nftables' 或 'ufw'。
ubuntu_2004_cis_firewall: ufw
# 如果使用 'ufw',则将其设置为 'yes' 允许配置和允许 UFW git 应用程序配置文件。
ubuntu_2004_cis_section3_rule_3_5_1_7_ufw_require_git_profile: yes
# 如果使用 'ufw',则将其设置为 'yes' 允许配置和允许 UFW HTTP 应用程序配置文件。
ubuntu_2004_cis_section3_rule_3_5_1_7_ufw_require_http_profile: yes
# 如果使用 'ufw',则将其设置为 'yes' 允许配置和允许 UFW HTTPS 应用程序配置文件。
ubuntu_2004_cis_section3_rule_3_5_1_7_ufw_require_https_profile: yes
# 如果使用 'ufw',则将其设置为 'true' 默认拒绝所有传入连接。与 `ufw default deny incoming` 工作相同。如果您不需要应用此设置,请设置为 `false`。
ubuntu_2004_cis_section3_rule_ufw_default_deny_incoming: true
# 如果使用 'ufw',则将其设置为 'true' 默认拒绝所有传出连接。与 `ufw default deny outgoing` 工作相同。如果您不需要应用此设置,请设置为 `false`。
ubuntu_2004_cis_section3_rule_ufw_default_deny_outgoing: true
# 如果使用 'ufw',则将其设置为 'true' 默认拒绝所有路由连接。与 `ufw default deny routed` 工作相同。如果您不需要应用此设置,请设置为 `false`。
ubuntu_2004_cis_section3_rule_ufw_default_deny_routed: true
# 如果使用 'nftables',则将其设置为 'true' 默认拒绝所有输入/转发/输出连接,使系统不可达。如果您不需要应用此设置或失去连接,请设置为 `false`。
ubuntu_2004_cis_section3_rule_3_5_2_8: true
# 如果使用 'iptables',则将其设置为 'true' 默认拒绝所有传入的 ipv4 连接,使系统不可达。如果您不需要应用此设置或失去连接,请设置为 `false`。
ubuntu_2004_cis_section3_rule_iptables_ipv4_default_deny_input: true
# 如果使用 'iptables',则将其设置为 'true' 默认拒绝所有传出的 ipv4 连接,使系统不可达。如果您不需要应用此设置或失去连接,请设置为 `false`。
ubuntu_2004_cis_section3_rule_iptables_ipv4_default_deny_output: true
# 如果使用 'iptables',则将其设置为 'true' 默认拒绝所有转发的 ipv4 连接,使系统不可达。如果您不需要应用此设置或失去连接,请设置为 `false`。
ubuntu_2004_cis_section3_rule_iptables_ipv4_default_deny_forward: true
# 如果使用 'iptables' 且启用了 ipv6,则将其设置为 'true' 默认拒绝所有传入的 ipv4 连接,使系统不可达。如果您不需要应用此设置或失去连接,请设置为 `false`。
ubuntu_2004_cis_section3_rule_iptables_ipv6_default_deny_input: true
# 如果使用 'iptables' 且启用了 ipv6,则将其设置为 'true' 默认拒绝所有传出的 ipv4 连接,使系统不可达。如果您不需要应用此设置或失去连接,请设置为 `false`。
ubuntu_2004_cis_section3_rule_iptables_ipv6_default_deny_output: true
# 如果使用 'iptables' 且启用了 ipv6,则将其设置为 'true' 默认拒绝所有转发的 ipv4 连接,使系统不可达。如果您不需要应用此设置或失去连接,请设置为 `false`。
ubuntu_2004_cis_section3_rule_iptables_ipv6_default_deny_forward: true
# 可以是 'ntp'、'chrony' 或 'systemd-timesyncd'。
ubuntu_2004_cis_time_synchronization: systemd-timesyncd
# 审计d 启动时存储足够记录的回溯限制。
ubuntu_2004_cis_auditd_backloglimit: '8192'
# 审计d 日志的日志文件大小。根据情况设置。
ubuntu_2004_cis_auditd_maxlogfile: '25'
# 审计d 日志达到最大大小时采取的行动。根据情况设置。
ubuntu_2004_cis_auditd_maxlogfileaction: keep_logs
# 剩余空间不足时审计d 的操作。根据情况设置。
ubuntu_2004_cis_auditd_spaceleftaction: email
# 审计d 的邮件通知账户。根据情况设置。
ubuntu_2004_cis_auditd_actionmailacct: root
# 当审计日志已满时选择停止。根据情况设置。
ubuntu_2004_cis_auditd_adminspaceleftaction: halt
# 允许安排 cron 作业的用户。
ubuntu_2004_cis_cron_allow_users:
- root
- ubuntu
# 允许使用 'at' 安排作业的用户。
ubuntu_2004_cis_at_allow_users:
- root
- ubuntu
# 如果需要 X Windows 系统,请设置为 `true`。
ubuntu_2004_cis_require_xwindows_system: false
# 如果需要 CUPS,请设置为 `true`。
ubuntu_2004_cis_require_cups: false
# 如果需要 DHCP 服务器,请设置为 `true`。
ubuntu_2004_cis_require_dhcp_server: false
# 如果需要 LDAP 服务器,请设置为 `true`。
ubuntu_2004_cis_require_ldap_server: false
# 如果需要 NFS 服务器,请设置为 `true`。
ubuntu_2004_cis_require_nfs_server: false
# 如果需要 DNS 服务器,请设置为 `true`。
ubuntu_2004_cis_require_dns_server: false
# 如果需要 FTP 服务器,请设置为 `true`。
ubuntu_2004_cis_require_ftp_server: false
# 如果需要 HTTP (apache2) 服务器,请设置为 `true`。
ubuntu_2004_cis_require_http_server: false
# 如果需要 IMAP 和 POP3 服务器,请设置为 `true`。
ubuntu_2004_cis_require_imap_pop3_server: false
# 如果需要 Samba 守护进程,请设置为 `true`。
ubuntu_2004_cis_require_samba_server: false
# 如果需要 Squid 服务器,请设置为 `true`。
ubuntu_2004_cis_require_squid_server: false
# 如果需要 SNMP 服务器,请设置为 `true`。
ubuntu_2004_cis_require_snmp_server: false
# 为避免使 Postfix 仅在本地模式下运行。定义为 `false` 如果 Postfix 需要按本地模式工作。
ubuntu_2004_cis_require_mail_server: true
# 如果需要 RSYNC,请设置为 `true`。
ubuntu_2004_cis_require_rsyncd_server: false
# 如果需要 NIS 服务器,请设置为 `true`。
ubuntu_2004_cis_require_nis_server: false
# 如果需要 NIS 客户端,请设置为 `true`。
ubuntu_2004_cis_require_nis_client: false
# 如果需要 RSH 客户端,请设置为 `true`。
ubuntu_2004_cis_require_rsh_client: false
# 如果需要 TALK 客户端,请设置为 `true`。
ubuntu_2004_cis_require_talk_client: false
# 如果需要 TELNET 客户端,请设置为 `true`。
ubuntu_2004_cis_require_telnet_client: false
# 如果需要 LDAP 客户端,请设置为 `true`。
ubuntu_2004_cis_require_ldap_client: false
# 如果需要 RPCBIND 客户端,请设置为 `true`。
ubuntu_2004_cis_require_rpcbind_client: false
5. 依赖关系
无。
6. 示例剧本:
示例剧本已在 playbook-examples 文件夹中提供。它包含具有默认设置和自定义需求的剧本。
注意: 鉴于某些与网络有关的 CIS 控件可能会导致系统出现故障,并使用户无法重新登录系统。我建议您首先应用或实验使用 playbook-examples/playbook_with_custom_firewall_changes.yml 剧本。修改剧本中的连接类型和主机以符合您的需求。
应用示例:
如果您使用的是 playbook-examples 文件夹中提供的任何剧本,您可以选择其中一个并运行以下命令以应用它们:
ansible-playbook playbook_with_defaults.yml
ansible-playbook playbook_with_custom_firewall_changes.yml
ansible-playbook playbook_with_ipv6.yml
ansible-playbook playbook_with_ufw.yml
假设您创建了名为 myplaybook.yml 的自定义剧本,您可以简单地运行以下命令。
ansible-playbook myplaybook.yml
使用标签应用示例:
角色中的所有任务都已根据 CIS 级别分配、规则编号和节编号分配了标签。默认情况下,将应用第 1 级和第 2 级控件。因此,如果您希望为级别、规则编号或部分运行自定义应用 - 使用以下示例:
仅应用第 1 级控件的示例:
ansible-playbook <playbook-name-here>.yml --tags "level_1"
仅应用第 2 级控件的示例:
ansible-playbook <playbook-name-here>.yml --tags "level_2"
应用特定部分(例如 CIS Ubuntu 20.04 基准的第 4 部分)的控制的示例:
ansible-playbook <playbook-name-here>.yml --tags "section4"
应用特定控制(例如 CIS Ubuntu 20.04 基准的 6.2.2 控制)的示例:
ansible-playbook <playbook-name-here>.yml --tags "rule_6_2_2"
7. 本地开发和 CI/CD:
对于 cis_ubuntu_2004 角色的本地开发,请执行以下操作:
复制该存储库。
在本地克隆它。
在您的机器上安装 Vagrant。安装说明可以在 这里 找到,或者如果您需要的话,可以利用 darkwizard242.vagrant 角色进行安装 - 但请确认它是否支持您的操作系统。
在您的机器上安装 Virtualbox。安装说明可在 这里 找到,或者如果您需要的话,可以利用 darkwizard242.virtualbox 角色进行安装 - 但请确认它是否支持您的操作系统。
使用以下命令安装所需模块:
# 在以非 root 用户身份运行时全局安装 pip 模块。 sudo -H python3 -m pip install -U molecule ansible-lint flake8 pytest-testinfra molecule-vagrant
或
# 在以非 root 用户身份运行时本地安装 pip 模块。 python3 -m pip install -U molecule ansible-lint flake8 pytest-testinfra molecule-vagrant
进行更改并运行
molecule test
或molecule converge
。
molecule test 命令将运行整个配置的 molecule 测试序列。
molecule converge 命令将仅创建 vagrant 实例并应用角色中定义的所有操作。
当然,如果您不熟悉 molecule,也可以简单地下载 cis_ubuntu_2004 角色的代码,进行更改,然后通过 ansible-playbook 在测试箱上运行它。
当您创建一个拉取请求时,TravisCI 构建将自动触发 here。TravisCI 构建的配置在 .travis.yml 中。它将执行各种任务,例如:
- 从拉取请求克隆代码。
- 执行存储库缓存更新。
- 安装先决条件包。
- 安装 Vagrant 和 Virtualbox。
- 对整个存储库代码基础进行 SonarCloud 代码质量检查。
- 运行 molecule 测试(这将配置一个 vagrant 盒子,应用角色代码并运行 TestInfra 测试套件用于 cis_ubuntu_2004 角色)。
8. 贡献:
欢迎贡献。贡献的信息请在 这里 查看。
灵感
受到 Ansible 社区许多成员的卓越工作的启发(如 Florian Utz 和 ansible-lockdown,仅举几例)。继续加油 :metal:
许可证
作者信息
该角色由 Ali Muhammad 创建。
Role to apply CIS Benchmark for Ubuntu Linux 20.04 LTS.
ansible-galaxy install darkwizard242.cis_ubuntu_2004