7.4. FORWARDNAT のルール

ほとんどの組織や企業には、ISP からの公共にルーティングできる IP アドレスの割り当て数が限られています。数に制限があるため、管理者は、LAN 上にあるすべてのノードに制限のある公共 IP アドレスを与えずに、インターネットサービスへのアク セスを共有できる独創的な方法を見つけねばなりません。プライベート IP アドレスの 使用が一般的で、LAN 上のすべてのノードが正しく内部/外部のネットワークサービスに アクセスできるようにします。エッジにあるルータ(ファイアウォールなど)はインターネットからの着信通信を受け取り、パケットを目的の LAN ノードにルーティングします。同時に、ファイアウォール/ゲートウェイは LAN ノードからの発信要求をリモートインターネットサービスにルーティングできます。このネットワークトラフィックのフォワーディングは時に危険を伴うことになる恐れがあり、特に、最近のクラッキングツールの機能を使用すると、内部IP アドレスになりすまして LAN 上にあるノードとしてリモート攻撃者のマシンを動作させることができます。 これを防止するために、iptablesはルーティングとフォワーディングのポリシーを提供し、ネットワークリソースの異常な使用の防止を実現します。

FORWARDポリシーにより LAN 内でパケットがルーティングされる場所を制御することができます。例えば、LAN 全体にフォワーディングを許可するには(ファイアウォール/ゲートウェイが内部 IP アドレスをeth1に持っていると仮定)、次のルールが設定できます:

iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT

このルールはファイヤーウォール/ゲートウェイの裏にあるシステムに内部ネット ワークへのアクセスを与えます。ゲートウェイは1つの LAN からのパケットを その目的地ノードにルートし、そのeth1デバイスを通じて 全てのパケットを渡します。

注記注記
 

デフォルトでは、Red Hat Enterprise Linuxカーネル内のIPv4ポリシーがIPフォワーディングのサポートを 無効にしており、Red Hat Enterprise Linuxを稼動しているコンピュータが専用エッジルータとして 機能しないようにしています。IPフォワーディングを有効にするには、次のコマンドを実行します。

sysctl -w net.ipv4.ip_forward=1

このコマンドをシェルプロンプトから実行する場合、再起動後にその設定は記憶されません。 /etc/sysctl.confファイルを編集して、フォワーディングを不変的に 設定します。次の行をさがして編集します。0には 1を入れます。

net.ipv4.ip_forward = 0

次のコマンドを実行してsysctl.confヘの変更を有効にします。

sysctl -p /etc/sysctl.conf

ファイアウォールの内部 IP デバイスを経由してフォワードパケットを受け付ける ことで、LAN ノードは互いに通信できるようになります。しかし、インターネットへ の外部通信はできません。プライベート IP アドレスを持つ LAN ノードに外部の公共 ネットワークへ通信を許可するには、IP マスカレード用に ファイアウォールを設定します。これはLANノードからの要求をファイアウォールの 外部デバイスの IP アドレスでマスクします(この場合、eth0)。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

このルールは、NAT パケットの照合表(-t nat)を使用して ファイアーウォールの外部ネットワークデバイス(-o eth0)上 のNAT (-A POSTROUTING)用の組み込み型 POSTROUTING chain を指定します。POSTROUTING により、パケットはファイアーウォールの外部デバイス を出る時点で変化することができます。-j MASQUERADEターゲット はあるノードのプライベート IP アドレスをファイアーウォール/ゲートウェイの 外部 IP アドレスでマスクするように指定されます。

外部で使用できるようにしたい内部ネットワーク上のシステムがある場合、NAT 内 の PREROUTING chain の-j DNATターゲットを使用して、 目的地の IP アドレスとポートを指定することができます。そこで、内部サービス への接続を要求している着信パケットがフォワードできます。例えば、着信 HTTP 要求 を172.31.0.23にある専任の Apache HTTP サーバー サーバーにフォワードしたい場合、次ぎのコマンド を実行します:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
      --to 172.31.0.23:80

このルールはNAT の表が組み込み型 PREROUTING chain を使用して着信 HTTP 要求をリストされた目的の IP アドレスである 172.31.0.23 に独占的にフォワード するように指定します。

注記注記
 

FORWARD chain 内に DROP のデフォルトポリシーを持っている場合、1つルールを 追加して目的地の NAT ルーティングが可能になるように着信 HTTP 要求のフォワー ディングを許可します。これを実行するには、次ぎのコマンドを入力します:

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 172.31.0.23 -j ACCEPT

このルールは着信する HTTP 要求を、ファイアーウォールからそのファイアーウォール裏の意図された目的地 Apache HTTP サーバー サーバーへのフォワーディングを許可します。

7.4.1. DMZ と iptables

iptablesルールは、DMZ(非武装地帯 — インターネットなど 公共キャリアー上でサービスへの提供用の専従ローカルサブネットワーク)にある専用 HTTP 又は FTP サーバーなどの特定のマシンへトラフィックをルートするように設定 できます。例えば、着信 HTTP 要求の全てを IP アドレス 10.0.4.2(LAN の192.168.1.0/24 範囲外)にある専従 HTTP サーバーへルートするようにルールを設定 するのに、NAT(Network Address Translation)がPREROUTING テーブルを呼び出してパケットを正しい目的地にフォワードします。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
	    --to-destination 10.0.4.2:80

このコマンドで、LAN外部からのポート80へのHTTP接続はすべて内部ネットワークの 他とは異なるネットワーク上にあるHTTPサーバーにルーティングされます。 こうしたネットワーク区分化は、ネットワーク上でマシンにHTTP接続を許可するよりも安全です。 HTTPサーバーがセキュアな接続を受け取るよう設定されている場合、 ポート443もフォワードされる必要があります。