Postfix 配置并设置账户认证(Postfix+Sasl)

记录一下,比较简单的使用,邮件日志在 /var/log/maillog


安装Postfix

系统一般都自带了Postfix,如果不清楚可以使用下面的指令检查
rpm -qa | grep postfix
如果没用安装Postfix则使用以下指令安装
yum -y install postfix

安装sasldb、saslauthd
用来提供smtp的虚拟账户和密码服务 sasldb2包含在saslauthd当中
使用指令 yum -y install cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain cyrus-sasl-devel安装

Postfix配置并启用smtp
Postfix配置文件在/etc/postfix目录下,主要修改的配置文件为:/etc/postfix/main.cf
使用指令 vi /etc/postfix/main.cf 进行编辑或者使用Xftp等工具本地编辑

附上完整的文件:

#修改以下配置
#邮件服务器的主机名
myhostname=mail.zk.com
#邮件域
mydomain=zk.com
#往外发邮件的邮件域
myorigin=$mydomain
inet_interfaces=all
#监听的网卡
inet_protocols=all
#服务的对象
mydestination=$myhostname,$mydomain
home_mailbox=Maildir/#邮件存放的目录
#新添加以下配置
#--------自定义(下面可以复制粘贴到文件最后面,用于设置服务器验为主等)
#规定邮件最大尺寸为10M
message_size_limit=10485760
#规定收件箱最大容量为1G
mailbox_size_limit=1073741824
#SMTP认证
#指定可以向postfix发起SMTP连接的客户端的主机名或ip地址
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sasl_auth_enable=yes
smtpd_sasl_security_options=noanonymous
mynetworks=127.0.0.0/8
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
#解决发送html邮件报User unknown in local recipient table
local_recipient_maps=

###主要修改

#设置Postfix主机名,修改成你的域名 此项需要添加A记录并指向postfix所在主机公网IP
myhostname = mail.applesa.cn
#设置域名
mydomain = applesa.cn
#本机postfix的邮箱域名后缀 此项默认值使用myhostname
#此处使用了前项mydomain 也就是说本机postfix邮箱后缀为:@applesa.cn
myorigin = $mydomain#指定Postfix系统监听的网络接口 此处必须是localhost或127.0.0.1或内网IP
#若此项被注释或填入公网IP Postfix服务器的端口都会将对公网开放
#默认值为all 即监听所有网络接口
inet_interfaces = all
#网络协议 这里ipv4即可,也可以为all,则支持ipv4,ipv6
inet_protocols = ipv4

SMTP配置,默认配置内没有,需要手动添加到配置文件内(位置随意)

#指定可以向postfix发起SMTP连接的客户端的主机名或ip地址
smtpd_client_restrictions = permit_sasl_authenticated#此处permit_sasl_authenticated意思是允许通过了sasl认证的所有用户
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, #指定postfix使用sasl验证 通俗的将就是启用smtp并要求进行账号、密码校验
smtpd_sasl_auth_enable = yes#取消smtp的匿名登录 此项默认值为noanonymous 此项请务必指定为noanonymous
smtpd_sasl_security_options = noanonymous
  1. [root@mail ~]# postfix check   //修改保存后检查配置文件是否有错

  2. [root@mail ~]# systemctl restart postfix.service

  3. [root@mail ~]# systemctl enable postfix.service

使用 postconf 指令即可查看你的所有Postfix配置

使用sasldb2建立SMTP用户和密码

建立使用smtp服务的账号,就类似你的邮箱账号(root@applesa.cn)

编辑sasl2配置

位置 32位 /usr/lib/sasl2/smtpd.conf 64位的在 /etc/sasl2/smtpd.conf

#编辑通过sasl启用smtp账号密码效验的配置
vi /etc/sasl2/smtpd.conf #vi写入或编辑内容如下:
#####
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login CRAM-MD5 DIGEST-MD5
#####

修改 cyrus-sasl主配置文件


[root@mail ~]# vim /etc/sysconfig/saslauthd  //修改下面配置项(本地用户认证)
MECH=shadow[root@mail ~]# systemctl restart saslauthd.service
[root@mail ~]# systemctl enable saslauthd.service

修改dovecot主配置文件,启动服务

[root@mail ~]# vim /etc/dovecot/dovecot.conf
#修改以下配置
protocols = imap pop3 lmtp
listen = *, ::
!include conf.d/10-auth.conf#在最后面新添加以下配置
#-----------自定义------------
ssl = no
disable_plaintext_auth = no
mail_location = maildir:~/Maildir
[root@mail ~]# systemctl restart dovecot.service
[root@mail ~]# systemctl enable dovecot.service

创建SMTP账号

使用指令

saslpasswd2 -c -u `postconf -h mydomain` zk

或者

saslpasswd2 -c -u applesa.cn zk

上面的 postconf -h mydomain 是指从postfix的配置里获取账户的后缀(@之后)
下面的即为制定了@后的后缀
最后的test即为创建的账号头部 最后的账号为(zk@applesa.cn)
回车后输入两次密码即可创建账号

使用 sasldblistusers2 指令即可查看所有的用户
会列出类似下列的列表

admin@xxx.com: userPassword
test@xxx.com: userPassword
no-reply@xxx.com: userPassword

userPassword 即为使用密码登录,每次添加SMTP用户之后需重启Postfix

###可选操作

#没有问题的话会返回着色[ok]字样
#启动postfix
systemctl restart postfix #更改sasldb2数据的权限,让postfix可以读取
chmod 755 /etc/sasldb2

到这里就结束了,可以去使用了 !!!

使用示例

mail:host: mail.zk.comport: 25username: zk@zk.compassword: 123456default-encoding: utf-8properties:mail:smtp:ssl:enable: false

Postfix的端口修改

vim /etc/postfix/master.cf
可以发现会有一行默认的

smtp      inet  n       -       n       -       -       smtpd

一般在除去注释的第一行
复制该行进行修改,根据个人习惯改成

smtp2      inet  n       -       n       -       -     smtpd

此时的配置文件为

smtp      inet  n       -       n       -       -       smtpd
smtp2      inet  n       -       n       -       -       smtpd

##修改/etc/services文件
增加上方 smtp2 的端口,此处以 465 为例
使用 vi /etc/services
找到默认的 smtp 的端口如下:

smtp            25/tcp          mail
smtp            25/udp          mail

一般在文件内的50行左右
之后向里面添加smtp2的端口

smtp2            465/tcp          mail2
smtp2            465/udp          mail2

此时的配置文件为

smtp            25/tcp          mail
smtp            25/udp          mail
smtp2            465/tcp          mail2
smtp2            465/udp          mail2

重启Postfix服务即可,指令 service postfix restart

防火墙设置可选项

查看防火墙是否对端口465有限制,修改防火墙策略

vi /etc/sysconfig/iptables

添加服务器规则

-A INPUT -m state --state NEW -m tcp -p tcp --dport 465 -j ACCEPT

重启防火墙即可,指令 service iptables restart

最后附上常见问题和解决办法

1、如果装了sendmail的话,先卸载了。

yum remove sendmail

2、安装 Postfix

yum install postfix

3、更改默认MTA为Postfix:

/usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix

4、完事儿,再次检查下是否将MTA改为Postfix了:

alternatives --display mta

5、配置Postfix,vi编辑main.cf

vi /etc/postfix/main.cf

打开后分别找到以下几项,将其前面的#去掉,并做配置:

    myhostname = mail.wpdaxue.commydomain = wpdaxue.commyorigin = $mydomaininet_interfaces = allinet_protocols = ipv4mydestination = $myhostname, localhost.$mydomain, localhost, $mydomainmynetworks = 192.168.100.10/28, 127.0.0.0/8relay_domains =home_mailbox = Maildir/

以上几个设置项不在同一个位置,需要分别寻找,并进行更改,其中相应的域名请改为自己的地址,mynetworks我是没有做改变,自动就有的。我刚开始也是配置错了导致安装失败,后来在 @朱茂海的博客找到该答案,以上几项的含义解释也来自该网站,感谢作者提供。

配置文件解释:
mydomain:
mydomain参数是指email服务器的域名,请确保为正式域名(如centos.bz)
myhostname:
myhostname参数是指系统的主机名称(如我的服务器主机名称是mail.centos.bz)
myorigin:
myorigin参数指定本地发送邮件中来源和传递显示的域名。在我们的例子中,mydomain是centos.bz,也是我的域名。
对于下面的一行,我们的邮件地址是user@centos.bz而不是user@mail.centos.bz。
myorigin = $mydomain
mynetworks:
mynetworks参数指定受信任SMTP的列表,具体的说,受信任的SMTP客户端允许通过Postfix传递邮件。
mydestination:
mydestination参数指定哪些邮件地址允许在本地发送邮件。这是一组被信任的允许通过服务器发送或传递邮件的IP地址。用户试图通过发送从此处未列出的IP地址的原始服务器的邮件将被拒绝。
inet_interfaces:
inet_interfaces参数设置网络接口以便Postfix能接收到邮件。
relay_domains:
该参数是系统传递邮件的目的域名列表。如果留空,我们保证了我们的邮件服务器不对不信任的网络开放。
home_mailbox:
该参数设置邮箱路径与用户目录有关,也可以指定要使用的邮箱风格。

6、检测并启动Postfix

service postfix status //检测,若已启动会列出其PID,如下:
master (pid 25579) is running...//若未启动,执行以下命令:
service postfix start

7、设置开机启动

chkconfig postfix on

我自己的安装到此为止就结束了,因为我只需要的是mail功能,并非搭建邮件服务器。此时测试邮件发送,OK。

参考资料:http://www.gongzi.org/centos-install-postfix-sendmail.html

8、补充:如果你之前没有配置过 sendmail 组件,那你很可能没有修改 php.ini 的邮件发送路径,那样可能无法发送邮件。

所以你需要配置php.ini,填写sendmail的绝对路径:

使用命令打开编辑php.ini

vi /usr/local/php/etc/php.ini

输入?sendmail_path 查找定位(或者手动跳转找到sendmail_path),你会发现默认是下面的代码

;sendmail_path =

按 i 进入编辑,将这行修改为

sendmail_path = /usr/sbin/sendmail -t -i

按 Esc 键退出编辑,输入 :wq 保存退出

重启php-fpm进程 /etc/init.d/php-fpm restart

如果还没安装php当然就没有/usr/local/php/etc/php.ini或者/etc/php.ini文件了,

安装:yum -y install php

php-cgi restart

9、补充2:通过以上配置,就可以正常发送邮件了,但是发件人邮箱会是 www@wpdaxue.com 这种类型,如果想修改 www 这个参数,比如修改为 admin@wpdaxue.com 需要按照下面的步骤操作:

编辑 /etc/postfix/canonical:

vi /etc/postfix/canonical

添加下面类型的代码:

www admin@wpdaxue.com

保存退出,然后进入到 /etc/postfix/ 目录:

cd /etc/postfix/

执行命令:

postmap canonical

接着编辑 /etc/postfix/main.cf:

vi /etc/postfix/main.cf

一般情况下里面没有canonical_maps这个参数,在空行处添加:

canonical_maps = hash:/etc/postfix/canonical

保存退出,然后重启 postfix:

postfix reload

再次发送邮件测试,奇迹应该就发生啦!

10、补充3:通过上面的设置,虽然可以正常发送邮件,但是建议添加 DNS 解析,以减少被判定为垃圾邮件的几率。通常需要添加3个解析:A记录、MX记录、TXT记录,比如这里的 wpdaxue.com 域名的解析如下:

这样就好多了,最后,推荐使用下面的网站来测试你的服务器发送的邮件所得分数,它会给出详细的测试结果和改进方法:

问题:

1.postdrop: warning: unable to look up public/pickup: No such file or directory

解决 mkfifo /var/spool/postfix/public/pickup

2. postqueue: warning: unable to look up public/qmgr: No such file or directory

解决 mkfifo /var/spool/postfix/public/qmgr

3.postqueue: fatal: Cannot flush mail queue - mail system is down

原因:可能25端口被占用

lsof -i:25 如果有占用程序 kill -9 PID 杀了那个程序重启 postfix

4. 给腾讯邮箱发邮件报错:status=bounced (host mx3.qq.com[183.57.48.35] said: 550 Ip frequency limited. http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000725 (in reply to end of DATA command))

解决:在腾讯邮箱中设置白名单

第一个设置个人,第二个设置域

5. status=bounced (unknown user: "kefu.czj")

解决:vim /etc/postfix/main.cf

mydestination = $mynetworks, $myhostname, localhost.$mydomain, localhost, $mydomain 这一行中

$mydomain和虚拟域名冲突了,当邮件发过来时会优先找mydestination的域名,而mydestination里的域名中是没有这些用户的,因而找不到用户名。

解决办法就是把$mydomain和$myhostname删除,或者改为不和虚拟域名一样

6.status=bounced (host mxn.mxhichina.com[42.120.219.27] said: 502 Mailfrom account is a local account root@520czj.com (in reply to MAIL FROM command))

原因:对方的邮件地址,使用的是万网的企业邮局,而发信人用的也是万网注册的域名,加上退信的内容是Mialfrom account is a local account,这样就表明,发信人的域名存在了万网的邮件服务器上,这样发信人自架的邮件发信过去,就自然会提示这个错误了。

办法一:换一个域名

办法二(没亲测):就是删除万网上的企业邮件即可,即在万网的邮件服务器上不要有你的那个邮件域。

其它错误:

1.status=bounced (host mx54.dns.com.cn[220.181.130.176]said: 550 Does not like recipient,your mail is rejected! (in reply to end of DATA command)); sender non-delivery notification: F20F2DD80FC;removed

出错原因:对方某一台收件服务器当时正处在繁忙之中或者我们的服务器和对方链接并不是很顺畅

解决方法:有可能是暂时的情况,用别的地址测试一下,看看是否被退信,或者过一段时间再发送一下

2.status=bounced (host 192.168.21.20[192.168.21.20] said: 552 5.2.2 Over quota (in reply to end of DATA command));

出错原因:对方邮箱空间已满

解决方法:对方清理邮箱重新发送

3.1)status=bounced(hostmx3.qq.com[183.60.2.53]said:550Mailboxnotfound.http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000728 (in reply to RCPT TO command)); sender non-delivery notification: 9CC7FDD8084; removed

3.2)status=bounced (host 163mx01.mxmail.netease.com[220.181.12.62] said: 550 User not found: cjld@163.com (in reply to RCPT TO command)); sender non-delivery notification: 8FD7CA00013A; removed

出错原因:收件人地址不存在或者收件人地址写错

解决方法:核对地址后重新发送

4.status=deferred(hostmxzwg4.mxhichina.com[58.68.254.104]said:450MI:IPBhttp://www.net.cn/service/faq/youx/mailsy/200905/3781.html (in reply to MAIL FROM command))

出错原因:450MI:IPB发信IP被暂时禁止,请检查是否有用户发送病毒或者垃圾邮件。

解决方法:联系您的企业邮箱运营商

5.status=deferred(connecttoapllo-zm.com[60.191.124.236]:25:Connectiontimedout);from=<jinxiuren@hanshitx.com>, size=24500463, nrcpt=2 (queue active);

出错原因:与对方邮箱服务器连接超时

解决方法: 首先确认对方邮箱地址中的域名部分是否写错,如果没错,telnet对方邮箱ip的25端口是否连接,如果连接正常,那么基本上是暂时的网络问题。

6.1)status=bounced (host sohumx1.sohu.com[220.181.26.202] said: 553 5.7.3 CONTENT REJECT:10.10.71.82.2011062016.XXD6ywq8:dspam check:5:http://mail.sohu.com/info/policy/12 (in reply to end of DATA command));

6.2)Recipient address rejected: User unknown in local recipient table

出错原因:1)内容被拒绝,可能是收件人对所接收的邮件进行了设置,内容中含有特定词汇等会被拒绝

2)收件人地址被拒绝

解决方法:核实对方是否对内容及账户进行了设置之后重新发送

7.Clienthostrejected: Access denied; from=<cici@ybxchina.com> to=<terancetan@lovelylace.com> proto=SMTP helo=<hjy1>

出错原因:客户端主机被拒绝

解决方法:看一下客户端接收邮件服务器设置是否正确,“我的服务器需要身份验证”是否打钩,测试一下发信25口是否已连接

8. status=bounced (host mx1.mail.cnb.yahoo.com[203.209.228.250] said: 554 delivery error: dd Sorry your message to weixing201314@yahoo.com.cn cannot be delivered. This account has been disabled or discontinued [#102]. - mta1004.mail.cnb.yahoo.com (in reply to end of DATA command)); sender non-delivery notification: 1C580DD80B4; removed

出错原因:对方账号被停用或者不可用

解决方法:正常退信,换账号发送

9.status=bounced (message size 24864357 exceeds size limit 10240000 of server cluster4.us.messagelabs.com[98.126.139.202]); sender non-delivery notification: C6A3BDD8078; removed

出错原因:邮件过大,超出对方单封邮件接收范围(已解决)

解决方法:对方换账号,重新发送

10. status=bounced (host 163mx03.mxmail.netease.com[220.181.12.90] said: 552 Requested mail action aborted: exceeded mailsize limit (in reply to end of DATA command));

出错原因:发送的信件大小超过了网易邮箱允许接收的最大限制

解决方法:把附件压缩或者分次发送或者换其他邮箱接收

11. <Eric.Goetzman@chp.edu>: host mail.messaging.microsoft.com[216.32.180.22] said:

550 5.7.1 Service unavailable; Client host [98.126.139.202] blocked using Blocklist 2, mail from IP banned; To request removal from this list please forward this message to delist@messaging.microsoft.com. (in reply to RCPT TO command)

Reporting-MTA: dns; hw.upanshi.com

X-Postfix-Queue-ID: CC2D4681FD

X-Postfix-Sender: rfc822; order@ptm-biolab.com

Arrival-Date: Thu, 13 Oct 2011 19:48:18 -0700 (PDT)

Final-Recipient: rfc822; Eric.Goetzman@chp.edu

Original-Recipient: rfc822;Eric.Goetzman@chp.edu

退信原因:ip被列入黑名单

解决方法:根据退信提示解封ip

12.postfix warning: dict_nis_init: NIS domain name not set - NIS lookups disabled 解决方法

生成/etc/postfix/aliases别名数据库:

[root@mail postfix]# postalias /etc/postfix/aliases

在/etc/postfix/main.cf中加入下面配置信息

alias_database = hash:/etc/postfix/aliases

alias_maps = hash:/etc/postfix/aliases

linux搭建邮件服务器相关推荐

  1. php邮件服务器搭建,如何快速简单的使用Linux搭建邮件服务器

    本篇文章给大家带来的内容是关于如何快速简单的使用Linux搭建邮件服务器,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 搭建邮件服务器,过程非常简单,只需几个步骤即可. 通常在Lin ...

  2. 搭建邮件服务器过程,关于服务器:搭建邮件服务器过程非常简单

    通常在Linux搭建邮件服务器是须要装置很多软件和配置文件的,所以咱们能够应用一个开源邮件服务器软件来搭建的. 筹备一台服务器与零碎 云服务器或本地虚构的服务器都能够. 服务器须要能链接网络. 装置c ...

  3. 搭建邮件服务器,过程非常简单

    搭建邮件服务器,过程非常简单,只需几个步骤即可. 通常在Linux搭建邮件服务器是需要安装很多软件和配置文件的,所以我们可以使用一个开源邮件服务器软件来搭建的. 准备一台服务器与系统 云服务器或本地虚 ...

  4. linux系统搭建局域网邮件,Linux局域网邮件服务器搭建

    随着企业信息化的普及,国内大部分企事业单位都有属于自己的局域网邮件服务器,如何在Linux局域网内搭建邮件服务器,实现邮件的收发.我们就给大家介绍一下怎样用U-Mail邮件服务器软件来搭建局域网邮件服 ...

  5. Linux james邮件服务器的搭建

    Linux james邮件服务器安装 由于最近需要搭建邮件服务器,考虑到Linux服务器比较稳定所以系统选择了redhat5.4 64位的,邮件服务端用的是ApacheJames 前提工作: 1.   ...

  6. Linux Centos7搭建邮件服务器

    Linux Centos7搭建邮件服务器 基于sendmail和Dovecot 一.关闭防火墙和selinux systemctl stop firewalld setenctoce 0 二.下载se ...

  7. 如何利用ewomail搭建邮件服务器

    如何利用ewomail搭建邮件服务器 首先你应该做好如下准备 1.需要一台全新干净的服务器,就是不需要安装任何东西的服务器,mysql,apache都不要.不然会安装不成功.切记!!! 2.查看官方文 ...

  8. Linux-Postfix+Dovecot+Postfixadmin+Roundcubemail 搭建邮件服务器管理系统(一)

    搭建邮件服务器管理系统概述和环境信息说明 1.概述 MUA(Mail User Agent),邮件用户代理:Outlook,Foxmail. MTA(Mail Transfer Agent),邮件传输 ...

  9. 【验】Postfix+Dovecot+MySQL搭建邮件服务器

    网上有很多使用Postfix搭建邮件服务器的文章,但目前貌似没有看到较为完整的一篇.本例将尝试在Ubuntu系统中使用Postfix+Dovecot+MySQL搭建邮件服务器. 说到邮件服务器,网上有 ...

  10. RHCE(十三)用postfix搭建邮件服务器

    搭建邮件服务器 postfix 邮件系统的组成 邮件服务工作流程 三种协议 SMTP POP3 IMAP POP3 和 IMAP 区别 常用端口 mail命令 邮件群发 搭建框架 Linux系统上搭建 ...

最新文章

  1. ASFNU SC Day6
  2. 《刺客信条:英灵殿》全面分析:浅谈公式化开放世界
  3. 雷军反击董明珠:感觉董总好像认输了似的
  4. Linux系统编程---5(共享存储映射,存储映射I/O,mmap函数,父子进程间通信,匿名映射)
  5. 将字符串中的字符按Z字形排列,按行输出
  6. 带你根据源码了解View的事件触发流程,主要讲解为什么子View返回true,ViewGroup就无法接收到事件的过程
  7. C++课程上 有关“指针” 的小结
  8. 谷歌聊天机器人api_如何编写针对Google地图等网络应用量身定制的聊天机器人
  9. mysql 定义唯一约束_在MySQL中,定义唯一约束的基本语法格式是【】
  10. python交互式帮助的进入、使用和退出_python退出交互式???
  11. 数据分析 | 将业务问题转换为统计问题后,我看到了数字的真相
  12. 2020年GitHub上的7个顶级的Java开源目推荐(强烈安利)
  13. ES deeping pageing
  14. 终端的乐趣--Linux下有趣的终端命令或者工具
  15. c语言轮流闪烁有1秒的接线图,LED彩灯PLC编程接线及梯形图
  16. 计算机专业面试英语对话,计算机网络专业面试对话技巧
  17. cass生成里程文件桩号不全_怎样用CASS生成里程文件,带桩号的
  18. Redis基础命令(Hash类型)对field进行的操作
  19. 支配树与Lengauer-Tarjan算法
  20. age estimation阅读整理(一)

热门文章

  1. LBP特征原理及代码实现
  2. 地摊赚钱秘籍(视频)+地摊攻略玩法(新鲜出炉)
  3. 云课堂在登陆时显示服务器错误,我的云课堂不能登陆怎么解决
  4. PPT 处理图片背景为透明
  5. RMAN数据库完全备份和恢复
  6. 杨辉三角 Python(简单易懂)
  7. 手机上编程python的软件_盘点几个在手机上可以用来学习编程的软件
  8. 服务器显示器超频,电脑显示器超频怎么恢复正常 电脑显示器超频是什么原因...
  9. java输入、输出流的简单入门
  10. 3.2-点云配准原理概述