tec memo

メモです。

pmilterの導入

概要

pmilter

PmilterはProgrammable Mail Filterの略で、SMTPサーバ(送信や受信)とmilterプロトコルで通信し、SMTPサーバの送受信の振る舞いをRubyでコントロールできるサーバソフトウェアです。

ref: Pmilter: Programmable Mail Filter Serverを作った

rubyで自分の思い通りに制御できるところが素晴らしいなと思い、試してみる。

環境構築にあたっては、 pmilter + postfixでプログラマブルなSMTPサーバを作る(入門編) を参照するとして、私は補足を。

環境

OS, centos7
MTA, postfix3.1

補足

postfix3.1が最新のステーブルだがBaseのリポジトリにはないので、gfさんのリポジトリを利用させていただいた。 また、postfix2系がすでに入っていると、競合してインストール出来ないので、postfix2をアンインストールしたのちにpostfix3を入れる。

rpm -ivh http://mirror.symnds.com/distributions/gf/el/7/gf/x86_64/gf-release-7-10.gf.el7.noarch.rpm
yum remove postfix
yum --enablerepo=gf-plus install postfix3

pmilter導入

pmilter を socket を利用して起動するもプロンプトがすぐに返ってきた。

sudo -u postfix ./pmilter -c pmilter.conf

/var/log/messages に以下エラー。

Jan  5 19:11:58 localhost pmilter: pmilter: Unable to bind to port /var/spool/postfix/pmilter/pmilter.sock: Permission denied
Jan  5 19:11:58 localhost pmilter: pmilter: Unable to create listening socket on conn /var/spool/postfix/pmilter/pmilter.sock

/var/spool/postfix/pmilter/ がroot権限で作成されていたため、権限がないというエラーになっていた

chown postfix: /var/spool/postfix/pmilter

再度実行し、うまく起動した。

動作確認

動作確認にはpostfixに付属でついているsmtp-sourceを利用。

smtp-source -s1 -m1 -l 1024 -f test@example.com -t src@example.com -S "test mail" 127.0.0.1

pmilterでログが正常に出力された

[root@localhost pmilter]# sudo -u postfix ./pmilter -c pmilter.conf
[Thu, 05 Jan 2017 12:54:55 GMT][notice]: pmilter/0.0.1 starting
hello pmilter handler called from pmilter
client ipaddr 127.0.0.1
client hostname localhost
client daemon localhost.localdomain
handler phase name: mruby_connect_handler
helo hostname: localhost.localdomain
tls client issuer:
tls client subject:
tls session key size:
tls encrypt method:
tls version:
env from from args: <test@example.com>
env from from symval: test@example.com
SASL login name:
SASL login sender:
SASL login type:
env to from arg: src@example.com
env to from symval: src@example.com
header: {"From"=>"<test@example.com>"}
header: {"To"=>"<src@example.com>"}
header: {"Date"=>"Thu,  5 Jan 2017 21:55:05 +0900 (JST)"}
header: {"Message-Id"=>"<3244.0003.0000@localhost.localdomain>"}
header: {"Subject"=>"test mail"}
body chunk; 1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
6XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
myhostname: localhost.localdomain
message_id: DD58741B34FC
reveive_time: Thu Jan 05 21:55:05 2017
add_header(X-Pmilter:True): Enable