MENU

CIS Benchmarkを使ったLinuxサーバー堅牢化|OpenSCAPで自動チェックと設定修正を行う実践ガイド

「自分のサーバーはどのくらい安全なのか」——そう問われたとき、自信を持って答えられるエンジニアは意外と少ないものです。設定はデフォルトのまま動いているが、何が危険で何が安全なのかをきちんと把握できていない、というのが多くの現場の実情です。

この記事では、世界標準のセキュリティ設定ガイドライン CIS Benchmark(Center for Internet Security ベンチマーク)と、それを自動チェックするオープンソースツール OpenSCAP を使って、Linuxサーバーを体系的に堅牢化する方法を解説します。数百項目にのぼるチェック内容の読み方から優先度の付け方まで、現場で使えるレベルで紹介します。

目次

CIS Benchmarkとは?Linuxサーバー堅牢化の世界標準ガイドライン

CIS Benchmark(Center for Internet Security ベンチマーク)は、非営利団体 CIS が策定した OSやミドルウェアのセキュリティ設定ガイドライン です。Amazon、Google、Microsoft などのクラウドベンダーや、NIST(米国国立標準技術研究所)からも信頼される業界標準であり、AWSの「CIS Hardened Images」など商用製品にも組み込まれています。

CIS BenchmarkはLinuxを含む多数のOSを対象としており、AlmaLinux・Rocky Linux・Ubuntu・Debian・AmazonLinux 2023 など主要なサーバーOSのドキュメントが無料で公開されています。

CIS Benchmarkの2つのレベル

各チェック項目には「Level 1」と「Level 2」の2段階があります。

Level 1(推奨): 一般的なサーバー環境で適用すべき基本設定。業務への影響が少なく、大半の組織が目標とするレベル
Level 2(より厳格): 金融・医療など高セキュリティが求められる環境向け。Level 1より制約が強く、一部の運用に影響が出ることがある

まずは Level 1 を全項目クリアすること を目標に設定するのが現実的です。

主なチェックカテゴリ

CIS Benchmark(例: RHEL9系)には以下のようなカテゴリが含まれます。

ファイルシステム: 不要なファイルシステムの無効化、マウントオプション(noexec・nosuid)の設定
サービス設定: 不要なサービスの停止、Cron・SSHの安全な設定
ネットワーク: IPv6の制限、カーネルパラメータ(sysctl)によるネットワーク強化
ログ監査: auditdの設定、ログのリモート転送
アクセス制御: パスワードポリシー、PAM設定、sudo制限
ファイル権限: 重要ファイルのパーミッション・所有者の確認

OpenSCAPとは?CIS Benchmarkを自動チェックするツール

OpenSCAP は、SCAP(Security Content Automation Protocol)という標準プロトコルに基づいて、サーバーの設定を自動評価するオープンソースのフレームワークです。Red Hat が主導して開発しており、RHEL/AlmaLinux/Rocky Linuxでは標準リポジトリからインストールできます。

OpenSCAPは CIS Benchmark のチェック内容をXML形式のポリシーファイル(XCCDF・OVAL)として読み込み、現在のサーバー設定と照合してHTMLレポートを生成 します。数百項目を人手でチェックする代わりに、コマンド一発で現状の準拠率をスコアとして出力できます。

OpenSCAPの主なコンポーネント

oscap(コマンドラインツール): スキャン実行・レポート生成の主体
scap-security-guide(SSG): RHEL・Ubuntu・Debian向けのポリシーファイル集。CIS Benchmarkをはじめ、STIGなど複数の基準に対応
SCAP Workbench: GUI版ツール(デスクトップ環境がある場合に利用可能)

OpenSCAPのインストールと初回スキャン手順

1. RHEL系(AlmaLinux・Rocky Linux)へのインストール

# OpenSCAPとポリシーファイル集をインストール sudo dnf install -y openscap-scanner scap-security-guide # インストール確認 oscap --version # 利用可能なプロファイル一覧を確認(RHEL9系の例) oscap info /usr/share/xml/scap/ssg/content/ssg-almalinux9-ds.xml

2. Debian・Ubuntu へのインストール

# Ubuntu / Debian sudo apt install -y libopenscap8 python3-openscap ssg-debderived # プロファイル確認(Ubuntu22.04の例) oscap info /usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml

3. CIS Level 1 スキャンを実行してHTMLレポートを生成

# AlmaLinux 9 を CIS Level 1 でスキャンする例 sudo oscap xccdf eval \ --profile xccdf_org.ssgproject.content_profile_cis_server_l1 \ --results /tmp/scan-results.xml \ --report /tmp/scan-report.html \ /usr/share/xml/scap/ssg/content/ssg-almalinux9-ds.xml # レポートをPC側へ転送して確認(別端末で実行) scp user@server:/tmp/scan-report.html ~/Desktop/

スキャンには数分かかります。完了すると `/tmp/scan-report.html` に詳細レポートが生成されます。

スキャン結果の読み方と優先度判断

結果レポートの構成

HTMLレポートを開くと、まずスコアサマリーが表示されます。「Score: 45.5%」のように全体の準拠率が数値で示されます。初回スキャンでは40~60%台になるケースが多く、これは正常な状態です。デフォルト設定のサーバーがそれだけ多くの未適用項目を抱えているという現実を示しています。

各チェック項目は以下のステータスに分類されます。

pass(合格): 現在の設定がベンチマーク基準を満たしている
fail(不合格): 設定がベンチマーク基準を満たしていない → 対処が必要
notapplicable: 当該環境に該当しない項目(例: 未インストールのサービスに関するチェック)
error: チェック自体が実行できなかった項目

修正の優先度の付け方

failになった項目をすべて一度に修正しようとすると、運用への影響が読めなくなります。現場では次の順序で進めるのが安全です。

1. 「重大度:高(High)」のfail項目から着手する — レポート内の Severity 列で確認できる
2. 業務影響がないことを確認してから適用する — ステージング環境で先行適用し、動作確認してから本番へ
3. Level 1 を全て適用し終えてから Level 2 を検討する — 完璧を急がない

重要チェック項目と修正手順

CIS Benchmarkのfail項目は多岐にわたりますが、現場で特に頻繁に見つかる項目と修正手順を紹介します。

1. /tmp パーティションのマウントオプション

`/tmp` ディレクトリは書き込みオープンなため、攻撃者がスクリプトを設置・実行する場所として悪用されます。`noexec`・`nosuid`・`nodev` オプションを付与することで、実行ファイルの動作やSUIDビット悪用を防ぎます。

# /tmp が独立したパーティションの場合: /etc/fstab を編集 # 変更前: /dev/mapper/vg-tmp /tmp xfs defaults 0 0 # 変更後: /dev/mapper/vg-tmp /tmp xfs defaults,noexec,nosuid,nodev 0 0 # /tmp が独立パーティションでない場合(systemd 環境) sudo systemctl enable --now tmp.mount # /etc/systemd/system/tmp.mount.d/options.conf を作成 sudo mkdir -p /etc/systemd/system/tmp.mount.d/ sudo tee /etc/systemd/system/tmp.mount.d/options.conf <<'EOF' [Mount] Options=mode=1777,strictatime,nosuid,nodev,noexec EOF sudo systemctl daemon-reload && sudo mount -o remount /tmp # 設定確認 mount | grep /tmp

2. SSHサーバーの設定強化

# /etc/ssh/sshd_config の変更ポイント(CIS Level 1 対応) # 変更前のデフォルト値からの変更点を示す Protocol 2 # SSHv1 は使用禁止(デフォルトで2だが明示する) PermitRootLogin no # rootの直接ログイン禁止 PasswordAuthentication no # パスワード認証禁止(鍵認証のみ) PermitEmptyPasswords no # 空パスワード禁止 MaxAuthTries 4 # 認証試行回数の上限(デフォルトは6) LoginGraceTime 60 # 認証待機時間60秒 ClientAliveInterval 300 # 300秒ごとに接続確認 ClientAliveCountMax 0 # 応答なしで切断 X11Forwarding no # X11転送の無効化 AllowTcpForwarding no # TCPフォワーディング禁止(不要な場合) Banner /etc/issue.net # 不正アクセス禁止警告を表示 # 設定確認後にリロード sudo sshd -t && sudo systemctl reload sshd

3. パスワードポリシーの設定(PAM + login.defs)

# /etc/login.defs でパスワード有効期限を設定 # 変更前: PASS_MAX_DAYS 99999 / PASS_MIN_DAYS 0 / PASS_WARN_AGE 7 # 変更後: PASS_MAX_DAYS 365 # パスワード最大有効日数 PASS_MIN_DAYS 1 # 変更後に再変更できるまでの最小日数 PASS_WARN_AGE 14 # 期限切れ前の警告日数 # PAM でパスワード強度を設定(RHEL系) # /etc/security/pwquality.conf minlen = 14 # 最低文字数 14 文字 minclass = 4 # 大文字・小文字・数字・記号の最低クラス数 maxrepeat = 3 # 同じ文字の連続上限 dcredit = -1 # 数字を最低1文字必須 ucredit = -1 # 大文字を最低1文字必須 lcredit = -1 # 小文字を最低1文字必須 ocredit = -1 # 記号を最低1文字必須

4. ログ監査(auditd)の有効化確認

# auditd の起動確認・有効化 sudo systemctl enable --now auditd # /etc/audit/auditd.conf の主要設定確認(CIS推奨値) # max_log_file = 8 # ログファイルの最大サイズ(MB) → 8以上 # num_logs = 5 # 保持するログファイル数 → 5以上 # max_log_file_action = keep_logs # ローテーション時の動作 # 重要ルールの追加(/etc/audit/rules.d/cis.rules) sudo tee /etc/audit/rules.d/cis.rules <<'EOF' # 時刻変更の監視 -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change # ユーザー・グループ情報の変更監視 -w /etc/passwd -p wa -k identity -w /etc/group -p wa -k identity -w /etc/shadow -p wa -k identity # ネットワーク設定変更の監視 -a always,exit -F arch=b64 -S sethostname -S setdomainname -k system-locale -w /etc/hosts -p wa -k system-locale # sudoの使用監視 -w /etc/sudoers -p wa -k scope EOF sudo service auditd restart

修正の自動適用(Remediation)を使う場合の注意点

OpenSCAPには、failになった項目を自動修正する Remediation(修正)機能 があります。ただし、本番環境での無条件な自動適用は推奨しません。

# Bash修正スクリプトを生成する(自動適用ではなく確認・選択用) sudo oscap xccdf generate fix \ --profile xccdf_org.ssgproject.content_profile_cis_server_l1 \ --fix-type bash \ --result-id "" \ --output /tmp/remediation.sh \ /usr/share/xml/scap/ssg/content/ssg-almalinux9-ds.xml # 生成されたスクリプトの中身を必ず確認してから実行する less /tmp/remediation.sh

生成されるシェルスクリプトの中身を確認し、業務影響がないと判断したものだけを選んで適用するのが安全な進め方です。特にSSHや PAM関連の設定は、変更後に必ず別の端末から接続テストを行ってください。設定ミスでサーバーにログインできなくなるリスクがあります。

中小企業でも今日からできること

CIS Benchmark のすべてを一度に適用する必要はありません。情シス1人体制でも進められる現実的なステップを示します。

まずスキャンだけ実施する: oscap を実行してレポートを出力するだけでも、現状把握として大きな価値があります。何も変えなくていいのでリスクなしで始められます
重大度「高」の fail 項目を月1本ペースで修正する: 全項目を一気に変えようとすると事故が起きます。テスト環境で確認→本番適用を月次ルーティンにすると継続しやすくなります
SSH設定を最初の優先ターゲットにする: 外部からの入り口を固めることが最も費用対効果の高い対策です。鍵認証の徹底とrootログイン禁止は最低限今日中に確認してください
次回スキャンでスコアを比較する: 修正前後でスコアを記録しておくと、取り組みの成果が数値で見えて継続のモチベーションになります

Linuxサーバーの権限管理・ファイルパーミッションの基礎については、姉妹サイトLinuxMaster.JPでも詳しく解説しています。

よくある誤解と注意点

【誤解1】CIS Benchmarkを全項目適用すれば完璧に安全

CIS Benchmarkはあくまで「設定のベースライン」です。アプリケーション層の脆弱性(SQLインジェクションなど)や、フィッシングによるアカウント侵害には直接対処できません。多層防御の一環として位置づけることが正しい理解です。

【誤解2】Level 2 まで適用しないと意味がない

Level 1 だけでも、設定していないサーバーと比較して攻撃者にとって著しく「狙いにくい」状態になります。Level 2 は特定の要件がある環境向けです。まず Level 1 を完成させることに注力してください。

【注意】本番環境ではステージング先行が必須

マウントオプションや PAM の設定変更は、誤るとサービスが起動しなくなったり、サーバーへのログイン自体が不可能になったりするリスクがあります。本番に適用する前に必ずステージング環境で検証し、変更後は即座に接続確認を行ってください。

【注意】OSバージョンとプロファイルの一致を確認する

AlmaLinux 8 に AlmaLinux 9 向けのプロファイルを適用するなど、バージョンが合わない場合は誤検知が多発します。`oscap info` で対象ファイルのサポートバージョンを確認してから実行してください。

本記事のまとめ

手順 やること 難易度
1. インストール openscap-scanner + scap-security-guide を dnf/apt でインストール 低(コマンド1行)
2. スキャン実行 oscap xccdf eval でHTMLレポートを生成 低(コマンド1行)
3. 結果確認 fail/passの仕分け、重大度「高」の抽出 中(読み方の習熟)
4. 優先修正 SSH設定・マウントオプション・パスワードポリシーから着手 中(テスト環境で先行確認)
5. 再スキャン 修正後にスコアを記録し、継続的に改善 低(定期実施)

CIS BenchmarkとOpenSCAPは、「何をどう設定すればいいかわからない」という不安を解消する、現場エンジニアにとって非常に実用的な組み合わせです。スキャンを走らせるだけなら今日すぐに始められます。まずは現状スコアを把握するところから動き出してみてください。

あなたのサーバーの「安全スコア」を知っていますか?

CIS Benchmarkのチェックは、知識がなければ何百項目も見落とし続けます。
正しいセキュリティ知識を体系的に身につけたい方へ、メルマガで実践的なセキュリティ対策ノウハウをお届けしています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次