
このPuppetモジュールは、数多くのセキュリティ関連の設定を提供し、全方位的な基本保護を実現します。
この Puppet モジュールは、ベース OS のセキュアな設定をハードニングによって提供し、DevSec Hardening Framework の一部です。
このモジュールを追加した後、以下のクラスを使用できます:
class { 'os_hardening': }
すべてのパラメータはメインの os_hardening クラス内に含まれているため、次のように渡すだけです:
class { 'os_hardening':
enable_ipv4_forwarding => true,
}
PE 環境でこのモジュールを使用する場合は、 pe_environment = true を設定する必要があります。
そうしないと、puppet はエラー(重複リソース)を出力します!
system_environment = 'default'
システムが動作するコンテキストを定義します。一部のオプションは docker/lxc では機能しません。pe_environment = false
Puppet Enterprise を使用している場合は true に設定します。重要 - 上記参照extra_user_paths = []
ユーザーの PATH 変数に追加のパスを追加します(デフォルトは空)。umask = undef
useradd / newusers による新しいホームディレクトリ作成時に使用される umask(例: '027')maildir = undef
maildir のパス(例: '/var/mail')usergroups = true
各ユーザーに個別のグループを作成する場合は true、それ以外は falsesys_uid_min = undef および sys_gid_min = undef
login.defs のデフォルト設定を上書きしますpassword_max_age = 60
パスワードの最大有効期間パラメータを Hiera で設定することも可能です:
os_hardening::password_max_age: 90
os_hardening::password_min_age: 0
os_hardening::password_warn_age: 14
os_hardening::unwanted_packages: ['telnet']
os_hardening::ignore_users: ['git','githook','ansible','apache','puppetboard']
CIS Distribution Independent Linux Benchmark はシステムのハードニングに関する優れた出発点であるため、モジュール全体を作成したくない一時的な対応を簡単に処理する方法を実装することが適切と判断されました。
例えば、Debian システムで CIS DIL 準拠を高めるには、以下を設定する必要があります:
wanted_packages => ['ntp'],
unwanted_packages => ['telnet'],
disabled_services => ['rsync'],
NTP のデフォルト設定はほとんどの状況で非常に優れているため、モジュールをすぐに実装する必要はありません。ただし、これらのサービスを制御するためにモジュールを使用する場合は、もちろんそれが推奨されます。
このモジュールはテスト済みであり、ほとんどの Linux ディストリビューションで動作するはずです。サポートされているオペレーティングシステムの詳細なリストについては、metadata.json を参照してください。
貢献したい場合は、貢献ガイド に従ってください。
システムに Ruby インタプリタがインストールされている必要があります。その目的には rvm を使用することをお勧めします。さらに、統合テストは Docker コンテナで実行されるため、Puppet Development Kit PDK と Docker Community Edition をインストールする必要があります。
すべての統合テストには test-kitchen を使用します。test-kitchen に慣れていない場合は、ガイド を参照してください。
# 構文 & Lint テスト
pdk validate
# ユニットテスト
pdk test unit
デフォルトでは、統合テストは Docker コンテナで実行されます - 残念ながら、すべてのテストがコンテナ環境で実行できるわけではありません(例: sysctl 設定)。
# 依存関係のインストール
gem install bundler
bundle install
# すべてのテストインスタンスを一覧表示
bundle exec kitchen list
# 1 台のマシンでの高速テスト
bundle exec kitchen test ubuntu-16-04-puppet5
# すべてのマシンでのテスト
bundle exec kitchen test
DigitalOcean での完全な統合テストには、アカウントを取得し、いくつかの環境変数を設定する必要があります:
KITCHEN_LOCAL_YAML=kitchen.do.ymlDIGITALOCEAN_ACCESS_TOKEN - DigitalOcean のアクセストークンDIGITALOCEAN_SSH_KEY_IDS - DigitalOcean での ssh キーの ID。詳細はこちらを参照ssh キーは ~/.ssh/do_ci という名前で、DigitalOcean のプロフィールに追加されている必要があります。
その後、統合テスト(Docker) で説明されているようにテストを実行する準備が整います。
フォークで Github Actions を使用して完全な統合テストを実行する場合は、フォークの設定にこれらの環境変数を追加する必要があります:
KITCHEN_LOCAL_YAML=kitchen.do.ymlDIGITALOCEAN_ACCESS_TOKEN - DigitalOcean のアクセストークンCI_SSH_KEY - DigitalOcean でインスタンスに利用可能な ssh キーの秘密鍵部分。base64 エンコード形式(例: cat id_rsa | base64 -w0 ; echo)DIGITALOCEAN_SSH_KEY_IDS - DigitalOcean での CI_SSH_KEY の ID。詳細はこちらを参照パッチは Github Actions を介して自動的にテストされます。テストの概要は Github の PR で確認でき、詳細はリンクされたテストにあります。
以下の方法で連絡できます:
chef-os-hardening の puppet への最初の移植について:
皆さん、ありがとうございます!!
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
password_min_age = 7
パスワードの最小有効期間(他のパスワード変更を許可する前)password_warn_age = 7
パスワード変更期限前の警告日数login_retries = 5
パスワードが不正な場合のログイン試行の最大回数(通常は PAM / auth_retries によって上書きされます)login_timeout = 60
認証タイムアウト(秒)。この時間が経過するとログインは終了しますchfn_restrict = ''
通常ユーザーが chfn を使用して変更できるフィールドallow_login_without_home = false
ホームディレクトリのないユーザーのログインを許可する場合は trueallow_change_user = false
ユーザーが su を使用してログインを変更できるかどうかignore_users = []
ハードニング対象外とするシステムユーザーアカウントの配列(パスワード無効化とシェルの /usr/sbin/nologin への設定)folders_to_restrict = ['/usr/local/games','/usr/local/sbin','/usr/local/bin','/usr/bin','/usr/sbin','/sbin','/bin']
グループとその他ユーザーが書き込みアクセス権を持たないようにするフォルダ(およびその内容)ignore_max_files_warnings = false
/bin や /usr/bin など 1000 ファイルを超えるフォルダの再帰処理時に、puppet が max_files およびパフォーマンス警告をログに記録しないようにする場合は truerecurselimit = 5
再帰的な権限チェックのディレクトリ深度passwdqc_enabled = true
PAM で passwdqc を使用した強力なパスワードチェックを使用する場合は trueauth_retries = 5
アカウントが一定時間ロックされるまでの最大認証試行回数auth_lockout_time = 600
認証失敗が多すぎてアカウントがロックされた場合に経過する必要がある時間(秒)passwdqc_options = 'min=disabled,disabled,16,12,8'
passwdqc に渡す任意のオプション行(文字列として)に設定しますmanage_pam_unix = false
このモジュールで pam_unix を管理する場合は trueenable_pw_history = true
pam_unix にパスワード履歴を記憶させ、パスワードの再利用を防ぐ場合は true(manage_pam_unix = true が必要)pw_remember_last = 5
記憶する過去のパスワード数(例: 5 はユーザーが直近 5 つのパスワードを再利用できないようにします)only_root_may_su = false
root と wheel グループのメンバーのみが su を使用できる場合は true。CIS Benchmark 準拠には true が必要ですroot_ttys = ['console','tty1','tty2','tty3','tty4','tty5','tty6']
root 用に登録された TTYwhitelist = []
SUID/SGID ビットを保持すべきすべてのファイル(事前定義されたホワイトリストと組み合わせられます)blacklist = []
SUID/SGID ビットを削除すべきすべてのファイル(事前定義されたブラックリストと組み合わせられます)remove_from_unknown = false
blacklist で明示的に設定されていないファイルから SUID/SGID ビットを削除する場合は true。これにより、すべての Puppet 実行でマウントされたファイルシステムを検索し、デフォルトおよびユーザーのブラックリストに設定されていない SUID/SGID ビットを探します。SUID/SGID ビットが見つかった場合、そのファイルが whitelist にない限り削除されます。dry_run_on_unknown = false
上記の remove_from_unknown と同様ですが、SUID/SGID ビットは削除されません。ファイルシステムを検索して SUID/SGID ビットを探しますが、ログに出力するだけです。このオプションは、remove_from_unknown を SUID/SGID ビット用に最初に設定する場合にのみ推奨されます。変更されるファイルを確認し、whitelist と blacklist を調整できるようにするためです。enable_module_loading = true
システム実行中にカーネルモジュールの変更(例: modprobe、rmmod)を許可する場合は trueload_modules = []
enable_module_loading が false の場合、initramfs を介してこれらのモジュールをロードしますdisable_filesystems = ['cramfs','freevxfs','jffs2','hfs','hfsplus','squashfs','udf']
無効化すべきファイルシステム(カーネルモジュール)の配列cpu_vendor = 'intel'
enable_module_loading = false の場合のみ必要: ロードするモジュールの CPU ベンダーを設定しますicmp_ratelimit = '100'
デフォルト値 '100'、上書きを許可、String が必要desktop_enabled = false
デスクトップシステム(Xorg、KDE/GNOME/Unity など)の場合は trueenable_ipv4_forwarding = false
このシステムが IPv4 でのパケット転送を必要とする場合(例: ルーター)は true、それ以外は falsemanage_ipv6 = true
ipv6 セットアップをハードニングする場合は true、ipv6 を完全に無視する場合は falseenable_ipv6 = false
このシステムで ipv6 を無効化する場合は false、有効化する場合は trueenable_ipv6_forwarding = false
このシステムが IPv6 でのパケット転送を必要とする場合(例: ルーター)は true、それ以外は falsearp_restricted = true
ARP の通知と応答の動作を制限する場合は true、それ以外は falsearp_ignore_samenet = false
true は同じサブネットからのパケット以外をドロップします(arp_ignore = 2)、false はターゲット IP のみをチェックします(arp_ignore = 1)enable_sysrq = false
マジック sysrq キーを有効化する場合は true、それ以外は falseenable_core_dump = false
コアダンプの作成を防ぐ場合は false、それ以外は trueenable_stack_protection = true
Address Space Layout Randomization(ASLR)用。ASLR は特定の種類のバッファオーバーフロー攻撃を防ぐのに役立ちます。ASLR はベース、ライブラリ、ヒープ、スタックをプロセスのアドレス空間内のランダムな位置に配置できるため、攻撃プログラムが次の命令のメモリアドレスを予測することを困難にします。enable_rpfilter = true
リバースパスフィルタリングを有効化する場合は true(不正なパケットを破棄)、それ以外は falserpfilter_loose = false
(enable_rpfilter が true の場合のみ)true の場合は ルーズモード(rp_filter = 2)、それ以外は ストリクトモードenable_log_martians = true
不審な / ルーティング不能なネットワークパケットのログ記録を有効化する場合は true、それ以外は false。警告 - 巨大なログファイルが生成される可能性があります!unwanted_packages = []
システムから削除すべきパッケージwanted_packages = []
システムに追加すべきパッケージdisabled_services = []
有効化すべきでないサービスenable_grub_hardening = false
一部の grub ハードニングルールを有効化するには true に設定grub_user = 'root'
grub プロンプトで設定変更時に提供する必要がある grub ユーザー名grub_password_hash = ''
grub-mkpasswd-pbkdf2 で作成され、grub_user に関連付けられるパスワードハッシュboot_without_password = true
エントリの変更時のみパスワードを要求し、既存エントリの起動時には要求しないように Grub を設定system_umask = undef
この変数が設定されている場合、システム内のすべてのユーザーの umask を設定します(例: '027')manage_home_permissions = false
ローカルユーザーのファイルとディレクトリの権限を管理するには true に設定(g-w,o-rwx)ignore_home_users = []
manage_home_permissions による制限対象外とするユーザーの配列manage_log_permissions = false
ログファイルの権限を管理するには true に設定(g-wx,o-rwx)restrict_log_dir = ['/var/log/']
メインのログディレクトリを設定ignore_restrict_log_dir = []
メインのログディレクトリ配下で除外するログディレクトリの配列ignore_files_in_folder_to_restrict = []
folder_to_restrict 配列のディレクトリ内でハードニング対象外とするファイルの配列manage_cron_permissions = false
cron ファイルの権限を管理するには true に設定(og-rwx)enable_sysctl_config = true
sysctl 設定を無効化するには false に設定manage_system_users = true
システムユーザーの管理(空のパスワードと nologin シェルの設定)を無効化するには false に設定shadow_group = undef
/etc/shadow のグループ所有権を上書きshadow_mode = undef
/etc/shadow のファイル権限を上書き