Solaris で qpopper
POP とは
POP は、要求に応じてメールスプールからメールをクライアントに配送する仕組みである。 sendmail を動かしていないマシンでメールを読むために使う。 Thunderbird, Outlook, Becky! などの PC のメールクライアントが対応している。
ここでは qpopper を使う。qpopper は APOP に対応している。
qpopper の保守状況
qpopper の最終版は 4.1.0 (2011 年)で、開発は終了している。 セキュリティ修正が提供されないため、新規に POP/IMAP サーバを構築するときは、 保守が継続している Dovecot(現在の安定版は 2.4 系)を使う。 Dovecot は POP3 と IMAP の両方に対応し、mbox 形式と Maildir 形式を扱える。 既存の qpopper を使い続ける場合も、Dovecot への置き換えを計画する。
qpopper の配布元であった Qualcomm のサイトは閉鎖されている。 ソースは Ring Server などのミラーから取得する。
- qpopper-4.1.0.tar.gz
make と install
旧バージョンの qpopper があるときのバックアップ
POP の認証情報が入った /etc/pop.auth と、既存の実行ファイルをバックアップする。
cp /etc/pop.auth /etc/pop.auth.BAK chmod 600 /etc/pop.auth.BAK cp /usr/local/sbin/popauth /usr/local/sbin/popauth.BAK cp /usr/local/sbin/popper /usr/local/sbin/popper.BAK
実行ファイルのオーナーとモードは次のようになっている。popauth は setuid されている。
cd /usr/local/sbin ls -la pop* -rws--x--x 1 pop pop .... popauth -rwxr-xr-x 1 pop pop .... popper
インストールの前に必要な設定
qpopper の管理用に pop というユーザとグループを作る。 ユーザ ID とグループ ID は 110 とする。
groupadd -g 110 pop useradd -u 110 -g pop -d /tmp -s /bin/sh -c "POP USER" pop
作成後、/etc/passwd と /etc/group に次のエントリができていることを確認する。
/etc/passwd pop:x:110:110:POP USER:/tmp:/bin/sh /etc/group pop::110:
gdbm のインストール
qpopper の認証データベースで使う GNU gdbm を、qpopper より先にインストールする。 現在のバージョンは 1.26 である。
gzip -d gdbm-1.26.tar.gz tar -xvf gdbm-1.26.tar cd gdbm-1.26 ./configure make make install
qpopper のインストール
gzip -d < qpopper-4.1.0.tar.gz | gtar -xvf - cd qpopper-4.1.0 ./configure --enable-specialauth --enable-apop=/etc/pop.auth --with-popuid=pop --with-openssl=/usr # Solaris 10 で OpenSSL が /usr/sfw にあるときは # ./configure --enable-specialauth --enable-apop=/etc/pop.auth --with-popuid=pop --with-openssl=/usr/sfw gmake gmake install cd /usr/local/sbin chown pop:pop popauth chown pop:pop popper chmod 4711 popauth cd /usr/sbin rm -f popauth popper ln -s /usr/local/sbin/popauth popauth ln -s /usr/local/sbin/popper popper chown pop:pop /etc/pop.auth chmod 600 /etc/pop.auth
configure の主なオプションは次の通りである。
- --enable-apop: 認証ファイル(pop.auth)の場所を指定する
- --with-popuid: qpopper の管理用アカウントを指定する
- --with-openssl: OpenSSL のインストール先を指定する。TLS を使うために指定する
gdbm を使うかどうかは configure 時に決まる。 既存の pop.auth を別のマシンから移して使うときは、 make 時のオプションを一致させる。オプションが違うと pop.auth が読めない。
インストールが終わると、インストール場所と pop.auth の場所が表示されるので確認する。
Installed popauth as /usr/local/sbin/popauth with uid pop POP authentication DB not initialized (exists): /etc/pop.auth
設定
/etc/inet/inetd.conf に次のエントリを加える。 /usr/local/sbin/popper の箇所は、popper のインストール先に合わせて変更する。
pop3 stream tcp nowait root /usr/local/sbin/popper popper -s
/etc/services に次の1行が入っていることを確認する。
pop3 110/tcp # Post Office Protocol - Version 3
TLS を使う(POP3S)ときは、次の1行も確認する。
pop3s 995/tcp # POP3 over TLS
POP3 は認証情報とメール本文を平文で流すため、 TLS を使う設定を推奨する。
Solaris 10 以降の場合
inetconv を実行して、inetd.conf のエントリを SMF のサービスに変換する。
inetconv
変換後、サービスの状態を確認する。
inetadm | grep pop3
inetd.conf を再度変更したときは、次のコマンドで再変換する。
inetconv -i /etc/inet/inetd.conf
Solaris 9 あるいはそれ以前の場合
inetd を再起動する。
kill -HUP `pgrep inetd`
テスト
POP サーバ上でテストする。
まず、テスト用のメールを送る。hoge の箇所は、送りたい相手先に読み替える。
echo popper test mail | mailx -s subject hoge
次に、POP サーバに接続して、メールを取得できるかを確認する。 APOP で使うパスワードは、サーバが返すバナー内のタイムスタンプと共有パスワードを連結して MD5 でハッシュした値である。メールクライアントがこの計算を行う。
% telnet popserver 110 Trying 133.5.18.yyy... Connected to popserver. Escape character is '^]'. +OK Qpopper (version 4.1.0) at popserver starting. (<xxxxxxxxxxxxx@popserver>) APOP hoge 「MD5 で計算した値」 +OK hoge has xxx visible message ... LIST <-- メールの一覧の表示 +OK 1 visible messages (xxxx octets) 1 xxxx . RETR 1 <-- メールの取得 Received: from xxxxxxxx (xxxxxxxx) by xxxxxxxx (xxxxxx) with internal id xxxxxxx; <--- ここにメールの本文が表示される ---> QUIT <-- 接続の終了 +OK Pop server at popserver signing off. Connection closed by foreign host.
TLS の設定を行ったときは、次のコマンドで接続を確認する。
openssl s_client -connect popserver:995
運用
ユーザの POP パスワードを設定する。 これは UNIX のパスワードとは別のパスワードを設定する。
# popauth -user hoge Changing POP password for hoge. New password: ************* Retype new password: **************
一般のユーザがパスワードを変更するときは、サーバにログインして popauth を実行する。
hoge@popper[~]% popauth Changing only APOP password for hoge. Old password: ************* New password: ************** Retype new password: **************
ユーザの登録を取り消すときは -delete オプションを使う。
# popauth -delete hoge
APOP 認証を設定したユーザは APOP でしか認証できないため、 メールクライアントは APOP に対応しているものを使う。 なお、APOP は MD5 を使う古い認証方式であり、対応するメールクライアントは減っている。 TLS 上での通常のパスワード認証(POP3S)に移行することを検討する。
セッションが正常に終了せず、popper のプロセスが残ることがある。 このときは、そのプロセスを終了させる。
popper は inetd が接続要求のあったときに起動するため、 接続がないときは ps に現れない。 プロセスを終了させても、次の接続要求で inetd が popper を起動する。