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 GalaxyGitHub 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 角色应用。

每个部分的变量位于各自的文件中。

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 testmolecule 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 Utzansible-lockdown,仅举几例)。继续加油 :metal:

许可证

MIT

作者信息

该角色由 Ali Muhammad 创建。

关于项目

Role to apply CIS Benchmark for Ubuntu Linux 20.04 LTS.

安装
ansible-galaxy install darkwizard242.cis_ubuntu_2004
许可证
mit
下载
20.3k
拥有者
Senior DevOps/CloudOps Engineer. Dedicated to Automating everything I come across. Love to work on and learn new technologies/tools everyday!