您的位置:首页 > 其它

全开源中小规模邮件服务器架设方案

2011-11-04 14:37 330 查看
一、安装apache+php+mysql+phpMyAdmin
官方网站:http://www.apache.org
http://www.php.net
http://www.mysql.com
安装mysql(假设下载的软件都在/mysrc目录):
建立用户和组
#grep mysql /etc/group
查询系统中是否有mysql这个用户组,没有则添加。
#groupadd mysql
# grep mysql /etc/passwd
#查询系统中是否有mysql这个用户,没有则添加。
#useradd -g mysql -M -s /bin/false mysql
#cd /mysrc
#tar zvfx mysql-5.1.51.tar.gz
#cd mysql-5.1.51
配置安装参数,生成Makefile文件
#./configure --prefix=/usr/local/mysql --with-charset=gbk --with-collation=gbk_chinese_ci \
--with-extra-charsets=gb2312,big5,utf8,binary,ascii --enable-thread-safe-client
编译并安装
#make && make install
#cd /usr/local/mysql
设置/usr/local/mysql目录属主
#chown –R mysql .
#chgrp –R mysql .
初始化数据库
#bin/mysql_install_db --user=mysql
#chown –R root .
#chown -R mysql var
mysql配置文件my.cnf
# cp /mysrc/mysql-5.1.51/support-files/my-medium.cnf /etc/my.cnf
运行mysql数据库
#bin/mysqld_safe --user=mysql &
mysql.server是mysql数据库运行控制脚本,拷贝到系统目录加可执行属性
#cp /mysrc/mysql-5.1.51/support-files/mysql.server /etc/rc.d/init.d/mysqld
#chmod +x /etc/rc.d/init.d/mysqld
初始化后的数据库访问密码为空,在此设定并记住新密码
#/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
#/usr/local/mysql/bin/mysqladmin -u root -h localhost.localdomainpassword 'new-password'
配置开机自动运行Mysql数据库服务
#ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc3.d/S99mysqld
#ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc3.d/K99mysqld
#ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc5.d/S99mysqld
#ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc5.d/K99mysqld
因为作为了一个系统服务,数据库开启和关闭可以通过下面2条命令完成
#service mysqld start
#service mysqld stop
后面的Postfix,Dovecot等软件的编译需要用到Mysql库文件,设定系统可搜索路径能够找到它们,避免出现编译错误。
#vi /etc/ld.so.conf.d/mysql.conf加入下面一行内容,保存退出。
/usr/local/mysql/lib/mysql
刷新动态链接库搜索路径
#ldconfig
Mysql运行出现问题,确认文件权限的同时查看最新的日志
#tail /usr/local/mysql/var/localhost.localdomain.err
我的Mysql配置文件/etc/my.cnf部分内容如下:
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/var
pid-file = /usr/local/mysql/var/localhost.localdomain.pid
port = 3306
socket = /tmp/mysql.sock
#default-character-set = gbk
character-set-server = utf8
#DO not use skip-locking after 5.1,useskip-external-locking
#skip-locking
skip-external-locking
安装apache(假设下载的是bz2文件):
进入到源码包存放处,解包、配置、编译和安装
#cd /mysrc
#tar -xjvf httpd-2.2.16.tar.bz2
#cd httpd-2.2.16
准备采用apache模块安装php,web方式的extmail系统则需要运行在suexec环境。其他参数另作它用。
#./configure --prefix=/usr/local/apache --enable-so--enable-ssl=shared --enable-proxy=shared --enable-rewrite=shared --enable-deflate --enable-headers --with-mpm=worker--enable-suexec --with-suexec-bin=/usr/local/apache/bin/suexec--with-suexec-caller=nobody
--with-suexec-docroot=/var/www --with-suexec-logfile=/var/log/apache/suexec.log

#make && make install
安装php(支持GD库,php页面图形验证码会用到)
下载libiconv,freetype, libpng, jpegsrc, gd http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz http://www.freetype.org/下载freetype-2.4.3.tar.gz http://www.libpng.org/pub/png/libpng.html下载libpng-1.4.4.tar.gz http://www.ijg.org/下载jpegsrc.v8b.tar.gz http://www.zlib.net/下载zlib-1.2.5.tar.gz http://www.libgd.org/Downloads下载gd-2.0.35.tar.gz http://www.gnu.org/software/libtool/下载libtool ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/下载libmcrypt
安装下载的文件
GNU的libiconv主要是解决多语言编码处理转换等应用问题。
#tar zvfx libiconv-1.13.1.tar.gz
进入到源程序根目录
#cd libiconv-1.13.1
安装到/usr/local目录,&&连接多个命令顺序执行,中途出现错误请单个执行并检查。
为了管理的方便,我们可以将这些软件安装到指定的位置如/usr/local/libiconv,这就是源码编译的一个小问题,不同的用户有不同的软件安装习惯,随着软件的增多,文件越来越多,软件之间的相互依赖随之增多,管理难度不断加大,不少用户基于这个原因选择了系统的安装管理套件来使用和管理软件,如APT(AdvancedPackaging Tool)和RPM(RedHat Package Manager)。
#./configure --prefix=/usr/local && make && make install
进入上一级目录,也就是/mysrc
# cd ..
#tar zvfx freetype-2.4.3.tar.gz
#cd freetype-2.4.3
#./configure --prefix=/usr/local && make && make install
省略文件解包和目录切换,下文同。
#./configure --prefix=/usr/local && make && make install
安装jpegsrc.v8b
默认安装即可支持静态和共享库--enable-static --enable-shared。
#./configure --prefix=/usr/local && make && make install
安装zlib-1.2.5
#./configure --prefix=/usr/local && make && make install
安装gd-2.0.35
# ./configure --prefix=/usr/local --with-jpeg=/usr/local --with-png=/usr/local--with-zlib=/usr/local/ --with-freetype=/usr/local
#make && make install
安装libtool-2.4
# ./configure --prefix=/usr/local && make && make install
安装libmcrypt5.2.7
#./configure --prefix=/usr/local && make && make install
安装php5.2.14
# ./configure --prefix=/usr/local/php--with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql--with-jpeg-dir=/usr/local --with-freetype-dir=/usr/local--with-png-dir=/usr/local --with-gd=/usr/local --with-zlib-dir=/usr/local--with-mcrypt=/usr/local
--enable-mbstring --enable-sockets
#make && make test && make install
PHP配置文件php.ini,可以进行适当的编辑以满足网站需要。
#cp /mysrc/php-5.2.14/php.ini-recommended /usr/local/php/lib/php.ini
编辑apache配置文件httpd.conf使支持PHP
#vi httpd.conf
确保有如下几行内容
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php .php3
AddType application/x-httpd-php-source .phps
DirectoryIndex index.html index.htm index.php
至此,LAMP环境以搭建完毕,让我们检验一下吧,在网站的根目录/usr/local/apache/htdocs下建立一个test.php文件,内容如下:
<?php
echophpinfo();
?>
开启web服务器
# /usr/local/apache/bin/apachectl start
访问这个页面,假设服务器的IP是192.168.1.100,那么在浏览器里输入http://192.168.1.100/test.php,成功运行将会出现PHP的logo图标和配置信息。为了保密和安全的需要,现在有些php脚本程序进行了Zend加密,不能直接读取源码,需要安装Zend Optimizer才能正常运行,下载地址是http://www.zend.com,这里不再赘述。
phpMyAdmin是Mysql数据库管理的得力助手,强烈建议大家采用,它是一个类似于SQL Server的可视化图形管理工具,使开发应用人员摆脱了只能通过命令行进行Mysql数据库操作的尴尬局面。官方网址http://www.phpmyadmin.net,当前版本3.3.7
#tar zvfx phpMyAdmin-3.3.7-all-languages.tar.gz
#mv phpMyAdmin-3.3.7-all-languages /usr/local/apache/htdocs/phpmyadmin
#cd /usr/local/apache/htdocs/phpmyadmin
# cp config.sample.inc.php config.inc.php
编辑config.inc.php,修改2行,其它不变。
#vi config.inc.php
$cfg['blowfish_secret'] = 'cookie-auth'
$cfg['Servers'][$i]['auth_type'] = 'http'
我们这里采用了http认证方式,访问时输入访问数据库的用户名和密码,也可以选用cookie方式。访问下试试http://192.168.1.100/phpmyadmin/,输入root和密码就可以进入数据库控制界面了,前提是WEB(Apache)服务和Mysql数据库服务已经开启。
二、安装postfix
因为系统中已存在Sendmail这样一个MTA程序,我们需要用Postfix替换它,如果是已经投入使用的程序,可以让其完成邮件的投递任务后再做替换。实际上现有操作系统使用MTA切换器来选择不同的邮件传输代理(Sendmail,Postfix等),如FreeBSD mailwrapper 或者 the Linux mail switch,那样的话只需要选项切换到Postfix就可以了,我们通过如下方式手动修改:
关闭sendmail服务
# /etc/rc.d/init.d/sendmail stop
设置其不在系统启动时启动
# chkconfig -levels 12345 sendmail off
#mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
#mv /usr/bin/newaliases /usr/bin/newaliases.OFF
#mv /usr/bin/mailq /usr/bin/mailq.OFF
#chmod 755 /usr/sbin/sendmail.OFF /usr/bin/newaliases.OFF /usr/bin/mailq.OFF
开始安装:
创建postfix用户和组,并建立一个无任何用户的组postdop,用户postfix不需要自己的主目录也不需要登录,所以设定参数-d/dev/null -s/bin/false。
#groupadd -g 12345 postfix
#useradd -u 12345 -g 12345 -c postfix -d/dev/null -s/bin/false postfix
#groupadd -g 54321 postdrop
发信认证模块,Postfix在2.3版本以前只支持Cyrus SASL,现在多了一个选择,那就是Dovecot SASL。安装postfix会用到Cyrus SASL的文件,先安装Cyrus SASL。
#http://www.cyrusimap.org下载Cyrus SASL
#tar zvfx cyrus-sasl-2.1.23.tar.gz
#cd cyrus-sasl-2.1.23
# tar zvfx postfix-2.7.1.tar.gz
# cd postfix-2.7.1
生成Makefile文件,编译Postfix支持SMTP AUTH和TLS,CentOS5.5已包含了Openssl,头文件(例如ssl.h)在/usr/include/openssl中,如果自我编译Openssl请注意文件路径。
# make makefiles CCARGS='-DHAS_MYSQL-I/usr/local/mysql/include/mysql \
-DUSE_SASL_AUTH-DDEF_SERVER_SASL_TYPE=\"dovecot\" \
-DUSE_TLS -I/usr/include/openssl' \
AUXLIBS='-L/usr/local/mysql/lib/mysql -lmysqlclient-lz -lm \
-L/usr/lib -lssl -lcrypto'
#
#make install
编译完后会进入交互式的问答,选择默认值即可,没有默认值请参照如下设置:
install_root: [/]
config_directory: [/etc/postfix]
tempdir: [/tmp]
command_directory: [/usr/sbin]
daemon_directory: [/usr/libexec/postfix]
data_directory: [/var/lib/postfix]
html_directory: [no]
mail_owner: [postfix]
mailq_path: [/usr/bin/mailq]
manpage_directory: [/usr/local/man]
newaliases_path: [/usr/bin/newaliases]
queue_directory: [/var/spool/postfix]
readme_directory: [no]
sendmail_path: [/usr/sbin/sendmail]
setgid_group: [postdrop]
安装完毕。
检查postfix支持的SASL验证类型,参数-a查询服务器端类型,用来验证登录用户,-A查询客户端类型,Postfix用来和别的服务器通讯。Dovecot现在只支持服务端验证,Cyrus SASL两者都支持,若要使用,先要安装好Cyrus SASL并修改Postfix编译参数如下:
# make makefiles CCARGS='-DHAS_MYSQL-I/usr/local/mysql/include/mysql \
-DUSE_CYRUS_SASL -DUSE_SASL_AUTH -I/usr/local/include/sasl \
-DUSE_TLS -I/usr/include/openssl' \
AUXLIBS='-L/usr/local/mysql/lib/mysql -lmysqlclient-lz -lm -L/usr/local/lib -lsasl2 \
-L/usr/lib -lssl -lcrypto'
#查看Postfix可用的SASL类型
#postconf -a
查看postfix default设置
#postconf -d
查看用户自定义设置
#postconf –n
修改用户自定义设置
#postconf -e
创建用户和邮箱目录,假定虚拟用户邮件全部在/var/vmail中。
#mkdir /var/vmail
#groupadd -g 1001 vmail
#useradd -u 1001 -g 1001 -d/var/vmail -s/bin/false vmail
#chown vmail:vmail /var/vmail
#chmod 700 /var/vmail
附相关配置文件,请根据实际情况修改。邮箱采用Maildir格式,用户的邮箱目录格式是/var/vmail/domain/username/Maildir。
#vi /etc/postfix/main.cf
#=====================BASE=========================
myhostname = mail.test.com
mydomain = test.com
myorigin = $mydomain
mydestination =
mynetworks = 192.168.1.0/24,127.0.0.0/8
inet_interfaces = all
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
home_mailbox = Maildir/
##recommend options
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
##
#=====================Vritual Mailboxsettings=========================
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps =mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains =mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_maps =mysql:/etc/postfix/mysql_virtual_alias_maps.cf
# 运行LDA的用户必须拥有邮箱目录/var/vmail的权限
#这里的uid则该是vmail的uid,虚拟用户均用此id权限进入邮箱。
virtual_minimum_uid = 1001
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001
#本文使用maildrop投递邮件,不使用Postfix的LDA也不使用Dovecot的LDA,
#大家可以参考官方文档调整配置。
#virtual_transport = virtual
virtual_transport = maildrop
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1
#====================QUOTA========================
#每封信的最大大小(字节),Postfix默认值10M
message_size_limit = 10240000
#邮箱的大小,设定为20M
virtual_mailbox_limit = 20971520
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'smaildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes
#====================SASL========================
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
#cyrus or dovecot for SASL
smtpd_sasl_type = dovecot
#这里要和dovecot配置文件中的配置相对应,设置相对路径有助于在chroot环境下使用。
#实际上是/var/spool/postfix/private/auth
smtpd_sasl_path = private/auth
#使用Cyrus SASL认证,这里注释掉,我们这里用Dovecot SASL。
#smtpd_sasl_type = cyrus
# Postfix 2.3 and later for cyrus
#smtpd_sasl_path = smtpd
# Postfix < 2.3
#smtpd_sasl_application_name = smtpd

#有一些Microsoft 的SMTP客户端,比如Outlook Express 4.X和MicroSoft Exchange 5.0
#采用的是非标准的SMTP认证协议,将该选项设置为yes可以解决这类不兼容问题。
broken_sasl_auth_clients = yes
#设置认证链,允许本地用户、认证成功用户通过SMTP发送邮件,拒绝不符合条件
#的用户发信。
#下列参数请放于一行
smtpd_recipient_restrictions =permit_mynetworks,permit_sasl_authenticated,
reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,
reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,
reject_unauth_pipelining,reject_unauth_destination,permit

#如果系统支持TLS请创建好相关证书,否则请注释掉接下来的配置内容。
#参考文档http://www.postfix.org/TLS_README.html。
#### TLS bits ####
smtpd_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes

## Location of key, cert and CA-cert.
## These files need to be generated using openssl

smtp_tls_CAfile = /etc/postfix/tls/cacert.pem'
smtp_tls_cert_file = /etc/postfix/tls/mycert.pem'
smtp_tls_key_file = /etc/postfix/tls/mykey.pem'
smtpd_tls_cert_file = /etc/postfix/tls/mycert.pem
smtpd_tls_key_file = /etc/postfix/tls/mykey.pem
smtpd_tls_CAfile = /etc/postfix/tls/cacert.pem

#To increase TLS activity logging set thesmtpd_tls_loglevel option to a value from 1 to 4.
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_starttls_timeout=60s
smtpd_tls_session_cache_timeout = 3600s
tls_random_exchange_name = /var/run/prng_exch
tls_random_source = dev:/dev/urandom
tls_smtp_use_tls = yes
ipv6_version = 1.25
三、安装Maildrop
http://www.courier-mta.org/download.php#maildrop 下载 maildrop-2.5.1.tar.bz2
http://wiki.dovecot.org/maildrop/ 下载maildrop-2.3.0-dovecotauth.patch.txt
Maildrop最新版本是2.5.1,现有的认证补丁2.3.0没有明确支持,尝试一下,有问题可以查看补丁文件手动修改原文件,然后编译安装。
#tar jvfx maildrop-2.5.1.tar.bz2
这里补丁文件与maildrop-2.5.1.tar.bz2在同一目录/mysrc下
#cd maildrop-2.5.1
#patch –p0 < ../maildrop-2.3.0-dovecotauth.patch.txt
找不着文件分别输入maildrop/main.C、maildrop/Makefile.am、maildrop/Makefile.in,没有错误则完成打补丁工作。
#配置maildrop,准备编译安装
#./configure --enable-sendmail=/usr/sbin/sendmail \
--enable-trusted-users='root vmail' \
--enable-syslog=1 \
--enable-maildirquota \
--enable-maildrop-uid=vmail \
--enable-maildrop-uid=vmail \
--with-trashquota \
--with-dirsync
#修正补丁文件(dovecotauth.h和dovecotauth.c)位置
# cp maildrop-2.3.0/maildrop/dovecotauth.* ./maildrop/
#make && make install
修改对应Postfix配置文件master.cf,找到maildrop行并修改为:
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -t/var/run/dovecot/auth-master -d ${recipient}

设定Maildrop的日志和配置文件/etc/maildroprc
#touch /var/log/maildrop.log
Maildrop很容易出现无法读写日志文件,无法创建邮箱的错误,主要是文件权限的问题。
#chown vmail:vmail /var/log/maildrop.log
#vi /etc/maildroprc
SHELL="/bin/bash"
SENDMAIL="/usr/sbin/sendmail -oi -t"
logfile "/var/log/maildrop.log"
DEFAULT="$HOME/Maildir/"
#dovecot-sql.conf针对虚拟用户根目录的查询及设定
#user_query = SELECT concat('/var/vmail/', homedir)as home, concat('maildir:/var/vmail/', maildir) as mail, 1001 AS uid, 1001 AS gid,concat('maildir:storage=', quota) AS quota FROM mailbox
#DEFAULT="./Maildir/"
# 有的dovecot-sql.conf如下设定用户根目录
#user_query = SELECT concat('/var/vmail/', maildir)as home, concat('maildir:/var/vmail/', maildir) as mail, 1001 AS uid, 1001 AS gid,concat('maildir:storage=', quota) AS quota FROM mailbox
#DEFAULT="./"
四、安装Dovecot
http://www.dovecot.org/下载dovecot-2.0.5.tar.gz.。
创建Dovecot2.0相关用户:
#groupadd dovenull
#useradd -g dovenull -d/dev/null -s/bin/false dovenull
#groupadd dovecot
#useradd -g dovecot -d/dev/null -s/bin/false dovecot
#tar zvfx dovecot-2.0.5.tar.gz
#cd dovecot-2.0.5
配置参数使Dovecot支持Mysql数据库生成Makefile文件。
# CPPFLAGS='-I/usr/local/mysql/include-I/usr/include/openssl' \
LDFLAGS='-L/usr/local/mysql/lib' ./configure --prefix=/usr/local/dovecot \
--sysconfdir=/etc --localstatedir=/var --with-sql --with-mysql --with-ssl=openssl
编译安装:
#make && make install
默认配置文件在/etc/dovecot目录:
#vi /etc/dovecot/dovecot.conf
auth_debug = yes
auth_default_realm = test.com
auth_mechanisms = plain login CRAM-MD5 DIGEST-MD5
default_login_user = dovenull
default_internal_user = dovecot
disable_plaintext_auth = no
#虚拟账号使用统一的系统账号vmail进入邮箱,用户名或ID号均可。
mail_uid = vmail
mail_gid = vmail
#限定可使用的uid范围,这里只用vmail的uid。
first_valid_uid = 1001
last_valid_uid = 1001
listen = *
log_path = /var/log/dovecot.log
#邮箱格式,在dovecot中%d代表域名(domain),
#%n代表用户名称(user),%u代表user@domain。
mail_location = maildir:/var/vmail/%d/%n/Maildir
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf
}

#认证相关,这里Maildrop和Postfix都使用dovecot的认证。
service auth {
unix_listener auth-master {
group =vmail
user = vmail
mode = 0600
}
unix_listener /var/spool/postfix/private/auth {
group = postfix
user = postfix
mode = 0600
}
}

#全局邮箱容量配额, http://wiki2.dovecot.org/Quota。可以用数据库的查询结果覆盖默认值。 plugin {
quota =maildir:User quota
quota_rule =*:storage=20M
# 10% of 20M= 2MB
quota_rule2= Trash:storage=+10%%
# 20% of 20M= 4MB
quota_rule3= Spam:storage=+20%%
}
mail_plugins = $mail_plugins quota
protocol pop3 {
mail_plugins= $mail_plugins
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

protocol imap {
imap_client_workarounds = delay-newmail
mail_plugins= $mail_plugins imap_quota
}

#支持TLS的设置
ssl_ca = </etc/postfix/tls/cacert.pem
ssl_cert = </etc/postfix/tls/mycert.pem
ssl_key = </etc/postfix/tls/mykey.pem

编辑/etc/dovecot/dovecot-sql.conf配置文件
#vi /etc/dovecot/dovecot-sql.conf
driver = mysql
#Mysql数据库连接参数,因为使用extmail,所以要对应起来。
#数据库的建立请参照后续extmail相关内容。
connect = host=localhost dbname=extmail user=extmailpassword=extmail
#user_query = SELECT concat('/var/vmail/', homedir)as home, concat('maildir:/var/vmail/', maildir) as mail, 1001 AS uid, 1001 ASgid, concat('maildir:storage=', quota) AS quota FROM mailbox WHERE username ='%u' AND active = '1'
# 查询速度快
user_query = SELECT '/var/vmail/%d/%n' as home,'maildir:/var/vmail/%d/%n/Maildir' as mail, 1001 AS uid, 1001 AS gid,concat('maildir:storage=', quota) AS quota FROM mailbox WHERE username = '%u'AND active = '1'
#password_query = SELECT username as user, password,concat('/var/vmail/', homedir) as userdb_home, concat('maildir:/var/vmail/',maildir) as userdb_mail, 1001 as userdb_uid, 1001 as userdb_gid FROM mailboxWHERE username = '%u' AND active
= '1'

# fast but now so nice:-)
password_query = SELECT username as user, password,'/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n/Maildir' asuserdb_mail, 1001 as userdb_uid, 1001 as userdb_gid FROM mailbox WHERE username= '%u' AND active = '1'
五、Webmail(Extmail+Extman)的架设
http://www.extmail.org/download/ 下载extmail-1.2.tar.gz和extman-1.1.tar.gz。
运行此Webmail需要相关Perl模块的支持,CentOS5.5需要下载的部分模块源文件:Unix::Syslog,DBI,DBD::mysql,perl-GD(创建图形验证码),extman图形日志需要rrdtool, Time::HiRes, File::Tail。
查看模块是否安装,报错则需要下载安装,模块查询及下载地址http://search.cpan.org/search?query=$i&mode=module
# perl -e 'use DBI'
安装perl模块:
#tar zvfx Unix-Syslog-1.1.tar.gz
#cd Unix-Syslog-1.1
# perl Makefile.PL
#make && make test && make install
#安装DBD-mysql
#tar zvfx DBD-mysql-4.017.tar.gz
#cd DBD-mysql-4.017
# perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config \
--with-mysql=/usr/local/mysql
其他模块安装步骤类似,省略。
#Extmail及Extman解包到“/var/www/extsuite/”目录。
#mkdir –p /var/www/extsuite/
#tar zvfx extmail-1.2.tar.gz
#cp –a extmail-1.2 /var/www/extsuite/extmail
#tar zvfx extman-1.1.tar.gz
# cp -a extman-1.1 /var/www/extsuite/extman
#修改目录属主为vmail用户及同名组。
# chown -R vmail:vmail /var/www/extsuite/extmail
# chown -R vmail:vmail /var/www/extsuite/extman
#apache日志目录的创建
#mkdir /var/log/apache
修改apache配置文件,和apache编译时的配置对应起来,apache以可以调用Suexec的nobody身份运行:
#vi /usr/local/apache/conf/httpd.conf
User nobody
Group nobody
<Directory"/var/www/extsuite/extmail">
OptionsNone
AllowOverride None
Orderallow,deny
Allow fromall
</Directory>
<Directory"/var/www/extsuite/extman">
OptionsNone
AllowOverride None
Orderallow,deny
Allow fromall
</Directory>
<VirtualHost 192.168.1.100:80>
ServerName mail.test.com
ServerAdmin admin@test.com
DocumentRoot /var/www/extsuite/extmail/html/
ScriptAlias /extmail/cgi/var/www/extsuite/extmail/cgi
ScriptAlias /extmail/cgi-bin/var/www/extsuite/extmail/cgi-bin
Alias /extmail /var/www/extsuite/extmail/html
ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
Alias /extman /var/www/extsuite/extman/html
SuexecUserGroup vmail vmail
ErrorLog /var/log/apache/mail_error_log
TransferLog /var/log/apache/mail_access_log
</Virtualhost>
重启apache服务器:
# /usr/local/apache/bin/apachectl restart
利用extman提供的sql脚本初始化邮件数据库,执行时要求输入数据库root账号密码。
#cd /var/www/extsuite/extman/docs/
#/usr/local/mysql/bin/mysql -u root -p < extmail.sql
#/usr/local/mysql/bin/mysql -u root -p < init.sql
密码默认采用了md5crypt,我们这里使用plain-md5,请根据需要修改。
通过phpMyAdmin进入数据库修改管理和用户的passwod字段值为md5编码。
sql命令为UPDATE manager SET password = MD5( ' extmail*123*' ) WHERE username =root@extmail.org。
设置extmail.cf:
#cp /var/www/extsuite/extmail/webmail.cf.default /var/www/extsuite/extmail/webmail.cf
#vi /var/www/extsuite/extmail/webmail.cf
#使用mysql数据库
SYS_AUTH_TYPE = mysql
#用户邮件的存放目录
SYS_MAILDIR_BASE = /var/vmail
#对应vmail用户的uid,gid
SYS_DEFAULT_UID = 1001
SYS_DEFAULT_GID = 1001
#extmail支持crypt|cleartext|plain|md5|md5crypt|plain-md5|ldap-md5|sha|sha1
SYS_CRYPT_TYPE = plain-md5
#邮件配额20M,可以通过extman给用户单独设置。
SYS_MESSAGE_SIZE_LIMIT = 20971520
#Mysql数据库连接设置,采用webmail.sql默认值,请修改。
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
#SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock,对照/etc/my.cnf文件。
SYS_MYSQL_SOCKET = /tmp/mysql.sock
设置extman:
因为邮件网站以vmail用户运行,设置默认配置目录/tmp/extman属主为vmail。
#mkdir /tmp/extman/
#chown –R vmail:vmail /tmp/extman/
extman部分参数设置:
#cp /var/www/extsuite/extman/webman.cf.default /var/www/extsuite/extman/webmail.cf
#vi /var/www/extsuite/extman/webman.cf
SYS_MAILDIR_BASE = /var/vmail
#开启图形验证,0为关闭。
SYS_CAPTCHA_ON = 1
#设置用户ID和组ID,这里用vmail的uid,gid。
SYS_DEFAULT_UID = 1001
SYS_DEFAULT_GID = 1001
#加密方式默认值为md5crypt,修改时请同时修改password字段值。
SYS_CRYPT_TYPE = plain-md5
#Mysql数据库连接设置
SYS_MYSQL_USER = webman
SYS_MYSQL_PASS = webman
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /tmp/mysql.sock
以上是部分参数设置,其他参数请按需修改。
Extman拥有图形日志功能,我们可以通过图片很直观的了解邮件投递信息。
Mailgraph官方网站http://mailgraph.schweikert.ch/提供更多信息。
# mkdir /usr/local/mailgraph_ext
# cd /var/www/extsuite/extman/
# cp addon/mailgraph_ext/* /usr/local/mailgraph_ext/*
邮件队列不在默认的/var/spool/postfix,请务必修改qmonitor.pl文件。
手动启动图形日志程序,可以将命令加入/etc/rc.local中,开机自动运行。
# /usr/local/mailgraph_ext/mailgraph-init start
Extman提供了Postfix部分配置文件:
#cd /var/www/extsuite/extman/docs
# cp mysql_virtual_* /etc/postfix/
编辑配置文件mysql_virtual_mailbox_maps.cf,mysql_virtual_domains_maps.cf,mysql_virtual_alias_maps.cf,mysql_virtual_limit_maps.cf:
举例如下,请根据连接数据库的实际参数修改配置:
#vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = mailbox
select_field = maildir
where_field = username
additional_conditions = AND active = '1'
最后,不要忘记在DNS服务器上有MX记录,并可通过mail.test.com访问192.168.1.100:
$ORIGIN test.com.
MX 10 mail.test.com.
mail A 192.168.1.100
至此,邮件系统的构建基本完成,启动邮件系统的相关命令如下:
启动、关闭、重载SMTP(Postfix):
#postfix start|stop|reload
启动POP3/IMAP(Dovecot)
#dovecot
关闭和重载Dovecot:
#dovecot stop|reload
本机测试(在其他机器测试请换成服务器地址192.168.1.100):
#telnet 127.0.0.1 25
#telnet 127.0.0.1 110
登陆webman设置域、邮箱、别名等:
http://192.168.1.100/extman/cgi/index.cgi
登陆webmail:
http://192.168.1.100/extmail/cgi/index.cgi
以上内容就是我们使用开源软件构件邮件服务器的一般步骤,这种邮件系统基本满足中小规模单位的内部应用,因为采取了模块化的方法,例如发信服务软件、收信软件、认证模块等既相互联系又相对独立,可以对这些体软件进行更新或替换,选择适合自己网站应用的Email软件。若要提供更好的服务,后期还需要加上防病毒、防垃圾邮件的功能,网络上有很多软件和相关介绍,我们可以参考选择。

参考网站:
http://www.postfix.org
http://wiki2.dovecot.org
http://www.mysql.com
http://www.courier-mta.org/
http://www.extmail.org/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: