ウェブサイト検索

IPTables(Linuxファイアウォール)コマンドの初心者向けガイド


コンピュータを使っているなら、「ファイアウォール」という言葉には馴染みがあるでしょう。表面的には複雑に見えることがあるかもしれませんが、このチュートリアルを通して、IPTableの基本と基本的なコマンドの使い方を説明しますので、ネットワークの学生であったり、ネットワークに深く入り込みたいと思っている場合でも、このガイドから利益を得ることができます。

IPTablesとは何ですか?

ファイアウォールの仕組みは非常にシンプルです。それは信頼できるネットワークと信頼できないネットワークの間に障壁を作ることで、システムを悪意のあるパケットから守ることができます。

しかし、私たちは何が安全で何が安全でないかをどのように決定するのでしょうか?デフォルトでは、ファイアウォールのルールを設定する特権が与えられますが、出入りするパッケージの詳細な監視には、IPTablesが最も必要です。

IPTables は個人用コンピュータにも使用でき、ネットワーク全体にも適用できます。 IPTables を使用して、着信または発信のネットワークパケットを監視、許可またはブロックするためのルールのセットを定義します。

理論全体に焦点を当てるのではなく、実際の世界で重要なことだけを議論します。では、IPTablesの核心概念を理解することから始めましょう。

IPTablesの概念を理解すること

「IPTables」について議論する際、私たちは3つの用語を理解する必要があります:テーブル、チェーン、およびルールです。これらは重要な部分ですので、それぞれについて議論します。

それでは、テーブルから始めましょう。

IPテーブルのテーブル

IPTablesには5種類のテーブルがあり、それぞれに異なるルールが適用されています。では、最も一般的なテーブル「フィルタ」から始めましょう。

  1. フィルターテーブル – これはIPTablesを使用する際のデフォルトでメインのテーブルです。特定のテーブルを指定せずにルールを適用する場合、これらはフィルターテーブルに適用されます。フィルターテーブルの名前が示すように、その役割はパッケージが目的地に到達できるかどうか、またはその要求を拒否するかを決定することです。
  2. NAT(ネットワークアドレス変換) - 名前が示すように、このテーブルはユーザーがネットワークアドレスの変換を判断するのに役立ちます。このテーブルの役割は、パケットアドレスのソースとデスティネーションをどう変更するか、または変更する必要があるかを決定することです。
  3. マングルテーブル – このテーブルは、パケットのIPヘッダーを変更することを可能にします。例えば、TTLを調整することで、パケットが維持できるネットワークホップの長さを延長または短縮することができます。同様に、他のIPヘッダーも好みに応じて変更することができます。
  4. 生のテーブル - このテーブルの主な使用目的は、接続を追跡することであり、パケットをマークしてパケットを進行中のセッションの一部として表示するためのメカニズムを提供します。
  5. セキュリティテーブル – セキュリティテーブルを使用することで、ユーザーはネットワークパケットに内部のSELinuxセキュリティコンテキストマークを適用できます。

ほとんどのユースケースにおいて、表の最後の2種類(RAW および Security)はあまり関与せず、最初の3つのオプションのみがメインテーブルとしてカウントされます。

さて、チェーンについて話しましょう。

IPTablesのチェーン

彼らは、ルールを適用できるネットワークのルート上のポイントで振る舞います。IPTables には 5 種類の チェーン があり、それぞれについて説明します。各タイプのテーブルには、すべてのタイプのチェーンが利用できるわけではないことに注意してください。

  1. プレルーティング – このチェーンは、パケットがネットワークスタックに入った時点で、すべての受信パケットに適用され、パケットの最終目的地に関するルーティング決定がなされる前に処理されます。
  2. 入力チェーン – それはパケットがネットワークスタックに入るポイントです。
  3. フォワードチェーン – それはパケットがあなたのシステムを通じて転送された地点です。
  4. 出力チェーン – 出力チェーンは、パケットがあなたのシステムを通じて発生し、外に出るときに適用されます。
  5. ポストルーティング – これはプリルーティングチェーンとは完全に反対のものであり、ルーティングの決定がなされた後に転送または外向きのパケットに適用されます。

さて、今残っているのはルールだけで、これはここで話し合った3つの中で最も簡単なものです。それでは、理論的な部分で残っていることを完了しましょう。

IPTablesのルール

ルールは、ユーザーがネットワークトラフィックを操作するための一連のコマンドまたは個々のコマンドにほかならずです。各チェーンが作用する際、パケットは定義されたルールに対してチェックされます。

1つのルールが条件を満たさない場合、それは次のルールにスキップされ、条件を満たす場合は、次のルールがターゲットの値によって指定されます。

各ルールには2つの要素があります:マッチング要素とターゲット要素です。

  1. マッチングコンポーネント – プロトコル、IPアドレス、ポートアドレス、インターフェース、ヘッダーによって一致させることができるルールを定義するための異なる条件です。
  2. ターゲットコンポーネント – これは条件が満たされたときに実行されるアクションです。

これは説明部分でしたが、これからLinuxにおけるIPTablesに関連する基本コマンドを扱います。

LinuxにおけるIPTablesファイアウォールのインストール

現代のLinuxディストリビューション、例えばPop!_OSでは、IPTablesは初めからインストールされていますが、システムにIPTablesパッケージがない場合は、以下の手順で簡単にインストールできます:

Rocky Linux、AlmaLinux、CentOS StreamなどのRHELベースのLinuxディストリビューションにIPTablesをインストールするには、次のdnfコマンドを使用してください。

$ sudo dnf install iptables-services

重要: Firewalldを使用している場合は、インストールを続行する前に無効にする必要があります。ファイアウォールを完全に停止するには、以下のコマンドを使用する必要があります:

$ sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl mask firewalld

Debian系LinuxディストリビューションにIPTablesをインストールするには、以下のaptコマンドを使用します。

$ sudo apt install iptables

一度IPTablesをインストールすると、以下のコマンドでファイアウォールを有効にできます。

$ sudo systemctl enable iptables
sudo systemctl start iptables

IPTableサービスの状態を監視するには、次のコマンドを使用できます:

$ sudo systemctl status iptables

LinuxでのIPTablesコマンドの基本を学ぶ

インストールが完了したら、IPTables の構文に進むことができ、デフォルトを調整し、ニーズに応じて設定することができます。

IPTablesの基本構文は次のとおりです:

# iptables -t {type of table} -options {chain points} {condition or matching component} {action}

上記のコマンドの説明を理解しましょう:

テーブル

最初の部分は -t で、利用可能な5つのテーブルオプションの中から選択できます。そして、コマンドから -t 部分を削除すると、デフォルトのテーブルタイプであるフィルターテーブルが使用されます。

チェーンオプション

第二部はチェーンについてです。ここでは、異なるチェーンポイントのオプションから選択できます。そのオプションは以下に示されています:

  • -A – チェーンの最後に新しいルールを追加します。
  • -C – チェーンの要件を満たしているかどうかを確認するルールです。
  • -D – ユーザーがチェーンから既存のルールを削除できるようにします。
  • -F - これはユーザーによって定義された各ルールを削除します。
  • -I – ユーザーが指定した位置に新しいルールを追加できるようにします。
  • -N — 完全に新しいチェーンを作成します。
  • -v – リストオプションと共に使用すると、詳細情報を提供します。
  • -X – チェーンを削除します。

マッチングコンポーネント

マッチングオプションは、チェーンの要件を確認する条件です。様々なオプションから選択でき、その一部は以下に示されています:

Protocols -p
Source IP -s
Destination IP -d
IN interface -i
OUT interface -o

TCPについては、次の通りです:

-sport
-dport
--tcp-flags

アクションコンポーネント

さて、アクション部分について考えると、利用可能なオプションは、NATのようなテーブルの種類によって異なります。そして、マンガルテーブルは他のテーブルと比較して、より多くのオプションを持っています。アクションを使用することで、特定のテーブルやチェーンをターゲットにすることもできます。

最も使用されるアクションはJump (-j)であり、次のような複数のオプションを提供します。

  • 受け入れる – それはパケットを受け入れ、トラバーサルを終了するために使用されます。
  • ドロップ - パケットをドロップし、トラバーサルを終了するために使用されます。
  • 拒否 - これはDROPにかなり似ていますが、拒否されたパケットをソースに送信します。
  • RETURN - これはサブチェーン内のパケットのトラバーサルを停止し、特定のパケットを上位チェーンに送信しますが、影響はありません。

構文が完了したら、基本的な設定を含むIPTablesの使用方法をお見せします。

現在のIPTablesルールの一覧

デフォルトであなたのファイアウォールを通過するものを確認したい場合、現在のルールのセットをリストすることが完璧な方法です。適用されているルールをリストするには、次のコマンドを使用してください:

$ sudo iptables -L

特定のポートでのネットワークトラフィックの許可/拒否

このセクションでは、特定のポートに対してネットワークトラフィックを許可または拒否する方法を説明します。できるだけ役立つように、いくつかのよく知られたポートを示します。
HTTPS ネットワークトラフィックを許可したい場合は、次のコマンドを使用してポート番号 443 を許可する必要があります:

$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

同様に、指定したコマンドでHTTPウェブトラフィックを無効にすることもできます:

$ sudo iptables -A INPUT -p tcp --dport 80 -j REJECT

使用されたコマンドオプションの説明:

  • -p は指定されたプロトコルを確認するために使用され、私たちの場合はTCPです。
  • --dportは宛先ポートを指定するために使用されます。
  • -j は行動を取るために使用されます(受け入れるか、拒否するか)。

IPアドレスで交通を制御する

はい、IPアドレスからネットワークトラフィックを制御することもできます。一つや二つだけではなく、IPアドレスの範囲を制御することも可能です。その方法をお見せします。

特定のIPアドレスを許可するには、以下のコマンド構造を使用します。

$ sudo iptables -A INPUT -s 69.63.176.13 -j ACCEPT

同様に、特定のIPからパケットを削除するには、以下のコマンド構造を使用する必要があります。

$ sudo iptables -A INPUT -s 192.168.0.27 -j DROP

必要であれば、指定されたコマンド構造を利用してIPアドレスの範囲を制御することもできます:

$ sudo iptables -A INPUT -m range --src-range 192.168.0.1-192.168.0.255 -j REJECT

ユーザー定義ルールを削除する

時には、ルールを作成する際に間違いを犯すことがありますが、その間違いを克服する最良の方法は、それらを削除することです。定義されたルールを削除することは、このガイドの中で最も簡単なプロセスです。そして、それらを削除するためには、まずそれらを一覧にする必要があります。

定義されたルールを番号付きでリストするには、以下のコマンドを使用してください:

$ sudo iptables -L --line-numbers

ルールを削除するには、次のコマンド構造に従う必要があります:

$ sudo iptables -D <INPUT/FORWARD/OUTPUT> <Number>

入力から10番目のルールを削除したいとしましょう。そのために、以下のコマンドを使用します:

$ sudo iptables -D INPUT 10

ルールを成功裏に削除したかどうかを確認するために、指定されたコマンドでルールをリストする必要があります。

$ sudo iptables -L –line-numbers

ご覧の通り、私たちは10番目のルールを見事に削除しました。

定義されたIPTablesルールを保存する

なぜ適用してもうまく機能しているルールをそのまま保存しなければならないのか疑問に思うかもしれません。問題は、システムが再起動すると、保存されていないすべての定義されたルールが削除されてしまうため、それらを保存することが私たちにとって重要だということです。

RHELベースのディストロでルールを保存するには:

$ sudo /sbin/service iptables save

Debian 派生版でルールを保存するには:

$ sudo /sbin/iptables–save

IPtableファイアウォールルールについて詳しく学ぶには、次の詳細ガイドをご覧ください:

  • Linux管理者が知っておくべき25の役立つIPテーブルファイアウォールルール

このガイドでは、誰もが利用できるように物事を簡単にするよう努めてきました。これはIPTablesに関する基本的な説明ガイドであり、質問がある場合はお気軽にコメントしてください。

関連記事: