iptables を使用した Kali Linux ファイアウォール設定

Kali LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、Linux カーネルの IP パケットフィルタリングルールを管理するための強力なツールである iptables を使用して、Kali Linux 上でファイアウォールを設定する方法を学びます。主な目的は、IP アドレス、ポート、プロトコルに基づいてトラフィックを制御し、ネットワークセキュリティを向上させるためのファイアウォールルールを理解し、適用することです。

ステップバイステップの実践的なアクティビティを通じて、現在の iptables ルールの確認、特定の IP アドレスのブロック、指定したポートでのトラフィック許可、および設定の保存を行います。LabEx VM 環境内の事前設定済み Kali Linux コンテナで作業することで、ネットワークトラフィックを保護するためのファイアウォール設定を管理する実用的なスキルを習得できます。

iptables のインストールとルールの確認

最初のステップでは、iptables をインストールし、Kali Linux コンテナ内の現在のファイアウォールルールを確認する方法を学びます。これは、変更を加える前に既存のファイアウォール構成を理解するための重要な出発点です。

LabEx VM 環境でターミナルを開くと、自動的に Kali Linux コンテナのシェルに接続されます。手動でコンテナを起動したりシェルに入ったりする必要はありません。環境はすでに準備されています。まずは iptables をインストールし、ファイアウォールルールの現状を確認しましょう。

iptables は、Linux カーネルの IP パケットフィルタリングルールを管理するためのコマンドラインユーティリティです。これらのルールは、送信元 IP やポート番号などの特定の基準に基づいて、ネットワークトラフィックを許可(ACCEPT)、破棄(DROP)、または転送(REDIRECT)するかを決定します。ルールを表示することで、現在どのようなポリシーが適用されているかを確認できます。

まず、パッケージリストを更新して iptables をインストールします。次のコマンドを入力して Enter キーを押してください。

apt update && apt install -y iptables

このコマンドは、パッケージリストの更新と iptables のインストールを一度に行います。&& 演算子により、更新が成功した場合のみインストールが続行されます。

期待される出力(例、実際の出力は異なる場合があります):

Get:1 http://mirrors.cloud.aliyuncs.com/kali kali-rolling InRelease [30.9 kB]
...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
iptables is already the newest version (1.x.x-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

iptables がインストールされたので、次のコマンドを実行して現在の iptables ルールを一覧表示します。コマンドを入力して Enter キーを押してください。

iptables -L -v -n

このコマンドのオプションの意味は以下の通りです:

  • iptables: ファイアウォールルールを管理するツール。
  • -L: 選択したチェイン内のすべてのルールをリスト表示します。
  • -v: 詳細な出力を提供します(パケット数やバイト数のカウンタを含む)。
  • -n: 名前解決を行わず、IP アドレスとポートを数値形式で表示します。

このコマンドを実行すると、以下のような出力が表示されます。正確な出力はコンテナの初期設定によって異なる場合があります。

期待される出力(例、実際の出力は異なる場合があります):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

この出力には、3 つの主要なチェインが表示されています。受信トラフィック用の INPUT、通過トラフィック用の FORWARD、送信トラフィック用の OUTPUT です。各チェインには、デフォルトポリシー(ACCEPT など)と、もし存在すれば特定のルールが表示されます。この例のようにチェインが空の場合、カスタムルールは適用されておらず、デフォルトポリシーがすべてのトラフィックを制御していることを意味します。

出力を確認してください。次のステップでルールを追加または変更する前に、ファイアウォールの現在の状態を理解しておくことが非常に重要です。この基礎的なステップにより、Kali Linux コンテナにおける iptables の初期構成に慣れることができます。

iptables のチェインとポリシーの理解

iptables をインストールし、初期ルールを確認しました。次に、カスタムルールを作成する前に iptables の仕組みについて理解を深めましょう。このステップでは、さまざまなチェインとそれらのデフォルトポリシーについて学びます。

iptables はファイアウォールルールを「チェイン(Chains)」に整理します。チェインは、パケットが照合されるルールのリストです。主な 3 つの組み込みチェインは以下の通りです:

  • INPUT: ローカルシステム宛てのパケットを処理します。
  • FORWARD: システムを経由してルーティングされるパケットを処理します。
  • OUTPUT: ローカルシステムから送信されるパケットを処理します。

各チェインには「デフォルトポリシー」があり、どのルールにも一致しなかったパケットをどう扱うかを決定します。最も一般的なポリシーは ACCEPT(パケットを許可する)と DROP(パケットを破棄する)です。

現在のポリシー設定をより詳しく調べてみましょう。各チェインの詳細情報を表示するには、次のコマンドを実行します:

iptables -L -v -n --line-numbers

--line-numbers オプションを使用すると、各ルールに行番号が付加され、後で特定のルールを参照しやすくなります。

期待される出力(例、実際の出力は異なる場合があります):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num  pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num  pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num  pkts bytes target     prot opt in     out     source               destination

現在、すべてのチェインのポリシーが ACCEPT になっていることに注目してください。これは、特定のルールに一致しないパケットはすべて通過が許可されることを意味します。パケット数とバイト数のカウンタが 0 なのは、この新しいコンテナ環境でまだトラフィックが処理されていないためです。

パケットがシステムをどのように流れ、一致しないトラフィックに対してデフォルトでどのような動作が行われるかを知ることは、カスタムルールを追加する上で非常に重要です。

特定の IP アドレスのブロック

iptables の準備が整ったので、次は特定の IP アドレスからのトラフィックをブロックしてファイアウォールを設定してみましょう。これは、特定のソースからの不要なアクセスや潜在的な脅威を防ぐための一般的なセキュリティ対策です。

iptables で IP アドレスをブロックするということは、そのアドレスからの受信パケットを破棄(DROP)するルールを作成することを意味します。パケットが破棄されると、システムはそれを無視し、指定された IP との通信を事実上遮断します。この演習では、コンテナ環境内で練習するための安全な例として、仮想の IP アドレス 192.168.1.100 からのトラフィックをブロックします。

Kali Linux コンテナのターミナルで次のコマンドを入力して Enter キーを押し、192.168.1.100 からのすべての受信トラフィックをブロックするルールを追加します。

iptables -A INPUT -s 192.168.1.100 -j DROP

このコマンドを分解して説明します:

  • iptables: ファイアウォールルールを管理するツール。
  • -A INPUT: 受信トラフィックを処理する INPUT チェインにルールを追加(Append)します。
  • -s 192.168.1.100: このルールの対象となる送信元(Source)IP アドレスを指定します。
  • -j DROP: 指定された IP アドレスからのパケットを破棄(DROP)するアクションを設定します。

コマンド実行直後の出力はありませんが、これはルールが正常に INPUT チェインに追加されたことを示しています。

ルールが適用されたことを確認するために、現在の iptables ルールをリスト表示する次のコマンドを実行し、Enter キーを押します。

iptables -L -v -n

期待される出力(例、実際の出力は異なる場合があります):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       192.168.1.100        0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

この出力では、INPUT チェインの下に 192.168.1.100 からのすべてのトラフィックを破棄するルールが表示されています。パケット(pkts)とバイト(bytes)のカウンタは、その IP からのトラフィックが発生しない限り 0 のままです。

このステップを完了することで、特定の IP アドレスからのトラフィックをブロックするルールを正常に追加できました。このスキルは、不要なソースや悪意のあるソースからのアクセスを制限するために不可欠です。次のステップでは、セキュリティを維持しつつ必要なサービスを利用できるように、特定のポートでのトラフィックを許可する方法を学びます。

特定のポートでのトラフィック許可

IP アドレスをブロックする方法を学んだので、次の重要なスキルは、必要なサービスへのアクセスを可能にするために特定のポートでのトラフィックを許可することです。このステップでは、iptables を使用して、指定したポートでの受信トラフィックを許可するルールを追加します。

ポートは、ネットワークサービスがネットワーク経由で通信するために使用されます。例えば、Web サーバーは通常、HTTP トラフィックにポート 80 を使用します。特定のポートでのトラフィックを許可するということは、そのポート宛ての受信パケットを受け入れる(ACCEPT)ルールを作成し、関連するサービスにアクセスできるようにすることを意味します。この演習では、実践的な例としてポート 80 でのトラフィックを許可します。

Kali Linux コンテナのターミナルで次のコマンドを入力して Enter キーを押し、ポート 80 での受信 TCP トラフィックを許可するルールを追加します。

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

このコマンドを分解して説明します:

  • iptables: ファイアウォールルールを管理するツール。
  • -A INPUT: 受信トラフィック用の INPUT チェインにルールを追加します。
  • -p tcp: プロトコルとして TCP を指定します(HTTP などのサービスで一般的に使用されます)。
  • --dport 80: 送信先ポート(Destination Port)として 80 を指定し、このポートへのトラフィックを対象にします。
  • -j ACCEPT: このルールに一致するパケットを許可(ACCEPT)するアクションを設定します。

コマンド実行直後の出力はありませんが、これはルールが正常に追加されたことを示しています。

ルールが適用されたことを確認するために、現在の iptables ルールをリスト表示する次のコマンドを実行し、Enter キーを押します。

iptables -L -v -n

期待される出力(例、実際の出力は異なる場合があります):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       192.168.1.100        0.0.0.0/0
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

この出力では、INPUT チェインに、先ほどの 192.168.1.100 からのトラフィックを破棄するルールと並んで、ポート 80 での TCP トラフィックを許可するルールが表示されています。

このステップを完了することで、特定のポートでのトラフィックを許可する方法を学びました。これは、他のポートのセキュリティを維持しながら、Web サーバーなどのサービスへのアクセスを有効にするために不可欠な操作です。次のステップでは、これらの設定を後で参照したり再読み込みしたりできるように保存します。

iptables 設定の保存

最後のステップでは、Kali Linux コンテナ内で iptables の設定を保存する方法を学びます。デフォルトではルールはメモリ上に保存されているため、コンテナを再起動すると失われてしまいます。設定を保存することで、将来の参照や再読み込みのためにファイアウォール設定を保持できます。

通常、iptables のルールはシステムの実行時メモリにのみ存在します。これらをファイルに保存しておけば、設定の記録を保持でき、ドキュメント化や iptables-restore を使用したルールの復元に役立ちます。この演習では、コンテナ内の /root ディレクトリにあるファイルにルールを保存します。

Kali Linux コンテナのターミナルで次のコマンドを入力して Enter キーを押し、現在の iptables ルールを /root ディレクトリの iptables-rules という名前のファイルに保存します。

iptables-save > /root/iptables-rules

このコマンドを分解して説明します:

  • iptables-save: メモリ上の現在の iptables ルールを標準出力にエクスポートします。
  • > /root/iptables-rules: 出力を /root ディレクトリの iptables-rules というファイルにリダイレクトします(ファイルが既に存在する場合は上書きされます)。

コマンド実行直後の出力はありませんが、これはルールが指定されたファイルに正常に保存されたことを示しています。

ルールが正しく保存されたことを確認するために、次のコマンドを入力して Enter キーを押し、ファイルの内容を表示します。

cat /root/iptables-rules

期待される出力(例、実際の出力は異なる場合があります):

## Generated by iptables-save v1.x.x on ...
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 192.168.1.100/32 -j DROP
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
## Completed on ...

この出力には、192.168.1.100 からのトラフィックを破棄するルールやポート 80 でのトラフィックを許可するルールを含む、保存された設定が表示されます。この形式は iptables-restore と互換性があり、必要に応じてこれらのルールを再読み込みするために使用できます。

このステップを完了することで、iptables の設定をファイルに保存することに成功しました。コンテナ環境では再起動後に変更が保持されない場合がありますが、実環境においてファイアウォール設定を維持するためにこの作業は不可欠です。これで、iptables を使用した基本的なファイアウォール管理のコアスキルを習得しました。

まとめ

この実験では、コンテナ環境の Kali Linux で iptables を使用してファイアウォールを設定する基本を学びました。まず、現在の iptables ルールを確認して初期状態を把握することから始めました。次に、パッケージリストを更新して iptables をインストールし、システムの準備を整えました。その後、特定の IP アドレスからのトラフィックをブロックし、指定したポートでのトラフィックを許可するルールを追加することで、ネットワークアクセスの制御を強化しました。最後に、将来の参照のために設定をファイルに保存しました。これらのステップを通じて、iptables によるトラフィックフィルタリングを用いたネットワークセキュリティ管理の基礎スキルを習得しました。