ネットワークを構築する上で、ネットワーク構造の詳細を知る必要はありませんが、以下は知っておいた方がパケットフィルタリング型ファイアーウォールについて話しが見えてくると思います。
ここで紹介している内容は、TCP/IP に対しパケットレベルで介入することで、ファイアーウォール(パケットレベルで侵入経路を封ぐ)を構築したり、ネットワーク経路をコントロールする、という事になります。
NAT と IPマスカレードは、先に説明したネットワーク層・トランスポート層をパケット フィルタリングにより置き換える事で通信の方向、制限を決定する仕組みです。ルーターと呼ばれる通信機器は、この役割を担っています。ここで構築する Linux ゲートウェイサーバー、つまり Linux を IP ルーターとして利用する場合も NAT / IPマスカレード等の仕組みを利用する事になります。
ネットワークを構築する上で要とも言える重要な役割となりますので、この点についても触れておきます。
NATでは、 IP アドレスの相互変換を行います。これによりネットワーク層のフィルタリングを行う事で、外部からはグローバルIPアドレスが割当てられた一つのコンピューターと通信を行っているように見えます。
外部からの接続要求
グローバルIPアドレス → NAT プライベートアドレスに変換 → ローカルホスト
内部からの接続要求
グローバルIPアドレス ← NAT グローバルアドレスに変換 ← ローカルホスト
コンピューター同士が通信を行うには、それぞれのNIC に固有のIPアドレスが必要になり、決して重複するIPアドレスが存在※1してはいけません。モデムなど直接PCに接続した場合は、世界に一つしかないグローバルIPアドレスは、モデムを接続しているコンピューターに割当てられるため、インターネットが利用できるのはモデムが系がれた1台だけになります。
NAT では、インターネット側のグローバルIPアドレスを、それぞれのコンピューターのプライベートアドレスに変換することで、どのコンピューターからもインターネットに接続できるようになります。
※1
IPアドレスが重複しないように自動的にIPアドレスを割当てるDHCPサーバーがあります。一般的にゲートウェイとなるサーバーや、ルーター自信のIPアドレスは、変化しては困るのでDHCPサーバーを使わず手動で割当てる必要があります。
このNATの動作には、 「動的NAT」 「静的NAT」 と呼ばれる動作があります。
複数のIPアドレスの接続要求に対する変換は、 「動的NAT」 と呼ばれています。
INTERNET ↓↑ 216.239.37.99 WAN側に割当てられたグローバルIPアドレス |
||
---|---|---|
繋がる ↓↑ | <- NAT変換 -> ルーター |
× 繋がらない |
PC-1(192.168.1.10) | PC-2(192.168.1.12) |
NATは、IPアドレス単位の変換しか行えないため、PC-1 の セッションが終了するまで PC-2 はインターネットに接続する事が出来ません。 WAN側からは 216.239.37.99 しか見えないため、どちらのPCが応答要求を出しているのか識別できないからです。
上記の複数のIPアドレス変換を行う 「動的NAT」 に対して、決まった一つのIPアドレスに対しての変換を行うことを 「静的NAT」 といいます。
IPアドレスごとの変換になるため、適切なパケットフィルタリングを行わなければ、インターネットから PC-1 へ素通しとなってしまいます。また、 複数のホストからの同時接続を行うことが出来ません。サーバーを公開する場合は、http smtp ftp などのサービスは一台のサーバー(PC)でしか行えないという事になります。
NATP(NAT+)について
ネットワーク層(IPアドレス)の変換を行う NAT に対して、 トランスポート層(ポート番号)の変換を付加した技術です。後述する IPマスカレードは Linux (kernel) に NATP 実装させた事をIPマスカレードといい、同じものです。
市販ルーターによっては、IPマスカレードと明記されている製品やNATP対応、または単にNAT 対応と明記されている製品があります。いずれもポート番号の変換をサポートすることで、複数のコンピューターから同時にインターネットが行えるようになっ ています。(後述)
IPマスカレードではネットワーク層のIPアドレスのみの変換を行う NAT に対して 送信元のパケットに含まれる ポート番号の識別 が行えます。このトランスポート層に含まれるポート番号を利用することで、PC-1 と PC-2 を識別し、複数のパソコンから同時にインターネットが利用出来るようになります。
INTERNET ↓↑ 216.239.37.99 WAN側に割当てられたグローバルIPアドレス |
||
---|---|---|
空きポート付加 ↓↑ | <- IPマスカレード -> ルーター |
↓↑空きポート付加 |
PC-1(192.168.1.10) | PC-2(192.168.1.12) |
今回構築する、ゲートウェイサーバーのeth1(192.168.1.56) → eth0(192.168.0.56) で使用し、この間をファイアーウォールで保護する特になります。
マスカレードとは偽装を意味します。IPアドレスのみの変換を行う NAT と異なり、ルーター内部(IPマスカレードによるパケットフィルタリング)でポートによる識別による変換を行うため、外部からは PC-1 / PC-2 への接続する事が出来ません。インターネット側から見れば、言わばIPアドレスの偽装であり、216.239.37.99 である事意外はわからず、IPマスカレードでIP層がフィルタリングされているため、外部からは PC-1 PC-1 を識別する事が出来ません。つまり、これだけでセキュリティ向上に一役買っていることになります。
INTERNET ↓↑ 216.239.37.99 WAN側に割当てられたグローバルIPアドレス |
||
---|---|---|
216.239.37.99:25 への接続要求を変換↓ 192.168.1.10:25 |
<- IPマスカレード -> ルーター |
216.239.37.99:80 ↓への接続要求を変換 192.168.1.12:80 |
↓ | ↓ | |
PC-1(192.168.1.10) | PC-2(192.168.1.12) |
つまり、サーバーを公開する場合は、ポート識別のトリックを利用する事で、一つのグローバルIPアドレスで、複数のサーバーを外部に公開出来るようになります。
IPマスカレードの問題点
前述した通り、IPマスカレードは送信元パケットに含まれるポート番号を識別します。しかし、FTPプロトコルのようにアプリケーション層にもポート番 号を含むプロトコルのサービスを公開する場合(制御や転送を別々のTCPコネクションを要求するケース)、セッションを確立できないケースがあります。 (PASV/PORT)
これらの問題は、kernel モジュールで解決されていますが、古いディストリビューションによっては、別途カーネルモジュールを追加する必要がある場合もあります。利用しているファ イアーウォールによってはFTPサービスが利用できないという話は良く聞きますが、これらの理由からです。
またトラフィックが集中した場合、オーバーヘッドが発生し、IPマスカレードに必要な変換テーブルが不足する問題が発生します。新たに通信を開始できなくなる場合があります。
このように、NAT / IPマスカレードは、ネットワーク層、トランスポート層でパケットフィルタリングを行う事で、通信経路をコントロールする事が出来ます。Linuxにおいては、kernel レベルで対応しており、 iptables を用いて設定を行います。
ルーターについて
現在はネットワーク機器として市販ルーターが販売されていますが、インターネットが普及し始めた頃は存在せず、どんなに小規模なネットワークでも UNIX OS で構築するのが当たり前でした。一般家庭向けのルーターは、ipchains や iptables が行うNATやポートマッピング、パケットフィルタリング等の機能だけを取り出したネットワーク機器です。
また、パケットレベルのウイルスチェック機能や、ネットワーク型IDS を搭載、フィルタリングやログ監視を強化、NATセッション数を拡張したような高価な製品もあります。これらは、中小企業向けの製品ですが、スキルがあれ ば、Linux で同様のルーター構築することも可能です。IPv6 / IPsec VPNルーターだって作れてしまいます。