こんにちは。セキュリティの世界へようこそ。
「サーバーの要塞化」なんて聞くと、何だか軍事施設のような物々しいイメージを持つかもしれませんね。でも、難しく考える必要はありません。まずは、あなたの「家」を想像してみてください。
泥棒は、窓の鍵が開いているか、裏口のドアが壊れていないか、あるいは表札に「留守番はいません」と書いていないか、常にチェックしています。サーバーも全く同じ。OSをインストールした直後の状態は、いわば「窓もドアも全開で、家主がどこにいるかも丸わかり」の状態なんです。
今回は、その「家の防犯対策」を自動化し、泥棒が入る隙を一切与えないための「CIS Benchmarks」と「自動スキャン」のお話をします。
—
1. なぜ「設定の標準化」が必要なのか?
皆さんは、「なんとなく動くから」という理由で、初期設定のままサーバーを運用していませんか?
例えば、Linuxにはtelnetやftpといった、昔ながらの「暗号化されていない通信」を使うツールがインストールされていることがあります。これらは、家で言えば「鍵のかからない古い小窓」です。泥棒はそこから侵入し、あなたの家の鍵(パスワード)を盗み取ります。
CIS Benchmarksとは、世界中のセキュリティ専門家たちが「これさえ守れば、とりあえず泥棒には簡単に入られないよ」と定めた、いわば「防犯のガイドライン」です。これを手作業でチェックするのは大変ですが、現代には頼もしい味方がいます。
—
2. 自動監査の味方:InSpecを使ってみよう
「InSpec(インスペック)」は、Chef社が開発した、サーバーの状態をチェックするためのコード化ツールです。人間が目視でチェックリストを埋めるのではなく、コードを使って「この設定は正しいか?」を機械に自動判定させます。
例えば、「SSHでルート権限のログインを禁止しているか?」をチェックするコードは、こんなにシンプルです。
# SSHの設定が「rootでのログイン禁止」になっているか確認する
describe sshd_config do
its('PermitRootLogin') { should cmp 'no' }
end
# そもそもTelnetのような古いサービスが動いていないか確認する
describe service('telnet') do
it { should_not be_running }
it { should_not be_installed }
end
このコードをCI/CDパイプライン(GitHub ActionsやGitLab CIなど)に組み込めば、「誰かが設定をミスして窓を開けっ放しにしたら、その瞬間に開発を止めて警告を出す」という防犯システムが完成します。
—
3. 実践:パイプラインで「防犯チェック」を自動化する
開発の現場で、コードをサーバーに送る前に必ず「防犯チェック」を通す仕組みを作りましょう。
GitHub Actionsの例
.github/workflows/security-scan.yml に以下のような設定を書くことで、サーバーをデプロイする前に自動でスキャンを実行できます。
name: Security Audit Pipeline
on: [push]
jobs:
check-compliance:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# InSpecをインストールしてスキャンを実行
- name: Run InSpec Audit
run: |
# CISのプロファイルを指定してターゲットサーバーをスキャン
inspec exec https://github.com/dev-sec/linux-baseline -t ssh://user@your-server-ip
もし、誰かが誤って「パスワード認証」を有効にしてしまったら、このパイプラインが赤く光り、ビルドを強制的に失敗させます。「設定ミス」という名の泥棒の侵入経路を、リリース前に塞ぐのです。
—
4. 初心者が陥りやすい「盲点」
最後に、一つだけ覚えておいてほしいことがあります。
「ツールを通った=完璧」ではない、ということです。
どれだけ自動化しても、管理者のパスワードが password123 だったら、どんな強固な鍵も無意味ですよね。CIS Benchmarksはあくまで「設定上の防犯」です。そこに、あなた自身の「複雑なパスワード管理」や「不要なソフトウェアを入れない」という意識が加わって初めて、本当の要塞が完成します。
一歩ずつできる防犯対策リスト
1. 不要なサービスを止める: systemctl stop して systemctl disable。使わない機能は、家の中に置かない家具と同じです。
2. ログを監視する: 泥棒が玄関をガチャガチャした形跡(不正ログイン試行)がないか、ログを見てみましょう。
3. 定期的にスキャンする: 1回だけでなく、CI/CDで何度も繰り返す。セキュリティは「一度やって終わり」のイベントではなく、「日々の掃除」です。
セキュリティは、怖がるものではなく「守ることで自分たちの仕事を楽にする」ためのツールです。まずは今のサーバーで、不要なサービスが動いていないかを確認するところから始めてみませんか?
一歩ずつ、着実に。あなたのサーバーを、誰も侵入できない鉄壁の要塞にしていきましょう!
コメント