導入
ファイアウォールの設定は、どのような現代のオペレーティングシステムでもセキュリティを確保するために取る必要のある重要なステップです。ほとんどのLinuxディストリビューションには、ファイアウォールを構成するために使用できるいくつかの異なるツールが付属しています。このガイドでは、iptables
ファイアウォールに焦点を当てます。
Iptablesは、ほとんどのLinuxディストリビューションにデフォルトで含まれている標準のファイアウォールです。これは、Linuxネットワークスタックを操作するためのカーネルレベルのnetfilterフックに対するコマンドラインインタフェースです。それは、ネットワーキングインターフェイスを横切る各パケットをルールのセットに一致させて、どのように処理するかを決定します。
このガイドでは、Iptablesの動作を見ていきます。より詳細なアプローチについては、IptablesとNetfilterアーキテクチャの詳細な調査を参照してください。
Iptablesの動作
まず、用語のいくつかを見直し、iptablesの動作について説明します。
iptablesファイアウォールは、ネットワークトラフィックをルールのセットと比較して動作します。これらのルールは、一致するネットワークパケットが持つ必要がある特性と、一致するパケットに対して取られるべきアクションを定義します。
以下は、特定のルールに一致するパケットを確立するための多くのオプションがあります。パケットのプロトコルタイプ、ソースまたは宛先のアドレスやポート、使用されているインターフェース、前のパケットとの関係などでパケットを一致させることができます。
定義されたパターンが一致すると、それに関連するアクションはターゲットと呼ばれます。ターゲットは、パケットに対する最終的なポリシー決定である場合があります(例:ACCEPT
またはDROP
)。または、パケットを別のチェーンに移動して処理するか、エンカウンターをログに記録することもできます。多くのオプションがあります。
これらのルールは、チェーンと呼ばれるグループに整理されています。チェーンは、パケットが順次確認されるルールのセットです。パケットがルールのいずれかに一致すると、関連するアクションが実行され、チェーン内の残りのルールがスキップされます。
A user can create chains as needed. There are three chains defined by default. They are:
- INPUT: このチェーンは、サーバー宛てのすべてのパケットを処理します。
- OUTPUT: このチェーンには、サーバーによって生成されたトラフィックのためのルールが含まれています。
- FORWARD: このチェーンは、サーバーで作成されていない他のサーバー宛のトラフィックを処理するために使用されます。このチェーンは、サーバーを他のマシンにリクエストをルーティングする方法です。
各チェーンにはゼロ個以上のルールが含まれ、デフォルトのポリシーがあります。ポリシーは、パケットがチェーン内のすべてのルールを通過して一致するルールがない場合の動作を決定します。パケットをドロップするか、ルールに一致しない場合はパケットを受け入れるかを選択できます。
Iptablesは接続を追跡することもできます。つまり、以前のパケットとの関係に基づいてパケットがどうなるかを定義するルールを作成できます。この機能は「状態追跡」、「接続追跡」、または「状態マシン」の構成です。
IPv4対IPv6
Linuxカーネルに含まれるnetfilterファイアウォールはIPv4トラフィックとIPv6トラフィックを完全に分離しています。ファイアウォールルールセットを含むテーブルを操作するために使用されるIptablesツールも異なります。サーバーでIPv6を有効にしている場合、サーバー上のトラフィックに対処するために両方のテーブルを構成する必要があります。
注意: Iptablesの後継であるNftablesは、IPv4とIPv6の処理をより密接に統合しています。iptables-translateコマンドを使用して、IptablesルールをNftablesに移行することができます。
通常のiptables
コマンドは、IPv4トラフィックを制御するルールを含むテーブルを操作するために使用されます。IPv6トラフィックに対しては、ip6tables
という補助コマンドが使用されます。 iptables
で設定したルールは、IPv4アドレスを使用するパケットにのみ影響しますが、これらのコマンドの構文は同じです。 iptables
コマンドはIPv4トラフィックに適用されるルールを作成し、ip6tables
コマンドはIPv6トラフィックに適用されるルールを作成します。 ip6tables
ルールを作成する際には、サーバーのIPv6アドレスを使用することを忘れないでください。
心に留めておくべきこと
iptablesがそのインターフェースを介して受信したパケットをどのように処理するかを理解したので、パケットを適切なチェーンに送り、一致するルールが見つかるまでそれぞれのルールをチェックし、一致するルールが見つからない場合はチェーンのデフォルトポリシーを発行することができます。
まず、デフォルトのドロップポリシーを実装する場合は、現在の接続をアクティブに保つためのルールがあることを確認する必要があります。これは特にSSH経由でサーバーに接続している場合に重要です。誤って現在の接続をドロップするルールやポリシーを実装した場合、ブラウザベースの回復コンソールを使用してサーバーにログインする必要があるかもしれません。
また、各チェーン内のルールの順序が重要であることも心に留めておくべきです。パケットは、より具体的なルールに一致する場合には、より一般的なルールに一致しないようにする必要があります。
これにより、チェーンの上部にあるルールは、下部のルールよりも高いレベルの具体性を持つ必要があります。まず特定のケースに一致するルールをマッチさせ、その後、より一般的なルールで広範なパターンに一致させます。パケットがチェーン全体を通過する場合(いずれのルールにも一致しない場合)、最も一般的なルール、つまりデフォルトポリシーが適用されます。
このため、チェーンのデフォルトポリシーは、チェーンに含まれるルールのタイプを強く決定します。デフォルトポリシーが「ACCEPT」のチェーンには、パケットを明示的にドロップするルールが含まれます。デフォルトが「DROP」のチェーンには、特に受け入れる必要があるパケットの例外が含まれます。
結論
この時点で、独自のファイアウォールを実装する準備が整いました。そのためには、Ubuntu 22.04でNftablesを使用したファイアウォールのセットアップ方法を読む必要があります。または、より高レベルなアプローチとして、Ubuntu 22.04でUFWを使用したファイアウォールのセットアップ方法もあります。ファイアウォールを管理サービスレイヤーとして実行する場合は、DigitalOceanのCloud Firewallsも試すことができます。
Source:
https://www.digitalocean.com/community/tutorials/how-the-iptables-firewall-works