| 订阅 | 在线投稿
分享
 
 
 

在DEBIAN 下安装POSTFIX 邮件系统

来源:互联网网民  宽屏版  评论
2008-05-31 00:04:44

作者:冯勇 fengyongchuang # yahoo.com.cn (≠%26amp;键盘人生$:71633908) +

| 8zlE/i

日期:2006-05-18 +KuwkyIyM

gdVqI8%]Y

技术支持网站:www.extmail.org :y9fJ

X

QQ群: 9\ylxh i

:EWxg$

网管之家: 5929685 },/

网管之家-UNIX:3791457 Qhh']M[*Q

Extmail 群/postfix 1: 6769767 2[

Extmail 群/postfix 2: 18051473 bdB+PNmn(

%26amp;z^Rc2rvs

版权所有,复制或转载时请保留作者信息。尊重他人的劳动成果就等于尊重自己。 w|jzXPmZ1

fN$#UwOm

如有问题请到下面网址提问: n6%26amp;?K6

'MLq(c )

http://www.extmail.org/forum/archive/2/0605/1771.html K5tkp`D

vP?c{ L2

本次文章的配置文件:mail.tar.gz O\ Hy#8M*

Bt

一直想写一篇DEBIAN 下的邮件系统安装文档,因为自己太懒一直没有动手,今天闲着没事,把文档写出来,供各位参考同时给自己留一份笔记。 mau%)iD

^h6g.eO@

这次没有使用maildrop,原因:1、debian 里的maildrop 版本好像是1.7的,配置有点复杂,所以没有去研究,如果那位兄弟配置成功,告诉我。2、公司用webmail 的人少,邮件过滤规则很少人用,以前用maildrop 主要是用他来将垃圾邮件移到垃圾信箱,现在使用了slockd ,垃圾邮件少了,再说没有用webmail。 B`tV9 B.

oaZI;;W

N7'VXl

!p5.$$~

一、安装DEBAIN VmNO 6$aG

1、debian 的好处 pO|ydf

其实我喜欢很喜欢这个LINUX发行版,因为他有点像freeBSD 的软件安装方式。我对debian 并不是十分熟悉,如果有写错的地方,请指正。 ?P;"B#eg*

},Ky# \mp

2、下载debian 可以到官方网站或linuxsir 下载。 ^~ ddT

我使用的版本是:debian-31r2-i386-netinst.iso )69j gVDv

z(` D /

http://debian.linuxsir.org/main/?q=node/92 @~5-@cg:$

bP%26amp;*38 nH

http://www.us.debian.org/ o*fk) if

1S1;:"eV

http://debian.cn99.com }[Puy2zK

02Eu !$kI

... jmr4 de6(a

Iw/-U6`f$P

3、安装 DBRO-0W3

跟据我的爱好喜欢拿10G 左右的空间作为系统,把数据资料放到另一个分区或硬盘中,并装载到/home/data 这个目录,如果你不喜欢这样,可以跟据自己的爱好,修改配置文档的路径。 yt~i#3

KP S6j@

4、主机名 0z_fj'0

安装时可以输入主机名,或者编辑/etc/host.conf 修改你的主机名。 S }Bf.K

SNGl"(f

这里使用 mail.extmail.org 为例。 pt4ox"*5

f5ZFZO;B

5、更新你的软件包 !

在复制完文件后,会出现一个配置过程,在配置 apt 那里添加一个安装源,选择ftp 现先择 china 可以选择下面两个安装源: 5nnhW?@7

NHu/*++=

ftp.linuxforum.net 或 debian.cn99.com {+dz_A

E= 9

本人用的是网通ADSL 选择ftp.linuxforum.net 好像快一点。 6uXa2p

lWgz kx*q

如果你在安装时跳过了这一步,可以进入系统后可以再次运行base-config 选择configure apt 进行再次配置。 $D2y}\,

* H;ljn

6、安装SSH _J ` dC

为了方便安装,建义使用SSH 进行远程操作,方便复制与粘贴。 ") O:A a}

]]uk8kF:

apt-get install ssh $R*$nz@

)RZ NQ:

*至于apt 系统的使用方法,建议大家去看debian 的文档,写得非常详细。 $-/g'"

%Q=gZna

http://debian.linuxsir.org/book/reference/lyoo/ ^UZYjh[0

0i$eK2l

二、安装软件 _pD_W5L0|

1、下载需要的软件 ll2tH16

到www.extmail.org 下载extmail/extman/slockd ,通过FTP 上传到服务器,并解压 A +^K;:

f)_T'A/:B;

tar zxvf extmail-0\[1\].23-20060219.tar.gz ^I9%26amp;Rqj~!

qbQ`V u@

tar zxvf extman-0\[1\].15-20060518.tar.gz P Xt6;

sW _PrGBP

tar zxvf slockd-0\[1\].08.tar.gz tgA4X 2

S: wc)p

V~Xwa %26amp;

M1~|PfQJv

2、安装mysql qfaE_|b%:

mail:~# apt-get install mysql-server Y26}R;Fa

|@ 9fZw

安装完mysql 后,将extman 的数据导入到mysql 中 `oJmjbc

m^I/byv)

mail:/home/fy138# cd extman-0.15-20060518/docs rax^NCPR#

i;9!aUL=

mail:/home/fy138/extman-0.15-20060518/docs# mysql -uroot Ds~K $)/t

[sYb !o) 

$:

打开extman-0.15-20060518/docs/init.sql 将里{crypt} 这些字符串删除,否则pop3可能无法登陆,如果你懒得去修改init.sql 可以安装完成后用phpmyadmin修改相关记录。 'B="jwbnW

g_-lB4_+

将uidnumber/gidnumber 改为postfix 的uid/gid 查看uid/gid 方法 fI] a8-dh

I^T"z

mail:/etc/postfix# id postfix _ZUJff#

uid=105(postfix) gid=106(postfix) groups=106(postfix) nn}XyNH!`{

!0_{XQ8gT@

mail:/home/fy138/extman-0.15-20060518/docs# mysql -uroot =Qg"J 3A

( Uea_"

3、安装apache 2 Cq*:^ c%26amp;

mail:~# apt-get install apache2 92 K }t6

_ dbC/

4、安装php4 gzSMM`0 )c

mail:~# apt-get install php4 php4-mysql libapache2-mod-php4 phpmyadmin Zp{ , B

~0) drep

5、安装postfix QP!WL

mail:~# apt-get install postfix postfix-mysql postfix-tls postfix-doc :%\,,Tiis

V \[(2}.

在弹出的对话框中选择No configuration。 u]vw[j$l

;\V.';:

A、将extman目录下所有 mysql_virtul_*.cf 复制到/etc/postfix 目录下。 r@;J xZN

,3V-0cbq

mail:~#cd /home/fy138/extman-0.15-20060518/docs N~3K9z?s

C MFSbaX

注意,这里我的存放位置是/home/fy138 ,不要照搬了。 qWTr'^2)

FO ,)d4 E

mail:/home/fy138/extman-0.15-20060518/docs# cp mysql_virtual_*.cf /etc/postfix/

^B(sj*Fo

B、配置 /etc/postfix/main.cf,如果你的main.cf 已存先改名再重新编辑一个,加入下面的内容。 M$ %26amp;Qx\

Cvd[=%~V0

?`YM3to

###################BASE################## *'WZHOg@

myhostname=mail.extmail.org z_}q!@ht%26amp;L

mydomain = extmail.org { Vw{|q8[}

mydestination = $myhostname ^:;HH'

local_recipient_maps = Ujh uXx[

smtpd_banner = extmail.org ESMTP Mail System OTFD ft

message_size_limit = 14680064 rqW^\Sn

#################MySQL################ F :*H Y|

5:P)_-V

virtual_gid_maps=static:106virtual_uid_maps=static:105virtual_transport = virtual 2Z+"DF

virtual_alias_maps =mysql:/etc/postfix/mysql_virtual_alias_maps.cf Re,Z3l2

virtual_mailbox_base = /home/data/domains #W8_! B

virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf Kk0@TUvB%26amp;

virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf [4 5Z=ZZ

 !!AnG(/

'md fxPu

################Quota################ MMy?eyP

virtual_create_maildirsize = yes \xL~${$9

virtual_mailbox_extended = yes 1J71+(@~

virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf w \A Tx;-

virtual_mailbox_limit_override = yes 3.Ar ;

virtual_maildir_limit_message = Sorry,the user's Maildir has overdrawn his diskspace quota ,please tray again later. CN6c

virtual_overquota_bounce = yes "8kJXBqw

MZox4O

##############SASL#################### 5j2~S%26amp;

smtpd_sasl_auth_enable = yes ]ZR|MQ$Cik

smtpd_sasl2_auth_enable = yes j# sIr- L

smtpd_sasl_security_options = noanonymous t2VW'V`

broken_sasl_auth_clients = yes U{fr*_

r1gF#VO$

smtpd_recipient_restrictions = |L+vFSL

permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname,?reject_non_fqdn_sender,?reject_non_fqdn_recipient,?reject_unauth_destination,?reject_unauth_pipelining,?reject_invalid_hostname,?check_policy_service inet:127.0.0.1:10030  $ Ye

将 /etc/postfix/目录下面以mysql_virtul_*.cf 开头的文件,将里面的hosts=localhost 改为hosts=127.0.0.1 ,否则postfix 连接mysql 会出现问题 。 Seiv{}

~xId+ H

如果更改master.cf 将postfix 不以chroot 方式运行是否正常?还没有去试。 ]nGj9$=8$

gIxXz"

X!ZQ=JWN

gmjH-Ft

将/etc/postfix/master.cf中的下面几行把注释去掉 AH?gw\ 3n

346 n{K

/Hs%gb%

# only used by postfix-tls ]Skgm/ q

tlsmgr fifo - - n 300 1 tlsmgr *![Z4J*{

smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes = CC03%

587 inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes TNR:Z

,;!2'O^@

%n:b{"

6、安装cyrus-sasl2 G-vT/(Xrt

mail:~# apt-get install libsasl2 libsasl2-modules libsasl2-modules-sql 921c#RF

KTa ,B5_

创建/etc/postfix/sasl/smtpd.conf 加入下面的内容。 ck4{%26amp;zp%

z{ /fIHJg

ND%1wr `u

pwcheck_method:authdaemond ,{

log_level:3 `o*8wNh`)

mech_list:PLAIN LOGIN .W-SNqC)

authdaemond_path:/var/run/courier/authdaemon/socket _o?t(BZp

注意:在进行smtpd 认证测试时,maillog 提示找不到 /var/run/courier/authdaemon/socket 通常是下面的问题 :1、权限 2、chroot 。

3!5[=%26amp;

出错邮件日志: ((~p[8p

%R5N4#Mi

May 20 17:35:26 mail postfix/smtpd[1229]: warning: SASL authentication failure: cannot connect to Courier authdaemond: No such file or directory Y`{R7un

v8c$1MpBj

+6eSgv_B

解决方法(引用wangpenghui 原文,Thanks! ^_^,本人使用了第二种方法,另外还要注意smtpd.conf文件中的空格!) W#.$x66

1%lqUpr^

解决方法有如下两种, R%26amp;$?t%"F

1.对于postfix不做任何修改,而是在每次couier-authdaemon启动之后都创建 -fkueXA^

?,Mo.

SZ2ldmlk[X

ln -f /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket XlWh

z})nA/ I}

的硬链接. 同时对于 [+Nu]-@

mSSYe%+dP

/var/run/courier/authdaemon/socket nV]8S[4O

/var/spool/postfix/var/run/courier/authdaemon/socket 5 #OI

`h

的整个路径赋予postfix用户于读权限。一般为755. #XEG\z

2.第二种就是修改postfix中master.cf文件的如下行: 9h{Eh

bW_`:

smtp inet n - - - - smtpd t|-I_]`X"

'1 L+c

为 %FpMC.JE

o/2Z38=F

smtp inet n - n - - smtpd Ze7W96Px

}^y]bdD'

这样smtpd程序就不是运行在chroot状态,那么postfix的smtpd程序就可以通过smtpd.conf中的 5.Q"[*b=Y

authdaemond_path参数找到authdaemon的socket文件。不过也要注意权限问题,要不然就会出现connection refused的错误。这里指的权限是/var/run/courier/authdaemon/socket整个路径的权限,而不仅仅是socket文件的权限。 sK/i(-@k

.2Orf|

第二种方法相对于第一种方法来说,比较容易,但是增大了安全隐患。管理员可自行选择使用哪种方式。 $2~D;B

当然,我这里也是抛砖引玉,肯定还有更好的解决办法。希望大家能够赐教。 F%26amp;mKJc!d;|

参考:http://www.extmail.org/forum/archive/2/0605/1723.html Wdo K(Z

?4V .

7、安装courier-imap ld, qX

注意安装时,会提示你是否创建一个目录来放这些配置文件,要选择 YES 否则可能你的文件位置与下面配置的不一样。 m,2}^_

{Jm?Q}mUp

mail:~# apt-get install courier-authdaemon courier-authmysql courier-base courier-imap courier-pop courier-pop-ssl courier-imap-ssl xceT(

e~si{ *sJ

A、配置courier-authdaemon ,autdaemon 是邮件系统认证的主要软件,很多人无法通过SMTPD认证多数问题在这里。 kMhx7qBx[

gb;l.'o`

将/etc/courier/authdaemonrc 改名为 /etc/courier/authdaemonrc.bak %26amp;HY`Y

V^hHb.S

_z]WII D

authmodulelist="authmysql" h_}mbMIOu

authmodulelistorig="authmysql" P[l-u^P

version="authdaemond.mysql" DXlRDDrt

daemons=5 ^@:v[ KPO

authdaemover=/var/run/courier/authdaemon a%_UNX

subsystem=mail 9uT#[G

DEBUG_LOGIN=2 KrI[vk[I%26amp;3

DEFAULTOPTIONS="wbnodsn=1" WU/7Fi

将/etc/courier/authmysqlrc 改名为 authmysqlrc.bak ,创建/etc/courier/authmysqlrc 输入下面的内容。 ;Z8|5Do

18!^y`Y

AQgq,R#

MYSQL_SERVER localhost P"xhe7SRn

MYSQL_USERNAME extmail aJ2=bBFwc

MYSQL_PASSWORD extmail (  X

MYSQL_PORT 0 4s-JE 

MYSQL_OPT 0 w$VB7 Ct

MYSQL_DATABASE extmail WJ.~KG7

MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,CONCAT('/home/data/domains/',homedir),CONCAT('/home/data/domains/',maildir),quota,name FROM mailbox WHERE username = '$(local_part)@$(domain)' af]jc{6N

修改authdaemond 的权限,让其它程序有权限访问他,重启authdaemond 3\7fzQM=

}j7]^yI

chmod -R +x /var/run/courier/authdaemon *r!]ob

T R#1#=,*

/etc/init.d/courier-authdaemon restart

 R+!

B、创建测试用户的目录 y]oIJbjy0

BG8(^W'J{

mail:/etc/postfix# id postfix Kcy=^0.d

uid=105(postfix) gid=106(postfix) groups=106(postfix) V !vI/-YO

IZs|b'x(v

mail:/etc/courier# mkdir -p /home/data/domains/extmail.org/test F\vw9M v#

A`Y ]w

mail:/etc/courier# /usr/bin/maildirmake /home/data/domains/extmail.org/test/Maildir ^cn:5A.Z

mail:/etc/courier# chown -R 105:106 /home/data/domains/ 5Q4v?$

g86~^ |s

C、测试系统 Q H*W Gbx

Bg_]YkP+

打开一个窗口,输入 tail -f /var/log/mail.log w(m{.'

olX7?P0

将测试的用户名和密码进行base64 编码 E1[Q-zp9

:\T:6y

%perl -MMIME::Base64 -e 'print encode_base64("test\@extmail.org");' uk@#0{2n(

dGVzdEBleHRtYWlsLm9yZw== RW~fIv,/

%perl -MMIME::Base64 -e 'print encode_base64("test");' f'SB%!Ol

dGVzdA==测试smtpd 发邮件 tq-Ugu_I

d__!`o

mail:/etc/postfix# telnet localhost 25 eA=_ w@7

Trying 127.0.0.1... $-H'O Y

Connected to localhost. 8YrX

Escape character is '^]'. ru9M@7xM_

220 extmail.org ESMTP Mail System K8AjUc.

ehlo test qGHS/7\@D

250-mail.extmail.org @[,7!b

250-PIPELINING M'W.cYH

250-SIZE 14680064 ?E|?

250-VRFY im1  +r,

250-ETRN c6OoP8XP

250-AUTH LOGIN PLAIN WV7e9CV\o*

250-AUTH=LOGIN PLAIN D`a6[p,

250 8BITMIME I! SzuAr\

auth login `b]=j

334 VXNlcm5hbWU6 }v*`rA,

dGVzdEBleHRtYWlsLm9yZw== k:q/*  

334 UGFzc3dvcmQ6 rW*.CV

dGVzdA== H*Hv l

235 Authentication successful ,XgQ@~nzpi

mail from: D~VwF2 d

250 Ok +?3k( b;

rcpt to: z\},s%26amp;

250 Ok D_XzG9

data ,:K2Lfa

354 End data with . X$]= =|M44

test {tcWq!

. iC(R C3?j

250 Ok: queued as C2FF131B85 "vNx`OV

quit ]44$Ur![

221 Bye rovLVc@P

Connection closed by foreign host. $B)-Hy73

mW7ezG!%

mail.log 应该有如下记录 /XBNoj|xg

% ?SO

9Vj774f }

May 20 19:37:32 mail postfix/smtpd[1763]: connect from localhost[127.0.0.1] !xCN`/hg

May 20 19:37:40 mail postfix/smtpd[1763]: disconnect from localhost[127.0.0.1] cJ[47@o\

May 20 19:37:43 mail postfix/smtpd[1763]: connect from localhost[127.0.0.1] uk.[;

May 20 19:38:24 mail authdaemond.mysql: received auth request, service=smtp, authtype=login F6gEnt =

May 20 19:38:24 mail authdaemond.mysql: authmysql: trying this module UGI pg

May 20 19:38:24 mail authdaemond.mysql: SQL query: SELECT username,password,"",uidnumber,gidnumber,CONCAT('/home/data/domains/',homedir),CONCAT('/home/data/domains/',maildir),quota,name FROM mailbox WHERE username = 'test@extmail.org' `:U#`-)Xq

May 20 19:38:24 mail authdaemond.mysql: password matches successfully bSb)/z1

May 20 19:38:24 mail authdaemond.mysql: authmysql: sysusername=null, sysuserid=105, sysgroupid=106, homedir=/home/data/domains/extmail.org/test, address=test@extmail.org, fullname=Test user, maildir=/home/data/domains/extmail.org/test/Maildir/, quota=5242880, options= z ;WA $a2

May 20 19:38:24 mail authdaemond.mysql: authmysql: clearpasswd=null, passwd=uywiuN.XggXXc /_hwB`\

May 20 19:38:24 mail authdaemond.mysql: authmysql: ACCEPT, username test@extmail.org OrS~LOj0zc

May 20 19:38:47 mail postfix/smtpd[1763]: C2FF131B85: client=localhost[127.0.0.1], sasl_method=login, sasl_username=test@extmail.org VL1x V

May 20 19:38:52 mail postfix/cleanup[1770]: C2FF131B85: message-id=20060520113836.C2FF131B85@mail.extmail.org pd#rC:-

May 20 19:38:52 mail postfix/qmgr[1699]: C2FF131B85: from=test@test.com, size=328, nrcpt=1 (queue active) T AYegH.

May 20 19:38:52 mail postfix/virtual[1772]: C2FF131B85: to=test@extmail.org, relay=virtual, delay=16, status=sent (delivered to maildir) jizpl6fOw

May 20 19:38:52 mail postfix/qmgr[1699]: C2FF131B85: removed =bE-Z7

May 20 19:38:55 mail postfix/smtpd[1763]: disconnect from localhost[127.0.0.1] 7xB\ZX

TQt{.{nI

测试pop3 收邮件 Y=vpY{Ly%26amp;

^4"(/mi_2

XIs|D+uQg

mail:/etc/postfix# telnet localhost 110 +:@$ z],d

Trying 127.0.0.1... 7GZaQRhI

Connected to localhost. \v: b to

Escape character is '^]'. 3Zft

+OK Hello there. ~xh/!6W2F

user test@extmail.org 9%26amp;n+5v-IJB

+OK Password required. nW4'`:)

pass test C8LrZ]=T

+OK logged in. 0S(+ 

list ;/!^":#

+OK POP3 clients that break here, they violate STD53. !9X 0

1 539 vsI',O;W8

2 423 kw"aGP_w

. qb{LuI@U

retr 2 ]cv%26amp;4/

+OK 423 octets follow. GX0iJ]n

Return-Path: test@test.com "heT4 \

X-Original-To: test@extmail.org 94Ly$Jo %26amp;

Delivered-To: test@extmail.org Lr38p/w

Received: from test (localhost [127.0.0.1]) )E1W0^YV

by mail.extmail.org (Postfix) with ESMTP id C2FF131B85 N=Uo^Ts^

for test@extmail.org; Sat, 20 May 2006 19:38:36 +0800 (CST) Y!1g7- ip

Message-Id: 20060520113836.C2FF131B85@mail.extmail.org $zU6TUvA!

Date: Sat, 20 May 2006 19:38:36 +0800 (CST) 8#{p[L#/

From: test@test.com hN$v~3 

To: undisclosed-recipients:; p^lsu

)w`U~-I

test v^

.  k=3:![

quit S5 2} JoR

+OK Bye-bye. [![_yw

Connection closed by foreign host.