配置基于虚拟账号的邮件服务系统

基于虚拟帐号和虚拟域的邮件系统_border

根据上面的图,可以一步一步完成:

一、配置基本环境:

先确定服务器的地址:

基于虚拟帐号和虚拟域的邮件系统_target_02

然后根据需要做dns指向:

基于虚拟帐号和虚拟域的邮件系统_的_03

基于虚拟帐号和虚拟域的邮件系统_border_04

基于虚拟帐号和虚拟域的邮件系统_的_05

基于虚拟帐号和虚拟域的邮件系统_邮件系统_06

删掉hosts中无用的信息:

基于虚拟帐号和虚拟域的邮件系统_border_07

基于虚拟帐号和虚拟域的邮件系统_的_08

然后搭建DNS:

建个光盘挂载点:

基于虚拟帐号和虚拟域的邮件系统_blank_09

基于虚拟帐号和虚拟域的邮件系统_target_10

基于虚拟帐号和虚拟域的邮件系统_blank_11

下面要安装一些有依赖性软件包,所以编辑个yum客户端:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_12

基于虚拟帐号和虚拟域的邮件系统_blank_13

保存退出,搭建dns环境:

安装bind包:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_14

基于虚拟帐号和虚拟域的邮件系统_的_15

基于虚拟帐号和虚拟域的邮件系统_blank_16

基于虚拟帐号和虚拟域的邮件系统_target_17

拷贝一份样例文件到当前目录下,拷贝时,要加上-p,把模式也拷贝过来,不然是启动不了:

基于虚拟帐号和虚拟域的邮件系统_border_18

基于虚拟帐号和虚拟域的邮件系统_邮件系统_19

基于虚拟帐号和虚拟域的邮件系统_的_20

基于虚拟帐号和虚拟域的邮件系统_的_21

基于虚拟帐号和虚拟域的邮件系统_的_22

保存退出;然后编辑区域声明文件:

基于虚拟帐号和虚拟域的邮件系统_target_23

基于虚拟帐号和虚拟域的邮件系统_邮件系统_24

基于虚拟帐号和虚拟域的邮件系统_target_25

然后进入这个区域文件目录下,并拷贝个样例文件,生成a.org.zone这个文件:

基于虚拟帐号和虚拟域的邮件系统_target_26

再编辑里面的内容:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_27

基于虚拟帐号和虚拟域的邮件系统_border_28

启动dns:

基于虚拟帐号和虚拟域的邮件系统_border_29

因为sendmail是开机自动启动的,所以关闭sendmail避免和postfix冲突:

基于虚拟帐号和虚拟域的邮件系统_的_30

然后安装所需的rpm包,有以下这些需要apache、mysql、php以及必要的库文件等等:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_31

也就是这个命令行:

yum install httpd php php-mysql mysql mysql-server mysql-devel dovecot perl-DBD-MySQL tcl tcl-devel libart_lgpl libart_lgpl-devel libtool-ltdl libtool-ltdl-devel expect

安装完毕后,启动mysql:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_32

基于虚拟帐号和虚拟域的邮件系统_border_33

进入mysql给管理员一个口令:

基于虚拟帐号和虚拟域的邮件系统_的_34

二、安装配置postfix

    源码安装postfix:

先上传几个要用的源代码:

基于虚拟帐号和虚拟域的邮件系统_的_35

回到根目录下查看一下上传的文件:

基于虚拟帐号和虚拟域的邮件系统_target_36

然后解压缩postfix:

基于虚拟帐号和虚拟域的邮件系统_blank_37

进入postfix目录下,建两个组和两个用户:

基于虚拟帐号和虚拟域的邮件系统_blank_38

基于虚拟帐号和虚拟域的邮件系统_target_39

组postfix用于接受邮件服务,组postdrop用于投递邮件服务

然后生成makefiles文件:

基于虚拟帐号和虚拟域的邮件系统_blank_40

命令行如下:

make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2   -lssl -lcrypto'

然后编译:

基于虚拟帐号和虚拟域的邮件系统_的_41

基于虚拟帐号和虚拟域的邮件系统_的_42

在这个过程中会有几个选项:

基于虚拟帐号和虚拟域的邮件系统_border_43

但只更改这一个就行,其他的直接按回车,默认就行;

生成别名二进制文件,这个步骤如果忽略,会造成postfix效率极低,所以执行命令:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_44

然后启动postfix:

基于虚拟帐号和虚拟域的邮件系统_target_45

然后查看一下支持的模块和 验证  :

基于虚拟帐号和虚拟域的邮件系统_blank_46

然后改写一下控制脚本路径:

基于虚拟帐号和虚拟域的邮件系统_target_47

基于虚拟帐号和虚拟域的邮件系统_border_48

基于虚拟帐号和虚拟域的邮件系统_border_49

基于虚拟帐号和虚拟域的邮件系统_target_50

基于虚拟帐号和虚拟域的邮件系统_border_51

拷贝到这个目录下:

基于虚拟帐号和虚拟域的邮件系统_blank_52

基于虚拟帐号和虚拟域的邮件系统_的_53

可以看到里面全是一些路径;

退出后,试着停止服务和启动服务:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_54

可以查看一下端口:

基于虚拟帐号和虚拟域的邮件系统_target_55

然后启动服务和查看端口:

基于虚拟帐号和虚拟域的邮件系统_target_56

postfix完成了;

最后更改一下postfix主配置文档:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_57

指明mail服务器名称:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_58

指明mail服务器所属域:

基于虚拟帐号和虚拟域的邮件系统_border_59

是否做地址伪装:

基于虚拟帐号和虚拟域的邮件系统_的_60

打开所有监听端口:

基于虚拟帐号和虚拟域的邮件系统_border_61

基于虚拟帐号和虚拟域的邮件系统_target_62

基于虚拟帐号和虚拟域的邮件系统_邮件系统_63

三、 为postfix开启基于cyrus-sasl的认证功能

基于虚拟帐号和虚拟域的邮件系统_blank_64

在最后一行插入这些命令行:

基于虚拟帐号和虚拟域的邮件系统_target_65

具体指令为:

############################CYRUS-SASL############################

broken_sasl_auth_clients = yes

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

smtpd_sasl_auth_enable = yes

smtpd_sasl_local_domain = $myhostname

smtpd_sasl_security_options = noanonymous

然后编辑另外的文件:

基于虚拟帐号和虚拟域的邮件系统_target_66

基于虚拟帐号和虚拟域的邮件系统_的_67

基于虚拟帐号和虚拟域的邮件系统_的_68

拷贝后,然后编辑:

基于虚拟帐号和虚拟域的邮件系统_的_69

基于虚拟帐号和虚拟域的邮件系统_border_70

保存退出,

启动sasl服务:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_71

四、 安装Courier authentication library

回到跟目录:

解压缩:

基于虚拟帐号和虚拟域的邮件系统_的_72

进入这个目录,然后进行编译;

基于虚拟帐号和虚拟域的邮件系统_邮件系统_73

编译命令如下:

./configure --prefix=/usr/local/courier-authlib --sysconfdir=/etc --with-authmysql --with-mysql-libs=/usr/lib/mysql --with-mysql-includes=/usr/include/mysql --with-redhat --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc --with-ltdl-lib=/usr/lib --with-ltdl-include=/usr/include

基于虚拟帐号和虚拟域的邮件系统_target_74

基于虚拟帐号和虚拟域的邮件系统_邮件系统_75

完成后,更改一下权限:

基于虚拟帐号和虚拟域的邮件系统_blank_76

然后产生两个文件:

基于虚拟帐号和虚拟域的邮件系统_border_77

编辑authdaemonrc,表示所采用的模块列表:

基于虚拟帐号和虚拟域的邮件系统_border_78

基于虚拟帐号和虚拟域的邮件系统_border_79

基于虚拟帐号和虚拟域的邮件系统_border_80

基于虚拟帐号和虚拟域的邮件系统_blank_81

然后编辑authmysqlrc,作用是如何来调用数据库,其中2525,2525 为postfix 用户的UID和GID:

基于虚拟帐号和虚拟域的邮件系统_border_82

((这时为后文要用的数据库的所有者的用户名、密码)

基于虚拟帐号和虚拟域的邮件系统_blank_83

基于虚拟帐号和虚拟域的邮件系统_的_84

(指定你的mysql监听的端口,这里使用默认的3306)

基于虚拟帐号和虚拟域的邮件系统_border_85

基于虚拟帐号和虚拟域的邮件系统_blank_86

基于虚拟帐号和虚拟域的邮件系统_的_87

基于虚拟帐号和虚拟域的邮件系统_target_88

基于虚拟帐号和虚拟域的邮件系统_邮件系统_89

基于虚拟帐号和虚拟域的邮件系统_target_90

基于虚拟帐号和虚拟域的邮件系统_邮件系统_91

基于虚拟帐号和虚拟域的邮件系统_border_92

基于虚拟帐号和虚拟域的邮件系统_blank_93

保存退出;

在这一目录下找到一个控制脚本:

基于虚拟帐号和虚拟域的邮件系统_target_94

基于虚拟帐号和虚拟域的邮件系统_邮件系统_95

拷贝好后,更改权限:

基于虚拟帐号和虚拟域的邮件系统_blank_96

然后我们就可以启动服务了:

基于虚拟帐号和虚拟域的邮件系统_的_97

通过输出重定向,加载courier-authlib服务的非标准库文件:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_98

命令行就是这句话:echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf

执行完后,调用一下:

基于虚拟帐号和虚拟域的邮件系统_的_99

基于虚拟帐号和虚拟域的邮件系统_target_100

可以看到很多库都能配系统调用了;

然后再重启一下:

基于虚拟帐号和虚拟域的邮件系统_target_101

新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_102

接下来重新配置SMTP 认证,编辑 /usr/local/lib/sasl2/smtpd.conf ,确保其为以下内容:

基于虚拟帐号和虚拟域的邮件系统_border_103

基于虚拟帐号和虚拟域的邮件系统_blank_104

保存退出;重启

基于虚拟帐号和虚拟域的邮件系统_的_105

五、 让postfix支持虚拟域和虚拟用户:

    编辑/etc/postfix/main.cf,添加如下内容:

基于虚拟帐号和虚拟域的邮件系统_的_106

基于虚拟帐号和虚拟域的邮件系统_border_107

具体命令行如下:

########################Virtual Mailbox

Settings########################

virtual_mailbox_base = /var/mailbox

virtual_mailbox_maps =

mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

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

virtual_uid_maps = static:2525

virtual_gid_maps = static:2525

virtual_transport = virtual

maildrop_destination_recipient_limit = 1

maildrop_destination_concurrency_limit = 1

##########################QUOTA Settings########################

message_size_limit = 14336000

virtual_mailbox_limit = 20971520

virtual_create_maildirsize = yes

virtual_mailbox_extended = yes

virtual_mailbox_limit_maps =

mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf

virtual_mailbox_limit_override = yes

virtual_maildir_limit_message = Sorry, the user's maildir has

overdrawn his diskspace quota, please Tidy your mailbox and try

again later.

virtual_overquota_bounce = yes

网络上都有这些内容,直接复制粘贴到最后一行就行;

使用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_108

基于虚拟帐号和虚拟域的邮件系统_border_109

做重定向:输入管理员密码:

基于虚拟帐号和虚拟域的邮件系统_blank_110

可以进入数据库看看:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_111

基于虚拟帐号和虚拟域的邮件系统_blank_112

在这个目录下可以看到有很多映射 文件,拷到postfix目录下:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_113

授予用户extmail访问extmail数据库的权限:

  再连接到数据库:

基于虚拟帐号和虚拟域的邮件系统_blank_114

让设置的内容生效:

基于虚拟帐号和虚拟域的邮件系统_target_115

然后再启动一次postfix:

基于虚拟帐号和虚拟域的邮件系统_blank_116

六、 配置dovecot:

编辑dovecot配置文档,编辑dovecot如何查找mysql:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_117

基于虚拟帐号和虚拟域的邮件系统_邮件系统_118

基于虚拟帐号和虚拟域的邮件系统_border_119

基于虚拟帐号和虚拟域的邮件系统_的_120

基于虚拟帐号和虚拟域的邮件系统_blank_121

基于虚拟帐号和虚拟域的邮件系统_邮件系统_122

基于虚拟帐号和虚拟域的邮件系统_blank_123

保存退出;

创建并编辑dovecot查找数据库方式的文件:

基于虚拟帐号和虚拟域的邮件系统_blank_124

基于虚拟帐号和虚拟域的邮件系统_border_125

具体命令行为:

driver = mysql

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

default_pass_scheme = CRYPT

password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = '%u'                           

user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'

基于虚拟帐号和虚拟域的邮件系统_的_126

基于虚拟帐号和虚拟域的邮件系统_target_127

然后启动一下服务:

基于虚拟帐号和虚拟域的邮件系统_blank_128

七、 安装Extmail-1.2 : (先安装httpd)

回到根目录下,解压缩:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_129

基于虚拟帐号和虚拟域的邮件系统_邮件系统_130

然后把两个文件移动到这个目录下:

基于虚拟帐号和虚拟域的邮件系统_target_131

基于虚拟帐号和虚拟域的邮件系统_target_132

基于虚拟帐号和虚拟域的邮件系统_border_133

基于虚拟帐号和虚拟域的邮件系统_的_134

拷贝个样例文件,生成extmail配置文档,并编辑:

基于虚拟帐号和虚拟域的邮件系统_的_135

基于虚拟帐号和虚拟域的邮件系统_target_136

默认语言

基于虚拟帐号和虚拟域的邮件系统_target_137

用户邮件的存放目录:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_138

设置连接数据库服务器所使用用户名、密码和邮件服务器用到的数据库:

基于虚拟帐号和虚拟域的邮件系统_target_139

指明authdaemo socket文件的位置:

基于虚拟帐号和虚拟域的邮件系统_border_140

启动apache:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_141

编辑apache的主配置文件:

基于虚拟帐号和虚拟域的邮件系统_blank_142

基于虚拟帐号和虚拟域的邮件系统_border_143

基于虚拟帐号和虚拟域的邮件系统_blank_144

保存退出;

修改 cgi执行文件属主为apache运行身份用户:

基于虚拟帐号和虚拟域的邮件系统_border_145

重启apache服务:

基于虚拟帐号和虚拟域的邮件系统_target_146

八、安装Extman-1.1

基于虚拟帐号和虚拟域的邮件系统_target_147

拷贝样例文件,生成extman配置文档,并编辑:

基于虚拟帐号和虚拟域的邮件系统_border_148

基于虚拟帐号和虚拟域的邮件系统_target_149

用户邮件的存放目录:

基于虚拟帐号和虚拟域的邮件系统_border_150

基于虚拟帐号和虚拟域的邮件系统_target_151

保存退出;;

更改一下权限:

基于虚拟帐号和虚拟域的邮件系统_target_152

在apache的主配置文件中Extmail的虚拟主机部分,添加如下两行:

基于虚拟帐号和虚拟域的邮件系统_blank_153

基于虚拟帐号和虚拟域的邮件系统_target_154

保存退出;

创建其运行时所需的临时目录,并修改其相应的权限:

基于虚拟帐号和虚拟域的邮件系统_blank_155

最后一步是:依赖关系的解决

基于虚拟帐号和虚拟域的邮件系统_border_156

基于虚拟帐号和虚拟域的邮件系统_的_157

基于虚拟帐号和虚拟域的邮件系统_邮件系统_158

基于虚拟帐号和虚拟域的邮件系统_的_159

基于虚拟帐号和虚拟域的邮件系统_border_160

重启apache:

基于虚拟帐号和虚拟域的邮件系统_blank_161

完成了;测试一下:

在客户机上的浏览器输入地址:http://192.168.145.200/extmail

基于虚拟帐号和虚拟域的邮件系统_blank_162

选择邮箱管理:

有默认的账号登陆进去:

选择管理即可登入extman进行后台管理了。默认管理帐号为:root@extmail.org  密码为:extmail*123*

基于虚拟帐号和虚拟域的邮件系统_邮件系统_163

基于虚拟帐号和虚拟域的邮件系统_的_164

登陆 到了后台管理:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_165

选中域列表,点击添加域:

基于虚拟帐号和虚拟域的邮件系统_border_166

基于虚拟帐号和虚拟域的邮件系统_blank_167

自由注册并没有真正的被激活,所以再画上勾,点击操作:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_168

基于虚拟帐号和虚拟域的邮件系统_的_169

因为支持虚拟域的,所以可以继续建新的域:

基于虚拟帐号和虚拟域的邮件系统_的_170

一定别忘了,重新操作一遍,激活自由注册:

基于虚拟帐号和虚拟域的邮件系统_target_171

基于虚拟帐号和虚拟域的邮件系统_border_172

然后就可以自由注册了:

基于虚拟帐号和虚拟域的邮件系统_的_173

基于虚拟帐号和虚拟域的邮件系统_border_174

基于虚拟帐号和虚拟域的邮件系统_的_175

基于虚拟帐号和虚拟域的邮件系统_target_176

再注册一个用户:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_177

基于虚拟帐号和虚拟域的邮件系统_blank_178

基于虚拟帐号和虚拟域的邮件系统_邮件系统_179

基于虚拟帐号和虚拟域的邮件系统_的_180

然后试着登陆里面并发送邮件试试:

基于虚拟帐号和虚拟域的邮件系统_邮件系统_181

基于虚拟帐号和虚拟域的邮件系统_邮件系统_182

成功登陆,然后发个邮件:

基于虚拟帐号和虚拟域的邮件系统_border_183

基于虚拟帐号和虚拟域的邮件系统_target_184

发送成功!

登陆haolei用户,看看能不能收到邮件:

基于虚拟帐号和虚拟域的邮件系统_的_185

可以看到里面有一封邮件:

基于虚拟帐号和虚拟域的邮件系统_border_186

打开内容看看是否正确:

基于虚拟帐号和虚拟域的邮件系统_的_187

成功接收到了邮件;

然后回复一个:

基于虚拟帐号和虚拟域的邮件系统_blank_188

登陆到test1上查看:

基于虚拟帐号和虚拟域的邮件系统_border_189