ファイアウォールとは何ですか?

前書き

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

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

TCPネットワークパケット

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

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

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

ファイアウォールの種類

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

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

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

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

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

ファイアウォールルール

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

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

  1. ポート80および443(HTTPおよびHTTPS Webトラフィック)上のパブリックネットワークインターフェイスへの新規および確立された着信トラフィックを受け入れます。

  2. オフィスの非技術系従業員のIPアドレスからポート22(SSH)への着信トラフィックをドロップします

  3. オフィスのIP範囲からポート22(SSH)のプライベートネットワークインターフェイスへの新しく確立された着信トラフィックを受け入れます。

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

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

デフォルトポリシー

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

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

デフォルトのポリシーが* accept *に設定されている場合、あなた自身の非技術系従業員を除く誰でも、サーバー上のオープンサービスへの接続を確立できます。 これは、従業員のサブセットのみを除外するため、非常に適切に構成されていないファイアウォールの例になります。

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

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

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

発信ルールの作成

サンプルのファイアウォールがデフォルトで発信トラフィックに*ドロップ*に設定されているとします。 つまり、受信する* accept *ルールは、補完的な送信ルールがなければ役に立ちません。

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

  1. ポート80および443(HTTPおよびHTTPS)上のパブリックネットワークインターフェイスへの確立された発信トラフィックを受け入れます。

  2. ポート22(SSH)のプライベートネットワークインターフェイスへの確立された発信トラフィックを受け入れます

サーバーはその接続を確立または確認する必要がないため、ドロップされる着信トラフィックのルール(着信ルール2)を明示的に記述する必要はありません。

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

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

Iptables

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

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

UFW

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

UFWの使用の詳細については、次のチュートリアルをご覧ください:https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian- cloud-server [UbuntuおよびDebianクラウドサーバーでUFWを使用してファイアウォールをセットアップする方法]。

FirewallD

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

FirewallDの使用の詳細については、次のチュートリアルをご覧ください。https://www.digitalocean.com/community/tutorials/how-to-configure-firewalld-to-protect-your-centos-7-server [FirewallDの設定方法] CentOS 7サーバーを保護する]。

CentOS 7を実行しているがiptablesを使用する場合は、次のチュートリアルに従ってください:https://www.digitalocean.com/community/tutorials/how-to-migrate-from-firewalld-to-iptables-on-centos-7 [CentOS 7でFirewallDからIptablesに移行する方法]。

Fail2ban

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

Fail2banの詳細については、次のリンクをご覧ください。

結論

ファイアウォールの仕組みを理解したので、上記のチュートリアルを使用して、サーバーのセットアップのセキュリティを向上させるファイアウォールの実装を検討する必要があります。

ファイアウォールの機能について詳しく知りたい場合は、次のリンクをご覧ください。

前の投稿:独自のメールサーバーを実行したくない場合がある理由
次の投稿:Apacheを使用してUbuntu 14.04サーバーにDrupalをインストールする方法