ブログに戻る

Linuxにおけるiptablesを使用したポート転送:ハウツーガイド

Linuxにおけるiptablesを使用したポート転送:ハウツーガイド

ポートフォワーディングは、ポートマッピングとも呼ばれ、リモートデバイスがプライベートローカルエリアネットワーク(LAN)内の特定のサービスに接続できるようにするための方法です。その名の通り、このプロセスは特定のポートへのリクエストを別のポートまたはネットワークに転送することを含みます。これは転送中のパケットの宛先を変更し、ネットワークアドレス変換(NAT)操作の一種とみなされます。

ポートフォワーディングを有効にすると、内部ネットワークに接続されていないデバイスやホストが相互にアクセスできるようになります。これは、無効になっている場合は制限されます。ポートフォワーディングのメリットを活用して、対象のウェブサイトをブロックしたり、セキュリティを向上させたり、必要に応じてNATファイアウォールを回避する迂回路を追加したりできます。

このチュートリアルでは、Linuxでiptablesを使用してポートをフォワーディングする手順を説明します。

前提条件

このチュートリアルを進めるには、以下が必要です。

ホストの詳細

まず、稼働しているサーバーのインターフェースとアドレスの詳細を知る必要があります。システムのネットワークインターフェースを確認してみましょう。

以下のような出力が表示されます。

ここで、ハイライトされた出力は2つのインターフェースを示しています。最初のインターフェース eth0はアドレス 192.51.100.45に割り当てられており、2番目の eth1はアドレス 192.168.1.5に割り当てられています。これら2つのインターフェースのうち、1つはパブリックで、もう1つはプライベートです。この2つを区別し、デフォルトゲートウェイに接続されているパブリックインターフェースを特定するためのコマンドを実行します。区別するには、次のように入力します。

以下のような出力が表示されます。

チュートリアル用のダミーデータ

このチュートリアルでは、ダミーのアドレスとインターフェースの割り当てを使用します。これらのデータは、必要に応じて自由に使用または置き換えてください。

ウェブサーバーのネットワーク詳細:

  • パブリックIPアドレス: 203.0.113.2

  • プライベートIPアドレス: 192.0.2.2

  • パブリックインターフェース: eth0

  • プライベートインターフェース: eth1

ファイアウォールのネットワーク詳細:

  • パブリックIPアドレス: 203.0.113.15

  • プライベートIPアドレス: 192.0.2.15

  • パブリックインターフェース: eth0

  • プライベートインターフェース: eth1

ウェブサーバーのセットアップ

ウェブサーバーホストから始めましょう。まず、 sudo ユーザーでログインします。

Nginxのインストール

まず、Nginxをインストールし、プライベートインターフェースのみをリッスンするようにロックします。これにより、ポートフォワーディングが正しく設定されている場合にのみ、ウェブサーバーが利用可能になります。

次に、ローカルパッケージキャッシュを更新し、aptを使用してNginxをダウンロードしてインストールします。

制限の追加

ウェブサーバーホストにNginxをインストールしたら、プライベートインターフェース以外からの入力を受け付けないようにロックします。また、これにより、ポートフォワーディングの設定が正しい場合にのみウェブサーバーがアクティブになります。

制限を追加するには、デフォルトのサーバーブロック設定ファイル /etc/nginx/sites-enabled/default お好みのテキストエディタ(ここではnanoテキストエディタを使用します)で、以下を入力します:

出力には、listenディレクティブが2回表示されます:

Port Forwarding Nginx Default File

このチュートリアルでは、最初のディレクティブを使用してIPv4フォワーディングを示します。IPv6用に設定されている2番目のディレクティブは削除できます。Nginxがプライベートインターフェースからのみ入力を受け取るように、80の直前にコロンを付けてWebサーバーのプライベートIPアドレスを追加します。次に、ディレクティブを編集します:

Port Forwarding Nginx Edited Default File

完了したら、ファイルを保存して閉じます。次に進む前に、構文エラーがないことを確認してください。ファイルをテストしてみましょう:

Nginx T

エラーが表示されなければ、Nginxを再起動して新しい設定を有効にすることができます:

ネットワーク制限の検証

Webサーバーへのアクセスレベルを検証してみましょう。次の curl コマンドを使用して、プライベートインターフェース経由でWebサーバーにアクセスを試みます:

次のような出力が表示されます:

Port Forwarding Nginx Output1

パブリックインターフェースを使用しようとすると、接続できなくなります:

これはまさに期待通りの結果です。

ポート80を転送するようにファイアウォールを設定する

ファイアウォールマシンでのポートフォワーディングの実装を進めましょう。

カーネルでのフォワーディングの有効化

デフォルトでは、ほとんどのシステムでポートフォワーディングがオフになっています。いくつかの編集を行ってポートフォワーディングをオンに変更します。また、以降のステップで示すように、 sudo 権限を使用してポートフォワーディングを永続的にオンにするオプションもあります。

カーネルレベルでトラフィックフォワーディングをオンにするには、以下を入力します:

ポートフォワーディングを永続的にオンにするには、 /etc/sysctl.conf ファイルを編集します。ファイルを sudo 権限で開き、以下を入力します:

ファイル内で、次のような行を見つけてコメントアウトを解除します:

完了したら、ファイルを保存して閉じます。次に、 sysctl コマンドを使用して設定の変更を適用し、有効にします:

基本的なファイアウォールのセットアップ

まず、マシンに基本的なファイアウォールをセットアップする方法に関するガイドを確認してください。完了すると、以下の状態になります:

  • インストールされた iptables-persistent
  • デフォルトのルールセットの への保存/etc/iptables/rules.v4
  • を使用したルールの追加および変更に関する包括的な知識iptables コマンド

また、iptablesファイアウォールルールを一覧表示および削除する方法.

転送ルールの追加

パブリックインターフェース( eth0 )のポート 80 に流入するトラフィックが、プライベートインターフェース( eth1)に転送されるようにファイアウォールを設定します。デフォルトでは、基本的なファイアウォールには FORWARD チェーンがトラフィックを DROP するように設定されています。ファイアウォールルールを追加することで、Webサーバーへの転送接続が許可されます。セキュリティを強化するため、転送リクエストを許可するようにファイアウォールルールをロックします。

In the FORWARD チェーンでは、ポート 80 宛ての、パブリックインターフェースからプライベートインターフェースに向かう新しい接続を受け入れます。新しい接続は conntrack 拡張機能を使用して識別し、 TCP SYN パケットで表します:

着信接続から生じる、双方向のその後のトラフィックを許可する必要があります。以下のコマンドを入力して、パブリックインターフェースとプライベートインターフェースの間の ESTABLISHEDRELATED トラフィックを許可します:

Let’s verify if our policy on the FORWARDチェーンのポリシーが DROPに設定されているか確認しましょう。:

これまでに、パブリックインターフェースとプライベートインターフェースの間のトラフィックがファイアウォールを通過できるようにするルールをいくつか追加しました。しかし、 iptables は、ファイアウォールルールの設定がまだ完了していないため、トラフィックを転送するように指示されていません。次のステップでは、NATルールを追加し、トラフィックを転送するために永続的なルールセットを調整します。

パケットを転送するためのNATルールの追加

2つの異なる操作を行い、 iptables がパケットを正しく変更し、クライアントやWebサーバーとの通信を円滑にできるようにします。

DNATは、 PREROUTINGチェーン( nat テーブル内)を開始する最初の操作です。この操作はパケットの宛先アドレスを変更し、ネットワーク間を通過する際に正しくルーティングされるようにします。ただし、パブリックネットワーク上のクライアントはファイアウォールサーバーに接続するため、プライベートネットワークのトポロジーに関する情報を持っていません。プライベートネットワークと情報をやり取りするには、各パケットの宛先アドレスを変更して、宛先のWebサーバーに正しく到達できるようにします。

ポートフォワーディングの設定に焦点を当てていることに注意することが重要です。ファイアウォールに到達するすべてのパケットに対してNATを実行することは、このチュートリアルの範囲外です。ポート 80 のパケットを、WebサーバーのプライベートIPアドレスに一致させます。

パケットは、クライアントの元のアドレスを送信元アドレスとして含んだ状態で、Webサーバーに正しくルーティングされます。サーバーがそのアドレスに直接返信を送信しようとしても、正当なTCP接続を確立することはできません。

適切なルーティングを設定するために、パケットの送信元アドレスを変更します。送信元アドレスをファイアウォールサーバーのプライベートIPアドレスに編集しましょう。変更後、返信はファイアウォールに送り返され、ファイアウォールがそれをクライアントに転送します。

この機能を有効にするには、パケットがネットワークに送信される直前に評価される、 POSTROUTINGチェーン( nat テーブル内)にルールを追加します。次に、IPアドレスとポートによってWebサーバー宛てのパケットを一致させます。

このルールが適用されると、Webブラウザでファイアウォールマシンのパブリックアドレスを指定することで、Webサーバーにアクセスできるようになります。

次のような出力が表示されます。

Nginx Output2

ポートフォワーディングの設定は完了です。

永続的なルールセットの調整

ポートフォワーディングの設定が完了したら、これを永続的なルールセットに保存します。現在のルールセット内のコメントを保持したい場合は、 iptables-persistent サービスを使用してルールを保存します。

また、ファイルを開いて手動で編集し、コメントを保持することもできます。

次に、 filter テーブルと nat テーブルを設定して、それぞれ FORWARD チェーンのルールと ROUTING ルールを追加します。 nat テーブルを調整することで、以下の例に示すように PREROUTING および POSTROUTING ルールを追加できるようになります。

上記の値を追加したら、ファイルを保存して閉じます。次に、以下のコマンドを入力してルールの構文をテストします。

エラーが表示されなければ、ルールセットをロードします。

ファイアウォールのパブリックIPアドレス経由でWebサーバーに引き続きアクセスできることを確認しましょう。

まとめ

このチュートリアルの終わりまでに、iptablesを使用したLinuxサーバーでのポート転送に慣れているはずです。ポート転送機能を利用して、プライベートネットワークのトポロジーを隠蔽しつつ、ゲートウェイファイアウォールマシンを介してサービストラフィックが自由に流れるように効率化できます。

このプロセスはネットワークの安全性と使用するポートに明示的に依存しているため、安全です。ネットワークにセキュリティファイアウォールやVPNセキュリティがない場合、リスクが発生する可能性があります。したがって、このチュートリアルで説明したようにファイアウォールを構成することをお勧めします。このガイドが、プライベートネットワークを使用する際にインターネット上で安全を維持するのに役立つことを願っています。

システムに実装できるその他のファイアウォールソリューションをさらに探索するには、次のリソースを参照してください:当社のブログ:

ハッピーコンピューティング!

author

Pranay Kapgate

著者 · CloudSigma

Preslav DobrevはCloudSigmaのクリエイティブデザイナーであり、従来型および革新的なマーケティングチャネルを活用した一貫性のあるビジネスアイデンティティに注力しています。彼は芸術的なビジョンと戦略的マーケティングを融合させ、インパクトのあるブランドナラティブを生み出すことに長けています。

コメント

コメントはまだありません。最初のコメントを投稿しましょう。