manekineko倉金家ホームページ

趣味の部屋/サーバー構築メモ その2/メールサーバー その2

Postfix Pop-Before-SMTP

2010年10月5日(火)
メール送信の認証にPop-Before-SMTP(PBS)方式も設定してみます。今回はDracを使います。
でもCentOSにはDracはありません。もちろんpop-before-smtpもありません。RPMForgeにもないようです。


現在送信メールサーバーの認証はSMTP-AUTHが主流で、Pop-Before-SMTP(PBS)はあまり使われなくなりました。
でも懐かしのPBSもつい設定してみたくなり、時代に反するとは思いながらもやります。

代表的なソフトとしては、pop-before-smtpとDracがありますが、今回はDracで行ってみます。
昔のpop-before-smtpについてはこちら。→ pop-before-smtp/Vine4

Dracのインストール
まずはDracのインストール。でもCentOSにはDracはありません。もちろんpop-before-smtpもありません。RPMForgeにもないようです。
Drac本家(http://mail.cc.umanitoba.ca/drac/)からソースをもらってきてコンパイルしインストールしてもいいけど、できるならばrpmでいれたいところ。
で、以下の方法。あまり推奨はしないけど。

VineLinuxにはDracのrpmがありますのでこれを盗んで...じゃなかった、密かに頂いてきます。
$ cd ~/rpm/SRPMS/
$ wget http://ftp.riken.jp/Linux/vine/Vine-5.0/SRPMS/SRPMS.main/dracd-1.12-2vl5.src.rpm
$ rpm -ivh dracd-1.12-2vl5.src.rpm
ヘッダ V3 DSA signatureどうのこうのと警告が出ますが無視。(別のディストリからもってきたためだろうと。)

もしpop-before-smtpの有効時間(30分)などを変更したければ、dracとでも名前をつけてフォルダ作成し、drac.tar.Zをこの中に展開、rpc.dracd.cを編集して古いdrac.tar.Zを捨ててdrac.tar.Zを再作成しておきます。
私は有効時間を5分に変更。
ビルド
$ cd ~/rpm/SPECS/
$ rpmbuild -ba dracd.spec
エラー: ビルド依存性の失敗:
    db4-devel >= 4.6.21 は dracd-1.12-2.i386 に必要とされています
概ねVineは意外と新しいバージョンを使っています。CentOSのdb4は、4.3.29でした。
しかしどう考えてもソースのdrac.tar.Zは2003年のものだし、dbのバージョンアップに伴う修正の形跡もないので、単にビルド時のdbのバージョンを記載しただけだろうと解釈。
dracd.specのdb4バージョン指定は消去。
BuildPrereq: db4-devel >= 4.6.21 …バージョン指定は消去
Requires: db4 >= 4.6.21 …バージョン指定は消去

再度rpmbuildすると無事通って、dracdとdracd-debuginfoの2つのrpmができます。dracdのみインストール。
$ su
# rpm -ivh ~/rpm/RPMS/i386/dracd-1.12-2.i386.rpm
無事インストールされました。

Dracの設定
Dracはportmapを使うので、/etc/hosts.allowを確認し、portmapに127.0.0.1が許可されていなければ許可しておきます。

Dracはもともとsendmail用なのか、/etc/mailにファイルが作られます。(データベースファイルdracd.dbもここにつくられます。)
/etc/mail/dracd.allowを確認。
255.255.255.255 127.0.0.1
が記載されていればOK。

テストをしてみます。
$ testdrac 127.0.0.1 1.2.3.4 …1.2.3.4は適当なアドレス
$ db_dump -p /etc/mail/dracd.db
VERSION=3
format=print
type=btree …ここのtype(btree)をあとでpostfix設定に使用
db_pagesize=512
HEADER=END
1.2.3.4 …ここに打ち込んだ適当なアドレスが出ればOK
1285967787
DATA=END

ソケットの作成
次にDracとDovecotをつなぐソケットdrac.soを作成します。
Dracがすでにインストールされていることと、Dovecotのソースが必要です。

dovecotのsrc.rpmを取得、ソースをインストールし展開とパッチ適用。
$ wget http://ftp.riken.jp/Linux/centos/5/os/SRPMS/dovecot-1.0.7-7.el5.src.rpm
$ mv ~/dovecot-1.0.7-7.el5.src.rpm ~/rpm/SRPMS/
$ cd ~/rpm/SRPMS/
$ rpm -ivh ./dovecot-1.0.7-7.el5.src.rpm
$ cd ~/rpm/SPECS/
$rpmbuild -bp dovecot.spec

~/rpm/BUILD/にdovecot-1.0.7ができています。
dovecotソースの準備完了。

今度はhttp://www.dovecot.org/patches/より1.0/drac.cをダウンロード。(現行dovecotバージョンは1.0.7なので。)
ダウンロードした drac.c を ~/rpm/BUILD/に移動。
$ wget http://www.dovecot.org/patches/1.0/drac.c
$ mv ~/drac.c ~/rpm/BUILD/

dovecotのソースのありかを教えてコンパイル。詳細はdrac.cに書いてあります。
$ cd ~/rpm/BUILD/
$ export dovecot=~/rpm/BUILD/dovecot-1.0.7
$ gcc -Wall -W -shared -fPIC -DHAVE_CONFIG_H -I$dovecot -I$dovecot/src/lib drac.c -o drac.so -ldrac

~/rpm/BUILD/にソケットファイルdrac.soができていますので、
/usr/lib/dovecot/pop3/ にコピー。
$ su
# cp drac.so /usr/lib/dovecot/pop3/

Dovecotの設定
/etc/dovecot.confを編集

まずそのままだとDovecotはipv6アドレスを使いますがDracはipv6は理解しないようです。Dovecotにipv4を強制します。(ipv6を使うという人はパッチ当てか何か必要。)
listenのところを
listen = * …ipv4のみの指定

さらにprotocol pop3 { }の中に以下を記載。
mail_plugins = drac
mail_plugin_dir = /usr/lib/dovecot/pop3

注意:
protocol imap { }にこれを記載するとなぜか起動せず、
EDRAC: net_ip2addr() failed: Operation not permitted
というエラーが出ます。

Postfixの設定
/etc/postfix/main.cfのsmtpd_recipient_restrictionsの部分に追加
smtpd_recipient_restrictions =
 permit_mynetworks,
 check_recipient_access hash:/etc/postfix/access,
 check_client_access btree:/etc/mail/dracd,
 permit_sasl_authenticated,
 ......
これは permit_sasl_authenticatedの前に入れる必要があります。saslを先にするとPBSの前にパスワードを要求されてしまうからです。

最後にdracdを起動し、起動設定もしておきます。
# service dracd start
# chkconfig dracd on
さらにdovecot, postfixを再起動
# service dovecot restart
# service postfix restart
実際にメールを送信してみて確認し、完了。