ライン

ポイント:日本ではいまだに残るSMTPの認証方式

ライン

 はじめに

mail/drac

 DRACは Dynamic Relay Authorization Control の略。
 この認証は、POP3で受信を行えた後の一定時間に、SMTP送信を行うことができる認証方式(POP3事前認証)です。
マイクロソフトの電子メールソフトには、これに対応したものがありません。セキュリティとしては高くないのが理由で、NAT環境の下で実施した場合には、そのクライアントはその時間帯すべて通り抜けてしまいますし。
 将来的には、なくなる方向の認証方式かも知れません。

 以下、DRACを利用したPOP3事前認証、いわゆる POP before SMTPの実現方法です。FreeBSD 9.1での例です。

 導入と設定

導入

 早速、導入を開始します。portsから導入を行います。

# cd /usr/ports/mail/drac
# make install clean

 drac-1.12_8が導入されました。

 では、以下は設定を開始です。
/etc/rc.conf に以下を追加しておきます。

dracd_enable="YES"
dracd_flags="-i -e 15"
rpcbind_enable="YES"
rpcbind_flags="-s"

 次に、/etc/hosts.allow に必要な追加を行います。

rpcbind : localhost : allow
rpcbind : ALL : deny

 /usr/local/etc/dracd.allow に以下を加えます。

# cp /usr/local/etc/dracd.allow-sample /usr/local/etc/dracd.allow

内容は単純に以下の通り。

255.255.255.255 127.0.0.1

これで終了。2つのスクリプトを実行して開始しましょう。

# /etc/rc.d/rpcbind start
# /usr/local/etc/rc.d/dracd start
設定ファイルの作成 (/etc/mail)

 さて、毎度の /etc/mail 以下の設定を先に加えておくことにします。
要するに、sendmail側の設定です。

LOCAL_CONFIG
Kdrac btree /usr/local/etc/dracd
LOCAL_RULESETS
SLocal_check_rcpt
R$*                             $: $&{client_addr}
R$+                             $: $(drac $1 $: ? $)
R?                              $@ ?
R$+                             $@ $#OK

を、HOSTNAME.example.ne.jp.mc に相当するファイルの最終行近くに追加します。
広くスペースが空いている部分はスペースではなく、タブで行うこと。

# make cf install all
# make restart

 これで反映されました。

# chmod 600 /usr/local/etc/dracd.db

POP3サーバ

 今回も、mail/qpopper を例にその例を記述します。
DRAC対応しているPOPサーバが多いので苦労することは少ないと思います。

# cd /usr/ports/mail/qpopper
# make config

でオプションを決めます。

という状態で表示されてきたと思います。
DRAC PAM SAMPLE_POPUSERS SHY_ENABLEDはonにして入れることにします。

# make WITHOUT_IPV6=yes clean install

として導入を行いました。うちの環境は IPv6までのセキュリティを確保できていないので、ポリシーとしてはIPv6を使わない、がベース。
来るべき時には、全部見直しになるでしょうけれど。

 /etc/inetd.conf に修正を加えます。

pop3    stream  tcp     nowait  root    /usr/local/libexec/qpopper -s -T 300 -R -t /var/log/qpopper.log qpopper
pop3s   stream  tcp     nowait  root    /usr/local/libexec/qpopper -s -f /usr/local/etc/qpopper.config  qpopper

のように。
/etc/hosts.allowに

qpopper: .example.ne.jp,\
        127.0.0.1,\
        .example.com : allow
qpopper : ALL : deny

のように制限をいれました。

 この辺りはご自由に範囲を決めてください。設定を加えなければ、そのままで動きます。

# /usr/local/libexec/qpopper -v
Qpopper version 4.0.9 (non-standalone)
# cd /usr/local/etc/qpopper
# qapopauth -initqapopauth -user foo
Adding only APOP password for foo.
New password:******** (実際には非表示)
Retype new password:********

こんな流れで APOPユーザが必要であれば追加しましょう。

 今回は、fetchmailに関する記述は割愛します。
設定ファイルのサンプルをコピーするようにオプションを設定したので、

# cp /usr/local/etc/qpopper.config.sample /usr/local/etc/qpopper.config

として設定ファイルを生成。実際に修正したのは以下のような感じにしてみました。

# grep -v "^#" qpopper.config | grep -v '^$'
set clear-text-password         = ssl
set reverse-lookup              = false
set timeout                     = 60
set tracefile                   = /var/log/qpoppers.log
set tls-support                 = alternate-port
set tls-private-key-file        = /etc/mail/certs/privkey.pem
set tls-server-cert-file        = /etc/mail/certs/cert.pem
set shy                         = tule

 上記、TLSによる通信の部分で、まだ作業が残ってしまいました。
キーの生成をしておきましょう。(POP3のみでいい方は、上記を含め不要な作業なので気にしないでください)

# cd /etc/mail && mkdir certs
# chmod 700 certs
# cd certs/
# openssl req -new -x509 -nodes -out cert.pem
Generating a 1024 bit RSA private key
...++++++
.........++++++
writing new private key to 'privkey.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:TOKYO
Locality Name (eg, city) []:SHINJUKU
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example.ne.jp
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:pop.example.ne.jp
Email Address []:
# ls -la
-rw-r--r--  1 root  wheel  1111 Feb 22 11:59 cert.pem
-rw-r--r--  1 root  wheel   887 Feb 22 11:59 privkey.pem
# chmod 600 *

などという流れでファイルを生成しておきます。

 inetd を有効にするためには、/etc/rc.conf に inetd_enable="YES" が入っていることを確認してください。

 内容を反映するために、startなり restartなりを入れて実施しましょう。

# /etc/rc.d/inetd restart
Stopping inetd.
Starting inetd.

のように、動き出しました。

 後は、POP系で受信した後に、SMTPが送信できるようになったことを試してみてください。

【改訂履歴】作成:2009/02/21
2009/06/02 … Namazu検索の窓を追加
【参考リンク】
Dynamic Relay Authorization Control - 動的なメール中継認証機能 … DRACのオフィシャルページ

Copyright © 1996,1997-2006,2007- by F.Kimura,