こんばんは、牧野です。
 4月下旬から3週間ほど、ヨーロッパに行っていました。初めての海外一人旅で、
 ドイツ(フランクフルト、マイセン、ドレスデン)
 チェコ(プラハ)
 オーストリア(ウィーン)
 イタリア(ローマ)
 フランス(パリ、モンサンミシェル)
 イギリス(ロンドン)
 と回ってきたのですが、どこもそれぞれがいいところで…将来ヨーロッパで生活したくなりました!
 下の写真はモンサンミシェルです。夕焼けなのに、夜の9時半くらいです。
 
 さて、今日はDeleGateを使ってメール送信を中継するやり方を紹介します。
 DeleGateは、メール送信に限らず、様々な通信、プロトコルを中継するプロキシ機能を持つソフトウェアです。
 今回は、メールサーバー -> DeleGate -> 外部 という形で、メールサーバーから外部にメール送信する場合にdelegateをはさむようにすることを考えます。
 こうすると、外部に送信するメールをDeleGateで限定することができ、開発環境から不用意に外部にメール送信されないようにしたい場合などに便利です。
 ■DeleGateのインストール
 DeleGateのサイトからソースをダウンロードしてmakeします。
 (サーバーはCentOSを使用しています。)
tar xzf delegate9.9.7.tar.gz
cd delegate9.9.7
make
これで、src内にdelegatedが作成されるので、/usr/local/sbin等にコピーして使用します。
 ■DeleGateの起動
 delegated に適宜必要なオプションを追加して実行します。
メール送信の中継では、
/usr/local/sbin/delegated -P2525 SERVER=smtp
のようにオプションを指定してdelegatedを実行します。
 -Pで待ち受けポート番号、SERVERでプロトコルを指定しています。
 メールサーバー側では、DeleGateを動かしているサーバー、-Pで指定したポートを経由するようにします。
 postfixの場合では、例えば
/etc/postfix/main.cf
...
relayhost = xxx.xxx.xxx.xxx:2525
...
のように、relayhostで指定できます。
 ■アドレスを指定して送信制御する
 ・特定アドレス宛のメールはそのまま送信する。
MOUNT="aaaaa@asial.co.jp smtp://aaaaa@asial.co.jp"
・特定アドレス宛のメールを別のアドレスに転送する
MOUNT="xxxxx@asial.co.jp smtp://yyyyy@asial.co.jp"
 ・特定アドレス宛のメールを別のアドレスに転送する(まとめて指定)
 ...@... .asial.co.jpのメールを全てzzzzz@asial.co.jpに
MOUNT="*%S@%S.asial.co.jp smtp://zzzzz@asial.co.jp" 
*%を書くと、その部分でscanfに似た書き方で複数マッチングが使えるようになります。上の例の「%S@」は、(@以外の文字列)@を、「%S.」は(.以外の文字列).を表します。
・デフォルトで送信しない
MOUNT="* smtp://-"
 MOUNTオプションは複数指定できて、上から適用されていきます。
 これで、アドレスに応じて自由にメール送信可否、転送先を指定できます。
 ■delegatedの停止、再起動
 delegatedのプロセス番号を指定してkillしても止められますが、停止は
delegated -P2525 -Fkill
再起動は
delegated -P2525 -Fkill -HUP
でできます。
 ■その他
 ・ログの指定
 CentOS、Debianにインストールすると、デフォルトでは
 /var/spool/delegate-nobody/log
 ディレクトリ内にログが格納されますが、LOGDIRオプションを指定すれば変更できます。
LOGDIR=/var/log/delegate
 ・設定ファイルにまとめる
 設定が長くなったらファイルにまとめる方がいいと思います。
/etc/delegate.conf
-P2525
SERVER=smtp
MOUNT="aaaaa@asial.co.jp smtp://aaaaa@asial.co.jp"
MOUNT="*%S@%S.asial.co.jp smtp://zzzzz@asial.co.jp" 
MOUNT="* smtp://-"
LOGDIR=/var/log/delegate
起動時は、以下のように設定ファイルを指定します。
/usr/local/sbin/delegated +=/etc/delegate.conf
 今回はSMTPの中継を紹介しましたが、DeleGateには本当に色んな機能があります。
 皆さんも機会があったら使ってみて下さい。