这篇文章原本是2008年发表的,近期几天照此笔记又安装了一遍系统。这里更新一下记录。

作者:wangdy



本文发表于  http://blog.csdn.net/aryang/article/details/40593283  转载请注明!

1. 概述

安装环境是CentOS6.5,拿到server的时候仅仅有根文件夹的分区。邮件准备存储到 /var/mailbox下,后面内容会出现多次,假设要改动请注意不要有遗漏的地方。

/var/spool/postfix是postfix存储队列的地方。 /var/vmail是用来存储邮件的。

有条件的建议对 /var/spool/postfix和 /var/vmail进行了单独分区。



CentOS提供了非常方便的yum在线安装。我的基本原则是非重要、对版本号不敏感的模块尽量用yum安装。邮件系统主要模块则用源代码编译安装。

首先用yum安装的模块有:mysql mysql-server mysql-devel db4-devel openssl gcc libxml2 libxml2-develgcc-c++

几个模块都须要用到PCRE。

先说明一下几个模块的搭配。



MTA用的是postfix-2.5.17。

web模块是最先须要确定的,由于它决定了邮箱系统最核心的数据结构,这里选用国产的extmail,其它全部模块都依照extmail的结构进行配置改动。

webmail使用 extmail-1.0.5,web管理模块用extman-0.2.5。

extmail对maildrop的自己主动回复、转发等提供了非常好的支持。所以MDA採用最流行的maildrop(2.5.4)



这里面简单说一下为什么要用maildrop。



对虚拟用户投递的支持。postfix自带了一个投递代理(MDA):virtual

virtual投递代理在 master.cf里描写叙述为:



virtual  unix -      n       n      -       -      virtual



假设我们在main.cf里设置virtual_transport = virtual。就表示对于包括在 virtual_mailbox_domains域名里的邮件。都使用virtual进行投递。

postfix自带的virtual仅仅提供了最主要的QUOTA功能。假设想使用更复杂的功能,如自己主动转发,自己主动回复。邮件自己定义过滤等,就须要换成更高级的MDA。

当然可选择的MDA有非常多种,比方procmail, maildrop等。

我这里选用maildrop。



用户信息存储方式也有非常多可选的。比方mysql,ldap等。这里选mysql,原因是各个模块,包含extmail等对这个支持最好最方便最简单。



maildrop在投递邮件的时候。须要确定一些数据,比方收件用户的Maildir的路径,保存邮件用的uid,gid,邮箱容量等。这些数据须要 courier-authlib来提供。



整个系统模块间的作用和关系是:



postfix作为MTA(Mail Transfer Agent), 负责创建smtp服务(smtpd)接收本域用户或其它域名server投递来的邮件。负责向其它server投递(转发)邮件,管理邮件队列;

maildrop作为MDA(Mail Delivery Agent)负责把从postfix接收到邮件存入邮件夹,同一时候还支持自己主动转发、自己主动回复。邮件过滤等功能;

courier-authlib 为 maildrop 提供与用户相关的信息查询;

dovecot提供系统的POP3和IMAP服务,同一时候给postfix提供SMTP的SASL认证服务。



2. 系统基础配置



假设系统已经安装postfix请先卸载!

创建邮箱存储文件夹 /var/mailbox ,子文件夹结构为 ./[domain]/[username]

创建负责邮件存取的用户和组帐户 vmail。注意要指定uid和gid。这两个id在后面非常多配置里要用到!

#groupadd -g 1001 vmail

#useradd -g vmail -u 1001 -s /sbin/nologin



#chown vmail:vmail /var/mailbox

#chmod 700 /var/mailbox



postfix安装的是须要指定几个专门的用户和组

#groupadd -g 2001 postfix

#useradd -g postfix -u 1001 -s /sbin/nologin -M postfix

#groupadd-g 2002 postdrop

#useradd-g postdrop -u 2002 -s /bin/false -M postdrop



3. courier-authlib安装



下载 courier-authlib-0.66.1



 ./configure --sysconfdir=/etc --without-authpam --without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --with-authmysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql
--with-redhat --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc --with-mailuser=1001 --with-mailgroup=1001



注意此处已经用到了vmail用户的uid和gid!



#cp /etc/authdaemonrc.dist /etc/authdaemonrc



改动配置文件,启用mysql用户认证方式:



#authmodulelist="authuserdb authmysql authcustom authpipe"

authmodulelist="authmysql"



#authmodulelistorig="authuserdb authmysql authcustom authpipe"

authmodulelistorig="authmysql"



authmysql的配置文件:

#cp /etc/authmysqlrc.dist /etc/authmysqlrc



改动相关配置,当中



MYSQL_USER_TABLE        mailbox

MYSQL_CRYPT_PWFIELD     crypt



MYSQL_SELECT_CLAUSE     SELECT username as id,password as crypt,"" as clear,\

                        '1001' as uid,'1001' as gid,   \

                        CONCAT('/var/mailbox/',homedir) as home,     \

                        CONCAT('/var/mailbox/',maildir) as maildir,  \

                        quota,                                       \

                        name                                         \

                        FROM mailbox                                 \

                        WHERE  active = 1 and username = '$(local_part)@$(domain)'



事实上就是配置了数据源是什么(mysql)。怎么连接,运行什么sql语句查询用户信息,数据的字段名是什么等。

启动auth服务 

# /usr/local/libexec/courier-authlib/authdaemond &



4. Dovecot安装

 

 下载dovecot-2.0.21.tar.gz

#./configure--prefix=/usr/local/dovecot --sysconfdir=/etc --with-sql --with-mysql

#make

#make install



须要ssl支持能够加上參数--with-ssl=openssl



拷贝 doc/example-config/下的 dovecot.conf 至 /etc/dovecot



配置dovecot.conf:

base_dir=/var/run/dovecot

#支持的用户协议

protocols=imap imaps pop3 pop3s

listen=*

disable_plaintext_auth = no

#是否启用ssl

ssl_disable = yes

#邮件存储位置,%d表示域名,%n表示username

mail_location= maildir:/var/vmail/%d/%n/Maildir

pop3_uidl_format=%08Xu%08Xv

authdefault {

...

mechanisms= plain login digest-md5 cram-md5

        

#验证password的配置文件

passdb sql { 

         args = /etc/dovecot/dovecot-sql.conf

}

...

#查询用户信息的配置文件

userdbsql {

         args = /etc/dovecot/dovecot-sql.conf

}

...

socketlisten {

   ...

   client {

     path = /var/spool/postfix/private/auth

     mode = 0660

     user = postfix

     group = postfix

   }

}

}

 

编辑/etc/dovecot/dovecot-sql.conf:



driver =mysql

connect =host=localhost dbname=extmail user=extmail password=extmail

default_pass_scheme=MD5-CRYPT

password_query= SELECT password, maildir as userdb_home FROM mailbox WHERE username = '%u'

user_query= select 1001 as uid ,1001 as gid from mailbox where username='%u' And active='1'



注意文件中的username口令。

password_query是pop3 or imap登录的时候运行的,传username查密码,邮箱文件夹

user_query是查询用户存取邮件用的uid和gid的,这里写死了。。



创建符号链接

#ln -s/usr/local/dovecot/sbin/dovecot /usr/bin/dovecot



启动dovecot服务

# dovecot



假设出错。看看 /var/log/dovecot



5. 安装 maildrop

下载 maildrop-2.5.4.tar.gz



./configure--enable-sendmail=/usr/sbin/sendmail --enable-trusted-users='root vmail'--enable-syslog=1 --enable-maildirquota --enable-maildrop-uid=1001--enable-maildrop-uid=1001 --with-trashquota --with-dirsync

 

make& make install

 

/etc/postfix/master.cf里添加

 

maildrop  unix -       n       n      -       -       pipe

  flags=DRhu user=vmailargv=/usr/local/bin/maildrop -d ${recipient}



6. 安装 postfix



下载postfix-2.5.17.tar.gz

 

编译

# make CCARGS='-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"\

-DHAS_PCRE-DHAS_MYSQL \

-I/usr/include/-I/usr/local/include -I/usr/include/mysql/' \

AUXLIBS='-L/usr/local/lib-L/usr/lib/mysql -lmysqlclient -lpcre'

# make

# make install



-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" 

表示启用SASL身份认证,并默认使用dovecot。

mysql的几个路径能够依据实际情况做改动,我这里的文件夹都是yum默认安装的。

 

注意make參数里加上正确的mysql -I  (头文件所在文件夹) -L(动态库所在文件夹)

make install的提问所有回车默认。

(install的时候假设默认參数里没有值。请依据错误提示认真检查)

 

导入extmail的mysql表结构和数据。

下载extman-0.2.5.tar.gz

解开后进入 docs文件夹



建库建表:

# mysql-u root -p < extmail.sql

注意extmail.sql里配置的数据库,username,口令都是extmail。能够编辑脚本改动。

extmail.sql里创建的数据库用户 webman 是用在web后台管理的,extmail用在全部其它地方,包含postfix邮件收发,dovecot帐户验证、邮件收发,webmail里等。

 

导入初始数据:

#mysql-u root -p < init.sql

(能够先吧 init.sql文件中的extmail.org改成你自己的域名。或登录web管理后再加入域名)

把文件夹下 mysql_*.cf所有拷贝至/etc/postfix



# cpmysql_*.cf /etc/postfix/

改动cf文件中的username口令



继续配置 postfix

# mv/etc/aliases /etc/aliases.old

# ln -s/etc/postfix/aliases /etc/aliases

# /usr/bin/newaliases



编辑  /etc/postfix/main.cf

 

#邮件server域名

myhostname= mail.abc.com

#邮箱域名

mydomain= abc.com

myorigin= localhost

mydestination= $myhostname localhost localhost.$mydomain

#能够信赖的网络,后面的permit_mynetworks 说的就是这

mynetworks= 127.0.0.0/8

inet_interfaces= all

home_mailbox=  mbox

smtpd_banner= Welcome to ESMTP Server

#设置能够随意从本机转发邮件的域名,黑莓什么的可能用到

#relay_domains=

alias_maps=



sendmail_path= /usr/sbin/sendmail

newaliases_path= /usr/bin/newaliases

mailq_path= /usr/bin/mailq

setgid_group= postdrop

html_directory= no

manpage_directory= /usr/local/man

sample_directory= /etc/postfix



unknown_local_recipient_reject_code= 450

non_fqdn_reject_code= 450

unknown_virtual_alias_reject_code= 450

unknown_virtual_mailbox_reject_code= 450

maps_rbl_reject_code= 450



maximal_queue_lifetime= 1

bounce_queue_lifetime= 0

 

#=====================VritualMailbox settings=========================

#查询域名的配置

virtual_mailbox_domains= mysql:/etc/postfix/mysql_virtual_domains_maps.cf

virtual_alias_domains=

virtual_alias_maps= mysql:/etc/postfix/mysql_virtual_alias_maps.cf

#用maildrop投递邮件!后面会安装

virtual_transport= maildrop

maildrop_destination_recipient_limit=1

#====================QUOTA========================

#设置邮件限制大小和邮箱最大容量

message_size_limit= 500001000 

mailbox_size_limit= 500001000

virtual_mailbox_limit= 209715200

 

#====================SASLESMTP Authenticat=================

#注: smtpd说的是接收邮件client发送邮件的服务, smtp说的是给别的邮件server投递用的服务

#这个得加yes,不然你就为互联网贡献一个垃圾邮件server

smtpd_sasl_auth_enable= yes

#这里用到了dovecot ^_^

smtpd_sasl_type= dovecot

smtpd_sasl_path= private/auth

broken_sasl_auth_clients= yes

smtpd_sasl_local_domain=

smtpd_sasl_security_options= noanonymous

 

#注意第二行起有空格

#这个说的是邮件client(包含本域用户client和别的server投递进来的)提交收件人的时候做的检查

# permit_sasl_authenticated 表示 smtp 鉴权通过的permit。其它几种情况全拒!

smtpd_recipient_restrictions=

 permit_sasl_authenticated,

 permit_mynetworks,

 reject_invalid_hostname,

 reject_non_fqdn_hostname,

 reject_non_fqdn_sender,

 reject_non_fqdn_recipient,

 reject_unknown_sender_domain,

 reject_unknown_recipient_domain,

 reject_unauth_pipelining,

 reject_unauth_destination

#check_recipient_access pcre:/etc/postfix/spamd_filter_access



#reject_rbl_client sbl.spamhaus.org,

#reject_rbl_client cblless.anti-spam.org.cn,



#检查发信人

smtpd_sender_restrictions=

 permit_sasl_authenticated,

 permit_mynetworks,

 reject_non_fqdn_sender,

 reject_unknown_sender_domain,

 reject_sender_login_mismatch,

 reject_authenticated_sender_login_mismatch,

 reject_unauthenticated_sender_login_mismatch



smtpd_helo_required= yes

smtpd_helo_restrictions=

 permit_sasl_authenticated,

 permit_mynetworks,

 reject_invalid_hostname



smtpd_sender_login_maps=

 mysql:/etc/postfix/mysql_virtual_sender_maps.cf,

 mysql:/etc/postfix/mysql_virtual_alias_maps.cf



disable_vrfy_command= yes



smtpd_client_restrictions=

 permit_mynetworks,

 check_client_access hash:/etc/postfix/access



#=====================TLS=========================

#smtp的tls支持,此处不详述

smtpd_use_tls= yes

smtpd_tls_security_level= may

smtpd_tls_key_file= /etc/postfix/certs/mail.key

smtpd_tls_cert_file= /etc/postfix/certs/mail.crt

smtpd_tls_loglevel= 1

smtpd_tls_session_cache_timeout= 3600s

smtpd_tls_session_cache_database= btree:/var/spool/postfix/smtpd_tls_cache

tls_random_source= dev:/dev/urandom



readme_directory= no

command_directory= /usr/sbin

daemon_directory= /usr/libexec/postfix

queue_directory= /var/spool/postfix

mail_owner= postfix

data_directory= /var/lib/postfix



启动postfix



#postfix



启动后注意观察 /etc/log/maillog 里是否有错误信息

 

7. 安装extmail和extman!

extman是邮箱的后台管理web,注意webman.cf里的配置:



邮箱的根文件夹:

SYS_MAILDIR_BASE= /var/mailbox 



SYS_DEFAULT_UID= 1001

SYS_DEFAULT_GID= 1001



SYS_MYSQL_USER= webman

SYS_MYSQL_PASS= webman 

 

extmail里的 webmail.cf

 

SYS_MAILDIR_BASE= /var/mailbox

 

祝您成功!

版权声明:本文博客原创文章,博客,未经同意,不得转载。

最具体的历史centos下一个 postfix + extmail + dovecot + maildrop 安装注意事项2014更新的更多相关文章

  1. CentOS下Docker与.netcore(一) 之 安装

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  2. CentOS下使用Postfix + Dovecot + Dnsmasq搭建极简局域网邮件系统

    背景 开发环境为局域网,工作内容需要经常查看邮件文件(*.eml),可恶的Foxmail必须验证账户才能进入主界面,才能打开eml文件查看. 无奈搭一个局域网内的邮件系统吧.极简搭建,仅用于通过Fox ...

  3. centos下各种c++库文件的安装

    Centos编译boost   1.下载最新的boost http://www.boost.org/   2.解压文件 tar -xzvf boost_1_45_0.tar.gz    3.编译bja ...

  4. Samba在CentOS下的图形化界面的安装

    第一步:构建yum仓库(在此用的是北交大的yum仓库) 打开目录/etc/yum.repos.d下的CentOS-Base.repo文件,此处是我自己建的yum仓库,修改里面的链接地址为北交大的镜像的 ...

  5. centos下redis和nginx软件的安装

    我们这章以redis和nginx软件为例,介绍一下centos下软件的安装. 需要软件包(可以先下载好复制到centos指定目录下,也可直接用wget命令获取): nginx-1.7.9.tar re ...

  6. Linux+postfix+extmail+dovecot打造基于web页面的邮件系统

    原文地址:http://blog.csdn.net/deansrk/article/details/6717720 最终效果图: 准备阶段:需要手动下载的软件包: postfix-2.6.5.tar. ...

  7. centos下一个bash: XXX: command not found解决方案

    最近想centos通过做Android工程建设.配置jdk和Android sdk后,也同时/etc/profile将java和Android环境变量配置成,但它不能像windows 在相同,直接使用 ...

  8. Centos下一个server安装的版本号mysql

    首先这里说的是这里的路径.以及语句都是在网上看了非常多错误后自己实践后改动过来的,希望对大家实用. 这里在安装的时候要按着我的这个顺序.否则可能会由于路径错误而找不到对应的指令. 一.安装cmake ...

  9. CentOS下Hadoop-2.2.0集群安装配置

    对于一个刚开始学习Spark的人来说,当然首先需要把环境搭建好,再跑几个例子,目前比较流行的部署是Spark On Yarn,作为新手,我觉得有必要走一遍Hadoop的集群安装配置,而不仅仅停留在本地 ...

随机推荐

  1. Unable to start MySQL service. Another MySQL daemon is already running with the same UNIX socket

    Unable to start MySQL service. Another MySQL daemon is already running with the same UNIX socket 特征 ...

  2. Html5 Device API详解

    三.四月曾学习过html5相关知识,并就html5 device api做过一次讲解 课程时长一个小时,预期达到level 200目标,即知道html5 device api是什么,且知道怎么实现 面 ...

  3. cocos2d 创建一个黑白纹理

    @interface myGrayTexture : CCTexture2D // @param exposure 曝光 +(id) textureWithFile:(NSString*) file ...

  4. 动画(Animation) 它 (闪烁、左右摇摆、跷跷板等功效)

    一侧到另一侧的影响: (这里显示的是并不那么顺利) 一.续播  (不知道取什么名字好,就是先播放动画A, 接着播放动画B) 有两种方式. 第一种.分别动画两个动画,A和B, 然后先播放动画A,设置A ...

  5. linux下一个C语言flock功能使用 .

    表头文件  #include<sys/file.h> 定义函数  int flock(int fd,int operation); 函数说明  flock()会依參数operation所指 ...

  6. 【Win7】【磁盘管理】删除相似“33fbc1d57e9aaf1ea88e6f08”缓存目录

    一般,在计算机磁盘.移动硬盘.或U盘出现,类别似"33fbc1d57e9aaf1ea88e6f08",你不能删除缓存目录.能Win7删除. (1).使用管理员,打开命令提示符窗口( ...

  7. c# Use Properties Instead of Accessible Data Members

    advantage of properties: 1 properties can be used in data binding, public data member can not. 2 dat ...

  8. wpf 模拟3D效果(和手机浏览图片效果相似)(附源码)

    原文 wpf 模拟3D效果(和手机浏览图片效果相似)(附源码) pf的3D是一个很有意思的东西,类似于ps的效果,类似于电影动画的效果,因为动画的效果,(对于3D基础的摄像机,光源,之类不介绍,对于依 ...

  9. Linux 0.12 内核管理存储器

    Linux 0.12 内核管理存储器 其分段,用分段的机制把进程间的虚拟地址分隔开. 每一个进程都有一张段表LDT.整个系统有一张GDT表.且整个系统仅仅有一个总页表. 其地址翻译过程为: 程序中给出 ...

  10. VS2013验证控件出现 WebForms UnobtrusiveValidationMode 必须“jquery”ScriptResour......错误的解决方案

    如下面的错误: 解决方式例如以下: 方法一: 在webconfig中找到 <appSettings> <addkey="aspnet:UseTaskFriendlySync ...