64位 CentOS 6.4 Linux系统 搭建 Postfix 邮件服务
需求说明
这次想要做的功能,只是为了给客户发送订阅邮件,也就是只有发送邮件,没有接收邮件的功能。如果不需要接收邮件的功能,尽量关闭接收外来邮件功能,危害多多。比如,大量垃圾邮件的涌入会爆满你的磁盘,安全方面也会存在隐患。
以前发送邮件一直都在用 Sendmail 服务,最近看到 Postfix,研究了下,发现比较 Sendmail 安装配置简单,而且效率非常高。公司最近也在开发邮件营销的功能,所以细心研究了下 Postfix 的安装和配置。
Postfix 介绍
postfix是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试。在Internet世界中,大部分的电子邮件都是通过sendmail来投递的,大约有100万用户使用sendmail,每天投递上亿封邮件。这真实一个让人吃惊的数字。Postfix试图更快、更容易管理、更安全,同时还与sendmail保持足够的兼容性。
Postfix 邮件服务相对于 Sendmail 邮件服务而言,效率更高。Postfix 邮件系统完全兼容 Sendmail,下面来具体说说它的优点:
1. Postfix 是免费的。因为它试图让更多的网络用户使用它,所以它是免费的。
2. Postfix 比 Sendmail 更快,官方说大约可以快上3倍,本人没有测试过,一台运行 Postfix 的台式 PC 机,每天可以收发上百万封邮件。(这也是本人选择它的目的)
3. 兼容性好,Postfix 与 Sendmail 完全兼容,这样 Sendmail 用户就可以很容易的把服务迁移到 Postfix 上。
4. Postfix 的健壮性。Postfix 被设计成在重负荷之下仍然可以正常工作。当系统运行超出了可用的内存或磁盘空间时,Postfix 会自动减少运行进程的数目。当处理的邮件数目增长时,Postfix 运行的进程不会跟着增加。
5. Postfix 的灵活性。Postfix 是由超过一打的小程序组成的,每个程序完成特定的功能。你可以通过配置文件设置每个运行程序的参数。
6. Postfix 的安全性更高。Postfix 具有多层防御结构,可以有效地抵御恶意入侵者。如大多数的 Postfix 程序可以运行在较低的权限之下,不可以通过网络访问与安全性相关的本地投递程序等。(使用较低权限的用户执行程序会大大提高系统的安全性)
添加MX记录
由于MX记录添加后,可能生效要等待一段时间(通常为数分钟或数十分钟,也可能马上生效),所以在安装配置前,我们首先为域名添加MX记录。添加方法也会因域名ISP的不同而不同,但大致信息如下:
主机记录 记录类型 记录值 MX优先级 TTL
mail |
A |
192.168.1.1 |
- |
600 |
@ |
MX |
mail.example.com. |
10 |
600 |
mail为别名,10为优先度。这个别名指向服务器的IP地址。(如有疑问或需要帮忙请直接留言求助)
DNSPOD设置示例:
忙碌的松鼠-64位 CentOS 6.4 Linux系统 搭建 Postfix 邮件服务
确认MX记录的添加是否生效的方法:
命令如下:
2 |
example.com has address 192.168.1.1 |
3 |
example.com mail is handled by 10 mail.example.com. |
Postfix 安装
1. CentOS 6.0 以上版本 默认已经安装 Postfix服务 并随着系统的启动而启动。(CentOS 6.0 以上版本请直接略过本节,直接查看如何配置)
2. CentOS 6.0 以下或RedHat的系统,它默认安装及启动的是 Sendmail 服务,这里我们要先关闭它,并配置为不随着系统的启动而启动,命令如下:
3. yum 安装 Postfix 软件包,命令如下:
安装完成后我们可以用命令查看其相关路径和文件,命令如下:
4. 配置 Postfix 的相关文件,它的主要配置文件为 /etc/postfix/mail.cf。
修改任何配置文件前,请先备份一下,以防修改失败后无法恢复。(这是个好习惯哦)
2 |
cp /etc/postfix/main.cf /etc/postfix/main.cf.bak |
1 |
vi /etc/postfix/main.cf |
设置运行 Postfix 服务的邮件主机的主机名、域名,如下所示:
2 |
myhostname = mail.example.com |
设置由本机寄出的邮件所使用的域名或主机名称,如下所示:
1 |
# main.cf 第102行附近,这里使用的是 mydomain 的值,也可以自己设置值,如:myrogin = example.com |
设置 Postfix 服务监听的网络接口,如下所示:
1 |
# main.cf 第119行附近,填写 localhost,只允许通过 localhost 或 127.0.0.1 发送 |
2 |
# 如果邮件服务器是专门为其它服务器服务的,请直接填写 all,如 |
3 |
# inet_interfaces = all |
4 |
inet_interfaces = localhost |
设置可接收邮件的主机名称或域名,如下所示:
1 |
# main.cf 第167行附近,我的需求是只发送邮件,不接收外来邮件,所以填写 localhost |
2 |
mydestination = localhost |
设置可转发哪些网络的邮件,如下所示:
1 |
# main.cf 第270行附近,主转发本机的 |
2 |
mynetworks = 127.0.0.0/8, hash:/etc/postfix/access |
设置可转发哪些网域(当然这个也必须能由DNS正常解析才行)的邮件,此选项针对上下级MTA而言,区别于 Postfix 的 access,一般选择默认选项即可,如下所示:
2 |
relay_domains = $mydestination |
5. 配置完成后,我们检查一下 Postfix 语法,然后启动它。
用以下命令检查 Postfix 服务的语法:
启动 Postfix 邮件,并配置为自启动服务:
测试发送邮件
简单的用命令行的方式,给自己发送一封邮件,命令如下:
效果图:
忙碌的松鼠-64位 CentOS 6.4 Linux系统 搭建 Postfix 邮件服务
稍后,我会发布关于 配置 Postfix 启用 SMTP 的认证机制
64位 CentOS 6.4 Linux系统配置 Postfix 启用 SMTP 认证
Postfix 的安装
本博客已经有 Postfix 的安装教程,在此就不再重复。
Linux 下安装 Postfix 教程,请看:
www.gretheer.com/2013/06/64-centos-linux-postfix-email-smtp.html
配置 Postfix 启用 SMTP 认证
1. 安装 cyrus-sasl 软件包,它牵涉的依赖关系包比较多,命令如下:
1 |
yum -y install cyrus-sasl* |
命令的结果显示,如下:
01 |
Loaded plugins: fastestmirror, security |
02 |
Loading mirror speeds from cached hostfile |
03 |
* epel: ftp .kddilabs.jp |
04 |
Setting up Install Process |
05 |
Package cyrus-sasl-lib-2.1.23-13.el6_3.1.x86_64 already installed and latest version |
06 |
Package cyrus-sasl-ntlm-2.1.23-13.el6_3.1.x86_64 already installed and latest version |
07 |
Package cyrus-sasl-plain-2.1.23-13.el6_3.1.x86_64 already installed and latest version |
08 |
Package cyrus-sasl-md5-2.1.23-13.el6_3.1.x86_64 already installed and latest version |
09 |
Package cyrus-sasl-2.1.23-13.el6_3.1.x86_64 already installed and latest version |
10 |
Package cyrus-sasl-devel-2.1.23-13.el6_3.1.x86_64 already installed and latest version |
11 |
Package cyrus-sasl-ldap-2.1.23-13.el6_3.1.x86_64 already installed and latest version |
12 |
Package cyrus-sasl-sql-2.1.23-13.el6_3.1.x86_64 already installed and latest version |
13 |
Package cyrus-sasl-gssapi-2.1.23-13.el6_3.1.x86_64 already installed and latest version |
因为我已经安装过了,所以显示的是 Nothing to do,你第一次安装,会有几个 Complete。
我们可以用以下命令启动 saslauthd 服务,并配置成自启动服务:
1 |
service saslauthd start |
2. 添加下列内容到主配置文件,让 Postfix 启用 SMTP 认证,代码如下:
3 |
smtpd_sasl_auth_enable = yes |
4 |
smtpd_sasl_local_domain = '' |
5 |
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination |
6 |
broken_sasl_auth_clients = yes |
7 |
smtpd_client_restrictions = permit_sasl_authenticated |
8 |
smtpd_sasl_security_options = noanonymous |
完成以上步骤后,全新加载配置,命令如下:
测试
使用 phpmailer 测试 Postfix 的 SMTP 是否有效,代码如下:
phpmailer 请自行下载,下载地址: github.com/Synchro/PHPMailer
PHP 测试代码:
test.php
04 |
require_once ( './class.phpmailer.php' ); |
07 |
$tmp_file = '/tmp/test.jpg' ; |
09 |
$mail = new PHPMailer(true); |
16 |
$mail ->Host = "127.0.0.1" ; |
20 |
$mail ->SMTPAuth = true; |
22 |
$mail ->Username = "username" ; |
24 |
$mail ->Password = 'password' ; |
26 |
$mail ->CharSet = 'UTF-8' ; |
32 |
$mail ->Subject = '欢迎大家关注 忙碌的松鼠' ; |
34 |
$mail ->MsgHTML( '欢迎大家关注 忙碌的松鼠 博客,博客地址:http;//www.gretheer.com' ); |
36 |
$mail ->AddAttachment( $tmp_file ); |
39 |
} catch (Exception $e ) { |
41 |
echo $mail ->ErrorInfo; |
注意:
1. 可以在命令行下测试,最好使用普通用户测试。
2. 用浏览器访问PHP文件测试时,如果没有接收到邮件,看是否是PHP文件权限问题,包括PHP文件内,include,require 等包含的文件的权限。
64位 CentOS 6.4 Linux系统 搭建 Postfix 邮件服务(虚拟用户版)
2013.06.24 写过一篇博文,介绍 Linux 下 Postfix 的安装和配置 SMTP 认证。
安装 postfix:www.gretheer.com/2013/06/64-centos-linux-postfix-email-smtp.html
使 postfix 支持 smtp 认证:www.gretheer.com/2013/06/64-centos-linux-postfix-smtp-auth.html
今天又查阅了相关资料,找到一个可以自己创建邮箱账号的方法,这样我们就不用再为每一个邮件账号创建系统账号了,管理更方便,安全性也提高了。
按照上面的链接,安装完成 postfix 和 smtp 认证后,直接看这里的配置就可以了。
配置 SMTP 认证(虚拟用户版,无需创建系统用户)
1. 修改 smtpd.conf 配置文件
1 |
vim /etc/sasl2/smtpd.conf |
修改以下属性为:
1 |
pwcheck_method: auxprop |
2. 修改 saslauthd 认证方式
1 |
vim /etc/sysconfig/saslauthd |
3. 设置 sasldb2 认证库的权限
1 |
chgrp postfix /etc/sasldb2 |
4. 添加 sasl 认证用户
将 wica 添加到 gretheer.com 域名下
1 |
saslpasswd2 -u gretheer.com -c wica |
5. 添加防火墙设置
1 |
iptables -A INPUT -p tcp --dport 25 -j ACCEPT |
6. 设置开机启动
PHP 发送邮件示例
使用 phpmailer 测试 Postfix 的 SMTP 是否有效,代码如下:
phpmailer 请自行下载,下载地址: github.com/Synchro/PHPMailer
04 |
require_once ( './class.phpmailer.php' ); |
07 |
$tmp_file = '/tmp/test.jpg' ; |
09 |
$mail = new PHPMailer(true); |
16 |
$mail ->Host = "smtp.gretheer.com" ; |
20 |
$mail ->SMTPAuth = true; |
24 |
$mail ->Password = 'password' ; |
26 |
$mail ->CharSet = 'UTF-8' ; |
32 |
$mail ->Subject = '欢迎大家关注 忙碌的松鼠' ; |
34 |
$mail ->MsgHTML( '欢迎大家关注 忙碌的松鼠 博客,博客地址:http;//www.gretheer.com' ); |
36 |
$mail ->AddAttachment( $tmp_file ); |
39 |
} catch (Exception $e ) { |
41 |
echo $mail ->ErrorInfo; |
注意事项
1. 第3步如果找不到 /etc/sasldb2 文件,请先执行第4步,添加完用户后,会自动生成该文件,然后再回头执行第3步。
2. 生成的账号为 [email protected] 形式,不再是系统用户。同以上第3步的 账号名+@+域名