Linux VPSのセキュリティ確保への入門
ステータス: 廃止された
この記事は廃止されており、もはや維持されていません。参考としては未だに役立つかもしれませんが、最新のベストプラクティスには遅れている可能性があります。
別の方法で見る
私たちの新しいガイド「サーバーを保護するための推奨セキュリティ対策」をチェックしてください。
紹介
自分のLinuxサーバーを管理することは、新しいことに挑戦し、素晴らしいプラットフォームの力と柔軟性を活用する機会です。しかし、Linuxサーバー管理者は、ネットワークに接続された機械に対して適切な注意を払って、安全で保護された状態を維持する必要があります。
「Linuxセキュリティ」という一般的なカテゴリに属するさまざまなセキュリティのトピックがあり、Linuxサーバーの適切なセキュリティレベルがどのようなものであるかについての意見も多岐にわたります。
これから学ぶべき主なことは、必要なセキュリティ保護を自分自身で決定しなければならないということです。これを行う前に、リスクやトレードオフを理解し、あなたにとって理にかなうユーザビリティとセキュリティのバランスを決定すべきです。
この記事は、Linuxサーバー環境における一般的なセキュリティ対策を理解するための助けとなることを目的としています。これは包括的なリストではなく、推奨される設定をカバーするものではありませんが、より詳細なリソースへのリンクを提供し、各コンポーネントが多くのシステムにおいて重要な部分である理由について説明します。
ファイアウォールによるアクセスのブロック
すべてのユーザーに推奨する最も簡単なステップの一つは、ファイアウォールを有効にし、設定することです。ファイアウォールは、インターネットの一般的なトラフィックとあなたのマシンとの間の障壁として機能します。彼らはサーバーの出入りするトラフィックを監視し、情報が配信されるべきかどうかを判断します。
彼らは、問題のトラフィックをユーザーによって設定されたルールのセットと照合することによってこれを行います。通常、サーバーは正当なサービスのためにいくつかの特定のネットワークポートのみを使用します。残りのポートは使用されておらず、これらの場所に向かうすべてのトラフィックを拒否するファイアウォールの背後で安全に保護されるべきです。
これにより、予期しないデータを破棄することができ、場合によっては実際のサービスの使用を条件付けることも可能になります。健全なファイアウォールルールは、ネットワークセキュリティの良い基盤を提供します。
利用可能なファイアウォールソリューションはかなりあります。以下で、人気のあるいくつかのオプションについて簡単に説明します。
UFW
UFWは簡単なファイアウォールの略です。 その目的は、他のソリューションの複雑な構文なしに良好な保護を提供することです。
UFWおよびほとんどのLinuxファイアウォールは、実際にはLinuxカーネルに含まれるnetfilterファイアウォールを制御するためのフロントエンドです。これは通常、Linuxファイアウォールソリューションに不慣れな人々にとって使いやすいシンプルなファイアウォールであり、一般的に良い選択肢です。
UFWファイアウォールを有効にして構成する方法を学び、詳しくはこのリンクをクリックしてください。
IPTables
おそらく最も有名なLinuxファイアウォールソリューションはiptablesです。IPTablesは、Linuxカーネルに含まれるnetfilterファイアウォールを管理するために使用される別のコンポーネントです。長い間存在しており、その安全性を確保するために厳重なセキュリティ監査を受けています。IPv6制限を作成するためのip6tablesというiptablesのバージョンもあります。
Linuxマシンを管理していると、iptablesの設定に出くわすことがあるでしょう。最初は文法が把握しづらいかもしれませんが、非常に柔軟なルールセットで設定できる強力なツールです。
UbuntuやDebianシステム上でiptablesファイアウォールルールを実装する方法については、こちらで詳しく学ぶことができます。また、CentOS/Fedora/RHELベースのディストリビューションでのiptablesの使い方についてはこちらで学ぶことができます。
IP6テーブル
上記のように、iptablesはIPv4ルールを格納するテーブルを操作するために使用されます。サーバーでIPv6を有効にしている場合は、IPv6の対応物であるip6tablesにも注意する必要があります。
Linuxカーネルに含まれているnetfilterファイアウォールは、IPv4とIPv6のトラフィックを完全に分離しています。これらは異なるテーブルに保存されます。パケットの最終的な運命を決定するルールは、使用されているプロトコルバージョンによって決まります。
サーバーの管理者にとって、これはバージョン6が有効な場合に別のルールセットを維持しなければならないことを意味します。ip6tablesコマンドはiptablesコマンドと同じ構文を持っているため、バージョン6のテーブルに同じ制限セットを実装するのは通常簡単です。ただし、これが正しく機能するためには、IPv6アドレスに向けられたトラフィックを必ず一致させる必要があります。
NFTables
iptablesは長い間Linux環境におけるファイアウォールの標準でしたが、新たにnftablesというファイアウォールがLinuxカーネルに追加されました。これはiptablesを作成しているチームによるプロジェクトであり、最終的にはiptablesに取って代わることを目的としています。
nftablesファイアウォールは、iptablesの前身よりも読みやすい構文を実装し、同じツールでIPv4とIPv6のサポートを実装しようとしています。この時点ではほとんどのLinuxバージョンはnftablesを実装するのに十分新しいカーネルを搭載していませんが、すぐに非常に一般的になるでしょうので、その使い方に慣れておくことをお勧めします。
SSHを使用して安全にリモートログインする
ローカルアクセスがないサーバーを管理する際には、リモートでログインする必要があります。Linuxシステムでこれを安全に行う標準的な方法は、SSHと呼ばれるプロトコルを介して行うことです。SSHは「Secure Shell」の略です。
SSHはエンドツーエンドの暗号化を提供し、安全な接続を介して不正なトラフィックをトンネルする機能、ネットワーク接続経由のXフォワーディング(グラフィカルユーザーインターフェース)、その他も提供しています。基本的には、ローカル接続やバンド外管理にアクセスできない場合、SSHはあなたのマシンと対話する主要な方法であるべきです。
プロトコル自体は非常に安全で、広範な研究とコードレビューを経ていますが、あなたの設定の選択がサービスのセキュリティを助けるか、妨げるかのいずれかになります。以下でいくつかのオプションについて話し合います。
パスワード対SSHキーログイン
SSHは、さまざまな方法を使用してサインインできる柔軟な認証モデルを提供します。最も一般的な選択肢は、パスワード認証とSSHキー認証の2つです。
パスワード認証はほとんどのユーザーにとって最も自然なモデルですが、これらの二つの選択肢の中では安全性が低いです。 パスワードログインでは、潜在的な侵入者が成功する組み合わせが見つかるまで、パスワードを連続的に推測することができます。 これはブルートフォース攻撃として知られており、現代のツールを使って攻撃者に簡単に自動化される可能性があります。
一方で、SSHキーは安全なキーのペアを生成することによって動作します。公開鍵はユーザーを特定するためのテストの一種として作成されます。公開鍵は問題なく公開できますが、ユーザーを特定し、対応する秘密鍵を持つユーザーがログインすることを許可する以外の目的には使用できません。秘密鍵は秘密に保ち、関連する公開鍵のテストを通過するために使用されます。
基本的に、あなたはサーバーに公開SSHキーを追加でき、それによって対応する秘密鍵を使用してログインできるようになります。これらのキーは非常に複雑なので、総当たり攻撃は実用的ではありません。さらに、オプションとして、キーに長いパスフレーズを追加することで、さらにセキュリティを強化することができます。
SSHの使い方を詳しく知りたい場合はここをクリックし、サーバーにSSHキーを設定する方法を学ぶためにこのリンクをチェックしてください。
悪意のあるIPアドレスをbanするためにfail2banを実装する
SSH構成の一般的なセキュリティを向上させるために役立つステップの1つは、fail2banのようなソリューションを実装することです。fail2banは、リモートシステムが正当なユーザーでない可能性を判断するためにログファイルを監視し、その後、関連するIPアドレスからの将来のトラフィックを一時的に禁止するサービスです。
適切なfail2banポリシーを設定することで、ログインを試みているが失敗しているコンピュータをフラグ付けし、一定期間そのトラフィックを遮断するファイアウォールルールを追加することができます。これは、しばらくの間禁止されるため、よく使われるブルートフォース攻撃手法を妨げる簡単な方法です。通常、これだけでさらなるブルートフォース攻撃の試みを思いとどまらせるのに十分です。
ここでUbuntuにfail2banポリシーを実装する方法を学ぶことができます。DebianとCentOSに関する同様のガイドはここにあります。
無許可の侵入を検出するための侵入検知システムを実装する
重要な考慮事項の一つは、不正使用を検出するための戦略を開発することです。予防策が整っているかもしれませんが、それが失敗したかどうかも知っておく必要があります。
侵入検知システム、通称IDSは、既知の良好な状態のときに、設定やファイルの詳細をカタログ化します。その後、これらの記録された状態と比較を行い、ファイルが変更されたか設定が変更されたかを確認します。
侵入検知システムはかなりの数があります。以下でいくつかを見ていきましょう。
トリップワイヤー
最も有名なIDSの実装の1つはTripwireです。Tripwireはシステムファイルのデータベースをコンパイルし、設定ファイルとバイナリを一連のキーで保護します。設定の詳細が選択され、例外が定義されると、その後の実行では監視しているファイルの変更について通知が行われます。
ポリシーモデルは非常に柔軟であり、環境に応じてそのプロパティを調整することができます。その後、cronジョブを介してトリップワイヤーの実行を設定し、異常な活動があった場合にはメール通知を実装することもできます。
ここでトリップワイヤーを実装する方法について詳しく学びましょう。
助けて
IDSのもう一つのオプションはAideです。Tripwireに似て、Aideはデータベースを構築し、現在のシステムの状態を保存されている既知の良好な値と比較することによって動作します。相違が発生すると、問題を管理者に通知することができます。
Aideとtripwireはどちらも同じ問題に対して似たような解決策を提供しています。ドキュメントをチェックして、どちらの解決策が自分に合っているか試してみてください。
AideをIDSとして使用する方法についてのガイドは、こちらをご覧ください。
心理的な痛み
psadツールは、上記のツールとは異なる部分のシステムに関係しています。システムファイルを監視するのではなく、psadはファイアウォールのログを監視して悪意のある活動を検出しようとします。
ユーザーがポートスキャンで脆弱性を探ろうとしている場合、psadはこの活動を検出し、動的にファイアウォールのルールを変更して問題のあるユーザーをロックアウトすることができます。このツールは異なる脅威レベルを登録し、問題の重大度に基づいて対応を決定します。また、オプションとして管理者にメールを送信することもできます。
psadをネットワークIDSとして使用する方法を学ぶには、このリンクをクリックしてください。
兄弟
ネットワークベースのIDSの別のオプションはBroです。Broは実際にはネットワークIDSとして使用することもでき、使用状況の統計を収集したり、問題を調査したり、パターンを検出したりするためのネットワーク監視フレームワークです。
Broシステムは二つの層に分かれています。最初の層はアクティビティを監視し、それがイベントと見なすものを生成します。第二の層は生成されたイベントを政策フレームワークに通し、トラフィックに対して何をすべきか、もし何かあるなら、その指示を決定します。それはアラートを生成したり、システムコマンドを実行したり、単に発生をログに記録したり、他の選択肢を取ったりすることができます。
BroをIDSとして使用する方法を知るには、こちらをクリックしてください。
RKHunter
厳密には侵入検知システムではありませんが、rkhunterはルートキットや既知のマルウェアを検出するために、ホストベースの侵入検知システムと同様の多くの原則に基づいて動作します。
Linuxの世界ではウイルスは稀ですが、マルウェアやルートキットが存在し、あなたのシステムを危険にさらしたり、成功した攻撃者による継続的なアクセスを許可することがあります。RKHunterは既知のエクスプロイトのリストをダウンロードし、その後、あなたのシステムをデータベースと照らし合わせてチェックします。また、一般的なアプリケーションで安全でない設定が検出された場合は警告を発します。
このアーティクルをチェックして、UbuntuでRKHunterを使用する方法を学ぶことができます。
一般的なセキュリティアドバイス
上記のツールや設定はシステムの一部を保護するのに役立ちますが、良いセキュリティは単にツールを実装して忘れるだけでは得られません。 良いセキュリティは特定の思考様式として現れ、勤勉さ、精査、プロセスとしてのセキュリティへの関与を通して達成されます。
システムを安全に使用するために役立つ一般的なルールがあります。
更新に注意し、定期的に更新してください
ソフトウェアの脆弱性は、あなたのシステムにあるほとんどすべての種類のソフトウェアに常に存在しています。ディストリビューションのメンテナーは、一般的に最新のセキュリティパッチを追跡し、それらのアップデートをリポジトリにプッシュする良い仕事をしています。
しかし、リポジトリにセキュリティアップデートが利用可能であっても、それをダウンロードしてインストールしていなければ、サーバーには何の役にも立ちません。多くのサーバーは、安定していて十分にテストされたシステムソフトウェアのバージョンに依存することで利益を得ますが、セキュリティパッチは後回しにすべきではなく、重要なアップデートとして考慮すべきです。
ほとんどのディストリビューションは、セキュリティパッチをダウンロードおよびインストールするためのセキュリティメールリストと別のセキュリティリポジトリを提供しています。
公式なチャネル以外からソフトウェアをダウンロードする際は注意してください。
ほとんどのユーザーは、自分のディストリビューションの公式リポジトリから提供されているソフトウェアを使用することを好み、ほとんどのディストリビューションは署名されたパッケージを提供しています。ユーザーは一般的にディストリビューションのメンテナンスを信頼でき、公式なチャネル以外から取得したソフトウェアのセキュリティに関心を集中させることができます。
あなたは、自分のディストリビューションからのパッケージや、プロジェクトの公式ウェブサイトから入手可能なソフトウェアを信頼することを選択できますが、各ソフトウェアの監査を自分自身で行わない限り、リスクが伴うことに注意してください。ほとんどのユーザーは、これが許容できるリスクのレベルだと感じています。
一方、あなたが認識していない人や組織が管理しているランダムなリポジトリやPPAから取得したソフトウェアは、重大なセキュリティリスクとなる可能性があります。明確なルールはなく、非公式のソフトウェアソースの大多数はおそらく完全に安全でしょうが、他者を信頼するたびにリスクを伴うことを認識しておいてください。
自分がなぜその情報源を信頼できるのか説明できるようにしておいてください。これができないのであれば、得られる便利さよりもセキュリティリスクをより重要な懸念として考えることを検討してください。
自分のサービスを理解し、それらを制限する
サーバーを運営する主な目的は、アクセス可能なサービスを提供することであると考えられますが、あなたのマシン上で実行されているサービスは、使用するものと必要なものに制限してください。すべての有効なサービスを潜在的な脅威のベクトルと考え、コア機能に影響を与えずにできるだけ多くの脅威のベクトルを排除するよう努めてください。
これは、モニターが接続されていないヘッドレスサーバーで、グラフィカルな(ウェブ以外の)プログラムを実行しない場合、Xディスプレイサーバーを無効にし、恐らくアンインストールするべきであることを意味します。 他の領域でも同様の対策を講じることができます。 プリンタがない場合は、「lp」サービスを無効にします。 Windowsネットワーク共有がない場合は、「samba」サービスを無効にします。
コンピュータ上で実行中のサービスを様々な方法で確認することができます。本記事では、「要件のリストを作成する」セクションにおいて、有効なサービスを検出する方法について説明します。
FTPを使用しないでください; 代わりにSFTPを使用してください
これは多くの人にとって受け入れがたいかもしれませんが、FTPは本質的に安全でないプロトコルです。すべての認証情報はプレーンテキストで送信されるため、あなたのサーバーとローカルマシンの間の接続を監視している誰もがあなたのログイン情報を見ることができます。
FTPを実装するのが許可されるのは、非常に少ないケースのみです。匿名の公共の読み取り専用ダウンロードミラーを運営している場合、FTPは良い選択です。もう一つのFTPが適しているケースは、NAT対応のファイアウォールの背後にある2台のコンピュータ間で単にファイルを転送しているときであり、そのネットワークが安全であると信頼している場合です。
ほとんどすべての他のケースでは、より安全な代替手段を使用するべきです。SSHスイートには、SFTPと呼ばれる代替プロトコルが含まれており、表面的には似たように動作しますが、SSHプロトコルと同じセキュリティに基づいています。
これにより、従来のFTPを使用するのと同じ方法で、サーバーに情報を送受信することができますが、そのリスクはありません。ほとんどの現代のFTPクライアントは、SFTPサーバーとも通信できます。
SFTPを使用してファイルを安全に転送する方法を学ぶには、このガイドを確認してください。
合理的なユーザーセキュリティポリシーを実施する
ユーザーを管理する際にシステムをより適切に保護するために、いくつかの手順を踏むことができます。
一つの提案は、rootログインを無効にすることです。rootユーザーは任意のPOSIX系システム上に存在し、すべての権限を持つアカウントであるため、多くの攻撃者にとって魅力的な標的となります。sudoアクセスを設定した後、またはsuコマンドを使用することに自信がある場合、rootログインを無効にすることはしばしば良い考えです。この提案に異議を唱える人も多いですが、それがあなたにとって適切かどうかを考えてみてください。
SSHデーモン内でリモートルートログインを無効にすることや、ローカルログインを無効にすることが可能であり、/etc/securettyファイル内で制限を設けることができます。また、ルートユーザーのシェルを非シェルに設定することでルートシェルアクセスを無効にし、PAMルールを設定してルートログインを制限することもできます。RedHatにはルートログインを無効にする方法に関する優れた記事があります。
ユーザーアカウントに対して実施すべきもう一つの良いポリシーは、各ユーザーとサービスのためにユニークなアカウントを作成し、彼らが仕事を完了させるために必要最低限の権限のみを与えることです。 彼らがアクセスする必要のないすべてをロックダウンし、彼らを麻痺させること以外の特権をすべて取り away します。
これは重要なポリシーです。なぜなら、1人のユーザーやサービスが侵害された場合でも、攻撃者がシステムのさらに多くの部分にアクセスできるようなドミノ効果を引き起こさないからです。この区分化のシステムは、問題を分離して特定するのに役立ちます。まるで船に穴が開いたときに沈没を防ぐために隔壁や防水扉のシステムが役立つのと同じようにです。
上記で議論したサービスポリシーと同様に、もはや必要のないユーザーアカウントを無効にすることにも注意を払うべきです。これは、ソフトウェアをアンインストールした場合や、ユーザーがシステムにアクセスできなくなった場合に発生することがあります。
権限設定に注意する
ファイルのアクセス権は、多くのユーザーにとって大きな不満の原因です。必要なことができる一方で、自分自身を危険にさらさないようなアクセス権のバランスを見つけるのは難しく、各シナリオにおいて慎重な注意と考えが求められます。
健全なumaskポリシー(新しいファイルやディレクトリのデフォルトの権限を定義するプロパティ)を設定することで、良いデフォルトを作成するのに大いに役立ちます。 権限の仕組みやumaskの値を調整する方法については、ここで学ぶことができます。
一般的に、特にインターネットにアクセス可能なものについては、何でも世界書き込み可能に設定する前に二度考えるべきです。これには極端な結果をもたらす可能性があります。さらに、自分が何をしているかを完全に理解していない限り、権限でSGIDまたはSUIDビットを設定しないでください。また、ファイルにオーナーとグループが設定されていることを確認してください。
ファイルの権限設定は、具体的な使用法によって大きく異なりますが、常により少ない権限で済ませる方法を探すべきです。これは間違えるのが最も簡単なことの一つであり、インターネット上には多くの悪いアドバイスがあふれている分野です。
定期的にサーバーのマルウェアをチェックしてください
Linuxは一般的にWindowsよりもマルウェアの標的にされにくいですが、悪意のあるソフトウェアに対して免疫があるわけではありません。侵入試行を検出するためにIDSを実装することに加えて、マルウェアをスキャンすることで、あなたのマシンに不正なソフトウェアがインストールされていることを示す活動の痕跡を特定するのに役立ちます。
Linuxシステムには、サーバーの整合性を定期的に検証するために使用できる多数のマルウェアスキャナーがあります。Linux Malware Detect、通称maldetまたはLMDは、既知のマルウェアシグネチャをスキャンするために簡単にインストールおよび構成できる人気のオプションです。手動で実行して一度だけのスキャンを行うこともでき、定期的にスキャンを実行するようにデーモン化することもできます。これらのスキャンからのレポートはサーバー管理者にメールで送信されることができます。
使用している特定のソフトウェアを安全にする方法
このガイドは、すべての種類のサービスやアプリケーションのセキュリティの具体的な内容を詳しく説明するには不十分ですが、オンラインには多くのチュートリアルやガイドラインが存在します。あなたがシステムに実装しようとしているプロジェクトのセキュリティ推奨事項を読むべきです。
さらに、ウェブサーバーやデータベース管理システムなどの人気のサーバーソフトウェアには、セキュリティに特化したウェブサイトやデータベースが存在します。一般的に、オンラインにする前に、すべてのサービスについて調査し、セキュリティを確保するべきです。
使用しているソフトウェアに関するより具体的なアドバイスは、私たちのセキュリティセクションをチェックしてください。
結論
あなたは今、Linuxサーバーに実装できる一般的なセキュリティプラクティスについて十分な理解を持っているはずです。私たちは重要な多くの分野を言及するように努力しましたが、最終的にはあなた自身が多くの決定を下す必要があります。サーバーを管理する際には、サーバーのセキュリティに対して責任を持たなければなりません。
これは初めに一気に設定できるものではなく、プロセスであり、システムの監査、ソリューションの実装、ログやアラートの評価、ニーズの再評価など、継続的な作業です。システムを保護するために常に警戒し、ソリューションの結果を評価し監視し続ける必要があります。
