連載
» 2005年05月17日 00時00分 公開

習うより慣れろ! iptablesテンプレート集(2):natテーブルを利用したLinuxルータの作成 (6/6)

[鶴長鎮一,@IT]
前のページへ 1|2|3|4|5|6       

テンプレート10
外部から特定の内部サーバへのアクセスを許可

テンプレート10の想定環境

サーバとして
・外部からの接続パケットは基本的にすべて破棄
 ただし接続済み通信のパケットは許可
・内部からの接続パケットは基本的にすべて許可
・ループバックアドレスに関してはすべて許可
・メンテナンスホストからのping、メンテナンスホストへのpingを許可
・メンテナンスホストからのssh(TCP 22)を許可
ルータとして
・内部アドレスやプライベートアドレスが外部に漏れないようにブロック
・外部から内部ネットに入ってくるパケットを書き換え
 対象パケット:ディスティネーションポートがTCP 80/443
  ディスティネーションアドレスを内部ネットのHTTPサーバアドレスに
 対象パケット:ディスティネーションポートがTCP 25/110
  ディスティネーションアドレスを内部ネットのメールサーバアドレスに
・外部(eth0)からHTTP/HTTPS/SMTP/POP3サーバへの転送を許可

 サーバを内部ネットに設置したまま、外部ネットから接続できるようにします。ブロードバンドルータが「ポート転送」と呼んでいる機能です。この機能の仕組みは至って簡単で、Linuxルータの外部ネット側アドレスの特定ポートに来たパケットを指定された内部ネット内のサーバへ転送するだけです。

 この機能はしばしばDMZ(DeMilitarized Zone)と混同されますが、DMZではありません。DMZは、Linuxルータとファイアウォールを内部ネットのものと分けるか、LinuxルータとファイアウォールにNICを増設して3イーサネットで構成し、内部ネットとも外部ネットとも異なる領域にサーバを格納します。外部ネットからのアクセスを受けるサーバはどうしてもセキュリティ強度が落ちるため、内部ネットと分離してしまおうというものです。

 ポート転送もDMZ内ホストもSNAT+IPマスカレードを素通りするため、意図しない侵入や攻撃を受ける危険性が常に存在することを覚えておきましょう。

テンプレート10の解説

 55行目から79行目で、HTTP/HTTPS/SMTP/POP3のポート転送を設定しています。外部から見た場合、サーバのIPは1.2.3.4です。アクセスするポートによって、転送先を変えています。

 では、HTTPサービスを例に解説します。

52 #################
53 #DNAT(HTTP)
54 #################
55 http_ip='192.168.0.2'
56 http_port='80'
57 iptables -t nat -A PREROUTING -p tcp -i eth0 -d $my_internet_ip --dport $http_port -j DNAT --to-destination $http_ip:$http_port
58 iptables -A FORWARD -i eth0 -o eth1 -p tcp -d $http_ip --dport $http_port -j ACCEPT

 55、56行目でHTTPサーバのIPアドレス、ポート番号を指定します。

 57行目では、eth0側から入ってくるパケットのうち、

  • ディスティネーションアドレスがLinuxルータの外部ネット側アドレス
  • ディスティネーションポートがHTTPのサービスポート

であるパケットのあて先を、転送先HTTPサーバのアドレスとポートに変換します。

 このままではeth0から入ってきたパケットを内部のサーバへ転送しようとした時点で、FORWARDチェインのデフォルトルール規制で破棄(DROP)されます。そこで58行目のように、eth0から入ってくるパケットでもHTTPサーバへのパケットは転送可能にしています。

 HTTPサービスを例に説明しましたが、方法自体はIPアドレスとポート番号を変更するだけでほかのサービスにも応用可能です。

前のページへ 1|2|3|4|5|6       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。