DeleGate 設定例


ここでは、DeleGateのいろいろな設定例を列挙しますが、 これらは、DeleGateが持っている機能のごく一部を使用しているに過ぎません。 できるだけたくさんの例を載せるつもりではいますが、私一人の手で、DeleGateを完全に使いこなすのは、 多分、不可能です。
なお、参考文献にも目を通していただけると"さらに"良いと思います。


前ページ: MINI-HOWTO プロキシサーバ DeleGate を使う

BACK ( DGbeecon )


この文書内の斜体文字は、キー入力することを意味します。

・使用する前の準備と確認
[FireWall-host] $ su
[FireWall-host] # mkdir /home/delegate
[FireWall-host] # mkdir /home/delegate/cache
[FireWall-host] # chown -R nobody.nobody /home/delegate
[FireWall-host] # which delegated

delegated: /usr/sbin/delegated

・ログの整理用スクリプトを用意します
/etc/cron.daily/del_delegate_old_log
--------- ファイルの内容 ----------
#!/bin/sh
# This rm is 'rm (GNU fileutils) 3.16'
# Check version by rm --version
rm -rf /home/delegate/log/*/*.old
--------- ファイルの内容 ----------

・汎用起動スクリプト
この起動スクリプトは、以下全ての設定で使用可能です。

delegated.sh
---------- ファイルの内容 ----------
#!/bin/sh

DELEPATH="/usr/sbin"
PATH="$DELEPATH:$PATH"
DELEPAR="DGROOT=/home/delegate"  # DeleGateのホームディレクトリ
DELEADM="ADMIN=root@localhost"   # DeleGateの管理者

if [ -x $DELEPATH/delegated ]
then
      $DELEPATH/delegated $DELEPAR $DELEADM $*
fi
# End
---------- ファイルの内容 ----------

この起動スクリプトの書式は以下のようになります。

起動時
delegated.sh -Pport +=confpath
例えば、設定ファイル名が、delepop.conf で、ポート番号が、8110 の場合
delegated.sh -P8110 +=./delepop.conf
となります。

終了時
delegated.sh -Pport -Fkill

再起動時
delegated.sh -Pport -Fkill-hup
再起動は、設定ファイルを変更後、設定を再読込みさせる際に使用します。

詳細ログを画面に表示するとき
delegated.sh -Pport -vv +=confpath

この場合、停止は、[Ctrl]+c で行います。

・プロキシサーバ篇

目次

・http プロキシサーバ (http/https{80,443},gopher,ftp,wais})

構成: My-net [192.168.1.0/24] <-> FireWall-host[port 8080] <->Internet [ http などのサーバ]

FireWall-hostで起動するDeleGateの設定ファイル。
delehttp.conf
---------- ファイルの内容 ----------
SERVER=http                     # http プロキシ(プロトコル http でクライアントと通信する)
RELIABLE=192.168.1.0/24
#RELIABLE=192.168.2.0/24        # ほかにもネットがある場合
LOGFILE=''                      # 普通のログは使わない
PROTOLOG='${LOGDIR}/${PORT}/[date+%d].${PROTO}'  # ログファイルを、cern httpd 互換にして、日付でローテーションする。
EXPIRE=1d                       # キャッシュの賞味期限を1日にする。
CRON='0 3 * * * -expire 5'      # 5日以上たったキャッシュファイルを削除する
CONNECT=c,d:*:*                 # キャッシュを見てから、直接サーバを見に行くようにする。
#REMITTABLE=http,https          # このプロキシで、http/https しか使わせたくない場合。
---------- ファイルの内容 ----------

起動
delegated.sh -P8080 +=delehttp.conf [Enter]

・ftp プロキシサーバ (ftp (anonymous/user) )

構成: My-net [192.168.1.0/24] <-> FireWall-host[port 8021] <-> Internet [ ftp サーバ]

FireWall-hostで起動するDeleGateの設定ファイル。
deleftp.conf
---------- ファイルの内容 ----------
SERVER=ftp                      # ftp プロキシ(プロトコル ftp でクライアントと通信する)
RELIABLE=192.168.1.0/24
LOGFILE=${LOGDIR}/${PORT}/log[date+%d]
PROTOLOG=''
EXPIRE=1d                       # キャッシュの賞味期限を1日にする。
CRON='0 3 * * * -expire 2'      # 2日以上たったキャッシュファイルを削除する
CONNECT=c,d:*:*                 # キャッシュを見てから、直接サーバを見に行くようにする
---------- ファイルの内容 ----------

起動
delegated.sh -P8021 +=deleftp.conf [Enter]

使い方
[My-host]$ ftp FireWall-host 8021 [Enter]
・・・
Name (FireWall-host:hoge): hoge [Enter]
331 Password required for hoge. # 対象サーバのユーザ名
Password:                       # 対象サーバのパスワード
230- User hoge logged in.
230  Now you can select a FTP SERVER by cd //SERVER
ftp> cd //ftp.hoge.com [Enter]  #上のユーザ名とパスワードでログインするサーバ
・・・
ftp> bye [Enter]
[My-host]$

・pop プロキシサーバ

構成: My-net [192.168.1.0/24] <-> FireWall-host[port 8110] <-> Internet [ pop サーバ]

FireWall-hostで起動するDeleGateの設定ファイル。

delepop.conf
---------- ファイルの内容 ----------
SERVER=pop       # pop プロキシ(プロトコル pop でクライアントと通信する)
RELIABLE=192.168.1.0/24
PROTOLOG=''
LOGFILE=${LOGDIR}/${PORT}/log[date+%d]
REACHABLE=*      # どのサーバも見に行ける
---------- ファイルの内容 ----------

起動
delegated.sh -P8110 +=delepop.conf [Enter]

Netscape Messangerからの使うには、設定を
メールサーバ:FireWall-host:8110
ユーザ名:hoge%mailserver
のようにします。

・telnet プロキシサーバ

構成: My-net [192.168.1.0/24] <-> FireWall-host[port 8023] <-> Internet [ telnet サーバ]

FireWall-hostで起動するDeleGateの設定ファイル。
deletelnet.conf
---------- ファイルの内容 ----------
SERVER=telnet            # telnet プロキシ(プロトコル telnet でクライアントと通信する)
RELIABLE=192.168.1.0/24
PROTOLOG=''
LOGFILE=${LOGDIR}/${PORT}/log[date+%d]
REACHABLE=*
#PERMIT=telnet:{*:23}:*  # 対象サーバへの telnet を23番ポートのみに制限する
--------- ファイルの内容 ----------

起動
delegated.sh -P8023 +=deletelnet.conf [Enter]

使い方

[My-host]$ telnet FireWall-host 8023 [Enter]
・・・
>> Host name: telnethost
-- Trying telnethost [192.168.1.102:23] ...
-- Connected to telnethost.
Red Hat Linux release 6.2 (Zoot)
Kernel 2.2.16-3 on a sparc
login:

・多段プロキシサーバ

多段プロキシは、FireWallホストの負荷分散や、複数のFireWallに閉ざされた環境で使う場合などに使用する。

構成:
My-host[192.168.1.0/24] -> pop-Proxy[10110]
         |                   |
         V                   |
http-Cache[port 10080]       |
                 |           |
                 V           V
            FireWall-host[port 8080]
                      |
                      V
               Internet Servers

DeleGateにおける用語で、http-Cache や、pop-Proxy のように使用目的が決まっているものを、 Specialist DeleGate と呼び、他のプロキシの要求を受け付ける上位プロキシで、 汎用となるものを、Generalist DeleGate と呼びます。

一般的な設定では、LAN上にある、複数の Specialist で、キャッシュなどを行い、 それらの要求を、FireWall 上の Generalist で受け、インターネット上のホストに転送します。

FireWall-hostで起動するDeleGateの設定ファイル。
generalist.conf
---------- ファイルの内容 ----------
# Generalistは、SERVER=proto を指定しません
# 8.0.3 以降、SERVER="delegate" を指定する必要があります。
SERVER='delegate'
RELIABLE=http-Cache    # Specialistたちの要求のみ受ける
RELIABLE=pop-Proxy
LOGFILE=${LOGDIR}/${PORT}/log[date+%d]
PROTOLOG=''
CACHE=no                  # キャッシュを使わない
REACHABLE=*
---------- ファイルの内容 ----------

起動

delegated.sh -P8080 +=generalist.conf [Enter]
pop-Proxy で起動するDeleGateの設定ファイル。
delepop.conf
---------- ファイルの内容 ----------
SERVER=pop                # pop プロキシ(プロトコル pop でクライアントと通信する)
RELIABLE=192.168.1.0/24
PROTOLOG=''
LOGFILE=${LOGDIR}/${PORT}/log[date+%d]
REACHABLE=*
MASTER=FireWall-host:8080 # 上流DeleGateを指定
CONNECT=d,m:*:*
---------- ファイルの内容 ----------

起動

delegated.sh -P10110 +=delepop.conf [Enter]
http-Cache で起動するDeleGateの設定ファイル。

delehttp.conf
---------- ファイルの内容 ----------
SERVER=http                # http プロキシ(プロトコル http でクライアントと通信する)
RELIABLE=192.168.1.0/24
LOGFILE='' # 普通のログは使わない PROTOLOG='${LOGDIR}/${PORT}/[date+%d].${PROTO}'  # ログファイルを、cern httpd 互換にして、日付でローテーションする。 EXPIRE=1d # キャッシュの賞味期限を1日にする。 CRON='0 3 * * * -expire 5' # 5日以上たったキャッシュファイルを削除する MASTER=FireWall-host:8080 # 上流DeleGateを指定 CONNECT=c,d,m:*:* ---------- ファイルの内容 ----------

起動

delegated.sh -P10080 +=delehttp.conf [Enter]

・TCPrelayとUDPrelay篇
TCPrelay と、UDPrelay は、任意のプロトコルをクライアント・サーバ間で、中継します。
これにより、サポートできないプロトコルがほとんどなくなります。

なお、これらはアプリケーションプロトコルに依存しない (無視する) ので使用できる機能が制限されます。
deletcprelay.conf
---------- ファイルの内容 ----------
SERVER=tcprelay://realproxy:1090
RELIABLE=192.168.1.0/24
PROTOLOG=''
LOGFILE=${LOGDIR}/${PORT}/log[date+%d]
---------- ファイルの内容 ----------

起動

delegated.sh -P1090 +=deletcprelay.conf [Enter]
deleudprelay.conf
---------- ファイルの内容 ----------
SERVER=udprelay://dnsserver:53
RELIABLE=192.168.1.0/24
PROTOLOG=''
LOGFILE=${LOGDIR}/${PORT}/log[date+%d]
---------- ファイルの内容 ----------

起動

delegated.sh -P53 +=deleudprelay.conf [Enter]

対象サーバが複数のポートを使う場合、以下のようにする事もできます。
deleportrelay.conf
---------- ファイルの内容 ----------
SERVER=tcprelay://distserver:+0
RELIABLE=192.168.1.0/24
PROTOLOG=''
LOGFILE=${LOGDIR}/${PORT}/log[date+%d]
---------- ファイルの内容 ----------

起動

delegated.sh -P1090,554,7070,7071 +=deleportrelay.conf [Enter]

・リバースプロキシ篇
リバースプロキシとは、通常FireWallによって隠されているホストを、インターネットから参照可能にすることをいいます。
当然、セキュリティシステムに穴をあけるわけですから、注意して設定しなければなりません。
リバースプロキシ(インターネットからLAN上のサーバにアクセスする)を実現する場合、主に、DeleGateの MOUNT 機能を使用して、LAN上のサーバを、あたかもインターネット上のホストであるかのように見せます。
・http リバースプロキシ構成:
My-host <-Internet-> FireWall-host -> My-server

FireWall-host で起動するDeleGateの設定ファイル。

 httpmount.conf
 ---------- ファイルの内容 ----------
 SERVER=http                        # http プロキシ(プロトコル http でクライアントと通信する)
 MOUNT="/* http://My-server/*"   # My-server を公開する
 REACHABLE=My-server                # My-server以外へアクセスできないようにする
 RELIABLE=*
 # RELIABLE=*.my.internet.dom       # 使うドメインが決まっている場合、このように制限できる
 LOGFILE=''                         # 普通のログは使わない
 PROTOLOG='${LOGDIR}/${PORT}/[date+%d].${PROTO}'  # ログファイルを、cern httpd 互換にして、日付でローテーションする
 CONNECT=d:*:*
 ---------- ファイルの内容 ----------
 

起動

delegated.sh -P80 +=httpmount.conf [Enter]

使い方、もうすこし。
IP アドレス をひとつしか持っていなくて、でも、複数のドメインを使って複数のサーバを公開したい。 例えば、MyServer1 を www.example.jp として、MyServer2 を www.example.net として公開するようなことを、 ひとつしかないグローバスアドレスで実現したいとき。

Client <- Internet -> DeleGate 
                      |      |
               MyServer1     MyServer2
このようなときには、マウントオプションのひとつ、vhost を使います。
httpvhost.conf
 ---------- ファイルの内容 ----------
 SERVER=http                        # http プロキシ(プロトコル http でクライアントと通信する)
 MOUNT="/* http://MyServer1/* vhost=-www.example.jp" # MyServer1 を、www.example.jp という名前で公開する
 MOUNT="/* http://MyServer2/* vhost=-www.example.net" # MyServer2 を、www.example.net という名前で公開する
 MOUNT="/* http://MyServer2/www2/* vhost=-www2.example.net" # MyServer2 の www2 ディレクトリ を、www2.example.net という名前で公開する
 REACHABLE="MyServer1,MyServer2"                # My-server以外へアクセスできないようにする
 RELIABLE=*
 LOGFILE=''                         # 普通のログは使わない
 PROTOLOG='${LOGDIR}/${PORT}/[date+%d].${PROTO}'  # ログファイルを、cern httpd 互換にして、日付でローテーションする
 CONNECT=d:*:*
 ---------- ファイルの内容 ----------

起動

delegated.sh -P80 +=httpvhost.conf [Enter]

・プロトコルゲートウェイ篇
プロトコルゲートウェイは、あるプロトコルのサーバを異なるプロトコルのクライアントが参照できるようにする手段で、DeleGate の 特徴的な機能の一つです。

目次

・NNTP/HTTP ゲートウェイ


構成: My-host <-> Gateway-host <-> nntp-server
Gateway-host で起動するDeleGateの設定ファイル。
nntphttp.conf
---------- ファイルの内容 ----------
MOUNT="/* nntp://nntp-server:119/*"
RELIABLE=192.168.1.0/24
MIMECONV=all # MIME変換する
PERMIT=http,nntp
EXPIRE=10d
CONNECT=d:*:*
---------- ファイルの内容 ----------

起動

delegated.sh -P80 +=nntphtt.conf [Enter]

使い方
http://Gateway-host/
にアクセスすればよい。

・POP/HTTP ゲートウェイ


構成: My-host <-> Gateway-host <-> pop-server
Gateway-host で起動するDeleGateの設定ファイル。

pophttp.conf
---------- ファイルの内容 ----------
MOUNT="/* pop://pop-server:110/*"
RELIABLE=192.168.1.0/24
MIMECONV=all             # MIME変換する
# REACHABLE=pop-server   # 他のpopサーバにアクセスできないようにする
PERMIT=http,pop
CONNECT=d:*:*
---------- ファイルの内容 ----------

起動

delegated.sh -P80 +=pophtt.conf [Enter]

使い方
http://Gateway-host/
にアクセスするとユーザ名とパスワードを聞いてくる。
このとき、ユーザ名を user@other-pop-server とすると、
pop-serverではなく、other-pop-serverにアクセスする。

・ SMTP/NNTP ゲートウェイ


DeleGateにはSMTPGATEという機能があり、それを使ったのがこれである。
DeleGate が特定のユーザでメールを受け取り、その内容にフィルタをかけることで、実現します。
この設定では、設定ファイル以外に、ユーザ毎にフィルタファイルを書く必要がある。

構成:

smtp-server(news_test@Gateway-host) -> Gateway-host -> nntp-server(local.test)
smtpnntp.conf
---------- ファイルの内容 ----------
SERVER=smtp
RELIABLE=smtp-server
SMTPGATE=/home/delegate/
---------- ファイルの内容 ----------

フィルタを書き込むための、メールユーザ名と同じディレクトリを作成する。
# mkdir /home/delegate/users
# mkdir /home/delegate/users/news_test
# chown -R nobody.nobody /home/delegate/users
/home/delegate/users/news_test に conf というファイルを作成する。
conf
---------- ファイルの内容 ----------
INHERIT: postnews
SERVER-HOST: nntp-server
OUTPUT/Newsgroups: news_test
OUTPUT/Distribution: world
OUTPUT/Reply-To: news_test@my.dom
OUTPUT/Subject: [News-test : ${seqno}] ${subject:hc}
OUTPUT/Header: X-Seqno: ${seqno}
OUTPUT/Header: UNIX-From: ${unixfrom} ACCEPT/Max-Bytes: 50000 ## reject larger 50KB
OPTION: isn,rni,res,reb
---------- ファイルの内容 ----------

起動

delegated.sh -P25 +=smtpnntp.conf [Enter]

・フィルタ篇

私が、消化できてません。(^^;;

DeleGateを各種プロトコルのサーバとして使用する篇

まだ、使ったことがないので、 リファレンスマニュアルを参照してください

・SSL(SSLeay + sslway)篇

ここ、または、 自前の和訳
を参照してください

・SSH トンネル (Open SSH + TUNNEL)篇

ここ、または、 自前の和訳
を参照してください

・その他篇

目次


・アプリケーションレベルルータ

ROUTE を使用することで、DeleGate をアプリケーションレベルルータとして使用することができます。

構成:My-net1 からのアクセスは、Cache1に投げて、アクセス制限をかけず、
それ以外からのアクセスは、Cache2に投げて、アクセス制限をする。

          My-net2
             |
             V
My-net1 -> App-Router[8090] -> Cache2[8080] -> Lan-Servers
             |
             V
           Cache1[8080] -> FireWall-host[10080] -> Internet-Servers

approuter.conf
---------- ファイルの内容 ----------
SERVER=http
ROUTE=http://Cache1:8080/-_-*:My-net1
ROUTE=http://Cache2:8080/-_-*:!My-net1
RELIABLE=*
CACHE=no
CONNECT=d,m:*:*
---------- ファイルの内容 ----------

cache1.conf
---------- ファイルの内容 ----------
SERVER=http
RELIABLE=App-Router
CONNECT=c,d:*:*
---------- ファイルの内容 ----------

cache2.conf
---------- ファイルの内容 ----------
SERVER=http
RELIABLE=App-Router
MASTER=FireWall-host:10080
CONNECT=c,d,m:*:*
---------- ファイルの内容 ----------

firewallhost.conf
---------- ファイルの内容 ----------
SERVER=http
RELIABLE=Cache2
CACHE=no
CONNECT=d:*:*
---------- ファイルの内容 ----------

・email アドレス変換器

DeleGate の MOUNT を SERVER=smtp で指定することで、リレーサーバにアドレス変換をさせることができます。
smtp.conf
---------- ファイルの内容 ----------
SERVER=smtp://mail-server/
MOUNT=user1@hoge.ho.ge smtp://user2@hoge2.ho.ge
MOUNT=user3@hoge.ho.ge smtp://user3@hoge3.ho.ge
LOGFILE='${LOGDIR}/${PORT}/log[date+%d]'
---------- ファイルの内容 ----------

起動

delegated.sh -P25 +=smtp.conf [Enter]


・メッセージのカスタマイズ

DeleGateが表示するメッセージをカスタマイズすることができます。
DeleGateのビルトインメッセージは、/-/builtin/* にマウントされていますので、このマウントポイントを MOUNTオプションで挿げ替えます。
まず、delegate6.1.x/src/builtin ディレクトリを /usr/local/etc にコピーします。

# cp -r delegate6.1.x/src/builtin /usr/local/etc

例えば、

/usr/local/etc/builtin/mssgs ディレクトリにある、

403-forbidden.dhtml
---------- ファイルの内容 ----------
<TITLE> Forbidden </TITLE>
<H2>-- 接続が拒否されました --</H2><BR>
以下のサイトは、プロキシサーバによって、接続が拒否されました。<P>
<H3><X-D T=PROTOCOL W=SERVER>://<X-D T=HOSTPORT W=SERVER></H3><P>
情報は、プロキシサーバに記録されました。<P>
このプロキシサーバに関するお問い合わせは <BR>
-- <I><A HREF="<X-D T=ADMIN>"><X-D T=ADMIN></A></I>--<BR>
まで、お願いします。
---------- ファイルの内容 ----------
のように変更すれば、日本語でエラーメッセージが表示されます。この場合、設定ファイルに以下の行を追加して、delegated を再起動します。
MOUNT="/-/builtin/* file://usr/local/etc/builtin/*"

・アドレスフィルタ

特定のサイトにアクセスできないするようにするには、設定ファイルに以下のような行を追加します。
REACHABLE=!*.xxx.com
REACHABLE=!*.porn.com

参考にしてほしい文献:

・本家
- 本家ホームページ
- DeleGate初心者向け手引き簡略版
- DeleGateのアクセス制御について (draft-v1)
- DeleGateの動かし方・止め方
- DeleGateメーリングリスト
- プロトコル中継システムDeleGateの開発ストーリー

・和訳など
- 安定版リファレンスマニュアルの和訳
- ALPHA バージョンリファレンスマニュアルの和訳

- gateway for sftp/SSH by DeleGate の和訳
- A universal TLS gateway by DeleGate の和訳
- A universal SSL proxy by DeleGate の和訳
- Filtering HTTP headers and HTML tags by DeleGate の和訳
- ICP support in DeleGate の和訳
- SockMux -- Socket Multiplexer Protocol の和訳
- Using SSH for DeleGate tunneling の和訳
- subin/README_SUBIN の和訳

・使いかたなど
- DeleGate による簡易WebMailer for imode
- DeleGate AUTH with PAM
- DeleGate SMTP-AUTH Server
- DeleGate with gzip
- Make SSL-key for DeleGate
- DeleGate のログの意味(さっぱり未完成)


最終更新 2005/11/14  Hiroshi Suzuki <setter AT i-red DOT info>