kmonticolo.ansible_os_hardening
os-hardening (Ansibleロール)
説明
このロールは、多くのセキュリティ関連の設定を提供し、基本的な保護を強化します。これは、DevSec Linux Baselineに準拠することを目的としています。
以下の設定を行います:
- 署名されたパッケージのみを許可するなど、パッケージ管理を設定
- 既知の問題を持つパッケージを削除
pam
およびpam_limits
モジュールを設定- シャドーパスワードスイートの設定
- システムパスの権限を設定
- ソフトリミットによってコアダンプを無効化
- rootログインをシステムコンソールに制限
- SUIDを設定
- sysctlを介してカーネルパラメーターを設定
- auditdをインストールし設定
実施しないこと:
- システムパッケージの更新
- セキュリティパッチのインストール
必要条件
- Ansible 2.5.0
警告
このロールを適用した後、inspecを使用してマシンをテストする場合は、接続ユーザーをos_ignore_users
変数に追加してください。
さもなければ、inspecは失敗します。詳細についてはissue #124を参照してください。
Docker / Kubernetes + Dockerを使用している場合は、ipv4のIPフォワードのsysctl設定をオーバーライドする必要があります。
- hosts: localhost
roles:
- dev-sec.os-hardening
vars:
sysctl_overwrite:
# IPv4トラフィックフォワーディングを有効にする。
net.ipv4.ip_forward: 1
変数
名前 | デフォルト値 | 説明 |
---|---|---|
os_desktop_enable |
false | デスクトップシステム(Xorg、KDE/GNOME/Unityなど)の場合はtrue |
os_env_extra_user_paths |
[] | ユーザーのPATH 変数に追加のパスを追加(デフォルトは空) |
os_env_umask |
027 | 新しいファイルのデフォルト権限を750 に設定 |
os_auth_pw_max_age |
60 | 最大パスワード年齢(99999 に設定すると実質無効化) |
os_auth_pw_min_age |
7 | 最低パスワード年齢(他のパスワード変更を許可する前) |
os_auth_retries |
5 | アカウントが一定期間ロックされる前の最大認証試行回数 |
os_auth_lockout_time |
600 | あまりに多くの認証試行によりアカウントがロックされた場合に経過する必要がある秒数 |
os_auth_timeout |
60 | 認証にかかるタイムアウト(この時間を超えるとログインが終了) |
os_auth_allow_homeless |
false | ホームディレクトリがないユーザーのログインを許可する場合はtrue |
os_auth_pam_passwdqc_enable |
true | PAMでpasswdqcによる強力なパスワードチェックを使用する場合はtrue |
os_auth_pam_passwdqc_options |
"min=disabled,disabled,16,12,8" | passwdqcに渡す任意のオプション行(文字列として) |
os_security_users_allow |
[] | ユーザーが行うことを許可されている項目のリスト。change_user を含む場合があります。 |
os_security_kernel_enable_module_loading |
true | システムが稼働中にカーネルモジュールを変更することを許可する場合はtrue(例:modprobe 、rmmod ) |
os_security_kernel_enable_core_dump |
false | カーネルがクラッシュまたは不具合を起こし、カーネルコアダンプが作成される際 |
os_security_suid_sgid_enforce |
true | SUID/SGIDビットを減少させることを希望する場合はtrue |
os_security_suid_sgid_blacklist |
[] | SUID/SGIDビットを削除すべきパスのリスト |
os_security_suid_sgid_whitelist |
[] | SUID/SGIDビットを変更すべきでないパスのリスト |
os_security_suid_sgid_remove_from_unknown |
false | blacklist に明示的に設定されていないファイルのSUID/SGIDビットを削除したい場合はtrue |
os_security_packages_clean |
true | 既知の問題を持つパッケージを削除します。パッケージセクションを参照。 |
ufw_manage_defaults |
true | すべての設定にufw_ プレフィックスを適用する場合はtrue |
ufw_ipt_sysctl |
'' | デフォルトでは/etc/default/ufwでIPT_SYSCTLを無効にします。ufwを使用して/etc/sysctl.confの値を上書きする場合は、そのsysctl辞書を設定します。 |
ufw_default_input_policy |
DROP | ufwのデフォルト入力ポリシーをDROP に設定 |
ufw_default_output_policy |
ACCEPT | ufwのデフォルト出力ポリシーをACCEPT に設定 |
ufw_default_forward_policy |
DROP | ufwのデフォルトフォワードポリシーをDROP に設定 |
os_auditd_enabled |
true | auditdのインストールと設定を無効にするにはfalseに設定。 |
パッケージ
以下のパッケージを削除します:
- xinetd (NSA, 第3.2.1章)
- inetd (NSA, 第3.2.1章)
- tftp-server (NSA, 第3.2.5章)
- ypserv (NSA, 第3.2.4章)
- telnet-server (NSA, 第3.2.2章)
- rsh-server (NSA, 第3.2.3章)
- prelink (open-scap)
無効化したファイルシステム
以下のファイルシステムを無効にします。これらはほとんど使用されないと考えられるためです:
- "cramfs"
- "freevxfs"
- "jffs2"
- "hfs"
- "hfsplus"
- "squashfs"
- "udf"
- "vfat" # uefiが使用されていない場合のみ
無効化を防ぎたいファイルシステムは、os_filesystem_whitelist
変数に追加してください。
インストール
ansible-galaxyでロールをインストールします:
ansible-galaxy install dev-sec.os-hardening
サンプルプレイブック
- hosts: localhost
roles:
- dev-sec.os-hardening
sysctl変数の変更
sysctl変数をオーバーライドしたい場合は、sysctl_overwrite
変数を使用できます(古いバージョンでは、sysctl_dict
全体をオーバーライドする必要がありました)。
たとえば、IPv4トラフィックフォワーディング変数を1
に変更したい場合は、次のようにします:
- hosts: localhost
roles:
- dev-sec.os-hardening
vars:
sysctl_overwrite:
# IPv4トラフィックフォワーディングを有効にする。
net.ipv4.ip_forward: 1
または、Ansibleのhash-behaviourをmerge
に変更すると、必要な単一のハッシュだけを上書きすることができます。ただし、hash-behaviourを変更すると、すべてのプレイブックに影響を与えるため、Ansibleでは推奨されていません。
ローカルテスト
ローカルでロールをテストするための推奨方法はDockerを使用することです。システムにDockerをインストールする必要があります。自分のシステムに適したDockerパッケージについては、始めるを参照してください。
また、VagrantとVirtualboxまたはVMWareを使用してローカルテストを実行することもできます。システムにVirtualboxとVagrantをインストールする必要があります。自分のシステムに適したVagrantパッケージについては、Vagrantダウンロードを参照してください。すべてのテストにはtest-kitchen
を使用しています。test-kitchen
について知らない場合は、彼らのガイドを参照してください。
次に、test-kitchenをインストールします:
# 依存関係をインストール
gem install bundler
bundle install
Dockerでのテスト
# 一台の機械での迅速なテスト
bundle exec kitchen test default-ubuntu-1404
# すべての機械でのテスト
bundle exec kitchen test
# 開発のために
bundle exec kitchen create default-ubuntu-1404
bundle exec kitchen converge default-ubuntu-1404
Virtualboxでのテスト
# 一台の機械での迅速なテスト
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test default-ubuntu-1404
# すべての機械でのテスト
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test
# 開発のために
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create default-ubuntu-1404
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge default-ubuntu-1404
詳細についてはtest-kitchenを参照してください。
貢献者 + 感謝
...
このロールは主に以下のガイドに基づいています:
- Arch Linux Wiki, Sysctlハードニング
- NSA: Red Hat Enterprise Linux 5の安全な設定ガイド
- Ubuntu Security/Features
- Deutsche Telekom, Group IT Security, Security Requirements (ドイツ語)
皆様に感謝します!
貢献
貢献者ガイドラインを参照してください。
ライセンスと著者
- 著者:: セバスチャン・ガンプリッヒ
Apache License, Version 2.0(「ライセンス」という)に基づいてライセンスされています; ライセンスに従わない限り、このファイルを使用することはできません。 ライセンスのコピーは、以下のURLで入手可能です。
http://www.apache.org/licenses/LICENSE-2.0
適用される法律で要求されている場合、または文書で合意している場合を除き、ライセンスに基づいて配布されたソフトウェアは「現状のまま」の状態で配布され、明示または暗黙の保証や条件は一切ありません。 ライセンスに従って権利や制限事項を確認してください。
This role provides numerous security-related configurations, providing all-round base protection.
ansible-galaxy install kmonticolo.ansible_os_hardening