首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 操作系统-> 注册表教程
postfix + cyrus-sasl + cyrus-imapd + pgsql howto_qmail
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

[附言]
该附言或许不成其为什么许可证,但还是希望您尊重作者的愿望。
如果您发现有什么错误,请及时通知我,我将尽快作出修改。如果您在网上转载,那将是免费,但希望您附上本附言,并且注明出处的链接。如果您要把它用印刷物形式出版,请通过www.cnfug.org跟本人接洽。
您在以本文作为根据配置电脑的时候,若出现任何故障,后果自负,与本作者无关。


目标
本文的目的是在于说明如何在FreeBSD的环境下面搭建一个邮件系统。这个邮件系统支持虚拟用户,提供IMAP服务,可以成为构成WebMail系统的基础。
支持IMAP服务的Webmail有著名的IMP和SquirrelMail等等。
本文虽然是用PgSQL作为后台数据库,但是仍然对使用MySQL,LDAP数据库的作为后台的类似邮件系统有启发作用。如果仔细阅读本文,一定会有所收货的。使用其他后台数据库的话,要修改的地方有两处:pam服务和main.cf的virtual_mailbox_maps项。
本文所有的调试是在FreeBSD-4.8 release上通过的,也对FreeBSD-5作了额外的说明,主要的差异是集中在pam服务的配置不同而已,希望能有所帮助。
Linux的用户也能可以参考本文的配置,您只需要留意路径和pam服务的配置。pam服务配置跟FreeBSD-5类似。

零、阅读准备

1)阅读本文需要一定基础,我假设你已经清楚以下的东西:
邮件系统的基本原理,邮件系统的相关协议的作用,例如smtp,pop3,imap。

2)什么是SASL:
SASL的英文全称是Simple Authentication and Security Layer,简单验证和安全层。
SMTP协议并没有提供用户验证功能,很容易匿名中转邮件。即使限制了可以转发的网段,也不安全。他的定义是: a method for adding authentication support to connection-based protocols,为基于连接的协议提供认证功能。

3)软件的角色:

Postfix:充当MTA,就是smtpd,作为邮件转发用。

Cyrus-SASL:分成两部分
a)Cyrus项目的SASL lib,Postfix使用SASL需要用到的lib。
b)Cyrus-saslauthd,一个SASL的验证后台程序。

Cyrus-IMAPD:
提供IMAP服务,提供邮件读取和管理邮箱的作用。

cyradm:
这个不是一个独立的软件,安装Cyrus-IMAP的时候会自动安装上去的。它的作用是创建和管理邮箱。

PgSQL:后台数据库,存放用户的密码等等。

总的来讲,Postfix充当转送邮件的服务;Cyrus-IMAP充当提供邮件读取、管理的服务;SASL使用验证服务。

4、Cyrus-SASL和Cyrus-IMAPD不是同一样东西
就跟Microsoft Visual C++和Microsoft Office不是同一个东西一样

一、本系统的工作原理和结构
注意是本系统。实现一个邮件系统有很多种方式,即使你用的都是跟本系统完全一样的软件,也有不同的实现方式。
本系统的邮件主机是:
f4.room
f4是因为fbsd-4,域为room:是因为电脑放在房间里头。您要看不顺眼,就把本文的f4.room都换成example.com算了。

I、Postfix的担任的工作的部分:
1、这个是投递邮件的时候的用户验证的部分:

 |------------------------| |     Postfix            | |                        | | |-------------|        | |-| Cy-SASL-lib |--------|   |             |       |-------------|            |                     |                |--------------|      | Cy-saslauthd |      |--------------|           |                     |                |-------|             |  PAM  |             |-------|                  |                     |              |-----------------------| |    PostgreSQL         | |-----------------------|

图例说明:
当有程序访问smtp服务(TCP端口25)的时候,Postfix会给出220 ESMTP的回应,提示是要验证的smtp服务。密码和用户名提交给Postfix以后,Postfix会把密码和用户名通过调用Cy-SASL lib提交给一个后台验证程序:Cy-saslauthd。Cy-saslauthd会调用PAM模块进行验证。PAM模块会调用名为smtp的PAM服务名进行验证。在本系统中,PAM服务是调用pam_pgsql访问PostgreSQL进行验证的。然后结果再Return回去。

2、邮件转送:
分成三种情况:
1)如果邮件是给非本域用户的,例如是21cn.com的,马上就转发过去了。

2)如果邮件是给本域虚拟用户的,Postfix要访问PgSQL,来看看本域是否有这个虚拟用户。有就转发到他的虚拟邮箱,没有就把邮件defered掉。(什么是defered?待查,估计是砍掉的意思)
Postfix < PostgreSQL

3)如果是本域的本地用户,就转发到本地用户的邮箱,就是/var/mail/username那里。
Postfix < /etc/passwd

II、Cyrus-IMAP担任的工作部分
1、邮件的获取:
Cyrus-IMAPD有他自己的一套管理邮件的方法,不是用传统的unix邮箱方法(/var/mail/username),但是邮箱的读取十分高效。当Postfix获得目的地是本域的虚拟用户的时候,我们设置Postfix内置支持的一个功能:调用Cyrus-IMAP的一个程序,将邮件“拿”过来放到由Cyrus-IMAPD管理的邮箱里头。

2、用户的验证。
当用户要读取自己的邮件的时候,要通过IMAP服务。本系统配置了Cyrus-IMAP通过Cyrus-saslauthd进行验证。其原理大概同Postfix验证用户的原理一样。

 |------------------------| |     Cyrus-IMAPD        | |                        | | |-------------|        | |-| Cy-SASL-lib |--------|   |             |       |-------------|            |                     |                |--------------|      | Cy-saslauthd |      |--------------|           |                     |                |-------|             |  PAM  |             |-------|                  |                     |              |-----------------------| |    PostgreSQL         | |-----------------------|


III、PgSQL存储的数据
现在把PgSQL存储的数据再总结一下。
PgSQL主要存储两部分数据:
1)虚拟用户的用户名和密码。这部分是提供验证用,从saslauthd通过PAM服务访问。

ID  | usr   | pass  | expired | newtok----+-------+-------+---------+-------- 1  | test1 | pass1 | f       | f 2  | test2 | pass2 | f       | f


2)用户的地址和对应的信箱。这部分是Postfix访问的,从中获得邮件地址和邮箱的映射关系,然后根据邮件地址转发到相应的邮箱。

ID  | addr           | box----+----------------+------------ 1  | test1@f4.room  | test1 2  | test2@f4.room  | test2
在本系统中,实际上是两个表,为了方便大家看,就将他拆分成两个表。
其实使用两个表来存储这些数据的做法从安全角度是可取的。我们比如说我们分别建立两个数据库用户:postfix和saslauthd,他们只是对自己可以访问的表有读权限。另外我们再建立一个视图,把两个表关联起来,超级用户对这个视图有读取使用的权限,来进行管理。
本文为了方便调试,只是建立一个表。

二、安装软件
请务必使用port来安装,因为这不仅影响到你编译成功率,更影响到以后的配置。因为你直接下载源码包编译安装的路径可能不一样

0.PostgreSQL
路径/usr/ports/databases/postgresql7
make install
注意,这个路径下的是pgsql 7.3

1.Postfix:
路径 /usr/ports/mail/postfix
make install,然后会出现一个编译选项的菜单,选择Cyrus-SASL2和PgSQL的支持。PgSQL的支持可能有两种,一个是7.3,一个是7.2,请根据的PgSQL服务器选择。

2.Cyrus-SASL2:
由于上面安装Postfix的时候,选择了Cyrus-SASL2支持,编译Postfix的时候,会自动下载Cyrus-SASL2进行编译安装,所以Cyrus-SASL2不需要安装。

3. Cyrus-sasl-saslauthd
路径:/usr/ports/security/cyrus-sasl2-saslauthd/
make install

4. Cyrus-imapd-2.1.14
路径:/usr/ports/mail/cyrus-imapd2/
make install

三、配置软件
零、配置PgSQL和pam服务
1、建立一个叫做mail的数据库。
2、建立一个叫做mailuser的表。
结构如下

ID  | usr   | pass  | expired | newtok | addr          | box   ----+-------+-------+---------+--------+---------------+-------- 1  | test1 | pass1 | f       | f      | test1@f4.room | test1  2  | test2 | pass2 | f       | f      | test2@f4.room | test2 
3、在PgSQL里头建立一个数据库用户mail,密码mail
4、创建一个/etc/pam_pgsql.conf

#host = 127.0.0.1
database = mail
user = mail
password = mail
table = mailuser
user_column = usr
pwd_column = pass
expired_column = expired
newtok_column = newtok

在/etc/pam.conf里头加上以下几行。

smtp auth required pam_pgsql.so debug
smtp password required pam_pgsql.so debug
smtp account required pam_pgsql.so debug

imap auth required pam_pgsql.so debug
imap password required pam_pgsql.so debug
imap account required pam_pgsql.so debug

注意,如果的是Freebsd-5和linux,他们的配置有不同:
不用设置/etc/pam.conf,而是在/etc/pam.d/smtp和/etc/pam.d/imap里头加上

auth required pam_pgsql.so debug
password required pam_pgsql.so debug
account required pam_pgsql.so debug

Part I、配置Postfix + SASL
[目标]

I、配置Postfix + SASL验证,并且组建一个虚拟用户的环境。
比如说:user@f4.room
user并不是FreeBSD上的本地用户,而是一个虚拟的用户。用户的认证信息是存储在数据库的。

零、域名的处理
相信很多朋友跟我一样,没有一个FQDN(Full Qualiefied Domain Name)。虽然没有域名,我们仍然可以玩Postfix。
先在/etc/hosts添加你的域名。我的域名设置为f4.room,而我的IP是192.168.1.10,所以我的文件是这样的:

::1 localhost localhost.my.domain
127.0.0.1 localhost localhost.my.domain
192.168.1.10 f4 f4.room
注意,这里的域名f4.room,是我以后在main.cf用到虚拟用户的域名,virtual_mailbox_domainsd的那项。

一、Postfix
要Postfix正常运行,必须先要把Sendmail禁用。
/etc/rc.conf里头加入一行

sendmail="NONE"
然后做一个连接

cd /usr/local/etc/rc.d
ln -s /usr/local/sbin/postfix postfix.sh

看到freebsd的port的好处了吗?他可以让你保留原有的sendmail。
Postfix也有一个程序叫做sendmail。如果用源码安装,会把Postfix安装在/usr/sbin里头,那么就会把sendmail覆盖掉了。用Port来安装,它会遵守freebsd的hier(目录结构),将软件都装在/usr/local/下面的sbin/,bin/,lib/,libexe/目录里头,不会跟系统的冲突。
哪天您老人家不高兴,想玩玩sendmail,先pkg_delete了postfix,然后修改/etc/rc.conf,把sendmail="NONE"改成"YES",就可把sendmail请回来了。

Postfix的配置文件在/usr/local/etc/postfix/
1、master.cf
更改以下两项:
1)搜索smtp的一行,然后改为

smtp inet n - n - - smtpd -v

2)修改cyrus的安装路径
将argv=.....一项改为argv=/usr/local/cyrus/bin/deliver
结果如下:

cyrus unix - n n - - pipe
user=cyrus argv=/usr/local/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

2、main.cf

#本地用户的设置

mydomain = my.domain
myhostname = localhost
mydestination = $myhostname, localhost.$mydomain
local_transport = local
local_recipient_maps = unix:passwd.byname $alias_maps

#虚拟用户方面的设置
virtual_transport = virtual #这里先使用virtual穿送邮件,稍后设置好imap以后是使用cyrus来抓取虚拟用户的邮件
virtual_mailbox_base = /var/mail/vhost #设立一个存放虚拟用户的路径,设置好imap,可以不需要
virtual_mailbox_maps = pgsql:/usr/local/etc/postfix/pgsql-mailbox.cf #告诉postfix,邮箱要如何映射
virtual_mailbox_domains = f4.room #虚拟邮箱的域
virtual_minimum_uid = 100 #最小合法虚拟用户ID
virtual_uid_maps = static:5000 #虚拟用户UID
virtual_gid_maps = static:5000 #虚拟用户组GID

#设置使用sasl验证
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes

3、创建一个pgsql-mailbox.cf

hosts = localhost
user = mail
password = mail
dbname = mail
table = mailuser
select_field = box
where_field = addr

4、建立相关的目录
确保你有root权限哦

mkdir /var/mail/vhost
cd /var/mail/vhost/
touch test1
touch test2
chowm 5000:5000 test1
chowm 5000:5000 test2

二、配置Cyrus-SASL

/usr/local/lib/sasl2/Sendmail.conf
pwcheck_method: saslauthd
mech_list: plain login

然后做一个连接
ln -s Sendmail.conf smtpd.conf

好现在做一个测试:
先获取plain字符窜。为了获得plain字符串,必须要用base64编码。我安装了一个perl的mod来产生这个base64编码。

perl -MMIME::Base64 -e print encode_base64("test1\0test1\0pass1");

结果:
dGVzdDEAdGVzdDEAcGFzczE=
一般的格式是:
perl -MMIME::Base64 -e print encode_base64("user\0user\0passwd");

他的port在/usr/ports/converters/p5-MIME-Base64/

测试:

> telnet 192.168.1.10 25

Trying 192.168.1.10...
Connected to f4.
Escape character is ^].
220 localhost ESMTP Postfix
ehlo host
250-localhost
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-XVERP
250 8BITMIME
auth plain dGVzdDEAdGVzdDEAcGFzczE=
235 Authentication successful

出现235 Authentication successful,就表示你的机器成功使用postfix + sasl 认证了。
注意,一定要打ehlo hostname,否则就不会出下面的东西了。

三、调试发信给虚拟用户

> mail test1@f4.room
Subject: a test
test
.
EOT
如果成功的话,/var/mail/vhost/test1大小为非0,而且你可用cat、less等工具把文件的内容读出来读出来。

四、一个小小的Bug
首先声明,这个Bug不是postfix的,应该是我的配置的。
不知道为什么,根据以上的设置,在本机上写信给本地用户,例如powerplane,地址必须是:
powerplane@localhost.my.domain。
其他地址,如:powerplane@localhost,他会当把powerplane@f4.room处理。
估计是main.cf和/etc/hosts上没有配置好。哪位高人,请指点一下?

Part II、配置Cyrus-IMAP
1、编辑/usr/local/etc/imapd.conf,这个是Cyrus-IMAP的配置文件
内容应该如下:

configdirectory: /var/imap
partition-default: /var/spool/imap
sieveusehomedir: false
sievedir: /var/imap/sieve
sasl_pwcheck_method: saslauthd #使用saslauthd来进行验证
admins: cyrus #用cyrus用户来管理邮箱,注意,这个不是本地用户。而是Cyradm管理模块的管理员。该用户信息存放在/usr/local/etc/sasldb2里头

2、运行/usr/local/cyrus/bin/mkimap。
他会自动读取/usr/local/etc/imapd.conf,自动创建/var/imap,/var/spool/imap等等所需要的目录的。

3、启动Cyrus-IMAPD。
使用Port来安装Cyrus-IMAP,它会在/usr/local/etc/rc.d创建一个启动脚本的,名字为:imapd.sh.sample。你要把它改名为imapd.sh,在启动系统时后他才会自动执行。如果它没有运行,你也可人工启动它:
/usr/local/etc/rc.d/imapd.sh start

4、建立Cyradm模块的需要的用户数据库:sasldb2。
1)创建sasldb2数据库,并且创建管理员cyrus。

cd /usr/local/etc
saslpasswd2 -c cyrus
Password:cyrus
Again(for verification):cyrus

chown cyrus:mail sasldb2

2)创建用户邮箱:
Cyrus-IMAP是自己管理邮箱,创建邮箱必须通过cyradm来创建。
下面通过cyradm工具来创建邮箱。
cyradm --user cyrus localhost 是用cyrus用户,登陆到主机localhost。
cm是创建邮箱
lm是列出邮箱

> cyradm --user cyrus localhost
Password:
localhost> cm user.test1
localhost> cm user.test2
localhost> lm
user.test1 (\HasNoChildren) user.test2 (\HasNoChildren)
localhost> quit

使用imtest来测试

> imtest -m login -a test1 localhost

S: * OK F4 Cyrus IMAP4 v2.1.15 server ready
C: C01 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ MAILBOX-REFERRALS NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES IDLE AUTH=NTLM AUTH=OTP AUTH=DIGEST-MD5 AUTH=CRAM-MD5
S: C01 OK Completed
Please enter your password:
C: L01 LOGIN test1 {4}
S: + go ahead
C:
S: L01 OK User logged in
Authenticated.
Security strength factor: 0
. logout
* BYE LOGOUT received
. OK Completed
Connection closed.

出现上面字样表示登陆成功,打. logout退出。

Part III、整合Postfix和Cyrus-IMAP
你前面的设置和调试都顺利通过了吗?好到这一步了,只需要改一个文件。

/usr/local/etc/postfix/main.cf

virtual_transport = cyrus #这里的cyrus是对应回master.cf里头传送邮箱项。

别忘记重新启动你的postfix
/usr/local/etc/rc.d/postfix.sh reload

好赶快测试一下吧

> mail test1@f4.room
Subject: final test
haha
.
EOT

咱们用一个支持IMAP的客户端收信吧,试试能不能成功?用户名用test1,密码是pass1。

总结
如果使用port的时候,有什么不明白,不懂的时候,可以参考具体软件的port目录里头的pkg-message,里头有关于该软件的一些简单说明和配置。当然不是每个port都有的。
我的建议是:不要期待一篇HOW-TO就让你明白所有东西,你还是要作作功课的。
下面提供一些文档作为参考,有些文档是在你安装port以后,在本机上的,当然在源码包肯定也有。

Postfix的virtual domains入门:
http://www.freebsddiary.org/postfix.php

Postfix的虚拟用户设置:
/usr/local/share/doc/postfix/VIRTUAL_README

Postfix的一些官方文档,教你如何跟Cyrus-SASL2和Cyrus-IMAP2整合:
http://www.postfix.org/docs.html

FreeBSD上面的PAM配置:
http://www.freebsd.org/doc/en_US.ISO8859-1.../pam/index.html

下面的是Linux为目标系统的,我也参考过。如果您仔细阅读过他们和本文,就明白FreeBSD的hier和Port系统的好处。
Postfix-Cyrus-Web-cyradm-HOWTO:
http://www.delouw.ch/linux/Postfix-Cyrus-W...html/index.html

Postfix + Cyrus-IMAP + Cyrus-SASL + MySQL + IMP的中文HOWTO
http://www.cngnu.org/technology/Postfix_I.html

,

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·更改internet explorer的图标
·C#中的类型转换-.NET教程,C#语言
·找回flash的序列号sn
·更改ie的图标
·如何让你的VB6 IDE支持鼠标滚轮(过程)-.NET教程,VB.Net语言
·正则表达式Replace-.NET教程,Asp.Net开发
·Windows 2003下不注册组件用ASP发邮件-ASP教程,邮件相关
·防止ie被恶意修改的初级技巧
·asp.net实现分组全选部分复选框-ASP教程,ASP应用
·清理ie网址列表
最新文章
·seo新手教程:title的写法_seo网站优化
·从注册表下手 切断一切黑客入侵的路径_注册表教程
·用flash 8 as代码写摄像头拍照功能_flash教程
·小站长赚钱思路:ip不到1000,一个月赚940元_网赚技巧
·陈艺光:网络游戏平台与游戏网站实现共赢_站长访谈
·留住访客 如何最优化设计网站的首页?(2)_站长心得
·为什么在google上搜不到我的网页?_google推广
·google的秘密 搜索引擎利用软件的魔力加快奔跑_google推广
·域名与网站排名_站长心得
·怎样避免被搜索引擎视为作弊_站长心得
相关主题
  • postfix + cyrus-imap + cyrus-sasl + mysql + imp 完全指南_qmail
  • postfix 邮件病毒过滤_qmail
  • postfix + courier-imap + cyrus-sasl + mysql + imp完全指南(新版)_qmail
  • postfix + spamassassin 安裝手冊_qmail
  • postfix相关文件说明_qmail
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭