2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

qpopperでAPOPを使う!

POPパスワードを暗号化して運用するAPOPサーバを構築した。昨今は、メール本文も暗号化する事も騒がれており、この世界もセキュリティには敏感だ。ところで、APOPを実現するPOPモジュールはqpopperで行った。
■ APOP認証とは
POP認証をチャレンジレスポンス方式という方式を用いて強化したもの。パスワードは、暗号化されて送信される。さらに、そのパスワード文字列はサーバへConnectする度に変化するので盗聴されてもデコードするのが非常に難しい。メーラは、サーバへ接続するとサーバが連続した文字列を生成する(チャレンジ)。メーラはこのチャレンジと生のパスワードを接続して一つの文字列にしてMD5ハッシュ値を生成する。これをAPOPコマンドと一緒にサーバへ送出する。前述したようにチャレンジはサーバへConnectする度に変化するため、盗聴した悪人は無駄なことをしてるだけになる。サーバ側は、メーラ側と同様にメーラから受け取ったチャレンジとサーバにメモってあるユーザパスワードでMD5ハッシュ値を生成して最終的に両方のハッシュ値が一致したら認証許可とする。

インストール環境 )
OS : CentOS4.3
マシン : Dell PowerEdge SC430


1.ソースをゲットする
qpopperは、 ここ からゲットする。2006年6月現在で最新は、 qpopper4.0.9.tar.gz であった。


2.ソースを展開する
[root@ns src]# cd /usr/local/src/
[root@ns src]# wget ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper4.0.9.tar.gz
[root@ns src]# tar zxvf qpopper4.0.9.tar.gz
[root@ns src]# chown -R root.root qpopper4.0.9


3.コンパイル&リンクする
[root@ns src]# cd qpopper4.0.9
qpopperを動かす、popユーザを作る
[root@ns qpopper4.0.9]# useradd -s /dev/null -d /dev/null pop
[root@ns qpopper4.0.9]# yum install pam-devel
(Debianの場合は、apt-get install libpam0g-dev)pam-develパッケージが無い場合は、 ここ からゲットして以下の要領でコンパイル&リンクする。libpamが必要で有るため、一応以下の方法でコンパイルしてリンクするとlibpamは/libディレクトリへインストールされる、確認すること。

root@hiro:/# cd /usr/local/src
root@hiro:/usr/local/src# tar zxvf Linux-PAM-0.99.6.3.tar.gz
root@hiro:/usr/local/src# chown -R root.root Linux-PAM-0.99.6.3
root@hiro:/usr/local/src# cd Linux-PAM-0.99.6.3
root@hiro:/usr/local/src/Linux-PAM-0.99.6.3# ./configure
root@hiro:/usr/local/src/Linux-PAM-0.99.6.3# make
root@hiro:/usr/local/src/Linux-PAM-0.99.6.3# make install

[root@ns qpopper4.0.9]# ./configure –enable-apop=/etc/pop.auth –with-popuid=apop
–enable-specialauth
[root@ns qpopper4.0.9]# make

省略
cd ./popper && make all
make[1]: Entering directory `/usr/local/src/qpopper4.0.9/popper’
gcc -c -I.. -I.. -I. \
-I../mmangle -I../common \
-g -O2 -DHAVE_CONFIG_H -DLINUX -DUNIX pop_user.c -o pop_user.o
pop_user.c: In function `pop_user’:
pop_user.c:149: error: `DBM’ undeclared (first use in this function)
pop_user.c:149: error: (Each undeclared identifier is reported only once
pop_user.c:149: error: for each function it appears in.)
pop_user.c:149: error: `db’ undeclared (first use in this function)
pop_user.c:153: error: `datum’ undeclared (first use in this function)
pop_user.c:153: error: syntax error before “key”
pop_user.c:332: error: `key’ undeclared (first use in this function)
pop_user.c:345: error: `value’ undeclared (first use in this function)
make[1]: *** [pop_user.o] Error 1
make[1]: Leaving directory `/usr/local/src/qpopper4.0.9/popper’
make: *** [popper_server] Error 2

いきなりエラーストップ。これは、どうもgdbmライブラリの欠如と言うことがわかった。したがって、入れる。
[root@ns qpopper4.0.9]# yum install gdbm-devel(Debianの場合は、apt-get install libgdbm-dev)
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
–> Populating transaction set with selected packages. Please wait.
—> Downloading header for gdbm-devel to pack into transaction set.
gdbm-devel-1.8.0-24.i386. 100% |=========================| 5.6 kB 00:00
—> Package gdbm-devel.i386 0:1.8.0-24 set to be updated
–> Running transaction check

Dependencies Resolved

==================================================
Package Arch Version Repository Size
==================================================
Installing:
gdbm-devel i386 1.8.0-24 base 35 k

Transaction Summary
==================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 35 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): gdbm-devel-1.8.0-2 100% |=========================| 35 kB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: gdbm-devel ######################### [1/1]

Installed: gdbm-devel.i386 0:1.8.0-24
Complete!

もう一度気を取り直してmakeに挑戦!
[root@ns qpopper4.0.9]# make clean
[root@ns qpopper4.0.9]# make

manディレクトリを作る。
[root@ns qpopper4.0.9]# mkdir /usr/local/man
[root@ns qpopper4.0.9]# mkdir /usr/local/man/man8
[root@ns qpopper4.0.9]# make install


4.POPユーザパスワードを設定する
popauthのデータベースを初期化する。
[root@ns qpopper4.0.9]# popauth -init
Really initialize POP authentication DB? y

ユーザパスワードを生成する。
[root@ns qpopper4.0.9]# popauth -user xxxxxx
Changing only APOP password for xxxxxx
New password: ******
Retype new password: ******

念のため、ユーザパスワード削除方法。
[root@ns qpopper4.0.9]# popauth -delete xxxxxx


5.起動設定
xinetdから起動させるので、以下の設定を
[root@ns qpopper4.0.9]# cd /etc/xinetd.d
[root@ns xinetd.d]# vi qpopper

service pop3
{
   disable = no
   flags = REUSE
   socket_type = stream
   protocol = tcp
   wait = no
   user = root
   server = /usr/local/sbin/popper
   server_args = -s -d
}


6.起動する
[root@ns xinetd.d]# /etc/init.d/xinetd restart


7.旨く動作するかテストする
[root@ns xinetd.d]# telnet localhost pop3
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
+OK Qpopper (version 4.0.9) at ns.xxxxxxxxxxxxxxx.jp starting.
<22282.1149568030@ns.xxxxxxxxxxxxxxx.jp>
user xxxxxx
-ERR [AUTH] You must use stronger authentication such as AUTH or APOP
to connect to this server

quit
+OK Pop server at ns.xxxxxxxxxxxxxxx.jp signing off.
Connection closed by foreign host.

上記のように、赤文字が表示されればOK。


8.DebianGNULinux 3.1Sargeでapopするには
Debianでapopを利用するのはとても簡単だ。

1) apt-getする
# apt-get install qpopper

2) authデータベースの初期化
# popauth -init

3) ユーザパスワードの生成
# popauth -user xxxxxx
Changing only APOP password for xxxxxx
New password: ******
Retype new password: ******

4) qpopper.confの編集
# vi /etc/qpopper.conf

省略
# Sets clear text handling options. Values are:
# o ‘default’ Clear text passwords are permitted for all users,
# except those in the APOP database
# o ‘never’ Clear text passwords are never permitted
# o ‘always’ Clear text passwords are always permitted
# o ‘local’ Clear text passwords are permitted on the local
# (127.*.*.*) loop back interface only
# o ‘tls’ Clear text passwords are permitted when TLS/SSL
# has been negotiated for the session
# o ‘ssl’ Same as tls
#
# The ‘tls’ and ‘ssl’ values are only valid if ‘–with-openssl’ or
# ‘–with-sslplus’ was used with ./configure.
#
# Default: default
#
set clear-text-password = never
省略

これだけ、書き加える。

5) inetd.confの編集
# vi /etc/inetd.conf
#:MAIL: Mail, news and uucp services.
pop-3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.qpopper -s

6) inetdの起動
# /etc/init.d/inetd start

7) 動作確認
7項と同じ動作確認を行う。

以上

コメント