天天看點

Postfix+Dovecot+LAMP+Extmail搭建web郵件系統(二)

編譯安裝Postfix:由于系統自帶的Postfix不支援mysql擴充,是以需要自己編譯安裝

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

<code># service sendmail stop                 //關閉并解除安裝自帶的sendmail服務</code>

<code># rpm -e sendmail --nodeps</code>

<code># rpm -ivh postfix-2.3.3-6.el5.src.rpm</code>

<code># cd /usr/src/redhat/SPECS</code>

<code># vi postfix.spec</code>

<code>%define LDAP 2</code>

<code>%define MYSQL 1                         </code><code>//</code><code>添加Mysql的支援(預設已注釋)</code>

<code>%define PCRE 1</code>

<code>%define SASL 2</code>

<code>%define TLS 1</code>

<code>%define IPV6 1</code>

<code>%define POSTDROP_GID 90</code>

<code>%define PFLOGSUMM 1</code>

<code># rpmbuild -bb postfix.spec</code>

<code># cd ../RPMS/x86_64</code>

<code># rpm -ivh postfix-2.3.3-6.x86_64.rpm</code>

<code># vi /etc/postfix/main.cf</code>

<code>queue_directory = </code><code>/var/spool/postfix</code>

<code>command_directory = </code><code>/usr/sbin</code>

<code>daemon_directory = </code><code>/usr/libexec/postfix</code>

<code>mail_owner = postfix</code>

<code>myhostname = mail.xfcy.org</code>

<code>mydomain = xfcy.org</code>

<code>myorigin = $mydomain</code>

<code>inet_interfaces = all</code>

<code>mydestination =</code>

<code>unknown_local_recipient_reject_code = 550</code>

<code>mynetworks = 192.168.0.0</code><code>/24</code><code>, 127.0.0.0</code><code>/8</code>

<code>alias_maps = </code><code>hash</code><code>:</code><code>/etc/aliases</code>

<code>alias_database = </code><code>hash</code><code>:</code><code>/etc/aliases</code>

<code># chkconfig postfix on</code>

<code># /etc/init.d/postfix start</code>

Postfix郵件的外發測試:

33

34

35

36

<code># telnet localhost 25</code>

<code>Trying 127.0.0.1...</code>

<code>Connected to localhost.localdomain (127.0.0.1).</code>

<code>Escape character is </code><code>'^]'</code><code>.</code>

<code>220 mail.xfcy.org ESMTP Postfix</code>

<code>ehlo mail.xfcy.org</code>

<code>250-mail.xfcy.org</code>

<code>250-PIPELINING</code>

<code>250-SIZE 10240000</code>

<code>250-VRFY</code>

<code>250-ETRN</code>

<code>250-ENHANCEDSTATUSCODES</code>

<code>250-8BITMIME</code>

<code>250 DSN</code>

<code>mail from:[email protected]</code>

<code>250 2.1.0 Ok</code>

<code>rcpt to:[email protected]</code>

<code>250 2.1.5 Ok</code>

<code>data</code>

<code>354 End data with &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;</code>

<code>subject:</code><code>test</code>

<code>postfix </code><code>test</code>

<code>.</code>

<code>250 2.0.0 Ok: queued as 5212B96E83</code>

<code>quit</code>

<code>221 2.0.0 Bye</code>

<code>Connection closed by foreign host.</code>

<code># tailf /var/log/maillog</code>

<code>May 17 12:52:50 mail postfix</code><code>/smtpd</code><code>[15176]: connect from mail.xfcy.org[192.168.0.89]</code>

<code>May 17 12:53:04 mail postfix</code><code>/smtpd</code><code>[15176]: DF4B796E26: client=mail.xfcy.org[192.168.0.89]</code>

<code>May 17 12:53:15 mail postfix</code><code>/cleanup</code><code>[15210]: DF4B796E26: message-</code><code>id</code><code>=&lt;[email protected]&gt;</code>

<code>May 17 12:53:15 mail postfix</code><code>/qmgr</code><code>[3050]: DF4B796E26: from=&lt;[email protected]&gt;, size=379, nrcpt=1 (queue active)</code>

<code>May 17 12:53:16 mail postfix</code><code>/smtp</code><code>[15214]: DF4B796E26: host 163mx03.mxmail.netease.com[220.181.14.159] said: 451 DT:SPM mx44, XsCowEBpUEu7t5VRWqdEAw--.1675S2, please try again 1368766395 http:</code><code>//mail</code><code>.163.com</code><code>/help/help_spam_16</code><code>.htm?ip=210.13.194.138&amp;hostid=mx44&amp;</code><code>time</code><code>=1368766395 (</code><code>in</code> <code>reply to end of DATA </code><code>command</code><code>)</code>

<code>May 17 12:53:17 mail postfix</code><code>/smtp</code><code>[15214]: DF4B796E26: to=&lt;[email protected]&gt;, relay=163mx01.mxmail.netease.com[220.181.14.139]:25, delay=16, delays=14</code><code>/0</code><code>.02</code><code>/1</code><code>.6</code><code>/0</code><code>.24, dsn=2.0.0, status=sent (250 Mail OK queued as mx10,PMCowEBJElK8t5VRT8XKFQ--.914S2 1368766396)</code>

<code>May 17 12:53:17 mail postfix</code><code>/qmgr</code><code>[3050]: DF4B796E26: removed</code>

<code>May 17 12:53:23 mail postfix</code><code>/smtpd</code><code>[15176]: disconnect from mail.xfcy.org[192.168.0.89]</code>

安裝配置Dovecot:

<code># yum -y install dovecot</code>

<code># vi /etc/dovecot.conf</code>

<code>mail_location = maildir:</code><code>/var/maildata/domains/</code><code>%d/%n</code><code>/Maildir</code>

<code>auth default {</code>

<code>  </code><code>mechanisms = plain</code>

<code>   </code><code>#把pam { }這一項注釋掉</code>

<code>  </code><code>passdb sql {</code>

<code>    </code><code>args = </code><code>/etc/dovecot-mysql</code><code>.conf</code>

<code>  </code><code>}</code>

<code>  </code><code>userdb </code><code>passwd</code> <code>{</code>

<code>  </code><code>userdb sql {</code>

<code>        </code><code>args =</code><code>/etc/dovecot-mysql</code><code>.conf</code>

<code>  </code><code>user = root</code>

<code>}</code>

<code># vi /etc/dovecot-mysql.conf                                        //建立mysql認證檔案</code>

<code>driver = mysql</code>

<code>connect = host=localhost dbname=extmail user=extmail password=extmail</code>

<code>default_pass_scheme = CRYPT</code>

<code>password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = </code><code>'%u'</code>

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

<code># chkconfig dovecot on</code>

<code># /etc/init.d/dovecot start</code>

<code># netstat -lntp | grep dovecot</code>

<code>tcp        0      0 :::993                      :::*                        LISTEN      5033</code><code>/dovecot</code>      

<code>tcp        0      0 :::995                      :::*                        LISTEN      5033</code><code>/dovecot</code>      

<code>tcp        0      0 :::110                      :::*                        LISTEN      5033</code><code>/dovecot</code>      

<code>tcp        0      0 :::143                      :::*                        LISTEN      5033</code><code>/dovecot</code>

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

<code>配置cyrus-sasl認證:</code>

<code># yum -y install cyrus-sasl</code>

<code># postconf -a</code>

<code>cyrus</code>

<code>dovecot</code>

<code># vi /etc/postfix/main.cf                   //為postfix開啟基于cyrus-sasl的認證功能</code>

<code>##====================SASL========================</code>

<code>smtpd_recipient_restrictions =</code>

<code>        </code><code>permit_mynetworks,</code>

<code>        </code><code>permit_sasl_authenticated,</code>

<code>        </code><code>reject_non_fqdn_hostname,</code>

<code>        </code><code>reject_non_fqdn_sender,</code>

<code>        </code><code>reject_non_fqdn_recipient,</code>

<code>        </code><code>reject_unauth_destination,</code>

<code>        </code><code>reject_unauth_pipelining,</code>

<code>        </code><code>reject_invalid_hostname,</code>

<code>        </code><code>reject_unknown_sender_domain,</code>

<code>        </code><code>reject_unknown_recipient_domain</code>

<code># SMTP sender login matching config</code>

<code>smtpd_sender_restrictions =</code>

<code>        </code><code>reject_sender_login_mismatch</code>

<code># SMTP AUTH config here</code>

<code>broken_sasl_auth_clients = </code><code>yes</code>

<code>smtpd_sasl_auth_enable = </code><code>yes</code>

<code>smtpd_sasl_local_domain = $myhostname</code>

<code>smtpd_sasl_security_options = noanonymous</code>

<code># banner</code>

<code>mail_name = Postfix - by xfcy.org</code>

<code>smtpd_banner = Welcome to $myhostname ESMTP , $mail_name</code>

<code># service postfix restart</code>

<code>Trying 192.168.0.89...</code>

<code>Connected to mail.xfcy.org (192.168.0.89).</code>

<code>220 Welcome to mail.xfcy.org ESMTP , Postfix - by xfcy.org</code>

<code>250-AUTH PLAIN LOGIN                    </code><code>//</code><code>出現以下兩行表示cyrus-sasl認證添加成功</code>

<code>250-AUTH=PLAIN LOGIN</code>

<code>安裝Courier-Authlib:</code>

<code># tar jxvf courier-authlib-0.62.4.tar.bz2</code>

<code># cd courier-authlib-0.62.4</code>

<code># ./configure --prefix=/usr/local/courier-authlib --without-stdheaderdir --without-authuserdb --without-authpam --without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --without-authcustom --with-authmysql --with-redhat</code>

<code># make</code>

<code># make install</code>

<code># make install-configure</code>

<code># echo "/usr/local/courier-authlib/lib/courier-authlib" &gt;&gt; /etc/ld.so.conf</code>

<code># ldconfig</code>

<code># ldconfig -v | grep courier</code>

<code>/usr/local/courier-authlib/lib/courier-authlib</code><code>:</code>

<code>        </code><code>libcourierauthsasl.so -&gt; libcourierauthsasl.so.0</code>

<code>        </code><code>libcourierauthsaslclient.so -&gt; libcourierauthsaslclient.so.0</code>

<code>        </code><code>libcourierauth.so -&gt; libcourierauth.so.0</code>

<code>        </code><code>libcourierauthcommon.so -&gt; libcourierauthcommon.so.0</code>

<code># cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib</code>

<code># chmod 755 /etc/rc.d/init.d/courier-authlib</code>

<code># chkconfig --add courier-authlib</code>

<code># chkconfig courier-authlib on</code>

<code># chmod 755 /usr/local/courier-authlib/var/spool/authdaemon/</code>

<code># cp /usr/local/courier-authlib/etc/authlib/authmysqlrc /usr/local/courier-authlib/etc/authlib/authmysqlrc.bak</code>

<code># vi /usr/local/courier-authlib/etc/authlib/authmysqlrc</code>

<code>MYSQL_SERVER            127.0.0.1</code>

<code>MYSQL_USERNAME          extmail</code>

<code>MYSQL_PASSWORD          extmail</code>

<code>MYSQL_SOCKET            </code><code>/var/lib/mysql/mysql</code><code>.sock</code>

<code>MYSQL_PORT              3306</code>

<code>MYSQL_OPT               0</code>

<code>MYSQL_DATABASE          extmail</code>

<code>MYSQL_USER_TABLE        mailbox</code>

<code>MYSQL_CRYPT_PWFIELD     password</code>

<code>MYSQL_UID_FIELD         1000</code>

<code>MYSQL_GID_FIELD         1000</code>

<code>MYSQL_LOGIN_FIELD       username</code>

<code>MYSQL_HOME_FIELD        concat(</code><code>'/var/maildata/domains/'</code><code>,homedir)</code>

<code>MYSQL_NAME_FIELD        name</code>

<code>MYSQL_MAILDIR_FIELD     concat(</code><code>'/var/maildata/domains/'</code><code>,maildir)</code>

<code># vi /usr/local/courier-authlib/etc/authlib/authdaemonrc</code>

<code>authmodulelist=</code><code>"authmysql"</code>

<code>authmodulelistorig=</code><code>"authmysql"</code>

<code>daemons=10</code>

<code>authdaemonvar=</code><code>/usr/local/courier-authlib/var/spool/authdaemon</code>

<code>DEBUG_LOGIN=0</code>

<code>DEFAULTOPTIONS=</code><code>""</code>

<code>LOGGEROPTS=</code><code>""</code>

<code># service courier-authlib start</code>

<code>Starting Courier authentication services: authdaemond</code>

<code># ps -ef | grep authdaemond | grep -v grep</code>

<code>root      9173     1  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/sbin/courierlogger</code> <code>-pid=</code><code>/usr/local/courier-authlib/var/spool/authdaemon/pid</code> <code>-start </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code>root      9174  9173  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code>root      9175  9174  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code>root      9176  9174  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code>root      9177  9174  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code>root      9178  9174  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code>root      9179  9174  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code>root      9180  9174  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code>root      9181  9174  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code>root      9182  9174  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code>root      9183  9174  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code>root      9184  9174  0 02:50 ?        00:00:00 </code><code>/usr/local/courier-authlib/libexec/courier-authlib/authdaemond</code>

<code># vi /usr/lib64/sasl2/smtpd.conf</code>

<code>pwcheck_method: authdaemond</code>

<code>log_level: 3</code>

<code>mech_list:PLAIN LOGIN</code>

<code>authdaemond_path:</code><code>/usr/local/courier-authlib/var/spool/authdaemon/socket</code>

<code># groupadd -g 1000 vgroup</code>

<code># useradd -g 1000 -u 1000 -s /sbin/nologin -M vuser</code>

<code># tar jxvf maildrop-2.2.0.tar.bz2</code>

<code># cd maildrop-2.2.0/</code>

<code># ./configure --enable-sendmail=/usr/sbin/sendmail --enable-trusted-users='root vuser' --enable-syslog=1 --enable-maildirquota --enable-maildrop-uid=1000 --enable-maildrop-gid=1000 --with-trashquota --with-dirsync</code>

<code># make &amp;&amp; make install</code>

<code># vi /etc/postfix/master.cf</code>

<code>maildrop  unix  -       n       n       -       -       pipe</code>

<code>  </code><code>flags=DRhu user=vuser argv=</code><code>/usr/local/bin/maildrop</code> <code>-w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}</code>

<code>//flags</code><code>前面有</code><code>"兩個空格"</code>

<code>maildrop_destination_recipient_limit = 1</code>

<code># maildrop -v                                                   //測試maildrop對authlib支援</code>

<code>maildrop 2.1.0 Copyright 1998-2005 Double Precision, Inc.</code>

<code>GDBM</code><code>/DB</code> <code>extensions enabled.</code>

<code>Maildir </code><code>quota</code> <code>extension enabled.</code>

<code>This program is distributed under the terms of the GNU General Public</code>

<code>License. See COPYING </code><code>for</code> <code>additional information.</code>

如果maildrop使用RPM包安裝時,會自動建立vuser使用者及vgroup使用者組,專門用于郵件的存儲,vuser:vgroup的uid/gid都是1000,這與一般的郵件文檔中提及用postfix使用者存郵件不一樣。因為postfix使用者的uid一般都低于500,而Suexec子產品編譯時對UID/GID的要求是要大于500,是以使用postfix使用者不能滿足要求。其次,如果用Maildrop作為投遞代理(MDA),以postfix身份投遞的話,會導緻postfix MTA錯誤。

     本文轉自Vnimos51CTO部落格,原文連結:http://blog.51cto.com/vnimos/1203162,如需轉載請自行聯系原作者

繼續閱讀