做盲人的体验作文:RHEL5使用Dovecot做POP3(S)/IMAP(S)

来源:百度文库 编辑:偶看新闻 时间:2024/05/03 06:01:02

RHEL5使用Dovecot做POP3(S)/IMAP(S)服务器

我在另一篇文章里说到用Qpopper做POP3服务器,这里介绍使用功能更强大、更安全、更优秀的同时支持IMAP4、POP3协议的Dovecot。

    RHEL5光碟自带的Dovecot是一个测试版本,我们可以下载一个稳定版本RPM包,但我推荐使用源码包编译的方式安装配置Dovecot。

    (最新)源码包下载、解压、配置、编译、安装:
    [root@pps ~]# [url]http://www.dovecot.org/releases/1.1/dovecot-1.1.13.tar.gz[/url]
    [root@pps ~]# tar zxf dovecot-1.1.13.tar.gz
    [root@pps ~]# cd dovecot-1.1.13
    [root@pps dovecot-1.1.13]# ./configure --prefix=/usr/local/dovecot
    [root@pps dovecot-1.1.13]# make
    [root@pps dovecot-1.1.13]# make install

    【注意】在配置阶段(configure)使用"--prefix"指定安装的路径,如果不指定的话,默认安装到/usr/local后Doevecot相关文件“一盘散沙”,像我这样就全都放在/usr/local/dovecot目录下了,易于查找管理,也让人对Dovecot更明了。

    ============================================================
    下面是configure的最后输出信息:

    Install prefix ...................... : /usr/local/dovecot
    File offsets ........................ : 64bit
    I/O loop method ..................... : epoll
    File change notification method ..... : inotify
    Building with SSL support ........... : yes (OpenSSL)
    Building with IPv6 support .......... : yes
    Building with pop3 server ........... : yes
    Building with mail delivery agent  .. : yes
    Building with GSSAPI support ........ : no
    Building with user database modules . : static prefetch passwd passwd-file sql nss
    Building with password lookup modules : passwd passwd-file shadow pam checkpassword sql
    Building with SQL drivers ............:

    如果显示password查询不支持pam,应该是没有安装pam-dev包所致。

    我的RHEL5没有安装RPM包形式的mysql,configure没能检测出我安装在/usr/local目录下的mysql。如果日后有可能需要用到mysql数据库验证,我可以指定"--with-mysql=/usr/local/mysql/lib"来让Dovecot支持mysql。
    ============================================================

    Dovecot安装在/usr/local/dovecot,配置文件是/usr/local/dovecot/etc/dovecot.conf,但安装后只有一些示例配置文件在dovecot/etc目录下,如下所示:
    [root@pps ~]# cd /usr/local/dovecot/etc
    [root@pps etc]# ls
    dovecot-db-example.conf  dovecot-ldap-example.conf
    dovecot-example.conf     dovecot-sql-example.conf

    我选择dovecot-example.conf作为蓝本进行修改配置:
    [root@pps etc]# cp dovecot-example.conf dovecot.conf

    +++++++++++++++++++++++++++++
          我所启用、修改的选项如下:
    +++++++++++++++++++++++++++++
    #
    # /usr/local/dovecot/etc/dovecot.conf
    #

    # 支持imap imaps pop3 pop3s协议
    protocols = imap imaps pop3 pop3s

    # 允许不启用TLS情况下使用普通文本方式验证
    disable_plaintext_auth = no

    # 启用ssl支持
    ssl_disable = no

    # 指定证书和私钥的位置
    ssl_cert_file = /etc/pki/tls/certs/dovecot.pem
    ssl_key_file = /etc/pki/tls/certs/dovecot.pem

    ============================================================
    【注意】在源码包doc目录下,可以使用mkcert.sh脚本,根据dovecot-openssl.cnf文件里的信息生成自己签署认证的dovecot.pem文件,证书dovecot.pem生成在/etc/ssl/certs目录下,私钥dovecot.pem生成在/etc/ssl/private目录下。为了使得和我配置的sendmail.pem在同一位置,我将dovecot.pem(包括证书和私钥)放在/etc/pki/tls/certs/dovecot.pem文件里。我没有使用mkcert.sh生成,而是来到/etc/pki/tls/certs目录下执行make dovecot.pem。
    ============================================================

    # 这是登录进程使用的用户,不是访问用户邮件的用户,不一定非得用下面的"mail"用户。
    login_user = mail

    ============================================================
    【注意】示例配置文件里有相关的建议,最好使用一个“没其它用途”的用户,默认是dovecot用户。这个用户是用来控制认证进程的访问权限的。当客户端验证成功后,产生新的具有相应用户权限的进程来对邮件进行访问操作。
    ============================================================

    # 根据手册,最好还是“显式”指示邮件位置
    # mbox邮件存储格式,如果想支持IMAP4的话,没个系统用户需要有home目录
    mail_location = mbox:~/mail:INBOX=/var/mail/%u

    ============================================================
    【注意】如果是采用maildir格式的话,配置文件里默认的例子是mail_location = maildir:~/Maildir,如果是这样就不需要设置什么访问权限了,客户端POP3/IMAP登录成功后,就具备相应的用户权限来访问自家目录下的邮件,如果Maildir不存在的话还会自动建立起来。

    如果你指定别的邮件目录,像我以下这样:
    mail_location = maildir:/home/Mail/%n/Maildir
    除了得事先建立好用户目录,还需要从Mail目录到用户目录具备相应用户的执行权限。
    ============================================================

    # 这里需要给Dovecot指定"mail"组权限去读写INBOX(/etc/mail/%u或别的位置)
    mail_privileged_group = mail

    ============================================================
    【注意】如果客户端登录后有足够的权限读写INBOX就不需要mail组用户权限了。
    ============================================================

    # 支持IMAP和POP3,默认即可,当然可以在其中加入很多参数以及优化,
    protocol imap {
    }
    protocol pop3 {
    }
    # 本地投递代理设置
    protocol lda {
      # 发送拒绝信时使用的邮件地址(我目前也没清楚这里啥时候用)
      postmaster_address = [email]postmaster@hoho.com[/email]
    }

    # 如果想使用系统用户密码验证的话,只能把邮件帐号"@"以及其后的域名去掉。
    # 如果你使用支持不同域用户([email]snail@a.com[/email]不同于[email]snail@b.com[/email])的其它密码数据库,
    # 则可不必修改这里,默认是以%u也即类似"[email]snail@hoho.com[/email]"的全名来当作用户名验证的。
    auth_username_format = %n

    ============================================================
    【注意】这里有一个弊端,如果使用"%n"来处理需要验证的用户名,则用户名后面的域名信息将会被抛弃,也就是说后面就无法再使用"%d"来获取用户域名信息了!
    ============================================================

    # 默认的认证配置
    auth default {
      # 支持plain和login认证机制
      mechanisms = plain login
      # 为了和sendmail一致,这里使用pam密码验证方式(也可以使用shadow方式)
      passdb pam {
      }

      ============================================================
      【注意】如果使用pam密码验证方式,需要在/etc/pam.d/目录下建立dovecot文件,
      其内容和smtp文件一样即可。或者使用官方网站建议的:
      # /etc/pam.d/dovecot
      auth    required        pam_unix.so nullok
      account required        pam_unix.so
      ============================================================

      # 系统用户始终用passwd作为用户数据库
      userdb passwd {
      }
      # 需要用root用户来访问用户和密码数据库
      user = root
    }

    好了,到此Dovecot的基本配置算完毕了,注意事项已经在上述配置的后面分别说清楚了。下面我们启动Dovecot,然后使用客户端Foxmail,Outlook测试是否OK。

    【注意】防火墙需要开放110(POP3),143(IMAP),995(POP3S),993(IMAPS)端口。

    启动dovecot:
    [root@pps ~]# dovecot

    如果Dovecot配置文件错误,这里会立刻提示出来。如果是客户端验证、接收(同步)等错误,则需要查看日志文件/var/log/maillog。

    如果在日志中记录的错误不够详细,可以在配置文件里开启相关过程的“冗余”记录,比如:
    # 显示协议层的SSL错误
    verbose_ssl = yes
    # 详细的认证过程信息记录
    auth_verbose = yes
    # 更详细的认证调试(debug)信息
    auth_debug = no

    更多的冗余、Debug选项可以参考示例配置文件或者官网相关资料。

    停止dovecot:
    [root@pps ~]# killdovecot.sh

    这里的killdovecot.sh脚本是官网的脚本:
    [root@pps etc]# cat /usr/local/dovecot/sbin/killdovecot.sh
    #!/bin/sh
    # master.pid is written to directory pointed by base_dir setting.
    # /var/run/dovecot/ is a common location for it.
    base_dir=`dovecot -a | grep ^base_dir: | sed 's/^[^:]*: //'`
    kill `cat $base_dir/master.pid`

    ============================================================
    非SLL/TLS的POP3/IMAP测试都OK。

    ~SSL/TLS测试~

    IMAPS:发现Outlook Express能正常同步,而Foxmail(6.5 Beta3)出错。
           如果没有启用SSL/TLS,Foxmail使用IMAP同步正常。
           经过多次测试并参考互联网资料,我个人暂时认为是Foxmail Bug引起的。
    POP3S:Foxmail、Outlook都正常。

    Foxmail使用IMAPS同步邮件出错:
    Apr  8 20:57:48 pps dovecot: imap-login: Disconnected (no auth attempts): rip=192.168.32.1, lip=192.168.32.50, TLS handshaking: SSL_accept() failed: error:1406B0CB:SSL routines:GET_CLIENT_MASTER_KEY:peer error no cipher

    Outlook使用IMAP4同步邮件正常:
    Apr  8 21:00:34 pps dovecot: imap-login: Login: user=, method=PLAIN, rip=192.168.32.1, lip=192.168.32.50, TLS
    Apr  8 21:00:34 pps dovecot: IMAP(snail): Disconnected in IDLE bytes=258/443