maildrop是一个使用C++编写的用来代替本地MDA的带有过滤功能邮件投递代理,是courier邮件系统组件之一。它从标准输入接受信息并投递到用户邮箱;maildrop既可以将邮件投递到mailboxes格式邮箱,亦可以将其投递到maildirs格式邮箱。同时,maildrop可以从文件中读取入站邮件过滤指示,并由此决定是将邮件送入用户邮箱或者转发到其它地址等。和procmail不同的是,maildrop使用结构化的过滤语言,因此,邮件系统管理员可以开发自己的过滤规则并应用其中,在此将使用maildrop来代替postfix自带的MDA,并以此为基础扩展邮件杀毒和反垃圾邮件功能的调用;
1. 安装
[root@localhost ~]# tar xf maildrop-2.8.3.tar.bz2
[root@localhost ~]# cd maildrop-2.8.3
1.1 因为编译maildrop时会到某些特定目录下找相关的文件,所以将courier-authlib的头文件及库文件链接至/usr目录:
导出courier-authlib的库文件:
[root@localhost maildrop-2.8.3]# vim /etc/ld.so.conf.d/courier-authlib.conf
/usr/local/courier-authlib/lib/courier-authlib
[root@localhost maildrop-2.8.3]# ldconfig -v
[root@localhost ~]# ln -sv /usr/local/courier-authlib/include/* /usr/include/
`/usr/include/courier_auth_config.h' -> `/usr/local/courier-authlib/include/courier_auth_config.h'
`/usr/include/courierauthdebug.h' -> `/usr/local/courier-authlib/include/courierauthdebug.h'
`/usr/include/courierauth.h' -> `/usr/local/courier-authlib/include/courierauth.h'
`/usr/include/courierauthsaslclient.h' -> `/usr/local/courier-authlib/include/courierauthsaslclient.h'
`/usr/include/courierauthsasl.h' -> `/usr/local/courier-authlib/include/courierauthsasl.h'
`/usr/include/courierauthstaticlist.h' -> `/usr/local/courier-authlib/include/courierauthstaticlist.h'
[root@localhost ~]# ln -sv /usr/local/courier-authlib/bin/courierauthconfig /usr/bin/
`/usr/bin/courierauthconfig' -> `/usr/local/courier-authlib/bin/courierauthconfig'
1.2 创建用户
[root@localhost ~]# groupadd -g 1111 vmail
[root@localhost ~]# useradd -g 1111 -u 1111 -M -s /sbin/nologin vmail
1.3 编译maildrop
maildrop需要pcre的支持,因此需要事先提供pcre的头文件及库文件等开发组件。如果选择以yum源来提供pcre,请确保安装pcre-devel包
[root@localhost ~]# yum install pcre-devel
[root@localhost maildrop-2.8.3]# ./configure \
--enable-sendmail=/usr/sbin/sendmail \
--enable-trusted-users='root vmail' \
--enable-syslog=1 --enable-maildirquota \
--enable-maildrop-uid=1111 \
--enable-maildrop-gid=1111 \
--with-trashquota --with-dirsync
其中:
--enable-sendmail=/usr/sbin/sendmail定义sendmail位置
--enable-trusted-users='root vmail'定义信任的邮件投递用户为root和vmail
--enable-syslog=1 --enable-maildirquota将错误信息发送到系统日志中
--enable-maildirquota定义启用用户邮箱有限额功能(./configure --help中没有)
--enable-maildrop-uid=1111 定义maildrop的UID
--enable-maildrop-gid=1111定义maildrop的GID
--with-trashquota定义邮件回收站也有限额
--with-dirsync定义目录之间可以同步
这里之所以不指定安装路径是因为postfix在调用maildrop时会自动去找maildrop而maildrop的默认安装路径和postfix的master.cf文件中定义的argv=/usr/local/bin/maildrop的路径刚好是一致的,所以不需要再指定安装路径了,反倒是指定了路径还要修改master.cf文件中的内容;
[root@localhost maildrop-2.8.3]# make && make install
1.4 检查安装结果
[root@mail maildrop-2.8.3]# maildrop -v出现错误
maildrop: error while loading shared libraries: libcourier-unicode.so.1: cannot open shared object file: No such file or directory
解决:将libcourier-unicode.so.1等导出到共享库
[root@localhost maildrop-2.8.3]# vim /etc/ld.so.conf.d/courier-unicode.conf
/usr/local/lib
[root@localhost maildrop-2.8.3]# ldconfig -v
重新测试:
[root@localhost maildrop-2.8.3]# maildrop -v
maildrop 2.8.3 Copyright 1998-2015 Double Precision, Inc.
GDBM/DB extensions enabled.
Courier Authentication Library extension enabled. #确保出现这句话
Maildir quota extension are now always enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.
2. 配置maildrop
2.1 为maildrop新建配置文件maildroprc
[root@localhost maildrop-2.8.3]# vim /etc/maildroprc
logfile "/var/log/maildrop.log" #指定maildrop的日志记录位置
2.2 创建maildrop的日志文件并更改其属性
[root@localhost maildrop-2.8.3]# touch /var/log/maildrop.log
[root@localhost maildrop-2.8.3]# chown vmail.vmail /var/log/maildrop.log
3. 配置postfix
3.1 编辑postfix的master.cf文件
[root@mail postfix]# pwd
/etc/postfix
[root@mail postfix]# vim master.cf
去掉下面两行的注释
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} #注意保留改行前面的空格
3.2 编辑main.cf
[root@mail postfix]# vim main.cf
将virtual_transport = virtual改为virtual_transport = maildropl
将virtual_uid_maps = static:2525和virtual_gid_maps = static:2525
改为
virtual_uid_maps = static:1111和virtual_gid_maps = static:1111
3.3 编辑/etc/authmysqlrc
[root@mail postfix]# vim /etc/authmysqlrc
将MYSQL_UID_FIELD 2525改为MYSQL_UID_FIELD 1111
将MYSQL_GID_FIELD 2525改为MYSQL_GID_FIELD 1111
3.4 编辑/etc/httpd/conf/httpd.conf修改运行用户(这里使用的是虚拟主机)
[root@mail postfix]# vim /etc/httpd/conf/httpd.conf
将虚拟主机配置段中启用的SuexecUserGroup postfix postfix改为SuexecUserGroup vmail vmail
或者
将User apache和Group apache改为vmail也可以。具体看自己的配置;
3.5 编辑extman的配置文件修改默认用户的UID和GID
[root@mail extman]# pwd
/var/www/extsuite/extman
[root@mail extman]# vim webman.cf
将SYS_DEFAULT_UID = 2525改为SYS_DEFAULT_UID = 1111
将SYS_DEFAULT_GID = 2525改为SYS_DEFAULT_GID = 1111
3.6 将extman的临时目录extman和用户邮件目录mailbox的属主属组改为vmail
[root@mail extsuite]# chown -R vmail.vmail /var/mailbox/
[root@mail extsuite]# chown -R vmail.vmail /tmp/extman/
3.7 重启服务
[root@mail extsuite]# service courier-authlib restart
Stopping Courier authentication services: authdaemond
Starting Courier authentication services: authdaemond
[root@mail extsuite]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@mail extsuite]# service postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
3.8 测试
在未安装mialrdrop时,发送邮件,邮件日志是:
Sep 4 01:58:39 localhost postfix/qmgr[26510]: AAB3661AC5: from=<zcx@a.com>, size=551, nrcpt=1 (queue active)
Sep 4 01:58:40 localhost postfix/virtual[27379]: AAB3661AC5: to=<zzd@a.com>, relay=virtual, delay=0.45, delays=0.24/0.19/0/0.03, dsn=2.0.0, status=sent (delivered to maildir)
现在再次通过extmail发信:
出现错误:
因为此时我的虚拟主机配置段中是SuexecUserGroup vmail vmail,全局配置段中是User apache Group apache,可能是SuexecUserGroup不兼容,将SuexecUserGroup vmail vmail一行注释,然后将User和Group改为User vmail和Group vmail;
重启httpd服务后登录发送邮件,此时的邮件日志为:
Sep 4 06:56:35 localhost postfix/pipe[13943]: 1CF8361AF9: to=<zzd@a.com>, relay=maildrop, delay=0.26, delays=0.1/0.05/0/0.11, dsn=2.0.0, status=sent (delivered via maildrop service)