(作成:2006/03)
QpopperはMailbox形式のPOPサーバの一つ。よく知られたPOPサーバのなかだと、APOPだのPOP3sだのの設定の組み合わせが可能なパッケージはこれが最多じゃないかな。
ただ、QpopperではMailbox形式のみ対応なので、スプールファイルがちょっと壊れただけで全てのスプールされてるメールが破壊、なんて欠点がある。 Courier-IMAPなんかのMaildir/形式を用いればこの問題は解決するんだけど、逆にこっちは設定の組み合わせが豊富でない。
今回はセキュアなアクセスを実現する手段が豊富なQpopperについての備忘録。
Install on Vine
ここではサーバのホスト名 mail
、ドメイン名 hyakki.local
として話を進める。(FQDN: mail.hyakki.local)
POP/SSLによるアクセス設定を実現するために、一旦 src.rpm
からリビルドする必要がある。 ビルド環境の構築については拙サイト「Vine - パッケージのリビルド」参照。
src.rpm
を取得。
$ apt-get source qpopper
...
以下のコマンドで一時的に展開し、spec
ファイルを書換える。必要なのは --with-openssl
の記述。
$ rpm -Uvh qpopper-4.0.5-0vl2.src.rpm
...
#### ~/rpm/SPECS/qpopper.spec
...
%build
...
--with-popuid=pop \
--enable-apop=/etc/pop.auth \
--with-openssl
...
パッケージのリビルド。
$ rpm -bb rpm/SPECS/qpopper.spec
...
このリビルドでは、あらかじめ gdbm-devel
pam-devel
openssl-devel
のパッケージが必要。
# apt-get install gdbm-devel pam-devel openssl-devel
...
出来上がったパッケージをインストール。
# rpm -Uvh rpm/RPMS/i386/qpopper-4.0.5-0vl2.i386.rpm
...
設定
POP3サーバにする
qpopperはスーパーサーバとして起動するんで、 inetd
等のパッケージが必要。 導入されてなかったら apt-get
でインストール。
# apt-get install inetd
...
/etc/inetd.conf
に設定を施して再起動すれば良い。
#### /etc/inetd.conf
pop-3 stream tcp nowait root /usr/sbin/tcpd in.qpopper
# /etc/init.d/inet restart
もし inetd
が導入済でTCP-wrapperを掛けとるなら、 /etc/hosts.allow
も修正。
#### /etc/hosts.allow
in.qpopper : ALL
ここで一旦動作チェック。以下のように外部から telnet
で接続してみる。POP3サーバにする場合、特に設定変更はせずともOK。
例えばPostfixで紹介したようなやり方で既にメールを送信済みなら、rootアカウント宛へこんな風にメールが届いてるのがわかる。
# telnet mail.hyakki.local 110
Trying ***.***.***.***...
Connected to mail.hyakki.local.
Escape character is '^]'.
+OK Qpopper (version 4.0.5) at mail.hyakki.local starting. <917.1140427984@mail.hyakki.local>
USER riyo
+OK Password required for riyo.
PASS (パスワード)
+OK riyo has 1 visible message (0 hidden) in 640 octets.
LIST
+OK 1 visible messages (640 octets)
1 640
.
RETR 1
+OK 602 octets
Return-Path: <riyo@hyakki.local>
X-Original-To: root@hyakki.local
Delivered-To: root@hyakki.local
Received: from hyakki.local (mail.hyakki.local [192.168.1.1])
by mail.hyakki.local (Postfix) with SMTP id E20DCE5406F
for <root@hyakki.local]>; Mon, 20 Feb 2006 19:05:36 +0900 (JST)
Message-Id: <20060220100536.E20DCE5406F@mail.hyakki.local>
Date: Mon, 20 Feb 2006 19:05:36 +0900 (JST)
From: riyo@hyakki.local
To: undisclosed-recipients:;
X-UIDL: ATT"!c-W"!dK^!!n-E"!
Viva la raza!
.
QUIT
+OK Pop server at mail.hyakki.local signing off.
Connection closed by foreign host.
$
POPAuthサーバにする
APOPユーザの作成
まずは以下のコマンドでAPOPを初期化。
# popauth -init
APOPユーザの作成。
# popauth -user riyo
New password:
Retype new password:
ここでもう一度動作確認。外部から telnet
で接続し、今度はエラーで弾かれる。
$ telnet mail.hyakki.local 110
Trying 192.168.1.1...
Connected to mail.hyakki.local.
Escape character is '^]'.
+OK Qpopper (version 4.0.5) at mail.hyakki.local starting. <1045.1140428612@mail.hyakki.local>
USER riyo
-ERR [AUTH] You must use stronger authentication such as AUTH or APOP to connect to this server
POP/SSL設定
証明書の作成
証明書作成の詳細は拙サイト「OpenSSL」参照。
下準備はRPMのリビルドで済んどるとして、まずは証明書の設置場所を作成。
# mkdir /etc/mail
# mkdir /etc/mail/certs
# chown root:mail /etc/mail/certs
# chmod 660 /etc/mail/certs
オレオレ証明書を作成。
# openssl req -new -nodes -out /etc/mail/certs/req.pem -keyout /etc/mail/certs/cert.pem
...
一応、オプションの意味は以下の通り。
オプション | 意味 |
---|---|
req |
証明書要求ファイルを作成。 |
-new |
新規に証明書要求ファイルを作る。 |
-nodes |
秘密鍵を暗号化しない。 |
-out ... |
CSRファイル名の指定。 |
-keyout ... |
秘密鍵ファイル名の指定。 |
以下、質問に対する返答について簡単に。空欄のものについては記入しない。
Country Name : (住んでる国)
State or Province Name : (住んでる都道府県)
Locality Name : (住んでる市区郡)
Organization Name : (仕事場の名前)
Organization Unit Name :
Common Name : mail.hyakki.local
Email Address : root@mail.hyakki.local
A challenge password : ********
An optional company name : ********
証明書ファイルの権限変更。
# chmod 600 /etc/mail/certs/cert.pem
# chown root:0 /etc/mail/certs/cert.pem
本当ならここで出来た req.pem
を認証機関に送付して認証して貰う。でもここでは証明書に対し自称することにしよう。オレだよオレオレ。 問われるパスフレーズについてはお好きなように。
# openssl genrsa -des3 -out ca.key 1024
...
オプションの意味は以下の通り。
オプション | 意味 |
---|---|
genrsa |
RSA形式の秘密鍵作成。 |
-des3 |
DES3暗号化方式を用いる。 |
-out ... |
秘密鍵ファイル名の指定。 |
1024 |
1024bitで秘密鍵を作る。 |
最初に問われるパスフレーズについては直上で入力したものを。以降の質問は証明書作成時と同様に。
# openssl req -new -x509 -days 365 -key ca.key -out ca.crt
...
オプションの意味は以下の通り。
オプション | 意味 |
---|---|
-x509 |
X.509形式の証明書要求ファイルを作成する。 |
-days ... |
証明書の有効期限。 |
-key ... |
出力する秘密鍵の指定。 |
-out ... |
CSRファイル名の指定。 |
再びこのコマンドによりパスフレーズを入力、先に作成したcert.pemと結合して出来上がり。
# openssl x509 -req -CA ca.crt -CAkey ca.key -days 365 -in req.pem -out signed-req.pem -CAcreateserial
...
# cat signed-req.pem >> cert.pem
オプションの意味は以下の通り。
オプション | 意味 |
---|---|
x509 |
X.509証明書の署名要求の作成。 |
-req |
証明書要求から証明書を作成。 |
-CA ... |
入力するCSRファイルの指定。 |
-CAkey ... |
入力する秘密鍵の指定。 |
-in ... |
入力する証明書ファイルの指定。 |
-out ... |
出力する証明書ファイルの指定。 |
-CAcreateserial |
証明書のシリアルナンバーを格納するファイルを作成。 |
認証設定
最後にQpopperでSSLが使えるように設定する。 /etc/mail/qpopper.conf
を作成し、 /etc/inetd.conf
を修正。
#### /etc/mail/qpopper.conf
set tls-support = alternate-port
set tls-server-cert-file = /etc/mail/certs/cert.pem
## /etc/inetd.conf
pop3s stream tcp nowait root /usr/sbin/tcpd in.qpopper -s -f /etc/mail/qpopper.config
```shell
# /etc/init.d/inet restart
SSL経由なので telnet
とかでは確認が出来ない。実際にメーラの設定を修正してPOP3sを用いて利用出来るか確認するしかないかな。