2001年6月18日 更新

構築例−1:オールインワン(NAPT/IPマスカレード)

前のページ HOME

構成例−1

長所: 短所:
この構成はLinuxやFreeBSDを紹介した多くの市販本に例が載っていますが、NAPT(IPマスカレード)機能を使ったオールインワンサーバの構築例です。 NAPTゲートウェイでは、インターネット側と内部側で2枚以上LANカードを使いNAPT機能で内部LAN側のアドレスを変換してあたかも外部LAN側から通信しているように見せかけます。 このため、内部LAN側ではプライベートアドレスが利用でき、プロパイダから与えられたIPアドレスの個数以上のマシンでインターネットの利用が可能になります。
また、NAPTゲートウェイ上でWWWやDNS、Mailサーバも動作させることで安価にインターネットサーバを構築できることになります。
ただし、この構成ではインターネットに公開するサーバ(WWWやMail等)とセキュリティゲートウェイが同じマシンに同居するため、セキュリティ的には潜在的な弱点を持った構成となることに注意してくださ。
たとえば2001年春頃にあった多くのWebページの書き換え事件は、DNSの弱点(Bind8.2.3以前のバージョンにあったセキュリティホール)に起因しており、上記の構成で問題のあるDNSを使っていた場合にはNAPTゲートウェイが侵入される結果になります。
この事から、できればNAPTゲートウェイでは他のサーバソフトを動かさず、できるだけISP等からレンタルする事をお勧めします。
どうしても自社でサーバを持ちたい場合には、NAPTゲートウェイとは別のマシンを構築し、これにDNSやMailサーバを構築する方が安全です。

設定内容

■ルータの設定

セキュリティの第一歩はルータでのパケットフィルタでの、外部からの余計なパケットの排除です。以下に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 address outer 1 202.xxx.xxx.xxx
# nat descripror address inner 1 192.168.0.1-192.168.0.254
・NATとしてMasqueradeを使う。
・NAT用の外部アドレスとして、202.xxx.xxx.xxxを使う(グローバルアドレス)
・IPマスカレードするプライベートアドレスの範囲を192.168.0.1-192.168.0.254までとする
# 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 192.168.1.0/24 \
-d 0.0.0.0 -j MASQ
・社内LAN側のパケットをマスカレード(アドレス変換)する。
/sbin/ipchains -N udchain ・新しいルールとして「udpchain」という名前を追加
/sbin/ipchain -A udpchain -p udp \
-d 202.10.10.2 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 \
-d 202.10.10.2 25 -j ACCEPT
・外部からのSMTP(Mail)への接続を許可する
/sbin/ipchains -A tcpchain -p tcp -y \
-d 202.10.10.2 53 -j ACCEPT
・外部からのDNSのTCPでの接続を許可する
/sbin/ipchains -A tcpchain -p tcp -y \
-d 202.10.10.2 80 -j ACCEPT
・外部からのWWW(80)パケットを受け取る。
/sbin/ipchains -A tcpchain -p tcp -y \
-d 202.10.10.2 443 -j ACCEPT
・外部からのWWW-SSL(443)パケットを受け取る。
/sbin/ipchains -A tcpchain -p tcp -y \
-d 202.10.10.2 113 -j ACCEPT
・外部からのAUTHパケット(113)を許可する。
/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 202.10.10.2 -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が起動時に自動的に設定されます。

■DNSの設定

NAPTゲートウェイ上でDNSを起動する場合は、こちらを参照してDNSを構築にしてください。

■メールサーバの設定

NAPTゲートウェイ上でe-mailサーバを構築する場合には、こちらを参照してメールサーバを構築してください。なお、NAPTゲートウェイではセキュリティ的な観点からアタックに弱い可能性のあるsendmailではなく qmail を使ったe-mailサーバの構築を提案いたします。

■NTPの設定

よく忘れられるのが、サーバマシンの時間の設定です。 しかし、時間はシステムが自動実行するスケジュールタイマとして使ったり、ログに関しての記録に利用される大切な情報でです。
これが狂っていると思わぬ障害(たとえばコンパイルが失敗したり)が発生するのできちんと時刻を合わせておきましょう。 都合良くインターネットにはNTPサーバという標準時と同期させるためのサーバがあるのでこれを利用すると良いでしょう。
NTPサーバの設定についてはこちらを参照してください。