アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

DeleGateを使った送信メールのフィルタリング

こんばんは、牧野です。

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

でできます。


■その他
・ログの指定
CentOSDebianにインストールすると、デフォルトでは
/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には本当に色んな機能があります。
皆さんも機会があったら使ってみて下さい。