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

这篇文章原本是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
 
祝您成功!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 只能输入汉字,EditText限制输入的几种方式及只显示中文汉字的做法

前段时间项目中有个需求是要求只能输入汉字&#xff0c;并且不能输入偏旁部首&#xff0c;于是总结了下EditText限制输入的几种方式&#xff0c;但是对于语音输入的还没找到好的解决方案&#xff1a;通过设置EditText的inputType来限制&#xff0c;可以在xml或者java代码中设置…

plsql导出表结构到excel_plsql怎么导出表格!如何用plsql从oracle中导入导出数据

如何将plsql内多个窗口查询结果同时导出到excel内在PL/SQL工具中执行得到的可以导出放在同一个EXCEL的多个Sheet页签的&#xff0c;操骤为&#xff1a;选中其中一个结果集中数据→右键→复制到Excel→作为xls复制所有(or作为xlsx复制所有)→完成。操作截图&#xff1a;Excel展示…

史上最强悍的一张图,没有任何一个中国人能躲得开!

▲ 点击查看几乎每个家庭都会有两张地图&#xff1a;一张世界地图&#xff0c;一张中国地图。薄薄的两张纸&#xff0c;蕴藏着让每个人学会“看世界”的磅礴力量。哈佛上一任校长&#xff0c;也是300多年来唯一一位女校长德鲁吉尔平福斯特&#xff08;Drew Gilpin Faust&#x…

解决vista/win7安装windows live messenger 2011找不到wlidcli.dll及错误800488eb .

问题一&#xff1a;找不到文件wlidcli.dll。 这个问题可能是由于修改了默认的Common Files 文件夹所在磁盘造成的。默认的位置是“C:/Program Files (x86)/Common Files/microsoft shared/Windows Live”&#xff0c;比如被改到了“D:/Program Files (x86)/Common Files/micros…

Dapr牵手.NET学习笔记:可观测性-分布式跟踪

分布式跟踪在dapr里是开箱即用的&#xff0c;不需要对应用作任何一丁点的侵入式编程。之前的开发&#xff0c;如果想实现分式跟踪&#xff0c;就得在应用中埋点&#xff0c;这是一个与业务无关系的动作。dpar通过sidecar可以轻松做到这点&#xff0c;从而让程序员更多精力投入到…

mysql cookbook 1

show databases; use [database]; show tabels;GRANT ALL ON database.* TO user localhost IDENTIFIED BY password;>mysql -h localhost -p -u user;转载于:https://www.cnblogs.com/chhyong88/archive/2012/07/22/2603592.html

新人入职培训有关职场沟通的总结分享

沟通 不要越级沟通言必成三&#xff0c;超过3点记不住的。kiss原则&#xff0c;keep it simple and stupid说事实观点先说结论与重点&#xff0c;再说细节支撑结论&#xff1a;mece原则&#xff0c;穷尽且不交叉提问最好不要问是或否的问题&#xff0c;而是开放性问题。 是或否…

Android带三角形的弹窗,Android实现三角形气泡效果方式汇总

在开发过程中&#xff0c;我们可能会经常遇到这样的需求样式&#xff1a;这张图是截取京东消息通知的弹出框&#xff0c;我们可以看到右上方有个三角形的气泡效果&#xff0c;这只是其中一种&#xff0c;三角形的方向还可以是上、下、左、右。通过截图可以发现&#xff0c;气泡…

ecno是什么的缩写_美国的英文缩写是什么简写

利坚合众国简称美国&#xff0c;它的英文也是有简写的&#xff0c;就算我们不知道它的全称其缩写也不会忘记。以下是学习啦小编给大家带来美国的英文缩写&#xff0c;以供参阅。美国的英文简写美国的英文缩写&#xff1a;the United States of America (U.S.A.)美国的英文缩写&…

GDI+ 设置文本对齐方式

可通过以下语句来设置文本的对齐方式&#xff1a;StringFormat sF new StringFormat()sF.Alignment StringAlignment.Far; sF.LineAlignment StringAlignment.Far;代码&#xff1a;、View Code privatevoidForm1_Paint(objectsender, PaintEventArgs e) { …

那些视觉上骗了你的东西,你上当了吗?

全世界只有3.14 % 的人关注了爆炸吧知识世界上最离谱的错觉图&#xff0c;看完我瞎了还能不能好好的玩耍了啊&#xff01;1

微服务组件记事本:本地搭建Skywalking

最近一直在研究微服务&#xff0c;完全避免不了的是各种中间件的使用&#xff0c;打算把过程简要记录下来&#xff0c;过程很简单&#xff0c;也不会有原理和源代码级别的讲解&#xff0c;只是做下简单的知识备份。今天开始研究下链路追踪Skywalking&#xff0c;还记得之前在《…

linux nodejs 采集器,Linux记录-jstack采集namenode gc信息

#!/bin/bash#以hdfs用户执行jstack每分钟采集一次namenode gc日志#mkdir -p /tmp/jstackcd /log/hadoop/jstack_nnpid$(jps | grep -i "namenode" | awk NR1{print $1})dir/log/hadoop/jstack_nn/jstack_nn_date "%Y-%m-%d-%H"if [ ! -d ${dir} ]thenmkdir…

1.1-1.5-vim编辑器

vim是vi的升级版共有3种工作模式&#xff1a;1一般模式 2编辑模式 3命令模式a在光标后插入 i在光标前插入 o在光标下插入新行A在光标行末插入 I在光标行首插入 O在光标上插入新行$光标移动到行尾 0光标移动到行首gg光标到第一行 G光标到最后一行…

UI设计师应了解最终用户的十件事

Ubuntu Unity 刚度过了它的首个周年纪念日&#xff0c;Windows 8也即将发布&#xff0c;这一切都在清晰地说明所有的用户界面并非平等。事实上&#xff0c;创造一个可以改变计算机使用方式、出色的设计是很有可能的——但如果不重视用户体验&#xff0c;这个设计在证明它出色之…

优化见解

所谓的最优化&#xff0c;那就是实现资源的充分利用。而充分利用资源的方法&#xff0c;并不是让优势资源发挥更大潜力&#xff0c;而是让不同资源得到适当地配置&#xff0c;否则也达不到最优化。这就好比摩托车的能效是发挥到极致了&#xff0c;但并不表示整个过程就是极致。…

python路径长度限制_[windows] python 帮忙打开文件名太长限制

不知道你是否有遇到&#xff0c;在windows复制/移动文件的时候发生路径太长以致于无法复制/移动的情况&#xff1f;不知道你是否有遇到&#xff0c;在windows复制/移动文件的时候发生路径太长以致于无法复制/移动的情况&#xff1f;我大概每年发生个四、五次&#xff0c;在备份…

马斯克发布脑机接口重大突破:蓝牙连接,一小时植入,已获FDA认证,人体实验在即...

全世界只有3.14 % 的人关注了爆炸吧知识综合整理自&#xff1a;机器之心、量子位、智东西编辑&#xff1a;知识君伊隆 马斯克神秘的脑机接口公司 Neuralink&#xff0c;终于向人们展示了自己首款可以「进入人体」的产品。今日&#xff0c;在 Neuralink 总部的发布会活动上&…

如何在android客户端中做到自动检查数据更新?,UpdateHelper

软件简介UpdateHelper 是一个为了简化Android App的迭代升级开发的AndroidLibrary&#xff0c;任何一个项目只要引入这个library便集成了在线检查新版本的功能以及下载APK功能&#xff0c;仅需两行代码即可搞定。UpdateHelpers要怎么使用&#xff1f;1.首先服务器端需要提供一个…

【另类见解】那些要保证缓存和数据库数据一致性的最后怎么了?

“现在如果说不出几句如何保证数据一致性方案的话&#xff0c;觉得出去面试都丢人,尤其是缓存和数据库的数据一致性“全程无图&#xff0c;请谨慎阅读缓存对于程序性能而言&#xff0c;无疑是个杀手锏&#xff0c;但不是完美的解决方案。关键在于缓存的物理位置和数据真实保存的…