序章


独自のLinuxサーバーを制御することは、新しいことを試し、優れたプラットフォームのパワーと柔軟性を活用する機会です。 ただし、Linuxサーバーの管理者は、ネットワークに接続されたマシンを安全に保つために適切な注意を払う必要があります。

「Linuxセキュリティ」の一般的なカテゴリに分類されるさまざまなセキュリティトピックがあり、Linuxサーバーの適切なレベルのセキュリティがどのように見えるかについての多くの意見があります。

これから取り除く主なことは、どのセキュリティ保護が必要になるかを自分で決定する必要があるということです。 これを行う前に、リスクとトレードオフを認識し、使いやすさとセキュリティのバランスを自分にとって意味のあるものにすることを決定する必要があります。

この記事は、Linuxサーバー環境で実行する最も一般的なセキュリティ対策のいくつかを説明するのに役立つことを目的としています。 これは完全なリストではなく、推奨される構成については説明していませんが、より詳細なリソースへのリンクを提供し、各コンポーネントが多くのシステムの重要な部分である理由について説明します。

ファイアウォールによるアクセスのブロック


すべてのユーザーに推奨する最も簡単な手順の1つは、ファイアウォールを有効にして構成することです。 ファイアウォールは、インターネットの一般的なトラフィックとマシンの間のバリアとして機能します。 彼らはあなたのサーバーに出入りするトラフィックを見て、それが情報の配信を許可するべきかどうかを決定します。

これを行うには、問題のトラフィックを、ユーザーが構成した一連のルールと照合します。 通常、サーバーは正当なサービスのためにいくつかの特定のネットワークポートのみを使用します。 残りのポートは未使用であり、ファイアウォールの背後で安全に保護する必要があります。これにより、これらの場所に向かうすべてのトラフィックが拒否されます。

これにより、予期しないデータを削除したり、場合によっては実際のサービスの使用を条件付けしたりすることができます。 正常なファイアウォールルールは、ネットワークセキュリティの優れた基盤を提供します。

利用可能なファイアウォールソリューションはかなりあります。 以下では、より一般的なオプションのいくつかについて簡単に説明します。

UFW


UFWはシンプルなファイアウォールの略です。 その目標は、他のソリューションの複雑な構文なしで優れた保護を提供することです。

UFWは、ほとんどのLinuxファイアウォールと同様に、実際にはLinuxカーネルに含まれているnetfilterファイアウォールを制御するためのフロントエンドです。 これは通常、Linuxファイアウォールソリューションにまだ精通していない人に使用する単純なファイアウォールであり、一般的には良い選択です。

UFWファイアウォールを有効にして構成する方法を学び、このリンクをクリックして詳細を確認できます。

IPTables


おそらく最もよく知られているLinuxファイアウォールソリューションはiptablesです。 IPTablesは、Linuxカーネルに含まれるnetfilterファイアウォールを管理するために使用されるもう1つのコンポーネントです。 それは長い間存在しており、その安全性を確保するために徹底的なセキュリティ監査を受けています。 IPv6制限を作成するためのip6tablesと呼ばれるバージョンのiptablesがあります。

Linuxマシンの管理中に、iptables構成に遭遇する可能性があります。 構文は最初は理解するのが複雑になる可能性がありますが、非常に柔軟なルールセットで構成できる非常に強力なツールです。

UbuntuまたはDebianシステムでiptablesファイアウォールルールを実装する方法について詳しくは、こちらをご覧ください。また、 CentOS / Fedora/RHELベースのディストリビューションでiptablesを使用する方法についてはこちらをご覧ください。

IP6Tables

前述のように、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は、エンドツーエンドの暗号化、安全な接続を介した安全でないトラフィックをトンネリングする機能、X転送(ネットワーク接続を介したグラフィカルユーザーインターフェイス)などを提供します。 基本的に、ローカル接続または帯域外管理にアクセスできない場合は、SSHをマシンと対話するための主要な方法にする必要があります。

プロトコル自体は非常に安全であり、広範な調査とコードレビューを受けていますが、構成の選択はサービスのセキュリティを支援または妨害する可能性があります。 以下でいくつかのオプションについて説明します。

パスワードとSSHキーログイン


SSHには、さまざまな方法を使用してサインインできる柔軟な認証モデルがあります。 最も一般的な2つの選択肢は、パスワードとSSHキー認証です。

パスワード認証は、ほとんどのユーザーにとっておそらく最も自然なモデルですが、これら2つの選択肢の中で安全性が低くなります。 パスワードログインにより、潜在的な侵入者は、成功した組み合わせが見つかるまでパスワードを継続的に推測できます。 これはブルートフォーシングと呼ばれ、攻撃者になる可能性のあるユーザーが最新のツールを使用して簡単に自動化できます。

一方、SSHキーは、安全なキーペアを生成することによって動作します。 公開鍵は、ユーザーを識別するためのテストの一種として作成されます。 問題なく公開共有でき、ユーザーを識別し、一致する秘密鍵を使用してユーザーにログインできるようにする以外の目的で使用することはできません。 秘密鍵は秘密にしておく必要があり、関連する公開鍵のテストに合格するために使用されます。

基本的に、サーバーに公開SSHキーを追加すると、一致する秘密キーを使用してログインできるようになります。 これらのキーは非常に複雑であるため、ブルートフォースは実用的ではありません。 さらに、オプションでキーに長いパスフレーズを追加して、セキュリティをさらに強化することができます。

SSHの使用方法の詳細については、ここをクリックし、このリンクをチェックして、サーバーでSSHキーを設定する方法を確認してください。

悪意のあるIPアドレスを禁止するためにfail2banを実装する


SSH構成の一般的なセキュリティに役立つ1つのステップは、fail2banのようなソリューションを実装することです。 Fail2banは、ログファイルを監視して、リモートシステムが正当なユーザーではない可能性が高いかどうかを判断し、関連付けられたIPアドレスからの将来のトラフィックを一時的に禁止するサービスです。

正常なfail2banポリシーを設定すると、継続的にログインに失敗しようとしているコンピューターにフラグを立て、ファイアウォールルールを追加して、設定された期間、コンピューターからのトラフィックをドロップできます。 これは、禁止されたときにかなり長い間休憩しなければならないため、頻繁に使用されるブルートフォース方式を妨げる簡単な方法です。 これは通常、ブルートフォースのさらなる試みを思いとどまらせるのに十分です。

ここでUbuntuにfail2banポリシーを実装する方法を学ぶことができます。 DebianCentOSについても同様のガイドがここにあります。

不正侵入を検出するための侵入検知システムを実装する


覚えておくべき重要な考慮事項の1つは、不正使用を検出するための戦略を開発することです。 予防策を講じているかもしれませんが、失敗したかどうかも知る必要があります。

IDSとも呼ばれる侵入検知システムは、正常な状態のときに構成とファイルの詳細をカタログ化します。 次に、これらの記録された状態との比較を実行して、ファイルが変更されたか、設定が変更されたかを確認します。

侵入検知システムはかなりあります。 以下でいくつか説明します。

トリップワイヤー


最もよく知られているIDS実装の1つはtripwireです。 Tripwireは、システムファイルのデータベースをコンパイルし、その構成ファイルとバイナリを一連のキーで保護します。 構成の詳細が選択され、例外が定義された後、後続の実行は、監視するファイルへの変更を通知します。

ポリシーモデルは非常に柔軟性があり、環境に合わせてプロパティを形成できます。 次に、cronジョブを介してtripwireの実行を構成し、異常なアクティビティが発生した場合に電子メール通知を実装することもできます。

トリップワイヤーの実装方法について詳しくは、こちらをご覧ください。

補佐官


IDSのもう1つのオプションは、Aideです。 トリップワイヤーと同様に、Aideはデータベースを構築し、現在のシステム状態を保存されている正常な値と比較することで動作します。 不一致が発生した場合は、管理者に問題を通知できます。

Aideとtripwireはどちらも、同じ問題に対して同様のソリューションを提供します。 ドキュメントを確認し、両方のソリューションを試して、どちらが良いかを見つけてください。

AideをIDSとして使用する方法のガイドについては、こちらを確認してください。

Psad


psadツールは、上記のツールとは異なるシステムの部分に関係しています。 psadは、システムファイルを監視する代わりに、ファイアウォールログを監視して、悪意のあるアクティビティを検出しようとします。

たとえば、ユーザーがポートスキャンを使用して脆弱性を調査しようとしている場合、psadはこのアクティビティを検出し、ファイアウォールルールを動的に変更して、問題のあるユーザーをロックアウトできます。 このツールは、さまざまな脅威レベルを登録し、問題の重大度に基づいて対応することができます。 オプションで、管理者に電子メールを送信することもできます。

psadをネットワークIDSとして使用する方法については、このリンクをたどってください。

ブロ


ネットワークベースのIDSのもう1つのオプションは、Broです。 Broは、実際にはネットワークIDSとして、または使用統計の収集、問題の調査、パターンの検出などの他の目的に使用できるネットワーク監視フレームワークです。

Broシステムは2つのレイヤーに分かれています。 最初のレイヤーはアクティビティを監視し、イベントと見なすものを生成します。 2番目のレイヤーは、生成されたイベントを、トラフィックに対して実行する必要があることを指示するポリシーフレームワークを介して実行します。 アラートを生成したり、システムコマンドを実行したり、発生をログに記録したり、その他のパスを使用したりできます。

BroをIDSとして使用する方法については、ここをクリックしてください。

RKハンター


技術的には侵入検知システムではありませんが、rkhunterは、ルートキットや既知のマルウェアを検出するために、ホストベースの侵入検知システムと同じ原理の多くで動作します。

Linuxの世界ではウイルスはまれですが、マルウェアやルートキットが存在し、ボックスを危険にさらしたり、成功したエクスプロイトへのアクセスを継続したりする可能性があります。 RKHunterは、既知のエクスプロイトのリストをダウンロードしてから、システムをデータベースと照合します。 また、一部の一般的なアプリケーションで安全でない設定を検出した場合にも警告を発します。

この記事をチェックして、UbuntuでRKHunterを使用する方法を学ぶことができます。

一般的なセキュリティアドバイス


上記のツールと構成はシステムの一部を保護するのに役立ちますが、優れたセキュリティは、ツールを実装してそれを忘れることだけでは得られません。 優れたセキュリティは、特定の考え方に現れ、勤勉、精査、およびプロセスとしてのセキュリティへの関与を通じて達成されます。

システムを安全に使用することに関して正しい方向にあなたを設定するのを助けることができるいくつかの一般的な規則があります。

更新に注意を払い、定期的に更新する


ソフトウェアの脆弱性は、システムに存在する可能性のあるほぼすべての種類のソフトウェアに常に見られます。 ディストリビューションメンテナは通常、最新のセキュリティパッチに対応し、それらの更新をリポジトリにプッシュするという優れた仕事をします。

ただし、リポジトリでセキュリティ更新プログラムを利用できるようにすると、更新プログラムをダウンロードしてインストールしていない場合、サーバーは役に立ちません。 多くのサーバーは、システムソフトウェアの安定した、十分にテストされたバージョンに依存することで恩恵を受けますが、セキュリティパッチは延期されるべきではなく、重要な更新と見なされるべきです。

ほとんどのディストリビューションは、セキュリティパッチをダウンロードしてインストールするだけのセキュリティメーリングリストと個別のセキュリティリポジトリを提供します。

公式チャンネル以外でソフトウェアをダウンロードする場合は注意してください


ほとんどのユーザーは、公式リポジトリから入手できるソフトウェアを配布用に使用し、ほとんどの配布では署名付きパッケージを提供します。 ユーザーは通常、配布メンテナーを信頼し、公式チャネルの外部で取得したソフトウェアのセキュリティに関心を集中させることができます。

プロジェクトの公式Webサイトから入手できるディストリビューションまたはソフトウェアのパッケージを信頼することを選択できますが、各ソフトウェアを自分で監査しない限り、リスクが伴うことに注意してください。 ほとんどのユーザーは、これが許容可能なレベルのリスクであると感じています。

一方、ランダムなリポジトリやPPAから取得したソフトウェアが、知らない人や組織によって管理されていると、セキュリティ上の大きなリスクになる可能性があります。 決まったルールはなく、非公式のソフトウェアソースの大部分は完全に安全である可能性がありますが、他の当事者を信頼する場合は常にリスクを冒していることに注意してください。

ソースを信頼する理由を自分自身に説明できることを確認してください。 これができない場合は、セキュリティリスクを、利便性よりも懸念事項として検討することを検討してください。

あなたのサービスを知り、それらを制限する


サーバーを実行する全体のポイントは、アクセスできるサービスを提供する可能性がありますが、マシンで実行されるサービスは、使用して必要なサービスに制限してください。 有効になっているすべてのサービスを脅威の可能性のあるベクトルと見なし、コア機能に影響を与えることなく、できるだけ多くの脅威のベクトルを排除するようにしてください。

つまり、ヘッドレス(モニターが接続されていない)サーバーを実行していて、グラフィカル(非Web)プログラムを実行していない場合は、Xディスプレイサーバーを無効にして、おそらくアンインストールする必要があります。 他の分野でも同様の対策を講じることができます。 プリンターがありませんか? 「lp」サービスを無効にします。 Windowsネットワーク共有はありませんか? 「samba」サービスを無効にします。

さまざまな方法で、コンピューターで実行しているサービスを見つけることができます。 この記事では、「要件のリストを作成する」セクションで、有効なサービスを検出する方法について説明します。

FTPを使用しないでください。 代わりにSFTPを使用する


これは多くの人にとって理解するのが難しいかもしれませんが、FTPは本質的に安全でないプロトコルです。 すべての認証はプレーンテキストで送信されます。つまり、サーバーとローカルマシン間の接続を監視している人は誰でも、ログインの詳細を見ることができます。

FTPを実装しても問題がない場合はごくわずかです。 匿名のパブリックな読み取り専用ダウンロードミラーを実行している場合は、FTPが適切な選択です。 FTPが適切な選択である別のケースは、NAT対応ファイアウォールの背後にある2台のコンピューター間でファイルを転送するだけで、ネットワークが安全であると信頼している場合です。

他のほとんどすべての場合、より安全な代替手段を使用する必要があります。 SSHスイートには、同様の方法で表面上で動作するSFTPと呼ばれる代替プロトコルが付属していますが、SSHプロトコルと同じセキュリティに基づいています。

これにより、従来のFTPを使用するのと同じ方法でサーバーとの間で情報を転送できますが、リスクはありません。 最新のFTPクライアントのほとんどは、SFTPサーバーとも通信できます。

SFTPを使用してファイルを安全に転送する方法については、このガイドをご覧ください。

賢明なユーザーセキュリティポリシーを実装する


ユーザーを管理するときにシステムのセキュリティを強化するために実行できる手順はいくつかあります。

1つの提案は、rootログインを無効にすることです。 rootユーザーはPOSIXのようなシステムに存在し、強力なアカウントであるため、多くの攻撃者にとって魅力的な標的です。 sudoアクセスを構成した後、またはsuコマンドを使用することに慣れている場合は、rootログインを無効にすることをお勧めします。 多くの人がこの提案に同意しませんが、それがあなたに適しているかどうかを調べてください。

SSHデーモン内でリモートルートログインを無効にしたり、ローカルログインを無効にしたりすることができます。/etc/securettyファイルで制限を設けることができます。 また、rootユーザーのシェルを非シェルに設定してrootシェルアクセスを無効にしたり、PAMルールを設定してrootログインを制限したりすることもできます。 RedHatには、ルートログインを無効にする方法に関するすばらしい記事があります。

ユーザーアカウントで実装するもう1つの優れたポリシーは、ユーザーとサービスごとに一意のアカウントを作成し、仕事を遂行するための最低限の権限のみを付与することです。 アクセスする必要のないものはすべてロックダウンし、機能を損なうことなくすべての特権を奪います。

これは重要なポリシーです。1人のユーザーまたはサービスが危険にさらされても、攻撃者がさらに多くのシステムにアクセスできるようにするドミノの影響は発生しないためです。 この区画化システムは、隔壁と水密ドアのシステムが船体の破損時に船が沈むのを防ぐのに役立つのと同じように、問題を切り分けるのに役立ちます。

上記で説明したサービスポリシーと同様に、不要になったユーザーアカウントも無効にするように注意する必要があります。 これは、ソフトウェアをアンインストールしたとき、またはユーザーがシステムにアクセスできなくなったときに発生する可能性があります。

権限設定に注意してください


ファイルのアクセス許可は、多くのユーザーにとって大きなフラストレーションの源です。 自分自身を危害にさらさずに必要なことを実行できる権限のバランスを見つけることは困難な場合があり、各シナリオで注意と思考が必要になります。

正常なumaskポリシー(新しいファイルとディレクトリのデフォルトのアクセス許可を定義するプロパティ)を設定すると、適切なデフォルトを作成するのに大いに役立ちます。 権限の仕組みとumask値の調整方法については、こちらをご覧ください。

一般に、特にインターネットにアクセスできる場合は、誰でも書き込み可能に設定する前に、よく考えておく必要があります。 これは極端な結果をもたらす可能性があります。 さらに、何をしているのかを完全に理解していない限り、パーミッションにSGIDまたはSUIDビットを設定しないでください。 また、ファイルに所有者とグループがあることを確認してください。

ファイルのアクセス許可の設定は、特定の使用法によって大きく異なりますが、より少ないアクセス許可で処理する方法があるかどうかを常に確認する必要があります。 これは間違いを犯しやすいものの1つであり、インターネット上に多くの悪いアドバイスが浮かんでいる領域です。

サーバー上のマルウェアを定期的にチェックします


Linuxは一般的にWindowsよりもマルウェアの標的になりませんが、悪意のあるソフトウェアの影響を受けないわけではありません。 侵入の試みを検出するためのIDSの実装と併せて、マルウェアのスキャンは、不正なソフトウェアがマシンにインストールされていることを示すアクティビティの痕跡を特定するのに役立ちます。

Linuxシステムで利用できるマルウェアスキャナーは多数あり、サーバーの整合性を定期的に検証するために使用できます。 Linux Malware Detectは、maldetまたはLMDとも呼ばれ、既知のマルウェアシグネチャをスキャンするように簡単にインストールおよび構成できる一般的なオプションの1つです。 手動で実行して1回限りのスキャンを実行することも、デーモン化して定期的にスケジュールされたスキャンを実行することもできます。 これらのスキャンからのレポートは、サーバー管理者に電子メールで送信できます。

使用している特定のソフトウェアを保護する方法


このガイドは、あらゆる種類のサービスやアプリケーションを保護するための詳細を説明するのに十分な大きさではありませんが、オンラインで利用できる多くのチュートリアルとガイドラインがあります。 システムに実装する予定のすべてのプロジェクトのセキュリティに関する推奨事項を読む必要があります。

さらに、Webサーバーやデータベース管理システムなどの一般的なサーバーソフトウェアには、セキュリティ専用のWebサイトとデータベース全体があります。 一般に、オンラインにする前に、すべてのサービスを読んで保護する必要があります。

使用しているソフトウェアに関するより具体的なアドバイスについては、セキュリティセクションを確認してください。

結論


これで、Linuxサーバーに実装できる一般的なセキュリティ慣行について十分に理解できたはずです。 重要性の高い多くの分野について言及するように努めてきましたが、結局のところ、あなたは自分で多くの決定を下さなければなりません。 サーバーを管理するときは、サーバーのセキュリティに責任を持つ必要があります。

これは、最初は1回の簡単な操作で構成できるものではなく、システムの監査、ソリューションの実装、ログとアラートの評価、ニーズの再評価などのプロセスと継続的な演習です。 システムの保護には注意を払い、ソリューションの結果を常に評価および監視する必要があります。

ジャスティン・エリングウッド