序章

優れたファイアウォールを設定することは、最新のオペレーティングシステムを保護するための重要なステップです。 ほとんどのLinuxディストリビューションには、ファイアウォールの構成に使用できるいくつかの異なるファイアウォールツールが付属しています。 このガイドでは、 iptables ファイアウォール。

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

このガイドでは、iptablesがどのように機能するかについて説明します。 シリーズの次の記事では、Ubuntu14.04サーバーを保護するための基本的なルールセットを構成する方法を紹介します。

Iptablesの仕組み

iptablesを制御し、ファイアウォールポリシーを構築するために必要な実際のコマンドについて説明する前に、いくつかの用語を調べて、iptablesがどのように機能するかについて説明しましょう。

iptablesファイアウォールは、ネットワークトラフィックを一連のルールと比較することで動作します。 ルールは、パケットがルールと一致する必要がある特性と、パケットを一致させるために実行する必要があるアクションを定義します。

どのパケットが特定のルールに一致するかを確立するための多くのオプションがあります。 パケットプロトコルタイプ、送信元または宛先のアドレスまたはポート、使用されているインターフェイス、以前のパケットとの関係などを一致させることができます。

定義されたパターンが一致する場合、実行されるアクションはtargetと呼ばれます。 ターゲットは、acceptやdropなど、パケットの最終的なポリシー決定になります。 また、処理のためにパケットを別のチェーンに移動したり、単に遭遇をログに記録したりすることもできます。 多くのオプションがあります。

これらのルールは、チェーンと呼ばれるグループに編成されています。 チェーンは、パケットが順番にチェックされる一連のルールです。 パケットがルールの1つに一致すると、関連するアクションが実行され、チェーン内の残りのルールと照合されません。

ユーザーは必要に応じてチェーンを作成できます。 デフォルトで定義されているチェーンは3つあります。 彼らです:

  • INPUT :このチェーンは、サーバー宛てのすべてのパケットを処理します。
  • OUTPUT :このチェーンには、サーバーによって作成されたトラフィックのルールが含まれています。
  • FORWARD :このチェーンは、サーバー上に作成されていない他のサーバー宛てのトラフィックを処理するために使用されます。 このチェーンは基本的に、リクエストを他のマシンにルーティングするようにサーバーを構成する方法です。

各チェーンには0個以上のルールを含めることができ、デフォルトのポリシーがあります。 ポリシーは、パケットがチェーン内のすべてのルールを通過し、どのルールにも一致しない場合に何が起こるかを決定します。 一致するルールがない場合は、パケットをドロップするか、パケットを受け入れることができます。

ルールを介してロードできるモジュールを介して、iptablesは接続を追跡することもできます。 これは、前のパケットとの関係に基づいてパケットに何が起こるかを定義するルールを作成できることを意味します。 この機能を「ステートトラッキング」、「接続トラッキング」、または「ステートマシン」の構成と呼びます。

このガイドでは、サーバーに向けられた不要なトラフィックを拒否するのに役立つ一連のルールが含まれているため、主にINPUTチェーンの構成について説明します。

IPv4とIPv6

Linuxカーネルに含まれているnetfilterファイアウォールは、IPv4とIPv6のトラフィックを完全に分離します。 同様に、ファイアウォールルールセットを含むテーブルを操作するために使用されるツールも異なります。 サーバーでIPv6を有効にしている場合は、サーバーが受けるトラフィックに対応するように両方のテーブルを構成する必要があります。

レギュラー iptables コマンドは、IPv4トラフィックを管理するルールを含むテーブルを操作するために使用されます。 IPv6トラフィックの場合、コンパニオンコマンドは ip6tables 使用されている。 これは、内部化するための重要なポイントです。これは、設定したルールがすべて意味するためです。 iptables プロトコルのバージョン6を使用するパケットには影響しません。

これらのツインコマンド間の構文は同じであるため、これらのテーブルごとにルールセットを作成することはそれほど困難ではありません。 変更を加えるときはいつでも、両方のテーブルを変更することを忘れないでください。 The iptables コマンドは、IPv4トラフィックに適用されるルールを作成します。 ip6tables コマンドは、IPv6トラフィックに適用されるルールを作成します。

サーバーの適切なIPv6アドレスを使用して、 ip6tables ルール。

心に留めておくべきこと

iptablesがそのインターフェイスを通過するパケットをどのように送信するかがわかったので(パケットを適切なチェーンに送信し、一致するまで各ルールと照合し、一致するものが見つからない場合はチェーンのデフォルトポリシーを発行します)、次のようになります。ルールを作成するときに注意すべきいくつかの落とし穴。

まず、デフォルトのドロップポリシーを実装する場合、現在の接続をアクティブに保つためのルールがあることを確認する必要があります。 これは、SSHを介してサーバーに接続している場合に特に重要です。 現在の接続を切断するルールまたはポリシーを誤って実装した場合は、帯域外アクセスを提供するWebコンソールを使用して、いつでもDigitalOceanVPSにログインできます。

覚えておくべきもう1つのことは、各チェーンのルールの順序です。 パケットは、より具体的なルールに一致することを意図している場合、一致するより一般的なルールに遭遇してはなりません。

このため、チェーンの上部にあるルールは、下部にあるルールよりも高いレベルの特異性を持つ必要があります。 最初に特定のケースに一致させてから、より広いパターンに一致させるためのより一般的なルールを提供する必要があります。 パケットがチェーン全体を通過する場合(どのルールにも一致しない場合)、デフォルトのポリシーであるmost一般ルールにヒットします。

このため、チェーンのデフォルトポリシーは、チェーンに含まれるルールのタイプを非常に強く指示します。 ACCEPTのデフォルトポリシーを持つチェーンには、パケットを明示的にドロップするルールが含まれます。 デフォルトでDROPに設定されているチェーンには、特に受け入れられる必要のあるパケットの例外が含まれます。

結論

この時点で、iptablesがどのように機能するかを知る最も簡単な方法は、iptablesを使用して独自のファイアウォールを実装することです。

次のガイドでは、 Ubuntu14.04で基本的なiptablesファイアウォールを作成する方法を示します。 これにより、許可したいいくつかのサービスを除いて、サーバーがロックダウンされます。

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