Asial Blog

Recruit! Asialで一緒に働きませんか?

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

カテゴリ :
バックエンド(インフラ)
タグ :
Tech
こんばんは、牧野です。

4月下旬から3週間ほど、ヨーロッパに行っていました。初めての海外一人旅で、
ドイツ(フランクフルト、マイセン、ドレスデン)
チェコ(プラハ)
オーストリア(ウィーン)
イタリア(ローマ)
フランス(パリ、モンサンミシェル)
イギリス(ロンドン)
と回ってきたのですが、どこもそれぞれがいいところで…将来ヨーロッパで生活したくなりました!
下の写真はモンサンミシェルです。夕焼けなのに、夜の9時半くらいです。



さて、今日はDeleGateを使ってメール送信を中継するやり方を紹介します。
DeleGateは、メール送信に限らず、様々な通信、プロトコルを中継するプロキシ機能を持つソフトウェアです。
今回は、メールサーバー -> DeleGate -> 外部 という形で、メールサーバーから外部にメール送信する場合にdelegateをはさむようにすることを考えます。
こうすると、外部に送信するメールをDeleGateで限定することができ、開発環境から不用意に外部にメール送信されないようにしたい場合などに便利です。


■DeleGateのインストール
DeleGateのサイトからソースをダウンロードしてmakeします。
(サーバーはCentOSを使用しています。)
  1. tar xzf delegate9.9.7.tar.gz
  2. cd delegate9.9.7
  3. make
これで、src内にdelegatedが作成されるので、/usr/local/sbin等にコピーして使用します。


■DeleGateの起動
delegated に適宜必要なオプションを追加して実行します。

メール送信の中継では、
  1. /usr/local/sbin/delegated -P2525 SERVER=smtp
のようにオプションを指定してdelegatedを実行します。
-Pで待ち受けポート番号、SERVERでプロトコルを指定しています。

メールサーバー側では、DeleGateを動かしているサーバー、-Pで指定したポートを経由するようにします。
postfixの場合では、例えば

/etc/postfix/main.cf
  1. ...
  2. relayhost = xxx.xxx.xxx.xxx:2525
  3. ...
のように、relayhostで指定できます。


■アドレスを指定して送信制御する
・特定アドレス宛のメールはそのまま送信する。
  1. MOUNT="aaaaa@asial.co.jp smtp://aaaaa@asial.co.jp"
・特定アドレス宛のメールを別のアドレスに転送する
  1. MOUNT="xxxxx@asial.co.jp smtp://yyyyy@asial.co.jp"

・特定アドレス宛のメールを別のアドレスに転送する(まとめて指定)
...@... .asial.co.jpのメールを全てzzzzz@asial.co.jp
  1. MOUNT="*%S@%S.asial.co.jp smtp://zzzzz@asial.co.jp" 

*%を書くと、その部分でscanfに似た書き方で複数マッチングが使えるようになります。上の例の「%S@」は、(@以外の文字列)@を、「%S.」は(.以外の文字列).を表します。

・デフォルトで送信しない
  1. MOUNT="* smtp://-"

MOUNTオプションは複数指定できて、上から適用されていきます。
これで、アドレスに応じて自由にメール送信可否、転送先を指定できます。

■delegatedの停止、再起動
delegatedのプロセス番号を指定してkillしても止められますが、停止は
  1. delegated -P2525 -Fkill
再起動は
  1. delegated -P2525 -Fkill -HUP
でできます。


■その他
・ログの指定
CentOS、Debianにインストールすると、デフォルトでは
/var/spool/delegate-nobody/log
ディレクトリ内にログが格納されますが、LOGDIRオプションを指定すれば変更できます。
  1. LOGDIR=/var/log/delegate

・設定ファイルにまとめる
設定が長くなったらファイルにまとめる方がいいと思います。

/etc/delegate.conf
  1. -P2525
  2. SERVER=smtp
  3. MOUNT="aaaaa@asial.co.jp smtp://aaaaa@asial.co.jp"
  4. MOUNT="*%S@%S.asial.co.jp smtp://zzzzz@asial.co.jp" 
  5. MOUNT="* smtp://-"
  6. LOGDIR=/var/log/delegate

起動時は、以下のように設定ファイルを指定します。
  1. /usr/local/sbin/delegated +=/etc/delegate.conf

今回はSMTPの中継を紹介しましたが、DeleGateには本当に色んな機能があります。
皆さんも機会があったら使ってみて下さい。