konstruktoidのハードニングスクリプトでサーバーをダックボードにしない方法
新鮮なUbuntuインスタンスをデプロイしたばかり的情形を想像してください。すべてが稼働中で、SSHが開かれ、パッケージが更新されています。安全だと感じている——しかしログを確認すると、世界中のどこからだとの耐力突破ログイン試行が延々と表示されます。デフォルトのLinuxディストリビューション設定はセキュリティよりも利便性を優先するため、システムの強化にはSSH設定の調整、ファイアウォールの構成、サービス権限の制限に何時間もかかります。
handle konstruktoidののリポジトリ著者は、このルーティンを簡素化することを決意し、自動的なUbuntu強化のためのスクリプトをまとめました。これは単なるコマンドセットではありません——systemdによる制御を中核とした、通常のOSをデジタル要塞に変えるための包括的な戦略です。
このスクリプトが具体的に何をするか
プロジェクトの中核的なアイデアは、攻撃対象領域を可能な限り最小化することです。必要のないサービスは無効化するべきです。実行中のサービスには、タスクの実行に必要な正確な権限のみを付与するべきです。
スクリプトは、CIS(Internet Security Center)の推奨事項から取った多くの項目を含む包括的なリストに対してシステムをチェックします。以下は、スクリプトが秩序をもたらすいくつかの領域です:
- sysctlによるカーネルパラメータ設定。これには、パケット転送のブロック(IP転送)、スプーフィング保護、カーネルデバッグ機能へのアクセス制限が含まれます。
- システムファイルのアクセス許可の強化。スクリプトは、
/etc/shadow、/etc/gshadow、その他の重要な設定ファイルの権限をチェックし、一般ユーザーや侵害されたWebアプリケーションがそれらを読めないようにします。 - systemdサービスの制限。これは最も興味深い部分かもしれません。スクリプトは、
PrivateTmp、NoNewPrivileges、ProtectSystemなどの最新のsystemd分離機能を使用します。 - カーネルモジュールの管理。めったに使用されないプロトコル(DCCPやSCTPなど)や、脆弱性の原因となることが多いファイルシステムを無効化します。
実際の動作
プロジェクトはShellで書かれており、監査が容易です。実行前にコードを読んで、システムで何が変更されるかを正確に理解できます。始めるには、リポジトリをクローンし、メインスクリプトをrootとして実行するだけです。
git clone https://github.com/konstruktoid/hardening.git
cd hardening
sudo bash ubuntu.sh
ちなみに、著者はDebian用の別バージョンを持っていますが、このリポジトリはUbuntu(バージョン20.04、22.04、24.04)に特化しています。興味深いことに、スクリプトは単に設定を変更するだけではありません——追加のセキュリティツールもインストールします。例えば、深いシステムコールロギングのためのauditdなど。
ニーズに合わせた微調整
ライブの本番システムでスクリプトをそのまま実行するのは危険な行為です。強化は常にセキュリティと機能性のトレードオフです。あるカーネルモジュールのロード能力を無効にすると、Dockerや特定のネットワークハードウェアが動作しなくなる可能性があります。
プロジェクトには、変数を上書きできる設定ファイルが含まれています。例えば、(デフォルトでスクリプトが制限しようとしている)IPv6が絶対に必要な場合、設定で調整できます。まず、本番の技術スタックを完全に複製したテストVMでスクリプトを実行することをお勧めします。
systemd版に注目すべき理由
多くの古いLinuxセキュリティガイドは、まだ/etc/内の dozens of filesの編集を推奨しています。konstruktoidのアプローチはより現代的です:systemdのモジュール性を積極的に活用します。メインサービスユニットファイルを書き換える代わりに、ドロップインファイルが作成されます。これにより、aptでパッケージを更新しても設定の競合が発生せず、セキュリティのカスタマイズが有効のままになります。
スクリプトはまた、侵害されたパッケージをチェックし、rshやtelnetの古い実装など、よくセキュリティホールとなるソフトウェアの削除を提案します。
このプロジェクトが役立つ人
個人プロジェクト用に数台のサーバーを管理している場合、このリポジトリは優れたチェックリストになります。スクリプト全体を実行する必要はなく、ufwやsysctlパラメータの設定 хороших решенийを借用できます。
企業のシステム管理者にとって、これは独自の企業用ゴールデンイメージを作成するための готовых фундаментです。車輪の再発明をする代わりに、konstruktoidの成果を採用し、コンプライアンス要件に適応させることができます。
ただし、覚えておいてください:セキュリティはプロセスです。今日のスクリプトの実行は、明日出現する脆弱性からの保護を保証しません。しかし、潜在的な攻撃者に対する障壁を確かに高くし、彼らは最も可能性が高いのは、より簡単な獲物を求めて他去ることでしょう。
学習の始め方
ubuntu.shファイルを参照してください。これは、他のモジュールが呼び出されるエントリポイントです。scripts/フォルダを探索してください。ロジックはカテゴリ別に分かれています:ネットワーク、ファイルシステム、権限。- READMEの環境変数セクションは必ず読んでください。コードを変更せずにスクリプトの動作を制御する方法を理解できます。
プロジェクトは活発にメンテナンスされており、新しいUbuntuリリースに合わせて定期的に更新され、最新のセキュリティ推奨事項を取り入れています。これは、ルーティン作業を何時間も要するタスクを、数分で完了するタスクに変える自動化の素晴らしい例です。
関連プロジェクト