Courier 安装指南

红薯 发布于 2009/02/06 23:19
阅读 2K+
收藏 0
安装指南

虽 然在 FreeBSD® 的 port 中已有 Courier 及相关组件收录,但是这些 port 不能适应中文处理和中国现状,有些需要调整的参数也没有 port 选项与之对应。本文所述的是 Courier-0.53.3 和 Courier-authlib-0.58 在 FreeBSD® 6.1-STABLE 中的情况。

  1. 准备工作。

    FreeBSD® 已经将 GNU CC、Perl、Berkeley DB 作为系统的基本组成部分,这些都是安装 Courier 时必需的。此外还需要一些其它软件包,在 FreeBSD® 中可用 port 安装,或下载安装制作好的 package 安装。

    • GNU make (devel/gmake): 编译 Courier 时需要。FreeBSD® 的 PMake 不支持 GNU make 的那些扩展功能。
    • MySQL®/PostgreSQL (databases/,可选): 使用 MySQL®/PostgreSQL 实现用户数据库。
    • Bash (shells/bash,可选): Bash 兼容 POSIX® SH,可以很好的执行 Courier 的配置文件。
    • OpenSSL 的脚本 c_rehash: 用 which(1) 命令检查脚本 c_rehash 是否可用。FreeBSD® 的源代码树中虽然有此文件,但不安装到发行版的目录中。可从我的服务器上下载从 FreeBSD® CVS 树中下载,应放于环境变量 PATH 包含的目录中,权限设为 0555。
    • Apache 2.2.x (www/apache22): 提供带有加密的 HTTP 支持,供网页信箱界面和网页管理使用。使用 Apache 2.0.x 和 Apache 1.3.x + mod_ssl 当然也是可以的。
    • Gnupg (security/gnupg): 信件加密、数字签名时使用。
    • Ispell (textproc/ispell): 使得网页信箱界面具备英语单词的拼写检查功能。
    • PCRE (devel/pcre 或 devel/pcre-utf8): 新的信件过滤器 maildrop 支持 Perl 兼容正则表达式,功能强于 POSIX® 正则表达式。
    • Berkeley DB 4.4 (databases/db44,可选): 工具 db_dump185-4.4 可用来查看 *.dat 和 *.db 数据文件。
    • Expect (lang/expect,依赖于 TCL/TK,可选): 使用操作系统的用户数据库时,在网页界面中更改密码时完成与操作系统 passwd(1) 命令的对话。操作系统的组件模块 PAM(3) 没有提供更改密码的功能。
  2. 下载 Courier 软件包。

    原始版本下载位置: http://sourceforge.net/projects/courier/,需要下载软件包 authlib 和 courier。

    其中软件包 Courier 需要打上与中文和中国现状相关的补丁,还要加上网页信箱界面的中文模板。我已打补丁的软件包下载位置: http://ftp.intron.ac/pub/network/mail/courier/ 。补丁的情况可用 diff -r -U 10 命令检查。补丁的内容有:

    • courier/module.esmtp/esmtpclient.c: 避免收信时因为遇到域名系统的 MX 记录直接指向 IP 地址的错误而拒收 (RFC 1035 错误)。
    • courier/submit.C: 避免发信时因为遇到域名系统的 MX 记录直接指向 IP 地址的错误而拒发 (RFC 1035 错误)。
    • courier/submit2.C: 避免信头中有未按 RFC 2045 编码的中文,或是信件中有中文而信头未标注“8 bit”而发生错误 (RFC 2045 错误)。
    • rfc2045/rfc2646create.c: 避免在网页信箱界面中写信时系统自动加入软回车带来的乱码。
    • webmail/folder.c: 消除网页信箱界面中 RFC 2045 解码时的冗余显示造成的乱码,正确显示几个信箱的中文名称。
    • webmail/html/zh-cn: 网页信箱界面中文模板。
    • webmail/images/sqwebmail.css: 网页信箱界面的 CSS 样式表,改用中国人喜欢的清淡色调。
  3. 配置与安装 courier-authlib

    解压缩:

    ~#tar xjvf courier-authlib-0.58.tar.bz2

    配置:

    ~/courier-authlib-0.58#./configure --prefix=/usr/local/authlib --localstatedir=/var/authlib \
    --without-stdheaderdir

    选项 --without-stdheaderdir 使得 authlib 的配置信息程序 courierauthconfig 的 --cppflags 功能生效,才能使后续的配置找到 authlib 头文件的位置。

    编译与安装:

    ~/courier-authlib-0.58#gmake
    ~/courier-authlib-0.58#gmake install
    ~/courier-authlib-0.58#gmake install-configure
  4. 配置 courier。

    注意:配置和编译 courier 需要以普通用户身份进行,而不是 root 身份。

    解压缩:

    ~>tar xvjf pcourier-0.53.3.tar.bz2

    其中我加入的脚本文件 mycfg.sh 里只包含一行实质内容:

    ./configure --prefix=/usr/local/courier --localstatedir=/var/courier --without-ipv6 \
    --disable-unicode --enable-https=auto --enable-hardtimeout=10800 --enable-softtimeout=3600 \
    --with-maxargsize=67108864 --with-maxformargsize=67108864 --with-maxmsgsize=67108864 \
    --enable-mimetypes=/usr/local/etc/apache22/mime.types --with-defaultlang=zh

    重要的选项:

    • --disable-unicode 是禁用 Courier 的解码功能,这样网页信箱界面会显示原码,用户可以通过调整浏览器来正确解码所有信件 (GB 2312、BIG 5、UTF-8 等),否则网页信箱界面会将无法解码的字符都换成“.”。
    • --with-libcharset 是使用 GNU libcharset 的函数 nl_langinfo(),不过 FreeBSD® 自己就提供了 nl_langinfo(3)。
    • --with-softtimeout 指定网页信箱界面登录后最大闲置时间 (单位:秒) (缺省20分钟)。
    • --with-hardtimeout 指定网页信箱界面登录后最长操作时限 (单位:秒)。即无论闲置与否,登录后超过这个时间都会自动禁止继续操作 (缺省 2 小时)。
    • --enable-mimetypes 用来指定 MIME 类型对照表的位置,此文件一般可在 Apache 的配置文件目录中找到。
    • --with-maxargsize 和 --with-maxformargsize 指定网页信箱界面中可上载的单个附件的最大长度 (67108864=64M),由于每一次提交 HTML 表单只能上载一个附件,所以两者的意义其实相差不大。
    • --with-maxmsgsize 指定网页信箱界面中一个信件的最大长度 (67108864=64M),而并不是 courier 核心部分所允许的最大信件长度。(courier 核心部分最大信件长度需要另行调整,见后文)。也可用 --with-mailuser=user --with-mailgroup=group 来指定 courier 运行的 UNIX® 用户身份。对于 FreeBSD®,configure 缺省会配为 daemon:daemon。
    • --with-defaultlang 指明网页信箱界面所使用的语言。我打补丁的软件包里带有我已翻译的中文网页模板。

    适当按照自己的要求修改文件 mycfg.sh 的内容。然后以普通用户,而不是 root 的身份运行:

    ~/pcourier-0.53.3>sh mycfg.sh
  5. 编译
    ~/pcourier-0.53.3>gmake
    ~/pcourier-0.53.3>gmake check

    如果编译无法通过,检查本文第 1 步中所述的准备工作。

  6. 安装

    切换到root身份:

    ~/pcourier-0.53.3>su -

    安装:

    ~#cd ~ncr/pcourier-0.53.3/
    ~ncr/pcourier-0.53.3#gmake install
    ~ncr/pcourier-0.53.3#gmake install-configure
  7. 配置网页管理界面

    将 /usr/local/courier/libexec/courier/webmail/webadmin 用 cp -p 命令放入 Apache 加密 HTTP 服务的 CGI 目录。并在刚才编译courier的目录中执行:

    ~ncr/pcourier-0.53.3#gmake install-webadmin-password

    键入网页管理的密码。密码被明文存放在 /usr/local/courier/etc/webadmin/password 中,需要注意保密。

    典型的网页管理界面的入口地址是 https://www.somecompany.com/cgi-bin/webadmin 。使用网页管理界面后,下面许多步骤的设置均可通过它来完成。

  8. 配置 Sendmail 式的信件转发 (仅限本机转发)

    写好 /usr/local/courier/etc/aliases/system,补全这一行:

    postmaster: ncr

    这是将给系统管理员的信转发给用户 ncr,然后执行 /usr/local/courier/sbin/makealiases 。

    需要注意的是:Courier 的这种信件转发方式只适用于本机转发,而不适用于远程转发。Courier 采用与 Qmail 类似的方式设置远程转发。

  9. 配置 SMTP 服务器的访问权限

    写好 /usr/local/courier/etc/smtpaccess/default ,并执行 /usr/local/courier/sbin/makesmtpaccess 。

  10. 启用信件过滤器 maildrop

    修改 /usr/local/courier/etc 中的 courierd,使之启用信件过滤器 maildrop。

    DEFAULTDELIVERY="| /usr/local/courier/bin/maildrop"
  11. 设置主域名

    书 写 /usr/local/courier/etc/me, 加入信箱地址中“@”后的部分,一般应为域名系统的 MX 记录或 A 记录,例如 somecompany.com。只有第一行的内容是有效的,不要多加 (主机别名的配置见下文)。书写完成后执行 /usr/local/courier/sbin/makealiases。

  12. 设置主机别名

    书写 /usr/local/courier/etc/locals,将所有收信用的域名 (包括 me 中已经指定的域名) 加入其中。例如:

    localhost
    mail
    somecompany.com
    mail.somecompany.com
    freebsd.somecompany.com

    执行 /usr/local/courier/sbin/makealiases 。

  13. 设置接受信件的域名

    写 入 /usr/local/courier/etc/esmtpacceptmailfor,内容要完全包含 /usr/local/courier/etc/locals 的内容。在没有虚拟域和代理转发的大多数情形中可以将 locals 复制为 esmtpacceptmailfor。

  14. 设置 Courier 核心允许的信件大小

    写入 /usr/local/courier/etc/sizelimit,这是 Courier 核心部分所能接受的最大信件长度。例如:

    67108864

    (64 MB)

  15. 设置信件过滤器

    为 maildrop 书写 /usr/local/courier/etc/maildroprc,一般只需要这行就足够了:

    DEFAULT="$HOME/Maildir"

    也可以添加一些在全系统范围内生效的过滤语句,如使用 SpamAssassin 的语句。

  16. 设置 SMTP 服务

    修改 /usr/local/courier/etc/esmtpd,启用 SMTP 服务的身份认证:

    ESMTPAUTH="LOGIN CRAM-MD5"

    修改以下一行以略去收信时对发信服务器的域名反向解析和 ident 检查 (一种 TCP 回叫身份认证方式)。有些配置不规范的 SMTP 服务器会在这些检查过程中因超时而退信。

    TCPDOPTS="-nodnslookup -noidentlookup -stderrlogger=/usr/local/courier/sbin/courierlogger"
  17. 为 Apache 设置网页信箱界面服务

    将网页信箱界面的 CGI 程序 /usr/local/courier/libexec/courier/webmail/webmail 放入 Apache 的相应 CGI 程序目录,最好是加密 HTTP 服务的 CGI 目录。

    在 httpd.conf 或其它 Apache 配置文件中设置别名 (“Alias”) 或者制作一个链接,以便在使用网页信箱界面时浏览器可以得到图标:

    /usr/local/www/apache22/data# ln -s /usr/local/courier/share/sqwebmail/images webmail
  18. 启用网页信箱界面中的信件过滤器设置界面

    为网页信箱界面书写 /usr/local/courier/etc/maildirfilterconfig,可以这么写:

    MAILDIRFILTER=../.mailfilter
    MAILDIR=./Maildir
  19. 设置公开信件夹

    为网页信箱界面书写 /usr/local/courier/etc/maildirshared,两栏之间 Tab 字符用分隔,例如:

    ★公告信息★	/home/bulletin
  20. 设置网页信箱界面的缺省域名

    为网页信箱界面书写 /usr/local/courier/etc/defaultdomain,例如:

    somecompany.com

    否则网页信箱界面会自动使用该机操作系统的主机名。

  21. 设置信件转发

    日常添加信箱别名,可以在 /usr/local/courier/etc/aliasdir/ 书写 .courier-* 文件。例如,.courier-webmaster 的内容是:

    someengineer@othercompany.com
  22. 选择用户数据库

    修改 /usr/local/authlib/etc/authlib/authdaemonrc,指明所用的用户认证模块。Courier 支持多种用户数据库,支持同时使用多个用户数据库。根据需要调整如下一行中各模块名的顺序和使用与否:

    authmodulelist="authuserdb authpam authmysql authcustom authpipe"

    例如:

    只使用操作系统的用户数据库:

    authmodulelist="authpam"

    先查询 Berkeley DB 文件 (/usr/local/authlib/etc/authlib/userdb.dat);假如没有找到该用户名,再查询 MySQL® 数据库:

    authmodulelist="authuserdb authmysql"

    在用户数量不多时,建议使用 Berkeley DB 存储用户数据;在用户数量很多时,建议使用 MySQL® 等专门的数据库系统存储用户数据。参见 authlib 的文档。

  23. 按需设置 Berkeley DB 用户数据库

    书写 /usr/local/authlib/etc/authlib/userdb,该文件权限设置为 root 所有 600。例如:

    xiaofei	systempw=$1$AAAABBBBCCCCDDDD|gecos=王小飞|home=/home/mail/xiaofei|uid=65534|gid=65534

    第一列的用户名与其后内容应该用 Tab 字符分隔,否则相应的处理工具会出错。加密的密码可以使用工具 /usr/local/authlib/sbin/userdbpw 获得。该用户的家目录权限应与该用户的用户标识、组标识一致,在家目录中应设置信件存储目录。

    #mkdir /home/mail/xiaofei
    #cd /home/mail/xiaofei
    /home/mail/xiaofei#/usr/local/courier/bin/maildirmake Maildir
    /home/mail/xiaofei#chown -Rh nobody:nobody .

    之 后运行 /usr/local/authlib/sbin/makeuserdb,以产生二进制格式的 Berkeley DB 数据文件 /usr/local/authlib/etc/authlib/userdb.dat 和 /usr/local/authlib/etc/authlib/userdbshadow.dat 。

  24. 按需设置 MySQL® 用户数据库

    在 MySQL® 系统中建立 Courier 专用的数据库、登录用户。并建立一张用户数据表,例如:

    CREATE TABLE passwd (
    id char(128) DEFAULT '' NOT NULL,
    crypt char(128) DEFAULT '' NOT NULL,
    clear char(128) DEFAULT '' NOT NULL,
    name char(128) DEFAULT '' NOT NULL,
    uid int(10) unsigned DEFAULT '65534' NOT NULL,
    gid int(10) unsigned DEFAULT '65534' NOT NULL,
    home char(255) DEFAULT '' NOT NULL,
    maildir char(255) DEFAULT '' NOT NULL,
    defaultdelivery char(255) DEFAULT '' NOT NULL,
    quota char(255) DEFAULT '' NOT NULL,
    options char(255) DEFAULT '' NOT NULL,
    KEY id (id(128))
    );

    修 改相应的配置文件 /usr/local/authlib/etc/authlib/authmysqlrc ,设置连接 MySQL® 数据库的正确参数,主要是连接协议 (TCP 或 UNIX® 套接字)、连接用户名、连接密码、数据库名、数据表名,以及各数据域的名称。

    上 面的表中有两个数据域存放用户登录密码,“crypt”是指密码的密文,“clear”是指密码的明文。一般说来只设置密码密文就足够了。密码明文用于挑 战型 (challenge) 认证方式 CRAM-MD5、 CRAM-SHA1、 CRAM-SHA256 ,除须在数据库中存放密码明文,还应在配置文件 authmysqlrc 中用选项 MYSQL_CLEAR_PWFIELD 启用相应的功能。

  25. 设置虚拟域

    假 如需要虚拟域的支持,将要虚拟的域名写入 /usr/local/courier/etc/hosteddomains/my,并运行 /usr/local/courier/sbin/makehosteddomains。再将要虚拟域名加入 /usr/local/courier/etc/esmtpacceptmailfor,并运行 /usr/local/courier/sbin/makealiases。

    Berkeley DB、MySQL® 等用户数据库都能支持虚拟域,操作系统的用户数据库不能支持虚拟域。在 Berkeley DB、MySQL® 等用户数据库中,虚拟域用户对应的“用户”项格式为: 用户名@虚拟域名

    为网页信箱界面书写 /usr/local/courier/etc/logindomainlist (每行第 1 部分为虚拟域名,第 2 部分为网页信箱界面网址中的域名):

    head.somecompany.com:mail.somecompany.com:mygroup
    hr.somecompany.com:mail.somecompany.com:mygroup
    finance.somecompany.com:mail.somecompany.com:mygroup
    sale.somecompany.com:mail.somecompany.com:mygroup

    当 用户以含有“mail.somecompany.com”的网址 (例如 http://mail.somecompany.com/cgi-bin/webmail ) 访问时,登录界面上就会列出信箱的域名 head.somecompany.com、 hr.somecompany.com、 finance.somecompany.com、 sale.somecompany.com 。

  26. 在操作系统启动时启动 Courier

    在 /etc/rc.local 中加上启动 courier、authdaemon、esmtpd、pop3d、sqwebmaild 命令:

    /usr/local/courier/libexec/authlib/authdaemond start
    /usr/local/courier/sbin/courier start
    /usr/local/courier/sbin/esmtpd start
    /usr/local/courier/sbin/pop3d start
    /usr/local/courier/libexec/courier/sqwebmaild start

    对于 FreeBSD®,可以按一定规范书写一个脚本并放置于 /usr/local/etc/rc.d/ 。

  27. 设置保密通信服务

    若需要 SMTP-SSL 服务、POP3-SSL 服务,还需要在 /etc/rc.local 中加上:

    /usr/local/courier/sbin/esmtpd-ssl start
    /usr/local/courier/sbin/pop3d-ssl start

    修改 /usr/local/courier/etc/esmtpd,这行改为:

    ESMTPAUTH_TLS="PLAIN LOGIN CRAM-MD5"

    同 时按照 /usr/local/courier/sbin/ 里的脚本 mkesmtpdcert、mkimapdcert、mkpop3dcert 里的内容制作数字证书。证书做好后放在 /usr/local/courier/share 里,命名为 esmtpd.pem、imapd.pem、pop3d.pem,权限设为 root 所有 400。每个 .pem 文件中都同时包含加/解密的公开钥匙、秘密钥匙和一段 Diffie-Hellman 参数。

  28. 设置需要定时进行的操作

    在 /etc/crontab 中加上清除会话文件的指令,至少一小时一次:

    #minute hour mday month wday who  command
    0 * * * * bin /usr/local/courier/share/sqwebmail/cleancache.pl
  29. 取代 FreeBSD® 基本组件中的 Sendmail

    修改 mailwrapper 的配置文件 /etc/mail/mailer.conf,使相应工具的链接指向 Courier 的工具,而不是 Sendmail 的:

    sendmail /usr/local/courier/bin/sendmail
    send-mail /usr/local/courier/bin/sendmail
    mailq /usr/local/courier/bin/mailq
    newaliases /usr/local/courier/sbin/makealiases
    hoststat /usr/local/courier/bin/mailq
    purgestat /usr/local/courier/bin/mailq
  30. 关闭 Sendmail 服务

    在 /etc/rc.conf 的尾部加入一行或修改:

    sendmail_enable="NONE"
  31. 为操作系统用户设置信件存储目录

    假如使用操作系统的用户数据库,则以各个用户的身份为没有 Maildir 的用户创建 ~user/Maildir,在该用户的家目录中执行:

    >/usr/local/courier/bin/maildirmake Maildir

    通知所有用户将自己的家目录的权限管好,不可限制太死 (如他自己也不可执行)。

    也可以 root 身份在 /usr/share/skel/ 中运行

    #/usr/local/courier/bin/maildirmake Maildir

    以后添加用户时,就一劳永逸了。

  32. 启用网页信箱界面的加密与数字签名支持

    以该用户身份在其家目录中执行:

    >/usr/local/courier/share/sqwebmail/webgpg Maildir
  33. 设置随机数发生器 (仅 FreeBSD® 4.x 需要此设置)

    用“dmesg|grep -i irq”命令查看频繁产生中断的中断请求线号 (IRQ,如网卡、硬盘) 在 /etc/rc.conf 中加入:

    rand_irqs="..."

    例如:5 号线接着网卡,14 号线接第一个 IDE 控制器,则写成:

    rand_irqs="5 14"
  34. 设置时区

    在 /usr/local/courier/share/sqwebmail/html/zh-cn/TIMEZONELIST 中写入用户需要用到的时区。该文件第一行实质内容是网页信箱界面登录时的缺省时区;若为“* *”,则表示默认使用操作系统的时区设置。例如,用户只用到中国和美国的时区,并以北京所处的东 8 区作为默认时区:

    Asia/Shanghai  北京 上海 广州
    Asia/Urumqi 拉萨 乌鲁木齐
    EST5EDT 美国东海岸
    EST 美国东部/印第安那
    CST6CDT 美国中部
    MST7MDT 美国山地
    MST 美国山地/亚利桑那
    PST8PDT 美国太平洋海岸
  35. 配置日历

    在 /usr/local/courier/etc/calendarmode 中写入

    local

配置完成后,一定要在重新启动计算机后仔细测试信箱系统的收发功能。网页信箱界面的典型入口地址是 https://www.somecompany.com/cgi-bin/webmail 。

网页信箱界面 SqWebMail 的屏幕截图
登录
信件夹清单
一般设置
信件过滤器设置
加密与数字签名设置
加载中
返回顶部
顶部