extmail+postfix+maildrop邮件系统

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
回复
7568846
帖子: 63
注册时间: 2008-10-09 10:04

extmail+postfix+maildrop邮件系统

#1

帖子 7568846 » 2009-06-06 15:33

如需转载,请注明原文地址
文章原始出处:http://blog.chinaunix.net/u2/73230/show ... id=1412112

以前在debian etch 4.0r3 系统上安装过一个postfix+dovecot+squirrelmail的邮件系统。squirrelmail的编码比较乱,在美工方面很难修改,不过,性能方面要比这次搭建的要好些。那个系统SASL认证使用的是dovecot,在双CPU环境测试中,当发送量很大时,由于dovecot进程只有一个,所以服务器的其中一个核cpu0很容易满负载运行,而其它3个核cpu1-3使用资源并不多,因此造成了瓶颈。


整个邮件解决方案需安装的组件:

功能模块 内容 备注
操作系统(OS) Debian etch 4.0r3
内核2.6.18-6-686

邮件传输代理(MTA) Postfix2.3.8-2+etch1


数据库/目录服务 MySQL-server-5.0
Version:5.0.32-7etch6

邮件投递代理(MDA) maildrop 2.0.2-11 支持过滤和强大功能
Web帐户管理后台 ExtMan 0.2.5b1 支持无限域名、无限用户
POP3 服务器 Courier-IMAP

WebMail 系统 ExtMail 1.0.5 支持多语言、全部模板化,功能基本齐全
防病毒软件(Anti-Virus) ClamAV
最热门的开源杀毒软件
SMTP阶段反垃圾邮件工具 Spam Locker 0.10 基于SMTP行为识别的Antispam软件,大量可选插件
内容过滤器 Amavisd-new2.4.2-6.1
Content-Filter软件,支持与clamav/sa的挂接
内容级别的反垃圾邮件工具 SpamAssassin 3.1.7-2 著名的SA,可以支持大量规则,但速度慢
SMTP认证库 Cyrus SASL 2.1x 标准的SASL实现库,可以支持Courier authlib
其他数据认证库 Courier Authlib 0.58-4 authlib是maildrop, courier-imap等服务的关键部件
日志分析及显示 mailgraph 1.12-2.1


Web 服务器 Apache 2.2.3-4+etch6



安装系统
这次搭建的邮件系统在是VM虚拟机中进行的。使用系统ISO软件包为: debian-40r3-i386-CD-1.iso。 通过vm虚拟机安装时只需安装一个最小的系统便可。如下图:

在vmware中安装完debian系统后,最好做一个快照。(系统运行时进行快照比较耗资源,所以建议关掉系统后再做快照)
做完快照后, 重启虚拟机中的debian系统,安装ssh
# apt-get install ssh
安装完成后,使用ssh远程登录系统,这样操作起来会比较方便。
APT源:
(注意选择正确的安装源,最好使用稳定版的,我刚开始使用testing版的,出了一堆问题)
deb http://www.anheng.com/debian/ etch main contrib non-free
#deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib
更新软件包(可选,最好更新下)
root:~# apt-get update
root:~# apt-get upgrade

安装软件
1、使用aptitude安装
# aptitude install postfix-mysq
General type of configuration? <-- Internet Site
Mail name? <-- extmail.org
# aptitude install mysql-server-5.0
# aptitude install courier-authdaemon
# aptitude install courier-authlib-mysql
# aptitude install courier-pop
Create directories for web-based administration ? <-- No
# aptitude install courier-imap
# aptitude install courier-pop-ssl
SSL certificate required <-- Ok
# aptitude install courier-imap-ssl
# aptitude install libsasl2
# aptitude install libsasl2-modules
# aptitude install libsasl2-modules-sql
# aptitude install sasl2-bin
# aptitude install libpam-mysql
# aptitude install phpmyadmin
# aptitude install php5
# aptitude install apache2
# aptitude install libapache2-mod-fcgid
# aptitude install libfcgi-perl
# aptitude install build-essential
# aptitude install libtool
# aptitude install libnet-server-perl
# aptitude install libberkeleydb-perl
# apt-get install arc zoo lzop rar
# aptitude install libstdc++5
# apt-get install libgd-gd2-perl libfile-tail-perl libdigest-sha1-perl libdigest-hmac-perl libnet-ip-perl libnet-dns-perl libhtml-tagset-perl
# aptitude install libhtml-parser-perl
# aptitude install libio-stringy-perl
# aptitude install libio-socket-ssl-perl
# aptitude install libio-zlib-perl
# aptitude install libunix-syslog-perl
# aptitude install libtimedate-perl
# aptitude install libmailtools-perl libconvert-binhex-perl
# aptitude install libconvert-tnef-perl
# aptitude install libconvert-uulib-perl libarchive-zip-perl
# aptitude install libarchive-tar-perl
2、或者使用apt-get安装下面软件:
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-fastcgi libfcgi-perl libapache2-mod-php5 php5 php5-mysql build-essential libtool libnet-server-perl libnet-cidr-perl libberkeleydb-perl arc zoo lzop liblzo1 libstdc++5 libgd-gd2-perl libfile-tail-perl libdigest-sha1-perl libdigest-HMAC-perl libnet-ip-perl libnet-dns-perl libhtml-tagset-perl libhtml-parser-perl libio-stringy-perl libio-multiplex-perl libio-socket-ssl-perl libio-zlib-perl libnet-ssleay-perl libunix-syslog-perl libtimedate-perl libmailtools-perl libconvert-binhex-perl libconvert-tnef-perl libconvert-uulib-perl libcompress-zlib-perl libarchive-zip-perl libarchive-tar-perl

下载extmail,并修改配置
我用的是ExtMail 1.0.5.tar.gz和ExtMan 0.2.5b1.tar.gz
root:~# tar zxvf extmail-1.0.5.tar.gz
root:~# tar zxvf extman-0.2.5b1.tar.gz
root:~# mkdir /var/www/extsuite
root:~# mv extmail-1.0.5 /var/www/extsuite/extmail
root:~# mv extman-0.2.5b1 /var/www/extsuite/extman
root:~# cp /var/www/extsuite/extman/docs/mysql_virtual_*.cf /etc/postfix/
注意:修改/etc/postfix/mysql_virtual_*.cf,将其中的“localhost”均改为“127.0.0.1”
root:~# chmod o= /etc/postfix/mysql_virtual_*.cf
root:~# chgrp postfix /etc/postfix/mysql_virtual_*.cf

注:如果打算使用默认用户vuser:vgroup,那么需创建此用户,且uid:gid为1000:1000.而本文为了以后方便,使用的是手动创建的用户vmail,所以需修改下边这些文件中的相关参数。
创建一个用户,并修改用户的shell改成false
root:~# groupadd -g 5566 vmail
root:~# useradd -g vmail -u 5566 vmail -d /home/vmail –m

修改uid和gid 由于程序中默认使用的为vuser:vgroup,其uid:gid为1000:1000。而当前采用了一个新建用户vmail,所以需修改程序中的所有相关参数,具体操作如下:
# chown -R vmail:vmail /var/www/extsuite/extmail/cgi/
# chown -R vmail:vmail /var/www/extsuite/extman/cgi/
root:~# cd /var/www/extsuite/extmail/
root:/var/www/extsuite/extmail# cp webmail.cf.default webmail.cf

修改/var/www/extsuite/extmail/webmail.cf里的其他参数,主要变动的内容见下:
SYS_USER_LANG = zh_CN
SYS_USER_CHARSET = gb2312
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = 127.0.0.1
SYS_MYSQL_SOCKET = /var/run/mysqld/mysqld.sock
SYS_AUTHLIB_SOCKET = /var/run/courier/authdaemon/socket
SYS_G_ABOOK_FILE_CHARSET = gb2312
SYS_MAILDIR_BASE = /home/vmail

root:/var/www/extsuite/extmail# nano ../extman/webman.cf
SYS_CAPTCHA_ON = 0 //用于关闭后台登录时的验证码
SYS_MAILDIR_BASE = /home/vmail
SYS_DEFAULT_UID = 5566
SYS_DEFAULT_GID = 5566
SYS_MYSQL_USER = webman
SYS_MYSQL_PASS = webman
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = 127.0.0.1
SYS_MYSQL_SOCKET = /var/run/mysql/mysql.sock
SYS_LANG = zh_CN

root:/var/www/extsuite/extmail# nano dispatch-init
SU_UID=vmail
SU_GID=vmail


root:/var/www/extsuite/extmail# nano dispatch_lig.sh
BASE=/var/www/extsuite/extmail
$BASE/tools/suid-with -u vmail -g vmail /usr/bin/perl $BASE/dispatch.fcgi

root:/var/www/extsuite/extmail# cd ../extman/
root:/var/www/extsuite/extman# nano tools/setid.pl
set_gid('vmail');
set_uid('vmail');

root:/var/www/extsuite/extman# nano tools/adminctl.pl
--setgid=vmail
--setuid=vmail
同样修改下边的三个文件
root:/var/www/extsuite/extman# nano tools/userctl.pl root:/var/www/extsuite/extman# nano tools/aliasctl.pl root:/var/www/extsuite/extman# nano tools/domainctl.pl

root:/var/www/extsuite/extman# nano addon/passwd2ext.pl
my $sock = '/var/run/mysql/mysql.sock';
my $uid = '5566';
my $gid = '5566';
root:/var/www/extsuite/extman# nano libs/Ext/Mgr/LDAP.pm
uidNumber => $opt{uidnumber} || '5566', //349行
gidNumber => $opt{gidnumber} || '5566', //350行

uidNumber => $opt{uidnumber} || '5566', //541行
gidNumber => $opt{gidnumber} || '5566', //542行
root:/var/www/extsuite/extman# nano docs/init.ldif
uidNumber: 5566
gidNumber: 5566


# nano /var/www/extsuite/extman/docs/init.sql
修改18行中的uid和gid
INSERT INTO `mailbox` VALUES ('postmaster@extmail.org','postmaster','$1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0','','PostMaster','','extmail.org/postmaster/Maildir/','extmail.org/postmaster','104857600S','52428800S','extmail.org',5566,5566,'2007-02-14 15:10:04','2010-11-08',1,0,0,0,0,0,0,0,'my question', 'my answer');

# nano /var/www/extsuite/extman/docs/extmail.sql
修改uid和gid
CREATE TABLE mailbox (


129行 uidnumber int(6) NOT NULL default '5566',
130行 gidnumber int(6) NOT NULL default '5566',
︰)
到此,vmail用户组修改完毕。

数据库初始化
执行以下命令导入mysql数据库结构及初始化数据,注意必须逐行输入以下命令,root密码默认为空
root:~# mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sql
root:~# mysql -u root -p < /var/www/extsuite/extman/docs/init.sql

链接基本库到Extmail
建立临时文件夹:
root:~# mkdir /tmp/extman
root:~# chown -R vmail:vmail /tmp/extman
root:~# nano /etc/rc.local
编辑rc.local,加入下面内容以实现开机自动建立
if [ ! -d /tmp/extman ]; then
mkdir /tmp/extman
chown -R vmail:vmail/tmp/extman
fi

注:linux系统有个tmpwatch工具,该工具会定期扫描/tmp/下的文件,如果这些文件很久都没被使用,将被删除,因此如果后台长期不使用,/tmp/extman目录有可能被tmpwatch删除,所以要么定期登陆后台,要么修改 webman.cf将临时目录修改到另一个地方。此处暂以/tmp/extman默认值为例。

建立上边导入mysql的postmaster@extmail.org帐户的Maildir,请输入如下命令:
root:~# cd /var/www/extsuite/extman/tools
# ./maildirmake.pl /home/vmail/extmail.org/postmaster/Maildir
# chown -R vmail:vmail /home/vmail/extmail.org/

Postfix配置
修改/etc/postfix/mysql_virtual_*.cf,将其中的localhost均改为127.0.0.1
# cd /etc/postfix/
# cp main.cf main.cf.old
# nano main.cf
mydomain = extmail.org
myhostname = mail. $mydomain
myorigin = $mydomain
mydestination = mail.$mydomain, localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8
virtual_alias_maps =mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry,the user's Maildir has overdrawn his disk$
virtual_overquota_bounce = yes


# /etc/init.d/postfix restart

Apache2配置
# nano /etc/apache2/sites-enabled/000-default
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/extsuite/
Alias /extmail/cgi/ /var/www/extsuite/extmail/dispatch.fcgi/
Alias /extmail /var/www/extsuite/extmail/html/
<Location "/extmail/cgi">
SetHandler fcgid-script
</Location>
ScriptAlias /extman/cgi/ /var/www/extsuite/extman/dispatch.fcgi/
Alias /extman/ /var/www/extsuite/extman/html/
<Directory />
:
:
</VirtualHost>


# nano /etc/apache2/apache2.conf

User vmail //添加apache2的启动用户 vmail group vmail
Group vmail



编辑/var/www/extsuite/extmail/dispatch-init文件:
MAXFORK=10
最后启动fastcgi server:
# /var/www/extsuite/extmail/dispatch-init start

# /etc/init.d/apache2 restart
访问页面
http://192.168.1.121/extman/cgi/index.cgi
后台用户名:root@extmail.org 密码:extmail*123*


SMTP认证
1.更改saslauthd
# nano /etc/default/saslauthd
更改如下几项
START=yes 设置开机自动启动
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

2. 创建文件/etc/pam.d/smtp
内容如下:
auth required pam_mysql.so user=extmail passwd=extmail host=127.0.0.1 db=extmail table=mailbox usercolumn=username passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=extmail passwd=extmail host=127.0.0.1 db=extmail table=mailbox usercolumn=username passwdcolumn=password crypt=1

解释一下:其实就是定义一个查询的方式 crypt=1或者0表示加密或者不加密 注意对照你的数据库 还有用户名密码 请保持跟自己的一致

3.由于postfix处于chroot,要想调用到saslauthd 必须更改socket文件
#mkdir /var/spool/postfix/var/run/saslauthd
#nano /etc/postfix/sasl/smtpd.conf 创建smtpd.conf,并且内容如下:
pwcheck_method:saslauthd
mech_list:plain login
allow_plaintext: true
auxprop_plugin: mysql
sql_hostnames: 127.0.0.1
sql_user: extmail
sql_password: extmail
sql_database: extmail
log_level:7
sql_select: SELECT password FROM mailbox WHERE username='%u@%r' and domain='%r'


4.更改main.cf 文件
###########SASL######################
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
加入以上的内容

5.重启postfix saslauthd
# /etc/init.d/postfix restart
# /etc/init.d/saslauthd restart
# telnet localhost 25
ehlo localhost
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
出现这两项表示 sasl 配置成功

然后继续操作
auth login
334 VXNlcm5hbWU6
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
334 UGFzc3dvcmQ6
ZXh0bWFpbA==
235 2.0.0 Authentication successful
quit
221 2.0.0 Bye



如果出现Authentication successful 表示没有问题了

POP验证
# nano /etc/courier/authdaemonrc 更改如下一项
authmodulelist="authmysql"
# cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
# cat /dev/null > /etc/courier/authmysqlrc
# nano /etc/courier/authmysqlrc
内容如下:
MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME extmail
MYSQL_PASSWORD extmail
MYSQL_SOCKET /var/run/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD uidnumber
MYSQL_GID_FIELD gidnumber
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD homedir
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD quota
MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,\
CONCAT('/home/vmail/',homedir), \
CONCAT('/home/vmail/',maildir), \
quota, \
name, \
CONCAT("disablesmtpd=",disablesmtpd, \
",disablesmtp=",disablesmtp, \
",disablewebmail=",disablewebmail, \
",disablenetdisk=",disablenetdisk, \
",disableimap=",disableimap, \
",disablepop3=",disablepop3, \
",netdiskquota=",netdiskquota) \
FROM mailbox \
WHERE username = '$(local_part)@$(domain)'


配置Courier-POP3
编辑/etc/courier/pop3d修改下面参数
MAILDIRPATH=/home/vmail/

配置Courier-IMAP
编辑/etc/courier/imapd修改下面参数
MAILDIRPATH=/home/vmail/
# /etc/init.d/courier-authdaemon restart

测试Courier-Authlib是否能成功连接mysql
# authtest -s login postmaster@extmail.org extmail
如果成功应该有如下显示
Authentication succeeded.
Authenticated: postmaster@extmail.org (uid 1000, gid 1000)
Home Directory: /home/vmail/extmail.org/postmaster
Maildir: /home/vmail/extmail.org/postmaster/Maildir/
Quota: 104857600S
Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0
Cleartext Password: extmail
Options:disablesmtpd=0,disablesmtp=0,disablewebmail=0,disablenetdisk=0,disableimap=0,disablepop3=0,netdiskquota=52428800S

如果出现error请检查数据库连接,分析mail.log。 一般都是input/output
Tips: chown daemon:vmail /var/run/courier/authdaemon 可能避免错误

测试pop3
telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Hello there.
user postmaster@extmail.org
+OK Password required.
pass extmail
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
.
quit
+OK Bye-bye.
Connection closed by foreign host.

如果出现问题请仔细分析日志
MDA配置
概念:MDA mail deliver agent其实就是邮件投递代理,postfix本身有很多邮件投递代理,由于我们的环境 虚拟域 所以可以使用postfix自己的virtual 这个代理,但是它必须创建一个用户来执行投递操作,main.cf中有记录象这样:
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = virtual
下面介绍另一种MDA maildrop

安装Maildrop
# aptitude install maildrop
# nano /etc/maildropmysql.config //创建一个文件
hostname 127.0.0.1
port 3306
database extmail
dbuser extmail
dbpw extmail
dbtable mailbox
default_uidnumber 5566
default_gidnumber 5566
uidnumber_field uidnumber
gidnumber_field gidnumber
uid_field username
homedirectory_field concat('/home/vmail/',homedir,'/')
maildir_field concat('/home/vmail/',maildir)
quota_field quota
mailstatus_field active


修改/etc/maildroprc
logfile "/var/log/maildrop.log"

手动创建日志
# nano /var/log/maildrop.log
# chown vmail:vmail /var/log/maildrop.log
# chmod 766 /var/log/maildrop.log

创建 /etc/logrotate.d/maildrop
/var/log/maildrop.log {
daily
notifempty
missingok
rotate 5
compress
create 766 vmail vmail
sharedscripts
}

编辑/etc/postfix/master.cf,注释掉原来maildrop的配置内容并改为:
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}

由于maildrop不支持一次接收多个收件人,因此必须在/etc/postfix/main.cf增加如下参数:
maildrop_destination_recipient_limit = 1
virtual_transport = maildrop:

创建 /etc/quotawarnmsg,为邮箱空间超过配额时的警告邮件内容
X-Comment: Rename/Copy this file to quotawarnmsg, and make appropriate changes
X-Comment: See deliverquota man page for more information
From: Mail Delivery System <Mailer-Daemon@example.com>
Reply-To: support@example.com
To: Valued Customer:;
Subject: Mail quota warning
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

Your mailbox on the server is now more than 90% full. So that you can continue
to receive mail you need to remove some messages from your mailbox.

图形日志extmail
# aptitude install mailgraph
# cp -r /var/www/extsuite/extman/addon/mailgraph_ext/ /usr/local/mailgraph_ext

修改/usr/local/mailgraph_ext/mailgraph-init为:
MAIL_LOG=/var/log/mail.log
启动mailgraph:
#/usr/local/mailgraph_ext/mailgraph-init start

到此,本系统基本上是安装完毕了。

最后,安装amavisd+spamaasion,并配置postfix规则,邮件系统基本就算完成了。在此就省略不提了。
附件
debian架构extmail.rar
(88.81 KiB) 已下载 77 次
上次由 7568846 在 2009-07-06 14:24,总共编辑 1 次。
needleyes
帖子: 9
注册时间: 2008-05-23 15:45

Re: extmail+postfix+maildrop邮件系统

#2

帖子 needleyes » 2009-06-24 11:16

这么好的帖子怎么没人顶呢!


沙发!!!!1 :em04
bearpc
帖子: 13
注册时间: 2009-03-21 23:30

Re: extmail+postfix+maildrop邮件系统

#3

帖子 bearpc » 2009-06-30 0:06

的确好东西,没人顶啊!
回复