这篇文章原本是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. EJB体系结构

    为了适应企业的快速发展.缩短企业信息系统的设计和开发周期.降低构建信息系统的成本,Sun公司制订了Java2 SDK Enterprise Edition(J2EE)规范,定义基于组件的方式设计.开发 ...

  2. windows phone (23) ScrollViewer元素

    原文:windows phone (23) ScrollViewer元素 ScrollViewer类表示可包含其他可见元素的可滚动区域,一般会用在屏幕的宽度和高度不够用时,作为一种延伸使用,参考书上称 ...

  3. quick-cocos2d-x游戏开发【7】——scheduler 定时器

    定时器用的地方还是比較多的,游戏中的逻辑推断非常多都是採用每帧运行.quick对于schedule的封装在scheduler这个lua文件里.假设是第一次接触quick的话,可能依照官方的api来写一 ...

  4. C语言cgi(1)

    1Columbia Universitycs3157 – Advanced ProgrammingSummer 2014, Lab #2, 60ish pointsJune 9, 2014Follow ...

  5. 潜水 java类加载器ClassLoader

    类加载器(class loader)用于装载 Java 类到 Java 虚拟机中.一般来说.Java 虚拟机使用 Java 类的方式例如以下:Java 源程序(.java 文件)在经过 Java 编译 ...

  6. 通常编译亲测56Y国际象棋源代码,精仿56Y国际象棋完整的源代码下载!

    今天公布亲测通常应编译56Y国际象棋源代码,精仿56Y牌源代码.喜欢的能够拿去研究.论坛资源太多.我们会把好的资源都公布出来,同一时候欢迎很多其它的程序猿增加我们! 增加我们的共同学习交流!     ...

  7. C# - CSV file reader

    // ------------------------------------------------------------------------------------------------- ...

  8. 最简单的ADABOOST人脸检测程序。COPY执行,前提是你配置OpenCV周围环境

    #include "cv.h" #include "highgui.h" #include "stdio.h" void main() { ...

  9. BC 2015在百度之星程序设计大赛 - 预赛(1)(系列转换-二分法答案贪婪)

    系列转换 Accepts: 816 Submissions: 3578 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 ...

  10. play framework2.5.

    play framework2 的学习笔记 https://github.com/playframework/playframework https://github.com/playframewor ...