DelegateによるFTP/SMTP/POPプロキシの構築

ソースコードの入手〜コンパイル

公式から落としてきてmake

wget ftp://ftp.delegate.org/pub/DeleGate/delegate9.8.1.tar.gz
tar zxvf delegate9.8.1.tar.gz
cd delegate9.8.1
make

インストール

srcの中にdelegatedってのが出来てるので適当なところにコピー。

cp src/delegated /usr/sbin

ついでにいくつかディレクトリをつくってやる。
ログは/var/logにまとめておきたいのでシンボリックリンクを使った。

mkdir -p /var/delegate/log
chown -R nobody:nobody /var/delegate/log
ln -s /var/delegate/log /var/log/delegate
mkdir /etc/delegate

設定

FTP/SMTP/POPそれぞれに設定ファイルを作っておいた。
ここでは仮に FTP/SMTP/POPサーバ 192.168.1.2 とした。
/etc/delegate/ftp.conf

-P21
SERVER=ftp
RELIABLE=192.168.1.0/24
LOGFILE=/var/log/delegate/ftp.log
PROTOLOG=''
MOUNT="/* ftp://192.168.1.2/*"

/etc/delegate/pop.conf

-P110
SERVER=pop://192.168.1.2
REACHABLE=192.168.1.0/24
RELIABLE="*"
LOGFILE=/var/log/delegate/pop.log
PROTOLOG=''

/etc/delegate/smtp.conf

-P25
SERVER=smtp://192.168.1.2
REACHABLE=192.168.1.0/24
RELIABLE="*"
LOGFILE=/var/log/delegate/smtp.log
PROTOLOG=''

起動スクリプトをつくる

プロトコル毎に起動スクリプトをつくったり、それを実際に使ったりするのはめんどくさかったので、1つのスクリプトで済むようにしてみた。ただ、これだと設定を変更したり追加したりしたとき、全部再起動することになるのでそれだと困る場合は設定ファイル毎に書いた方が良いと思う。

vi /etc/init.d/delegated
chmod 700 delegated
#!/bin/sh
#
# chkconfig: 35 90 10
# description: delegated ftp proxy
# processname: delegated
# config: /etc/delegate/*.conf

DELEGATE=/usr/sbin/delegated
CONFDIR=/etc/delegate
DGROOT=/var/delegate

if [ ! -x $DELEGATE ]; then
    echo -n $"$DELEGATE does not exist."; warning; echo
    exit 0
fi

if [ ! -r $CONFDIR ]; then
    echo -n $"$CONFDIR does not exist."; warning; echo
    exit 0
fi

RETVAL=0

start() {
        echo -n $"Starting up Http DeleGate daemon: "
        for CONFIG in $CONFDIR/*.conf ; do
          $DELEGATE DGROOT=$DGROOT +=$CONFIG
          echo
        done
        return 0
}

stop() {
        echo -n $"Shutting down Http DeleGate daemon: "
        for CONFIG in $CONFDIR/*.conf ; do
          $DELEGATE DGROOT=$DGROOT +=$CONFIG -Fkill
          echo
        done
        return 0
}

restart() {
        stop
        start
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit 0

サービス起動

service delegated start
chkconfig delegated on

logrotateの設定

vi /etc/logrotate.d/delegate
/var/log/delegate/ftp.log  /var/log/delegate/pop.log  /var/log/delegate/smtp.log /var/log/delegate/errors.log  /var/log/delegate/stdout.log /var/log/delegate/0 {
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
        copytruncate
        create 0600 root:root
}