序章

ファイアウォールは、一連のユーザー定義ルールに基づいて着信および発信ネットワークトラフィックをフィルタリングすることにより、ネットワークセキュリティを提供するシステムです。 一般に、ファイアウォールの目的は、すべての正当な通信が自由に流れるようにしながら、不要なネットワーク通信の発生を削減または排除することです。 ほとんどのサーバーインフラストラクチャでは、ファイアウォールはセキュリティの重要な層を提供し、他の手段と組み合わせて、攻撃者が悪意のある方法でサーバーにアクセスするのを防ぎます。

このガイドでは、クラウドサーバーに関連するステートフルソフトウェアファイアウォール(iptablesやFirewallDなど)に焦点を当てて、ファイアウォールがどのように機能するかについて説明します。 まず、TCPパケットとさまざまな種類のファイアウォールについて簡単に説明します。 次に、ステートフルファイアウォールに関連するさまざまなトピックについて説明します。 最後に、独自のサーバーにファイアウォールを設定するのに役立つ他のチュートリアルへのリンクを提供します。

TCPネットワークパケット

さまざまな種類のファイアウォールについて説明する前に、トランスポート制御プロトコル(TCP)ネットワークトラフィックがどのように見えるかを簡単に見てみましょう。

TCPネットワークトラフィックは、 packets 内のネットワーク内を移動します。これは、パケットヘッダー(送信元アドレスや宛先アドレス、パケットシーケンス情報などの制御情報を含む)とデータ(別名、ペイロード)。 各パケットの制御情報は、関連するデータが適切に配信されるようにするのに役立ちますが、それに含まれる要素は、ファイアウォールにパケットをファイアウォールルールと照合するさまざまな方法も提供します。

着信TCPパケットを正常に受信するには、受信者が発信確認パケットを送信者に送り返す必要があることに注意することが重要です。 着信パケットと発信パケットの制御情報の組み合わせを使用して、接続状態を判別できます(例: 送信者と受信者の間の新しい、確立された、関連する)。

ファイアウォールの種類

ネットワークファイアウォールの3つの基本的なタイプであるパケットフィルタリング(ステートレス)、ステートフル、およびアプリケーション層について簡単に説明しましょう。

パケットフィルタリング(ステートレス)ファイアウォールは、個々のパケットを個別に検査することで機能します。 そのため、接続状態を認識せず、個々のパケットヘッダーに基づいてのみパケットを許可または拒否できます。

ステートフルファイアウォールはパケットの接続状態を判別できるため、ステートレスファイアウォールよりもはるかに柔軟です。 これらは、ファイアウォールルールがトラフィックに適用される前に接続状態が決定されるまで、関連するパケットを収集することによって機能します。

アプリケーションファイアウォールは、送信されるデータを分析することでさらに一歩進んで、ネットワークトラフィックを個々のサービスまたはアプリケーションに固有のファイアウォールルールと照合できるようにします。 これらは、プロキシベースのファイアウォールとも呼ばれます。

最新のすべてのオペレーティングシステムで使用できるファイアウォールソフトウェアに加えて、ファイアウォール機能は、ルーターやファイアウォールアプライアンスなどのハードウェアデバイスによっても提供できます。 繰り返しになりますが、ここでは、保護することを目的としたサーバー上で実行されるステートフルソフトウェアファイアウォールに焦点を当てます。

ファイアウォールルール

上記のように、ファイアウォールを通過するネットワークトラフィックは、ルールと照合され、通過を許可するかどうかが決定されます。 ファイアウォールルールがどのように見えるかを説明する簡単な方法は、いくつかの例を示すことです。それで、ここでそれを行います。

着信トラフィックに適用されるファイアウォールルールのリストを備えたサーバーがあるとします。

  1. ポート80および443のパブリックネットワークインターフェイスへの新規および確立された着信トラフィックを受け入れます(HTTPおよびHTTPS Webトラフィック)
  2. オフィスの技術者以外の従業員のIPアドレスからポート22(SSH)に着信トラフィックをドロップします
  3. オフィスのIP範囲からポート22(SSH)のプライベートネットワークインターフェイスへの新規および確立された着信トラフィックを受け入れる

これらの各例の最初の単語は、「accept」、「reject」、または「drop」のいずれかであることに注意してください。 これは、ネットワークトラフィックの一部がルールに一致した場合にファイアウォールが実行する必要のあるアクションを指定します。 Accept はトラフィックの通過を許可することを意味し、 require はトラフィックをブロックするが「到達不能」エラーで応答することを意味し、dropはトラフィックをブロックして送信することを意味します応答なし。 各ルールの残りの部分は、各パケットが照合される条件で構成されます。

結局のところ、ネットワークトラフィックは、最初から最後まで、シーケンスまたはチェーンのファイアウォールルールのリストと照合されます。 より具体的には、ルールが一致すると、関連するアクションが問題のネットワークトラフィックに適用されます。 この例では、経理担当者がサーバーへのSSH接続を確立しようとすると、ルール3がチェックされる前に、ルール2に基づいて拒否されます。 ただし、システム管理者はルール3にのみ一致するため、受け入れられます。

デフォルトポリシー

ファイアウォールルールのチェーンがすべての可能な条件を明示的にカバーしていないのは一般的です。 このため、ファイアウォールチェーンには、アクション(承認、拒否、または削除)のみで構成されるデフォルトのポリシーを常に指定する必要があります。

上記のチェーン例のデフォルトポリシーがdropに設定されているとします。 オフィスの外にあるコンピューターがサーバーへのSSH接続を確立しようとすると、どのルールの条件にも一致しないため、トラフィックはドロップされます。

デフォルトのポリシーがacceptに設定されている場合、技術者以外の従業員を除いて、サーバー上の任意のオープンサービスへの接続を確立できます。 これは、従業員のサブセットのみを締め出すため、ファイアウォールの構成が非常に不十分な例になります。

着信および発信トラフィック

サーバーの観点から見ると、ネットワークトラフィックは着信または発信のいずれかである可能性があるため、ファイアウォールはどちらの場合にも個別のルールセットを維持します。 他の場所で発生するトラフィックである着信トラフィックは、サーバーが送信する発信トラフィックとは異なる方法で処理されます。 サーバーは通常、それ自体が信頼できるため、サーバーがほとんどの発信トラフィックを許可するのが一般的です。 それでも、サーバーが攻撃者または悪意のある実行可能ファイルによって侵害された場合に、発信ルールセットを使用して不要な通信を防ぐことができます。

ファイアウォールのセキュリティ上の利点を最大化するには、他のシステムがサーバーと対話する方法をすべて特定し、それらを明示的に許可するルールを作成してから、他のすべてのトラフィックをドロップする必要があります。 サーバーが適切な着信接続に発信確認応答を送信できるように、適切な発信ルールを設定する必要があることに注意してください。 また、サーバーは通常、更新のダウンロードやデータベースへの接続など、さまざまな理由で独自の送信トラフィックを開始する必要があるため、これらのケースを送信ルールセットに含めることも重要です。

発信ルールの作成

例のファイアウォールがデフォルトでdrop送信トラフィックに設定されているとします。 これは、着信 accept ルールは、補完的な発信ルールなしでは役に立たないことを意味します。

ファイアウォールルールセクションからの着信ファイアウォールルール(1および3)の例を補完し、これらのアドレスとポートで適切な通信が行われるようにするには、次の発信ファイアウォールルールを使用できます。

  1. ポート80および443(HTTPおよびHTTPS)でパブリックネットワークインターフェイスへの確立された発信トラフィックを受け入れる
  2. ポート22(SSH)のプライベートネットワークインターフェイスへの確立された発信トラフィックを受け入れる

サーバーはその接続を確立または確認する必要がないため、ドロップされる着信トラフィックのルール(着信ルール2)を明示的に記述する必要はないことに注意してください。

ファイアウォールソフトウェアとツール

ファイアウォールの仕組みについて説明したので、効果的なファイアウォールの設定に役立つ一般的なソフトウェアパッケージを見てみましょう。 他にも多くのファイアウォール関連のパッケージがありますが、これらは効果的であり、最も遭遇するものです。

Iptables

Iptablesは、ほとんどのLinuxディストリビューションにデフォルトで含まれている標準のファイアウォールです(nftablesと呼ばれる最新のバリアントがそれに置き換わり始めます)。 これは実際には、Linuxネットワークスタックを操作できるカーネルレベルのnetfilterフックのフロントエンドです。 これは、ネットワークインターフェイスを通過する各パケットを一連のルールと照合して、何を行うかを決定することで機能します。

iptablesを使用してファイアウォールを実装する方法については、次のリンクを確認してください。

UFW

Uncomplicated Firewallの略であるUFWは、ファイアウォールの構成プロセスを簡素化することを目的としたiptablesへのインターフェースです。

UFWの使用の詳細については、次のチュートリアルを確認してください:UbuntuおよびDebianクラウドサーバーでUFWを使用してファイアウォールをセットアップする方法

FirewallD

FirewallDは、CentOS7サーバーでデフォルトで利用できる完全なファイアウォールソリューションです。 ちなみに、FirewallDはiptablesを使用してnetfilterを構成します。

FirewallDの使用の詳細については、次のチュートリアルを確認してください:CentOS7サーバーを保護するためにFirewallDを構成する方法

CentOS 7を実行しているが、iptablesを使用したい場合は、次のチュートリアルに従ってください:CentOS7でFirewallDからIptablesに移行する方法

Fail2ban

Fail2banは、ブルートフォースログインの試行とDDOS攻撃をブロックするようにファイアウォールを自動的に構成できる侵入防止ソフトウェアです。

Fail2banの詳細については、次のリンクを確認してください。

結論

ファイアウォールがどのように機能するかを理解したので、上記のチュートリアルを使用して、サーバー設定のセキュリティを向上させるファイアウォールの実装を検討する必要があります。

ファイアウォールの仕組みについて詳しく知りたい場合は、次のリンクを確認してください。