iptablesファイアウォールはどのように機能しますか。

In Japanese: はじめに

現代のオペレーティングシステムを保護するためには、ファイアウォールを設定することが重要な手順です。多くのLinuxディストリビューションには、ファイアウォールを設定するために使用できるいくつかの異なるツールが付属しています。本ガイドでは、iptablesファイアウォールについて説明します。

Iptablesは、大抵のLinuxディストリビューションにデフォルトで含まれている標準のファイアウォールです。Linuxのネットワークスタックを操作するカーネルレベルのnetfilterフックへのコマンドラインインターフェースです。各パケットをネットワーキングインターフェースを通過する際に、一連のルールと照合してどうするかを決定します。

このガイドでは、Iptablesの動作について説明します。もっと詳しく知りたい方は、IptablesとNetfilterアーキテクチャについての詳細な解説を読んでみてください。

iptablesの動作原理

まずは、いくつかの専門用語を復習し、iptablesの動作について話し合いましょう。

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

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

定義されたパターンが一致する場合、それが発生するアクションはターゲットと呼ばれます。ターゲットは、パケットに対する最終的なポリシー決定(ACCEPTやDROPなど)になる場合もあります。また、パケットを別のチェーンに移動して処理することもありますし、出来事をログに記録することもあります。様々な選択肢があります。

これらのルールは、チェーンと呼ばれるグループに整理されています。チェーンとは、パケットが順次確認される一連のルールのセットです。パケットがルールの1つに一致すると、関連するアクションを実行し、チェーン内の残りのルールはスキップされます。

ユーザーは必要に応じてチェーンを作成することができます。デフォルトでは、3つのチェーンが定義されています。

  • INPUT: This chain handles all packets that are addressed to your server.
  • OUTPUT: This chain contains rules for traffic created by your server.
  • FORWARD: This chain is used to deal with traffic destined for other servers that are not created on your server. This chain is a way to configure your server to route requests to other machines.

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

Iptablesは接続を追跡することもできます。これは、パケットが前のパケットとの関係に基づいてどのように処理されるかを定義するルールを作成できることを意味します。この機能は「ステートトラッキング」、「コネクショントラッキング」、または「ステートマシンの設定」と呼ばれています。

IPv4とIPv6の対比

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

Note

注:NftablesはIptablesの後継であり、IPv4とIPv6の取り扱いをより密接に統合しています。iptables-translateコマンドを使用して、IptablesのルールをNftablesに移行することができます。

IPv4トラフィックを管理するルールを含むテーブルを操作するためには、通常のiptablesコマンドを使用します。IPv6トラフィックでは、ip6tablesというコンパニオンコマンドが使用されます。iptablesで設定するルールは、IPv4アドレッシングを使用するパケットにのみ影響を与えますが、これらのコマンドの構文は同じです。iptablesコマンドはIPv4トラフィックに適用されるルールを作成し、ip6tablesコマンドはIPv6トラフィックに適用されるルールを作成します。ip6tablesのルールを作成する際には、サーバーのIPv6アドレスを使用することを忘れないでください。

気に留めるべきこと

iptablesがインターフェースを通過するパケットをどのように処理するかを理解したら、パケットを適切なチェインに導くために、ルールを作成することができます。パケットを各ルールと照合し、一致するものが見つかるまで確認し、一致しない場合はチェインのデフォルトポリシーを適用します。

最初に、デフォルトのドロップポリシーを実装する場合、現在の接続を維持するためのルールを確実に持っていることを確認する必要があります。特に、SSHを通じてサーバーに接続している場合には、これが重要です。もし誤って現在の接続を切断する規則やポリシーを実装してしまった場合、ブラウザベースの回復コンソールを使用してサーバーにログインする必要があるかもしれません。

考慮すべきもう一つのことは、各チェーン内のルールの順序は重要であるということです。パケットは、より具体的なルールにマッチするようになっている場合に、それとマッチするもっと一般的なルールに出くわしてはいけません。

これにより、チェーンの先頭付近のルールは、最下部のルールよりも高いレベルの具体性を持つべきです。最初に特定のケースにマッチさせ、その後より一般的なルールで広範なパターンにマッチさせるべきです。パケットがチェーン全体を通過し(いずれのルールにもマッチしない場合)、最も一般的なルール、つまりデフォルトポリシーに従います。

このため、チェインのデフォルトポリシーは、チェインに含まれるルールの種類を強く左右します。デフォルトポリシーがACCEPTのチェインには、パケットを明示的にドロップするルールが含まれます。一方、デフォルトポリシーがDROPのチェインには、特に受け入れる必要のあるパケットの例外が含まれます。

結論として

この時点で、独自のファイアウォールを実装する準備が整いました。そのためには、Ubuntu 22.04でNftablesを使用したファイアウォールの設定方法を読む必要があります。または、より高レベルなアプローチとして、Ubuntu 22.04でUFWを使用したファイアウォールの設定方法を読むこともあります。もしファイアウォールを管理されたサービスレイヤーとして実行したい場合は、Silicon CloudのCloud Firewallsを試すこともできます。

コメントを残す 0

Your email address will not be published. Required fields are marked *