RHEL4 で POP サーバを構築する ( dovecot )




RHEL4 (RedHat Enterprise Linux 4 ) で POP サーバを構築する。

今回は dovecot を使う。

dovecot は POP3, IMAP に対応している。

まずは、RPM Search Advanced Searchから RPM パッケージを探す。

RHEL の RedHat EL 4 にチェックを入れて、
Other の Other のチェックを外して、
キーワードに dovecot を入力して検索。

2008 年 5 月時点で、以下の RPM パッケージが見つかる。

dovecot-1.1.rc5-0_70.el4.i386.rpm
dovecot-1.0.13-0_68.el4.i386.rpm
dovecot-1.0-0.1.rc14.el4.i386.rpm

今回は dovecot-1.0-0.1.rc14.el4.i386.rpm を使う。

# # rpm -ivh dovecot-1.0-0.1.rc14.el4.i386.rpm
警告: dovecot-1.0-0.1.rc14.el4.i386.rpm: V3 DSA signature: NOKEY, key ID e42d547b
Preparing...                ########################################### [100%]
   1:dovecot                ########################################### [100%]
#

dovecot のインストールには mysql も必要だが、
システムにすでにインストールしてあったので、
これでインストールは完了。

試しにとりあえずデフォルトの設定で起動してみる。

# /etc/init.d/dovecot start
Dovecot Imap を起動中:                                     [  OK  ]
#

問題無く起動できた。

ちゃんとポートを listen しているかを確認してみる。

# lsof -i -n -P | grep dove
dovecot   15707    root   5u IPv6 692002 TCP *:143 (LISTEN)
dovecot   15707    root   6u IPv6 692003 TCP *:993 (LISTEN)
dovecot   15707    root   7u IPv6 692004 TCP *:110 (LISTEN)
dovecot   15707    root   8u IPv6 692005 TCP *:995 (LISTEN)
imap-logi 15715 dovecot   0u IPv6 692002 TCP *:143 (LISTEN)
imap-logi 15715 dovecot   1u IPv6 692003 TCP *:993 (LISTEN)
imap-logi 15716 dovecot   0u IPv6 692002 TCP *:143 (LISTEN)
imap-logi 15716 dovecot   1u IPv6 692003 TCP *:993 (LISTEN)
imap-logi 15717 dovecot   0u IPv6 692002 TCP *:143 (LISTEN)
imap-logi 15717 dovecot   1u IPv6 692003 TCP *:993 (LISTEN)
pop3-logi 15721 dovecot   0u IPv6 692004 TCP *:110 (LISTEN)
pop3-logi 15721 dovecot   1u IPv6 692005 TCP *:995 (LISTEN)
pop3-logi 15738 dovecot   0u IPv6 692004 TCP *:110 (LISTEN)
pop3-logi 15738 dovecot   1u IPv6 692005 TCP *:995 (LISTEN)
pop3-logi 15993 dovecot   0u IPv6 692004 TCP *:110 (LISTEN)
pop3-logi 15993 dovecot   1u IPv6 692005 TCP *:995 (LISTEN)
#

ポート 110 で listen していることが確認できたので、
ローカルから telnet で接続してみる。

# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Dovecot ready.
user test
+OK
pass testtest
-ERR Authentication failed.
quit
+OK Logging out
Connection closed by foreign host.
#

パスワードは間違えていないのにログインできない。

原因調査のために /var/log/messages を見てみる。

# tail messages
May 21 14:45:23 asv002 dovecot: dovecot 起動 succeeded
May 21 14:46:00 asv002 dovecot-auth: PAM pam_parse: expecting return
 value; [...include]
May 21 14:46:00 asv002 dovecot-auth: PAM unable to
 dlopen(/lib/security/system-auth)
May 21 14:46:00 asv002 dovecot-auth: PAM [dlerror:
 /lib/security/system-auth: cannot open shared object file:
 No such file or directory]
May 21 14:46:00 asv002 dovecot-auth: PAM adding faulty module:
 /lib/security/system-auth
May 21 14:46:00 asv002 dovecot-auth: PAM pam_parse: expecting return
 value; [...include]
#

PAM で system-auth に問題がありそう。

PAM がうまく動作していないのであれば、
認証がうまくいかないことも納得できる。

原因調査のために /etc/pam.d/dovecot を見てみる。

# cat /etc/pam.d/dovecot
#%PAM-1.0
auth       required     pam_nologin.so
auth       include      system-auth
account    include      system-auth
session    include      system-auth
#

/etc/pam.d/sshd などと見比べると書式が違う。

これが原因で PAM がうまく動かなかったのだろう。

次のように修正した。

# cat /etc/pam.d/dovecot
#%PAM-1.0
auth       required     pam_nologin.so
auth       required     pam_stack.so service=system-auth
account    required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth
#

/etc/pam.d/ 以下を修正した場合はサービス再起動やシステム再起動は不要。

そのまま再度、ローカルから telnet で接続を試みる。

# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Dovecot ready.
user test
+OK
pass testtest
+OK Logged in.
list
+OK 0 messages:
.
quit
+OK Logging out.
Connection closed by foreign host.
#

ログインできるようになりました。

ちなみに、パスワードを間違えた場合は
ログインを拒否されるので、
これで認証の動作に問題は無いようです。

# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Dovecot ready.
user test
+OK
pass test
-ERR Authentication failed.
quit
+OK Logging out
Connection closed by foreign host.
#

Thunderbird を使ったメールの受信も問題ありませんでした。

ちなみにデフォルトのメールボックスは /var/mail/[ユーザ名] です。