2001年6月16日 更新

構築例−2:ダブルNAPT&仮想サーバ

前のページ HOME

 注意: この構成の動作検証はまだ済んでいません。 


長所: 短所:
この構成は、構成例−1.の発展系でNAPT機能を持った機器を2重に利用することで容易な方法でサイトの安全性をレベルアップできます。  この構成のミソは、NAPT機能をルータとNAPTゲートウェイの2カ所で行うことで、低価格でありながらDMZを構築できる点にあります。DMZにはDNS、Mailサーバ、またはWWWサーバといったような、外部からアクセスさせるためのサーバ群を配置し、内部のネットワークと分断することで、仮にDMZ上のサーバが攻撃にあって侵入されたとしても内部のネットワークワークに直接的な被害が及ばないように設計できます。 なお、この構成を実現するためにはグローバルアドレスがルータ以外にも外部からアクセスさせる為にDMZに配置するマシンの数だけ、仮想的なグローバルアドレスが必要になります。(上記の構成ではDNS,Mailサーバ用に1つ。さらにNAPTゲートウェイ用に1つ。)

設定内容

ルータの設定

セキュリティの第一歩はルータでのパケットフィルタでの、外部からの余計なパケットの排除です。以下にYAMAHAのRTシリーズ(RTA50i)の場合のルータの設定例を示しておきます。(他のルータでも同等の機能がある筈ですのマニュアルを参照してください)
内容については利用する環境に合わせて読み替えてください。
コマンド 設定内容
# login password
(パスワード入力)
・ルータへ接続する際のパスワードを定義します
# administrator password
(パスワード入力)
・ルータの管理用モードへのパスワードを定義します。
# security class 2 on off ・ルータへの遠隔操作のセキュリティを設定します。
# date 2000-11-03
# time 13:52:02
・日付と時間を設定。ルータのログに残る情報にはアタックに関するものもあるので、時間をしっかりと合わせておき、あとで解析し易いようにしておく。
# ip lan address 192.168.0.1/24 ・ルータのLANインターフェイスのIPアドレスを定義
この例では、192.168.0.1を指定している。
(ネットマスクは24ビット、すなわち255.255.255.0)
192.168.x.xはプライベートアドレス
# ip lan routing protocol none ・RIPをOFFにする
# pp line L128 ・WAN側のインターフェースの通信速度を128Kbpsと定義
# pp select leased ・WAN側の回線として専用線を使う事を定義
# nat descriptor type 1 masquerade
# nat descriptor static 1 1 202.10.10.2=192.168.1.2
# ip pp nat descriptor 1
・NATとしてMasqueradeも使う。
・NAT用の外部アドレスとして、202.10.10.2を使う(グローバルアドレス)
# ip filter 1 pass * 202.xxx.xxx.xxx/32 established * * ・外部からのパケットだが、内部からの要求に対しての応答としての戻りパケットは透過させる為のフィルタ
# ip filter 5 reject 192.168.0.0/16 * * * *
# ip filter 6 reject 172.16.0.0/12 * * * *
# ip filter 7 reject 10.0.0.0/8 * * * *
・外部からプライベートアドレスでくるパケットは攻撃パケットの可能性が高い為、これを拒否するようにフィルタを作成する。
# ip filter 10 pass * 202.10.10.2 tcp,udp 53,113,123 * ・UDPベースのパケットはestablishedなパケットにならないのでDNS(53)、ident(113)、ntp(123)については明示的に戻りパケットして定義しておく必要がある。
# ip filter 11 pass * 202.10.10.2 tcp,udp * 25,53,80,113,442 ・外部からは202.10.10.2へのMail(25)、DNS(53)、WWW(80)、ident(113)、WWW-SSL(443)のアクセスを許可する。
# ip filter 12 pass * 202.10.10.2 icmp * * ・外部から202.10.10.2へPINGを許す。(プロパイダがDNSの監視を行っていない場合はこのルールは不要)
# ip filter 100 reject * * * * * ・外部からのパケットをすべて拒否するフィルタ。本来は定義不要だが、混乱を少なくする為に明示的に定義している。
# ip pp secure filter in 1 5 6 7 10 11 12 100 ・WAN側のパケットフィルタを有効にする。
# ip pp route add net default 1 ・WAN側のポートをデフォルトゲートウェイとして設定
# save ・設定を保存
# retstart ・ルータを再起動し、設定を有効にする。

■NAPTゲートウェイ(IPマスカレードの設定)

Linuxの場合

最近の各種Linuxのディストリビューションでは、最初からIPマスカレードの機能が組み込まれているので、Linuxのインストールが完了していれば後は設定を行うだけでIPマスカレードを利用できます。 以下では既にLinuxのインストールが完了しており、かつ、LANカードが2枚とも組み込まれて、上記の図例のようにIPアドレスが設定されているものとして説明します。 また、IPマスカレードを利用するには、IP Forward機能が有効になっている必要があります。(TurboLinuxでIP Forwardを有効にする。 RedHat LinuxでIP Forwardを有効にする。)
(IPマスカレードとして、ipchainsを使う場合)
Linuxのカーネル2.2xまでは、IPマスカレードとしてipchainsというパケットフィルタツールが利用できます。これを使ったIPマスカレードの設定を以下に示します。なお説明にあたり、図例のインターネット側のLANインターフェースを”eth0”、内部側のLANインターフェイスを"eth1"として説明します。

コマンド 設定内容
/sbin/modprobe ip_masq_ftp ・IPマスカレードにおいてFTPを利用できるようにする。
(*注1)
/sbin/modprobe ip_masq_raudio ・IPマスカレードにおいてRealAudioを利用できるようにする。
(*注1)
/sbin/modprobe ip_masq_irc ・IPマスカレードにおいてIRCを利用できるようにする。
(*注1)
/sbin/ipchains -P forward DENY ・eth0とeth1の間の転送を許可したもの以外は禁止する。
/sbin/ipchains -A forward -s 172.16.1.1/24 \
-d 0.0.0.0 -j MASQ
・社内LAN側のパケットをマスカレード(アドレス変換)する。
/sbin/ipchains -N udchain ・新しいルールとして「udpchain」という名前を追加
/sbin/ipchain -A udpchain -p udp \
-d 192.168.1.3 1024:65535 -j ACCEPT
・社内からリクエストしたIPマスカレードされたパケットに対する戻りのUPDパケットを許可する。
/sbin/ipchains -A udpchain -p udp
-s 0/0 53 -j ACCEPT
・インターネット側からDNS(53)パケットを受け取る。
/sbin/ipchains -A input -i eth0 \
-s 0/0 123 -j ACCEPT
・インターネット側からNTP(123)パケットを受け取る。
/sbin/ipchains -A udpchain -p udp -j DENY ・上記以外のUDPは拒否する。
/sbin/ipchains -A input -j udpchain -i eth0 ・「udpchain」ルールをインターネットの側のLANアダプタである eth0 (*注2 )だけに適用する。
/sbin/ipchains -N tcpchain ・新しいルールとして「tcpchain」という名前を追加
/sbin/ipchains -A tcpchain -p tcp -y \
-s 192.168.1.2 25 -j ACCEPT
・DMZ上のメールサーバからのSMTP(Mail)への接続を許可する
/sbin/ipchains -A tcpchain -p tcp -s 0/0 -y -j DENY ・上記以外のTCPパケットで外部からの接続を拒否する。
/sbin/ipchains -A tcpchain -p tcp -s 0/0 -j ALLOW ・上記以外のTCPパケットを許可する。
/sbin/ipchains -A input -i eth0 -j tcpchain ・「tcpchain」ルールをインターネットの側のLANアダプタである eth0 (*注2)だけに適用する。
/sbin/ipchains -N icmchain ・新しいルールとして「icmchain」という名前を追加
/sbin/ipchains -A icmchain -p icmp \
-d 192.168.1.3 -j ACCEPT
・ICMPパケットの接続を許可する
/sbin/ipchains -A icmchain -p icmp -j DENY ・上記以外のICMPパケットを拒否する。
/sbin/ipchains -A input -i eth0 -j icmchain ・「icmchain」ルールをインターネットの側のLANアダプタである eth0 (*注2)だけに適用する。
(*注1)IPマスカレードの標準的な機能でない部分をモジュールとして組み込む。 利用できるモジュールは、
  /lib/modules/OSのバージョン/ipv4
ディレクトリに存在するものを指定できます。

(*注2) eth0がインターネット側のインターフェイスとは限らないなので、実際にあなたの環境に合わせてeth1やeth2を指定してください。 どのインターフェイスがどちらのネットワークかはスーパーユーザで、「ifconfig -a」を実行することで判断できます。
入力したipchainsの内容をファイルへ保存します。
# ipchains-save > /etc/sysconfig/ipchains
起動時に自動的に実行されるようにするため、以下のようなスクリプトを/etc/rc.d/init.d/ipchainsとして作成します。
(/etc/rc.d/init.d/ipchains)
#!/bin/sh
IPCHAINS_CONFIG=/etc/sysconfig/ipchains
if [ ! -x /sbin/ipchains ]; then
exit 0
fi

case "$1" in
start)
# don't do squat if we don't have the config file
if [ -f $IPCHAINS_CONFIG ]; then
echo -n "Turning on packet filtering:"
ipchains -F
ipchains -X
ipchains -Z
grep -v "^#" $IPCHAINS_CONFIG | ipchains-restore -p -f
echo
touch /var/lock/subsys/ipchains
fi
;;
stop)
echo -n "Turning off packet filtering:"
ipchains -F
ipchains -X
ipchains -P input ACCEPT
ipchains -P forward ACCEPT
ipchains -P output ACCEPT
echo
rm -f /var/lock/subsys/ipchains
;;

restart)
$0 start
;;
status)
ipchains -nL
;;
panic)
echo -n "Changing target policies to DENY: "
ipchains -P input DENY
ipchains -P forward DENY
ipchains -P output DENY
ipchains -F
ipchains -X
echo
;;
save)
echo -n "Saving current rules to $IPCHAINS_CONFIG: "
ipchains-save > $IPCHAINS_CONFIG 2>/dev/null
echo
;;
*)
echo "Usage: $0 {start|stop|restart|status|panic|save}"
exit 1
;;
esac

exit 0
作成したスクリプトファイルをPC起動時に自動的に起動するように設定します。
# ln -s /etc/rc.d/init.d/ipchains /etc/rc.d/rc2.d/S91ipchains
# ln -s /etc/rc.d/init.d/ipchains /etc/rc.d/rc3.d/S91ipchains
# ln -s /etc/rc.d/init.d/ipchains /etc/rc.d/rc5.d/S91ipchains
以上で、ipchainsが起動時に自動的に設定されます。