如何在windows下部署extmail

如何在windows下部署extmail,第1张

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

1 整个 extmail邮件系统,是由多个软件构成的:

软件名称 功能 (注意:没有列出反垃圾邮件软件与杀毒软件)

ExtMan Web帐户管理后台(含mailgraph_ext 图形日志分析)

ExtMail WebMail(perl 程序)

Apache Web服务器(MUA 通过浏览器收发邮件)

Postfix SMTP服务器,邮件传输代理(MTA)

Maildrop 邮件投递代理(MDA)

Courier-imap IMAP和POP3 服务器

Cyrus-sasl2 标准的SASL实现库,可以支持Courier Cyrus SMTP认证库

Courier-authlib 负责courier-imap,maildrop的认证 Courier 数据认证库(mysql)

MySQL数据库,储存虚拟(域|用户|别名)等信息.

2 确定postfix 支持的smtp认证方式,与支持的查询表(必须包含mysql格式)

smtp 认证方式

postconf -a

cyrus (sasl库)

dovecot

支持的查询表

postconf -m

btree

cidr

environ

hash

ldap

mysql (包含mysql)

nis

pcre

proxy

regexp

static

tcp

unix

注意: redhat/centos 自带的postfix不支持mysql方式的查询表,所以你可能需要以源码的方式重新安装postfix 并且开启mysql支持!!!

3 extmail 发信,收信,(web登陆)认证逻辑图

+++++++++++++++++++++++++++++++++++++++++++++++++

+ smtp/25 + po3/110+ http/80+

+ postfix + courier-imap + apache +

+++++++++++++++++++++++++++++++++++++++++++++++++

+ cyrus-sasl2 +

+++++++++++++++++++++++++++++++++++++++++++++++++

+ courier-authlib +

+++++++++++++++++++++++++++++++++++++++++++++++++

+ mysql +

+++++++++++++++++++++++++++++++++++++++++++++++++

3.1 smtp认证流程

smtp/25

postfix

| <-- smtp 认证

cyrus-sasl2

| <-- smtpd.conf 配置文档(设置了authdaemond的Unix套接字的路径)

courier-authlib

| <-- authmysqlrc 配置文档(设置了mysql相关信息)

mysql

| -- I:储存虚拟(域|用户|别名)等信息.

3.2 smtp认证 相关的配置文档

postfix

10.0.100.88 [~]$ rpm -qf /usr/lib64/sasl2/smtpd.conf

postfix-2.6.2-5hzq

10.0.100.88 [~]$ cat /usr/lib64/sasl2/smtpd.conf

pwcheck_method: authdaemond

log_level: 3

mech_list: PLAIN LOGIN

authdaemond_path:/var/spool/authdaemon/socket

---------------------------------------------------------------

pwcheck_method SASL 库 auxprop(默认值)

(描述:空格分隔开的用来效验密码的机制列表,值可能是 sasl_checkpass,auxprop,

saslauthd,pwcheck,authdaemond【如果编译时添加了 --with-authdaemond 】

mech_list SASL 库 使用所有有效插件

(描述:空格分隔开的允许使用的机制的列表,比如:'plain otp'。用来在安装的插件

中限制出一个可用机制的子集。)

authdaemond_path SASL 库 /dev/null(默认值)

(描述:Courier-authlib 的 authdaemond 的 Unix 套接字的路径。仅当 pwcheck_method 设

置为 authdaemond 时可用。)

-------------------------------------------------------------------

courier-authlib

10.0.100.88 [~]$ rpm -qf /var/spool/authdaemon/socket

courier-authlib-0.62.4-2hzq

10.0.100.88 [~]$ cat /etc/authlib/authmysqlrc

MYSQL_SERVERlocalhost

MYSQL_USERNAME extmail

MYSQL_PASSWORD xmall.com

MYSQL_SOCKET/var/lib/mysql/mysql.sock

MYSQL_PORT 3306

...................................

4 了解 postfix 的查询表

postfix 有许多的重要参数(main.cf)都需要能够查询其对应关系,将所有的对应关系保存在另外一个文件 "查询表"

查询表格式:

查询表的原始数据来自简单的文本文件,文件的每一行定义一组 "key_value" 对应关系,key 与 value

以空白隔开,例如:

cat /etc/postfix/local_in_senders

tech@xmall.com local_in_only

it@xmall.comlocal_in_only

postmap命令创建查询表的数据库文件

postmap /etc/postfix/local_in_senders

file /etc/postfix/local_in_senders.db

/etc/postfix/local_in_senders.db: Berkeley DB (Hash, version 8, native byte-order)

postfix 默认的查询表数据格式为hash

postconf | grep 'default_database_type'

default_database_type = hash

当将查询表赋值给相关参数时,则必须指出查询表的数据库类型,例如:

postconf | grep 'hash:/'

alias_database = hash:/etc/aliases

alias_maps = hash:/etc/aliases, nis:mail.aliases

查询表的特例-别名文件

由于别名文件的格式不同于postfix 其它的postfix 查询表,所以不能使用postmap 创建别名的数据库文件,而应该使用postalias/newalias

别名文件位置:alias_maps = hash:/etc/aliases, nis:mail.aliases

别名文件格式:

grep -vE '(^$|^#)' /etc/aliases | head -n 3

mailer-daemon: postmaster

postmaster: root

bin:root

daemon: root

5 linux系统 用 32位 还是 64位?

如果邮件比较少,邮件 *** 作系统压力不大的话,32位或者64位都可以,只不过部署extmail(源码)时要区分一下,比如:

i386

/usr/lib/sasl2/smtpd.conf

/usr/lib/mysql/

x86_64

/usr/lib64/sasl2/smtpd.conf

/usr/lib64/mysql/

6 linux系统硬盘分区

建议 /var /home 单独分区,原因有两个

1 因为extman 与 extmail都是以 /home/domains作为基础目录

2 /var/log/maillog 邮件日志; /var/spool/postfix 邮件队列

10.0.100.88 [xmall.com]$ pwd

/home/domains/xmall.com

10.0.100.88 [xmall.com]$ du -sh *

120Kzm1

436Mzm2

10.0.100.88 [xmall.com]$ ll

total 8

drwx------ 3 vuser vgroup 4096 Dec 19 16:00 zm1

drwx------ 3 vuser vgroup 4096 Dec 19 16:00 zm2

7 安装依赖rpm包 (这里使用了本地cdrom源,如果你不是本地yum源,请直接yum install 后边的rpm包)

yum --disablerepo=\* --enablerepo=c5-media install httpd php php-mysql mysql mysql-server mysql-devel openssl-devel perl-DBD-MySQL tcl tcl-devel libart_lgpl libart_lgpl-devel libtool-ltdl libtool-ltdl-devel expect

postfix的安装过程

3.1原始码包的安装

1. 获取postfix的原始码包

从postfix官方站点www.postfix.org取得postfix的原始码包postfix-19991231-pl08.tar.gz。将其拷贝到/tmp

2.解开原始码包,将生成/tmp/ postfix-19991231-pl08目录。

tar xvzf postfix-19991231-pl08.tar.gz

3.编译原始码包

cd /tmp/ postfix-19991231-pl08

make

4.建立一个新用户“postfix”,该用户必须具有唯一的用户id和组id号,同时应该让该用户不能登录到系统,也即不为该用户指定可执行的登录外壳程式和可用的用户宿主目录。我们能先用adduser postfix 添加用户再编辑/etc/passwd文件中的相关条目如下所示:

postfix:*:12345:12345:postfix:/no/where:/no/shell

5.确定/etc/aliases文件中包含如下的条目:

postfix: root

6. 以root用户登录,在/tmp/ postfix-19991231-pl08目录下执行命令:

./install.sh

7. 启动postfix

# postfix start

8.关于maildrop目录权限的说明:

postfix能使用一个所有用户都可写的(也即目录权限为1773)的maildrop

目录来让本地用户提交邮件。这种方法避免了使用set-uid 或 set-gid 软件,并且在邮件系统不可用时,用户仍然能提交邮件。其他用户没有访问该目录中的队列文件的权限。接收来自网络的邮件时postfix不使用maildrop目录。不过,由于该目录的权限是733,其他用户能建立一个硬连接到该目录中的文件从而导致该邮件被投递多次或无法删除,也就是说这将导致安全性问题。如果你想要使用这种方式来让用户提交邮件,就要在install.sh 脚本问你是否需要set-gid 时回答no。

如果你的系统有多个用户的话,最佳取消以上的方式而采用利用set-gid 用

户权限提交邮件的方式。这时,我们首先需要建立一个组id唯一的组"maildrop" 并且确定该组中没有用户成员。然后在install.sh 问你是否需要set-gid 时指定"maildrop"。

提示:在安装postfix之前,请删除已安装的sendmail。

3.2 rpm包的安装

1. 获取postfix的rpm软件包。

我们能从http://www.alltrading.es/postfix/rpms/i386/ 获得postfix的rpm软件包。当前的最新版本是postfix-20000531-2.i386.rpm。

2. 备份你的/etc/aliases和/etc/aliases.db,因为postfix要使用该别名数据库。

3. 用以下命令查看系统是否安装了sendmail:

[root@mail /root]# rpm -qa |grep sendmail

sendmail-doc-8.9.3-15

sendmail-8.9.3-15

sendmail-cf-8.9.3-15

4. 用以下命令强行卸载sendmail:

[root@mail /root]# rpm -e sendmail sendmail-cf sendmail-doc --nodeps

5. 用以下命令杀死运行中的sendmail进程:

[root@mail /root]# killall sendmail

6. 安装postfix:

7. 启动postfix

[root@mail /root]# /etc/rc.d/init.d/postfix start

3.3 设置系统每次启动时自动启动postfix

1.如果你安装的是postfix的原始码包,能在/etc/rc.d/rc.local文件中加入如下的语句让系统每次启动时自动启动postfix:

if [ -f /usr/libexec/postfix ]then

/usr/libexec/postfix start

fi

2.如果你安装的是postfix的rpm包,能通过setup命令来设置在系统启动时启动postfix。

四、 postfix的设置详解

4.1 postfix的设置文件结构

postfix的设置文件位于/etc/postfix下,安装完postfix以后,我们能通过ls命令查看postfix的设置文件:

[root@mail postfix]# ls

install.cf main.cf master.cf postfix-script

这四个文件就是postfix最基本的设置文件,他们的差别在于:

mail.cf:是postfix主要的设置文件。

install.cf:包含安装过程中安装程式产生的postfix初始化设置。

master.cf:是postfix的master进程的设置文件,该文件中的每一行都是用来设置postfix的组件进程的运行方式。

postfix-script:包装了一些postfix命令,以便我们在linux环境中安全地执行这些postfix命令。

4.2 postfix的基本设置

postfix大约有100个设置参数,这些参数都能通过main.cf 指定。设置的格式是这样的,用等号连接参数和参数的值。如:

myhostname = mail.mydomain.com

等号的左边是参数的名称,等号的右边是参数的值; 当然,我们也能在参数的前面加上$来引用该参数,如:

myorigin = $myhostname

虽然postfix有100个左右的参数,不过postfix为大多数的参数都设置了缺省值,所以在让postfix正常为你服务之前,你只需要设置为数不多的几个参数。下面我们一起来看一看这些基本的postfix参数。需要注意的是,一旦你更改了main.cf文件的内容,则必须运行postfix reload命令使其生效。

1. myorigin

myorigin参数指明发件人所在的域名。如果你的用户的邮件地址为user@domain.com,则该参数指定@后面的域名。缺省地,postfix使用本地主机名作为myorigin,不过建议你最佳使用你的域名,因为这样更具有可读性。比如:安装postfix的主机为mail.domain.com则我们能这样指定myorigin:

myorigin = domain.com

当然我们也能引用其他参数,如:

myorigin = $mydomain

2. mydestination

mydestination参数指定postfix接收邮件时收件人的域名,换句话说,也就

是你的postfix系统要接收什么样的邮件。比如:你的用户的邮件地址为user@domain.com, 也就是你的域为domain.com, 则你就需要接收所有收件人为user_name@domain.com的邮件。和myorigin相同,缺省地,postfix使用本地主机名作为mydestination。

3. notify_classes

在postfix系统中,必须指定一个postfix系统管理员的别名指向一个用户,

只有这样,在用户遇见问题时才有报告的对象,postfix也才能将系统的问题报告给管理员。notify_classes参数就是用来指定向postfix管理员报告错误时的信息级别。共有以下几种级别:

bounce:将不能投递的邮件的拷贝发送给postfix管理员。出于个人隐私的缘故,该邮件的拷贝不包含信头。

2bounce:将两次不可投递的邮件拷贝发送给postfix管理员。

delay:将邮件的投递延迟信息发送给管理员,仅仅包含信头。

policy:将由于uce规则限制而被拒绝的用户请求发送给postfix管理员,包含整个smtp会话的内容。

protocol:将协议的错误信息或用户企图执行不支持的命令的记录发送给postfix管理员。同样包含整个smtp会话的内容。

resource:将由于资源错误而不可投递的错误信息发送给postfix管理员,比如:队列文件写错误等等。

software:将由于软件错误而导致不可投递的错误信息发送给postfix管理员。

缺省值为:

notify_classes = resource, software

4.myhostname

myhostname 参数指定运行postfix邮件系统的主机的主机名。缺省地,该值被设定为本地机器名。你也能指定该值,需要注意的是,要指定完整的主机名。如:

myhostname = mail.domain.com

5.mydomain

mydomain参数指定你的域名,缺省地,postfix将myhostname的第一部分删除而作为mydomain的值。你也能自己指定该值,

6.mynetworks

mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来差别用户是远程的还是本地的,如果是本地网络用户则允许其访问。你能用标准的a、b、c类网络地址,也能用cidr(无类域间路由)地址来表示,

7.inet_interfaces

inet_interfaces 参数指定postfix系统监听的网络接口。缺省地,postfix监听

所有的网络接口。如果你的postfix运行在一个虚拟的ip地址上,则必须指定其监听的地址。

4.3 postfix的uce(unsolicited commercial email)控制

所谓uce控制就是指控制postfix接收或转发来自于什么地方的邮件。

缺省地,postfix转发符合以下条件的邮件:

* 来自客户端ip地址符合$mynetworks的邮件。

* 来自客户端主机名符合$relay_domains及其子域的邮件。

* 目的地为$relay_domains及其子域的邮件。

缺省地,postfix接受符合以下条件的邮件:

* 目的地为$inet_interfaces的邮件。

* 目的地为$mydestination的邮件。

* 目的地为$virtual_maps的邮件。

不过我们也能通过下面的规则来实现更强大的控制功能。

1. 信头过滤

通过header_checks参数限制接收邮件的信头的格式,如果符合指定的格式,则拒绝接收该邮件。能指定一个或多个查询列表,如果新邮件的信头符合列表中的某一项则拒绝该接收邮件。

2.客户端主机名/地址限制

通过smtpd_client_restrictions参数限制能向postfix发起smtp 连接的客户端的主机名或ip地址。能指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。

3. 是否请求helo命令

能通过smtpd_helo_required参数指定客户端在smtp会话的开始是否发

送一个helo命令。你能指定该参数的值为yes或no。

4. helo主机名限制

能通过smtpd_helo_restrictions参数指定客户端在执行helo命令时发送

给postfix的主机名。缺省地,postfix接收客户端发送的任意形式的主机名。能指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。

5. rfc 821信头限制

rfc 821对邮件的信头做了严格的规定,不过广泛使用的sendmail并不支

持该规定,所以对于该参数我们只能说不,

6. 通过发件人地址进行限制

能用smtpd_sender_restrictions参数通过发件人在执行mail from命令时提供的地址进行限制。能指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。

reject_unknown_sender_domain:如果mail from命令提供的主机名在dns中没有相应的a 或 mx 记录则拒绝该客户端的连接请求。能用unknown_address_reject_code参数指定返回给客户机的错误代码(缺省为450)。

check_sender_access maptype:mapname:根据mail from命令提供的主机名、父域搜索access数据库。如果搜索的结果为reject 或 "[45]xx text" 则拒绝该客户端的连接请求;如果搜索的结果为ok、relay 或数字则接受该客户端的连接请求。能用access_map_reject_code参数指定返回给客户机的错误代码(缺省为554)。能通过该参数过滤来自某些不受欢迎的发件人的邮件。

reject_non_fqdn_sender:如果mail from命令提供的主机名不是rfc规定的完整的域名则拒绝客户端的连接请求。能用non_fqdn_reject_code 参数指定返回给客户机的错误代码(缺省为504)。

缺省地,postfix接受来自所有发件人的邮件。

7. 通过收件人地址进行过滤

能用smtpd_recipient_restrictions参数通过发件人在执行rcpt to命令

时提供的地址进行限制。缺省值为:

smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains

能指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序

进行的,第一条符合条件的规则被执行。可用的规则有:

check_relay_domains:如果符合以下的条件,则接受smtp连接请求,否则拒绝该连接,能用relay_domains_reject_code 参数指定返回给客户机的错误代码(缺省为504)。

* 客户端主机名符合$relay_domains及其子域

* 目的地为$inet_interfaces、$mydestination或$virtual_maps

permit_auth_destination:不管客户端的主机名,只要符合以下的条件,就

接受smtp连接请求:

* 解析后的目标地址符合$relay_domains及其子域

* 解析后的目标地址符合$inet_interfaces、$mydestination或$virtual_maps

reject_unauth_destination:不管客户端的主机名,只要符合以下的条件,

就拒绝该客户端smtp连接请求:

* 解析后的目标地址符合$relay_domains及其子域

* 解析后的目标地址符合$inet_interfaces、$mydestination或$virtual_maps

check_recipient_access:根据解析后的目标地址、父域搜索access数据库。如果搜索的结果为reject 或 "[45]xx text" 则拒绝该客户端的连接请求;如果搜索的结果为ok、relay 或数字则接受该客户端的连接请求。能用access_map_reject_code参数指定返回给客户机的错误代码(缺省为554)。

reject_unknown_recipient_domain:如果收件人的邮件地址在dns中没有相应的a 或 mx 记录则拒绝该客户端的连接请求。能用unknown_address_reject_code参数指定返回给客户机的错误代码(缺省为450)。

reject_non_fqdn_recipient:如果发件人在执行rcpt to命令时提供的地址

不是完整的域名则拒绝其smtp连接请求。能用the non_fqdn_reject_code参数指定返回给客户机的错误代码(缺省为504)。

2 配置电子邮件服务

利用电子邮件服务,您可以在计算机中安装一些组件并将该计算机配置为电子邮件服务器。电子邮件服务包括邮局协议 3 (POP3) 服务以及简单邮件传输协议 (SMTP) 服务,分别用于接收和传送电子邮件。为了向用户提供电子邮件服务(如发送和接收电子邮件),管理员可以在服务器上创建一些邮箱。

POP3

POP3 服务是一种用来接收电子邮件的电子邮件服务。管理员可以使用 POP3 服务,在邮件服务器上存储和管理电子邮件帐户。在邮件服务器中安装了 POP3 服务后,用户即可使用支持 POP3 协议的电子邮件客户端(如 Outlook 或 Outlook Express)连接到邮件服务器,并将电子邮件接收到其本地计算机中。POP3 服务与用来发送外发电子邮件的 SMTP 服务结合使用。

SMTP

SMTP 控制将电子邮件经由组织或 Internet 向目标服务器传输和递送的方式。SMTP 在服务器之间接收和发送电子邮件。在安装 POP3 服务时,就会自动在计算机中安装 SMTP 服务以允许用户发送外发电子邮件。当使用 POP3 服务创建域时,还会将该域添加到 SMTP 服务中,以允许该域中的邮箱发送外发电子邮件。邮件服务器中的 SMTP 服务接收传入的邮件,并将该电子邮件传送到邮件存储中。

设置电子邮件服务

要安装电子邮件服务,请按照以下步骤 *** 作:

1.

以“Administrator@contoso.com”的身份登录到“HQ-CON-DC-01”中。

2.

单击“开始”按钮,单击“控制面板”,然后单击“添加或删除程序”。

3.

单击“添加/删除 Windows 组件”,选择“电子邮件服务”复选框,然后单击“下一步”。(注意,您可能需要提供安装 CD 才能继续。)

4.

在“Windows 组件向导”完成后,单击“完成”,然后关闭“添加或删除程序”屏幕。

要配置电子邮件服务,请按照以下步骤 *** 作:

1.

单击“开始”按钮,指向“所有程序”,指向“管理工具”,然后单击“POP3 服务”。

2.

在“POP3 服务”下面,在左侧树中单击“HQ-CON-DC-01”。

3.

单击“新域”链接,键入“contoso.com”作为“域名”,然后单击“确定”。

4.

在右窗格中,双击“contoso.com”。在“HQ-CON-DC-01”下面,左窗格中的树将展开并显示“contoso.com”域。单击“添加邮箱”链接。

5.

在“添加邮箱”屏幕上,键入“mike”作为“邮箱名”,清除“为此邮箱创建相关联的用户”复选框,单击“确定”,在出现“POP3 服务”确认屏幕后,再次单击“确定”。

6.

再次单击“添加邮箱”链接,重复步骤 5 为“Administrator”创建邮箱。

注意:由于 Active Directory 帐户是在安装电子邮件服务之前建立的,因此,需要对邮箱进行手动配置。如果登录和邮箱名相同,POP3 服务配置将使用关联的电子邮件地址来更新 Active Directory 用户信息。在定义新的邮箱时,POP3 服务可以自动创建用户帐户。

7.

最小化“POP3 服务”MMC。

要测试基本电子邮件功能,请按照以下步骤 *** 作:

1.

单击“开始”按钮,指向“所有程序”,然后单击“Outlook Express”。

2.

在“Internet 连接向导”屏幕上,键入“Contoso Administrator”作为“显示名”,然后单击“下一步”。

3.

键入“administrator@contoso.com”作为“电子邮件地址”,然后单击“下一步”。

4.

在“接收邮件服务器”和“发送邮件服务器”中,键入“HQ-CON-DC-01”,然后单击“下一步”。

5.

在“Internet 邮件登录”屏幕上,将登录名更改为“administrator@contoso.com”并提供“Administrator”帐户的“密码”,然后单击“下一步”。

6.

单击“完成”。

7.

单击“发送/接收”按钮,以确保能够与电子邮件服务器成功交互。

8.

单击“创建邮件”,将邮件地址指定为“mike@contoso.com”,键入“Test Mail”作为“主题”,然后单击“发送”。

9.

最大化“POP3 服务”MMC。

10.

在右侧的结果窗格的“HQ-CON-DC-01”树下面,确认 mike 的“邮箱”中有一封邮件,然后关闭“POP3 服务”MMC。

揪错 ┆ 评论1 ┆ 举报

另外,虚机团上产品团购,超级便宜


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7845780.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存