热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Postfix邮件服务器的配置

Postfix是一款非常优异的邮件服务器,它可以说是用来替代Sendmail的,这就必须提到WietseVenema这位牛人,此人觉得Sendmail用起来有诸多郁闷的地方,比如安全性,配置繁杂等,于是决定自己弄一个能替代Sendmail的邮件服务器,或者说是对Sendmail的改良,结果

Postfix是一款非常优异的邮件服务器,它可以说是用来替代Sendmail的,这就必须提到Wietse Venema这位牛人,此人觉得Sendmail用起来有诸多郁闷的地方,比如安全性,配置繁杂等,于是决定自己弄一个能替代Sendmail的邮件服务器,或者说是对Sendmail的改良,结果就弄出了这个Postfix邮件服务器软件。

Postfix主要是用在邮件服务器的发信上,也就是采用SMTP来进行发邮件,而收信则一般采用Dovecot来实现。在这里,子猴将根据自己配置Postfix的经历来记录一下配置Postfix的一些设置。

Postfix的官方网站是:http://www.postfix.org/ ,你可以去下载最新的版本进行安装,关于Postfix的安装我这里不会进行说明,因为我的Linux系统已经预装好了Postfix,而且也可以通过Linux的命令mail来发送邮件,也可以接收系统发送的邮件,不过如果使用客户端软件比如foxmail却不能发信,需要进行配置,这,也正是我这里要记录说明的。

应该说,将Postfix配置起来通过客户端软件来发送邮件其实并不难,但如果你是初次配置邮件服务器,那困难其实还是非常大的!就子猴的配置过程来说,前后花了一个星期的时间,虽然这一周的时间里只是利用空余时间来进行配置,但相比配置其他的,这个时间已经可说是最长的了。

Postfix的配置主要是在mail.cf里完成,文件目录在/etc/postfix里,mail.cf已经有一些默认的配置了,通常我们只需修改或增加几个设置即可。

1、  myhostname

服务器主机名,通常默认的是你服务器的名称,比如12333.site等这样的,这里我们需要将它修改为我们的域名,我这里修改为:

myhostname = zihou.me

表示我们的邮箱后缀为zihou.me,如:xxx@zihou.me

2、  inet_interfaces

这个参数是用来决定是否对除本机外的网络开放的,也控制着邮件能发送到哪里去,配置文件说明里有如下几个值:

$myhostname, localhost,all,它默认是本机,也就是本机能给本机发送邮件,也能接收本机发送的邮件,这里应当取值all:

inet_interfaces = all

这样,在非本机网络,也能用客户端发送邮件。

3、  mydestination

表示收信的主机名称,采用其默认值:$myhostname, localhost.$mydomain, localhost即可。

而实际上,根据子猴的测试,这个值是可以不用设置的,而且我们是要在整个互联网里收发邮件,而不是只在同域名中收发,所以从这个方面讲,这个参数也是无用的。

4、  smtpd_sender_restrictions

经过子猴的测试,这个参数可以不用设置,丝毫不影响到邮件的收发。

5、  smtpd_recipient_restrictions(非常重要!)

这个参数应当是main.cf中最重要的一个参数了,其中有两个值是必备的:

permit_mynetworks:允许mynetworks设置的地址或网络发信

reject_unauth_destination:拒绝未经验证的网络收信

我的配置是:

smtpd_recipient_restrictions =
permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

因为我采用了permit_sasl_authenticated的验证,也就是将验证交给了第三方工具去处理。

后面你自己愿意的话可以再加上一些类似reject_rbl_client dnsbl.njabl.org的拒绝垃圾邮件的设置。

但这里注意的是,经过测试,我发现如果将

permit_sasl_authenticated,reject_unauth_destination的顺序调换一下,也就是:

smtpd_recipient_restrictions =
permit_mynetworks ,reject_unauth_destination, permit_sasl_authenticated

则发信的时候会报错:554 Relay access denied 这样的错误,我现在还不清楚这究竟是怎么一回事,但有点无疑的是,当把permit_sasl_authenticated放在reject_unauth_destination的前面就表示通过permit_sasl_authenticated的验证就够了!

6、  smtp_sasl_auth_enable

smtp_sasl_auth_enable默认是no,改为yes即可:

smtp_sasl_auth_enable = yes

7、  smtpd_sasl_auth_enable

smtpd_sasl_auth_enable默认是no,改为yes即可:

smtpd_sasl_auth_enable = yes

8、  smtpd_sasl_security_options

设为noanonymous,表示不允许匿名:smtpd_sasl_security_optiOns= noanonymous

9、  smtp_sasl_password_maps

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

这个参数不能少,否则会报错:

specify a password table via the `smtp_sasl_password_maps' configuration
parameter

10、saslauthd服务启动

上面讲了用的是saslauthd验证,那么我们必须要保证saslauthd服务是可用的,用ps看看saslauthd服务是否在运行之中:

ps aux | grep saslauthd

如果没有运行,则我们可以通过命令:

saslauthd ?a pam来运行,pam是告诉saslauthd,采用pam模块来进行验证,除了pam外,还可以通过saslauthd -a shadow来运行saslauthd服务,如果是saslauthd -a shadow,则表示要通过系统里/etc/shadow里的用户进行验证,这种验证方法我还未进行研究与测试,不多说。

经过以上的设置后,邮件服务器已经可以正常通过客户端来进行收信了,当然,我觉得这里面还有很多东西都有待进一步研究,有许多的参数我还并不知道究竟是什么意思,但对一个企业邮件服务器来讲(不是像网易那样提供邮箱服务),这样就可以用起来了。


推荐阅读
author-avatar
mobiledu2502894453
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有