estenrye.cis_ubuntu_2004
Ansible Role: cis_ubuntu_2004 :computer:
CISベンチマークをUbuntu Linux 20.04 LTSに適用するためのAnsible役割です。
現在サポートされているバージョンは以下の通りです:
- Ubuntu Linux 20.04 LTS向けCISベンチマーク v1.1.0
- Ubuntu Linux 20.04 LTS向けCISベンチマーク v1.0.0
バージョン管理
以下の表は、Ansible Galaxy と GitHub Releases にある役割のバージョンを、対応するUbuntu Linux 20.04 LTS用CISベンチマークに基づいて示します。
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 | 2.0.0, 2.0.1, 2.1.0, 3.0.0, 3.1.0 |
1. インストール/ダウンロード手順:
この役割はAnsible Galaxyで入手可能です。cis_ubuntu_2004
をAnsibleコントローラーノードにインストールまたはダウンロードするためのいくつかの方法があります。
requirements.ymlファイルを使用しない場合:
- 最新(デフォルト)のタグバージョンをインストール/ダウンロード:
ansible-galaxy install darkwizard242.cis_ubuntu_2004
- 特定のタグバージョンをインストール/ダウンロード(例として3.1.0を使用):
ansible-galaxy install darkwizard242.cis_ubuntu_2004,3.1.0
- リポジトリから特定のブランチバージョンをインストール/ダウンロード(例として
master
ブランチを使用します。master
は常に最新のCIS Ubuntu 20.04ベンチマークのバージョンに準拠しています):
ansible-galaxy install darkwizard242.cis_ubuntu_2004,master
- リポジトリから特定のブランチバージョンをインストール/ダウンロード(例として、CIS Ubuntu 20.04ベンチマークバージョンv1.1.0 の最新の更新に準拠している
feature/cis_version_1.1.0
ブランチを使用):
ansible-galaxy install darkwizard242.cis_ubuntu_2004,feature/cis_version_1.1.0
- リポジトリから特定のブランチバージョンをインストール/ダウンロード(例として、CIS Ubuntu 20.04ベンチマークバージョンv1.0.0 の最新の更新に準拠している
feature/cis_version_1.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.1.0
- リポジトリから特定のブランチを指定。
- name: cis_ubuntu_2004
src: https://github.com/darkwizard242/cis_ubuntu_2004
version: master
requirements.ymlに追加した後のインストール/ダウンロード:
ansible-galaxy install -r requirements.yml
注: 上記の方法で役割をインストールすると、その役割はansibleプレイブックに使用可能なものとしてダウンロードされます。役割のインストール/ダウンロード手順については、こちらを参照してください。
2. いくつかの考慮事項:
セクション1の**ディスクパーティショニングおよびそのマウントポイント**に関するベンチマークは、この役割に適用されません。その理由は、個人や組織のシステムアーキテクチャやディスクレイアウトが異なる可能性があるためです。これらは自分で適用することをお勧めします。次のリストは、それらのベンチマークです:
- 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からの次のベンチマークも実装されていません:
- 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
役割を介して適用されるべきことを示します。
各セクションの変数はそれぞれのファイルにあります。
- セクション1の変数はdefaults/main/section_01.yml
- セクション2の変数はdefaults/main/section_02.yml
- セクション3の変数はdefaults/main/section_03.yml
- セクション4の変数はdefaults/main/section_04.yml
- セクション5の変数はdefaults/main/section_05.yml
- セクション6の変数は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デーモン用のClient Alive Interval(秒)を格納する変数。
ubuntu_2004_cis_require_ssh_clientaliveinterval: '300'
# SSHデーモン用のClient Alive Count Maxの値を格納する変数。
ubuntu_2004_cis_require_ssh_clientalivecountmax: '3'
# SSHデーモン用のLogin Grace Time(秒)を格納する変数。
ubuntu_2004_cis_require_ssh_logingracetime: '60'
# SSHデーモン用のAllowUsersを格納する変数。
ubuntu_2004_cis_require_ssh_allowusers: ubuntu vagrant
# SSHデーモン用のAllowGroupsを格納する変数。
ubuntu_2004_cis_require_ssh_allowgroups: ubuntu vagrant
# SSHデーモン用のDenyUsersを格納する変数。
ubuntu_2004_cis_require_ssh_denyusers: bogus dummy
# SSHデーモン用のDenyGroupsを格納する変数。
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'
# デフォルトのパスワード非アクティブ期間を30日間に設定するためのINACTIVEの値を格納する変数。
ubuntu_2004_cis_require_passwarnage: '7'
# パスワード有効期限アラートのPASS_WARN_AGEの値を格納する変数。
ubuntu_2004_cis_require_passinactive: '30'
# Shell Timeoutの値を秒単位で格納する変数。
ubuntu_2004_cis_require_shell_timeout: '900'
# suコマンドを実行するために必要なグループの値を格納する変数。
ubuntu_2004_cis_require_su_group: sugroup
# 6.1.1システムファイルの権限を監査するための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
# ブート時に十分なレコードを保存するためのauditdのバックログ制限。
ubuntu_2004_cis_auditd_backloglimit: '8192'
# auditdログのログファイルサイズ。適切に設定してください。
ubuntu_2004_cis_auditd_maxlogfile: '25'
# auditdログが最大サイズに達したときに実行するアクション。適切に設定してください。
ubuntu_2004_cis_auditd_maxlogfileaction: keep_logs
# auditdのための空き容量が不足してきた場合に実行するアクション。適切に設定してください。
ubuntu_2004_cis_auditd_spaceleftaction: email
# auditdに送信するメールアドレス。適切に設定してください。
ubuntu_2004_cis_auditd_actionmailacct: root
# auditログが満杯のときに停止するオプション。適切に設定してください。
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ウィンドウシステムが必要な場合は`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`に設定します。
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プレイブックを使用して適用または実験することをお勧めします。接続タイプとホストをプレイブックに合わせて変更してください。
例の適用:
プレイブックの例を使用している場合は、その中から選択し、次のコマンドを実行して適用できます。
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役割を使用してインストールできますが、お使いのOSでサポートされていることを確認してください。
- マシンにVirtualboxをインストールします。インストール手順はこちらで入手可能です。また、必要な場合は、darkwizard242.virtualbox役割を使用してインストールできますが、お使いのOSでサポートされていることを確認してください。
- 必要なモジュールを次のようにインストールします:
# 非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インスタンスを作成し、役割で定義されたすべての操作を適用します。
もちろん、cis_ubuntu_2004役割のコードを単純にダウンロードして変更し、テストボックスでansible-playbook経由で実行することもできます。
プルリクエストを作成すると、自動的にトラビスCIビルドがトリガーされます。ここにあります。TravisCIビルドの構成はhereにあります。これにより、次のようないくつかのタスクが実行されます:
- プルリクエストからのコードをクローンします。
- リポジトリキャッシュ更新を実行します。
- 事前要件パッケージをインストールします。
- VagrantとVirtualboxをインストールします。
- SonarCloudコード品質チェックを全リポジトリコードベースで実行します。
- molecule testを実行します(これにより、vagrantボックスがプロビジョニングされ、役割コードが適用され、cis_ubuntu_2004役割のTestInfraテストスイートが実行されます)。
8. 貢献:
貢献は大歓迎です。貢献に関する指示はこちらに記載されています。
インスピレーション
Ansibleコミュニティの多くのメンバーの素晴らしい作業からインスパイアされています(例: Florian Utz や ansible-lockdown など)。頑張ってください :metal:
ライセンス
著者情報
この役割は Ali Muhammadによって作成されました。