CentOS下利用postfix搭建邮件服务器

本文编写于3647天前,最后编辑于 3148天前,部分内容可能已经过时,请您自行斟酌确认。

配置域名MX记录

host -t mx test.com

卸载sendmail

service sendmail stop
chkconfig sendmail off

安装postfix

yum -y install postfix

查看安装路径及文件

rpm -ql postfix

配置 Postfix
备份配置文件

cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
vi /etc/postfix/main.cf

设置运行 Postfix 服务的邮件主机的主机名、域名,如下所示:

# main.cf 第77行附近
myhostname = mail.example.com
# main.cf 第85行附近
mydomain = example.com

设置由本机寄出的邮件所使用的域名或主机名称,如下所示:


# main.cf 第99行附近,这里使用的是 mydomain 的值,也可以自己设置值,如:myrogin = example.com
myorigin = $mydomain

设置强制 Postfix 使用IPv4协议

# main.cf 第114行附近
inet_protocols=ipv4

设置 Postfix 服务监听的网络接口,如下所示:

# main.cf 第116行附近,填写 localhost,只允许通过 localhost 或 127.0.0.1 发送
# 如果邮件服务器是专门为其它服务器服务的,请直接填写 all,如
# inet_interfaces = all
inet_interfaces = all

设置可接收邮件的主机名称或域名,如下所示:

# main.cf 第167行附近,我的需求是只发送邮件,不接收外来邮件,所以填写 localhost,如果要接受邮件请按照下面设置
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

设置可转发哪些网络的邮件,如下所示:

# main.cf 第264行附近,主转发本机的
mynetworks = 127.0.0.0/8, hash:/etc/postfix/access

设置可转发哪些网域(当然这个也必须能由DNS正常解析才行)的邮件,此选项针对上下级MTA而言,区别于 Postfix 的 access,一般选择默认选项即可,如下所示:

# main.cf 第296行附近
relay_domains = $mydestination

配置完成后,我们检查一下 Postfix 语法,然后启动它。
修改/etc/hosts

vi /etc/hosts
serverip test.com mail.test.com

用以下命令检查 Postfix 服务的语法:

/usr/sbin/postconf -n

启动 Postfix 邮件,并配置为自启动服务:

service postfix start
chkconfig postfix on

测试发送邮件
简单的用命令行的方式,给自己发送一封邮件,命令如下:

#example@126.com 换成自己的邮箱地址
echo 'test' | mail -s 'test' example@126.com

看看能不能收到

配置DKIM

安装opendkim

yum install opendkim -y

安装完成后,输入如下命令,会在当前目录下生成公钥和私钥两个文件:default.private 和 default.txt


opendkim-genkey -r -d mail.test.com

default.txt 里面的内容类似如下:

default._domainkey IN TXT "v=DKIM1;=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbJarHD2SlFuWVu3UAu//MyrHuGq+C53tJI9O2R5hdM8cknX4aH3QLzYEimcTBzKEfC+OoayJPMgPOgqQCEGPqD3o6mz1FDVxPRhDZg+5ghqmgPB4MlgQAxsoiutwuwb9k5+RtRsPonGjJyKU+cKMk7nD7gG5Y3w5Vky2n+h0wdwIDAQAB" ; ----- DKIM default for mail.quanlei.com

在你的域名管理界面,添加一条txt记录,把公钥放在域名上:
主机记录 = default._domainkey.mail.quanlei.com
记录类型 = txt

记录值中的内容,是从default.txt提取的,如下内容:

v=DKIM1;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbJarHD2SlFuWVu3UAu//MyrHuGq+C53tJI9O2R5hdM8cknX4aH3QLzYEimcTBzKEfC+OoayJPMgPOgqQCEGPqD3o6mz1FDVxPRhDZg+5ghqmgPB4MlgQAxsoiutwuwb9k5+RtRsPonGjJyKU+cKMk7nD7gG5Y3w5Vky2n+h0wdwIDAQAB

把私钥放到想要的位置,比如/var/db/dkim/
在/etc/opendkim.conf文件中,由KeyFile参数指定上面的私钥位置,配置如下:

PidFile /var/run/opendkim/opendkim.pid
Mode    sv
Syslog  yes
SyslogSuccess   yes
LogWhy  yes
UserID  opendkim:opendkim
Socket  inet:8891@localhost
Umask   002
Canonicalization        relaxed/relaxed
Domain  mail.test.com
Selector        default
MinimumKeyBits 1024
KeyTable        /etc/opendkim/KeyTable
SigningTable    refile:/etc/opendkim/SigningTable

vi /etc/opendkim/KeyTable
default._domainkey.test.com test.com:default:/etc/opendkim/keys/default.private
vi /etc/opendkim/SigningTable
*@test.com default._domainkey.test.com

DKIM配置完成,再修改Postfix中的配置,在发信的时候启用加密功能。
在 /etc/postfix/main.cf 中加入如下内容:

smtpd_milters= inet:localhost:8891
milter_default_action = accept
milter_protocol = 2
non_smtpd_milters = inet:localhost:8891

设置权限

chown -R opendkim:opendkim /etc/opendkim/keys/default.private

重启opendkim和Postfix即可。

service opendkim restart
service postfix restart

然后验证吧:http://dkimcore.org/tools/
Check a published DKIM Core Key:
Selector:default
Domain name:mail.quanlei.com
或者

dig default._domainkey.test.com TXT

接着再发邮件到gmail和hotmail中查看dkim是否有签名。

配置SPR

除了DKIM,还可以在DNS上增加SPF配置来提高邮件发送成功的几率,添加一条txt记录:

主机记录 = mail
记录类型 = txt
记录值 = “v=spf1 a mx ptr ip4:8.8.8.8 mx:mail.test.com ~all” (不包含引号,其中的IP换成自己的IP)

验证是否配置成功:

dig -t txt mail.quanlei.com

; QUESTION SECTION:

;mail.quanlei.com. IN TXT

;; ANSWER SECTION:
mail.quanlei.com. 300 IN TXT "v=spf1 ip4:8.8.8.8 ~all"

配置SMTP

安装 cyrus-sasl 软件包,它牵涉的依赖关系包比较多,命令如下:

yum -y install cyrus-sasl*

启动 saslauthd 服务,并配置成自启动服务


service saslauthd restart
chkconfig saslauthd on

修改配置

vi /etc/sysconfig/saslauthd
MECH=shadow
service saslauthd restart

添加下列内容到主配置文件/etc/postfix/main.cf,让 Postfix 启用 SMTP 认证,代码如下:

# 把此代码添加到 /etc/postfix/main.cf 最后
# smtp
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = 
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sasl_security_options = noanonymous

配置PTR(反向解析)

联系服务商吧,linode可以在后台自助设置.
检测spf dkim效果

http://www.brandonchecketts.com/emailtest.php
http://www.mail-tester.com/

查看日志

tail -f /var/log/maillog

解决fatal: open database /etc/postfix/access.db: No such file or directory错误

/usr/sbin/postmap /etc/postfix/access

微软Sender ID Framework

http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/default.aspx

安装日志查看工具Pflogsumm

yum install perl-Date-Cal postfix-pflogsumm -y
pflogsumm -d today /var/log/maillog
pflogsumm -d yesterday /var/log/maillog
pflogsumm -d today /var/log/maillog > /var/www/html/result.txt
pflogsumm /var/log/maillog | mail -s "Mail Server Stats" YOUREMAIL@YOURDOMAIN.TLD

写入crontab


crontab -e
0 */24 * * * /usr/sbin/pflogsumm -d yesterday /var/log/maillog | mail -s "Mail Server Stats" YOUREMAIL@YOURDOMAIN.TLD

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注