習うより慣れろ! iptablesテンプレート集

第2回 natテーブルを利用したLinuxルータの作成

鶴長 鎮一
2005/5/17

 テンプレート9
 透過型プロキシの実現(ルータとサーバを分離)

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

  サーバとして
  外部からの接続パケットは基本的にすべて破棄
  ただし接続済み通信のパケットは許可
  内部からの接続パケットは基本的にすべて許可
  ループバックアドレスに関してはすべて許可
  メンテナンスホストからのping、メンテナンスホストへのpingを許可
  メンテナンスホストからのssh(TCP 22)を許可
  ルータとして
  Linuxサーバを経由して外部へ出ていくパケットのソースアドレスを変換
  内部アドレス→外部アドレス
  内部アドレスやプライベートアドレスが外部に漏れないようにブロック
  内部から外部ネットに出ていくHTTPサービスのパケットを書き換え
  ディスティネーションアドレスをプロキシサーバ(Linuxサーバ自身)のアドレスとサービスポート(TCP 3128)に
HTTPサービスのパケット:ディスティネーションポートTCP 80
  ソースIPが内部ネットで、ディスティネーションがプロキシサーバへの転送を許可する

 プロキシサービスの利用が増加した場合、1台のホストで複数の機能(プロキシとルータ)を処理するのはパフォーマンス(スループットなど)と耐障害性の面で不利になります。ここでは、それぞれの機能を分離した場合を紹介します。

  テンプレート9の表示(このウィンドウ)
テンプレート9の表示(別ウィンドウ)
テンプレート9(template09.sh)のダウンロード

テンプレート9の解説

 プロキシサーバは内部ネット内に設置するものとします。この方針に従い、プロキシサーバのIPアドレスとポート番号を10、11行目で定義します。

10 proxy_ip=192.168.0.100
11 proxy_port=3128

 テンプレート8ではLinuxルータでTCP 3128の解放を行いましたが、テンプレート9ではプロキシを別サーバにしたためその必要はありません。

 なお、プロキシサーバを外部ネットに設置する場合は、テンプレートを修正する必要があります。

 続いて、63〜65行目を見てみます。

63 iptables -t nat -A PREROUTING -i eth1 -s ! $proxy_ip -p tcp --dport 80 -j DNAT --to $proxy_ip:$proxy_port
64 iptables -t nat -A POSTROUTING -o eth1 -s $internal_ip -d $proxy_ip -j SNAT --to $my_internal_ip
65 iptables -A FORWARD -s $internal_ip -d $proxy_ip -i eth1 -o eth1 -p tcp --dport $proxy_port -j ACCEPT

 63行目で、パケットのあて先をプロキシサーバに変えています。

 63行目だけでも透過型プロキシが成立しそうに思えますが、実際には64、65行目が必要になります。テンプレート9の場合、HTTP要求を出す端末はデフォルトルータへパケットを送っているため、戻ってくるパケットもデフォルトルータ経由であることを知っています。つまり、Linuxルータでディスティネーションポートを変更していますが、戻りパケットはLinuxルータからになります。

 63行目だけでは、端末はデフォルトルータに要求を送っているにもかかわらず、応答パケットはプロキシサーバから返ってくることになり、不整合が生じます。この不整合を調整するのが64行目の役割です。具体的には、「端末から出たHTTP要求に対する応答がLinuxルータから戻るように」、要求パケットのソースIPをLinuxルータのアドレスに書き換えます。プロキシサーバはHTTP要求に対する応答をLinuxルータに行い、その後Linuxルータから端末へ戻されます。その過程で行われるパケットのFORWARD(eth1からeth1への)を65行目のように解放します。

5/6

Index
習うより慣れろ! iptablesテンプレート集
 第2回 natテーブルを利用したLinuxルータの作成
  Page 1
natテーブルによるNATの実現
  Page2 テンプレート6
IPマスカレードによるLinuxルータ
 テンプレート6の想定環境
 改造のヒント:メンテナンスホストが外部ネット側にある場合
  Page 3 テンプレート7
Windowsファイル/プリンタ共有パケットのブロック
 テンプレート7の想定環境
  Page 4 テンプレート8
透過型プロキシの実現(ルータと同一サーバ)
 テンプレート8の想定環境
 改造のヒント:REDIRECTを使う方法
Page 5 テンプレート9
透過型プロキシの実現(ルータとサーバを分離)
 テンプレート9の想定環境
  Page 6 テンプレート10
外部から特定の内部サーバへのアクセスを許可
 テンプレート10の想定環境

連載 習うより慣れろ! iptablesテンプレート集


 Linux Squareフォーラム セキュリティ関連記事
連載:習うより慣れろ! iptablesテンプレート集(全4回)
初心者にとって、iptablesは難しい。そこで、学習の第1歩としてテンプレートを自分の環境に適応させることから始めよう
連載:ゼロから始めるLinuxセキュリティ(全11回)
奥が深いセキュリティ対策の世界をゼロから解説。ホストレベルのセキュリティからファイアウォール、IDSの構築、ログ管理方法まで、システム管理者必見
特集:WebDAV時代のセキュリティ対策[前編]
WebDAVのメソッドは便利な反面、セキュリティホールとなり得る。しかし、適切な対策を講じることでメソッドの危険性は取り除くことができる
特集:FreeS/WANによるIPSecの導入と運用[前編]
LinuxでIPSecを利用するには、「FreeS/WAN」というIPSecスタックを用いることになる。まず、これをインストールすることから始めよう
特集:Linux以外のIPSecスタックとの相互接続[前編]
別のOSや異なるIPSecスタックとの相互接続が可能なら、その用途は大幅に広がる。前編では、FreeBSDのKAMEと相互接続を試みる
特集:sshでセキュアネットワーク
サーバにリモートログインする場合は、暗号化して転送するsshを使おう。sshをサーバとクライアントにインストールすれば、インターネット上でも安全な通信が可能になる

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

TechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ



- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH