natテーブルを利用したLinuxルータの作成:習うより慣れろ! iptablesテンプレート集(2)(6/6 ページ)
iptablesのNAT機能を利用すれば、Linuxをルータにできる。さらに、NATの応用例として透過型プロキシを構築してみる。(編集部)
テンプレート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アドレスとポート番号を変更するだけでほかのサービスにも応用可能です。
Copyright © ITmedia, Inc. All Rights Reserved.