CentOS6.5安装配置postfix邮件系统 启用并配置SMTP虚拟账户
星期三, 2016-03-09 | Author: Lee | JAVA-and-J2EE, linux, php | 23,825 views
CentOS6.5_64位系统下安装配置postfix邮件系统 启用并配置SMTP虚拟账户 实录
开启用户注册的邮件检验功能,需要发送邮件,使用其他服务商的邮件服务总有每日和发送间隔发送邮件限制.
废话不多说主要实现功能为设置postfix配置,启用smtp服务帐号,只用来发送邮件验证和newsletter邮件
一:配置postfix及简单简介
开始之前,先介绍几个枯燥的名词:
MUA:用户代理端,即用户使用的写信、收信客户端软件。比如:outlook、foxmail等客户端软件,乃至通过浏览器登录邮箱并发送邮件的BS架构网页也算是MUA。
MTA:邮件传送端,即常说的邮件服务器,用于转发、收取用户邮件。本文之中的postfix实现的就是MTA,当然postfix也是一种特殊的MUA,不再深入介绍,本文之中仅把postfix当做MTA使用。
MDA:邮件代理端,相当于MUA和MTA的中间人,可用于过滤垃圾邮件。
POP:邮局协议,当前是第三版,也就是POP3,用于MUA连接服务器收取用户邮件,通信端口110。
IMAP:互联网应用协议,功能与POP类似:也用于MUA连接服务器收取用户邮件;功能较POP多,通信端口143。
SMTP:简单邮件传送协议,MUA连接MTA或MTA连接MTA发送邮件使用此协议,通信端口25,启用ssl/tls的情况下端口为465或587。
一般发邮件的步骤流程是:
1、MUA通过POP、IMAP或SMTP协议连接MTA(称之为mta1);本文之中php通过phpmailer请求发送邮件的php脚本就扮演了MUA的角色,而postfix就是MTA;
2、MUA发送邮件给mta1(或者说MUA通过mta1发送邮件);本文中postfix就是这个mta1;
3、mta1与其他的MTA自主沟通连接将邮件传送至指定域下的指定用户(此时mta1就扮演了MUA的角色功能,这种交互是由邮件系统软件自主实现,与用户端无关)。
本次搭建postfix目的很明确:
用于php开发的web环境下新用户注册时发送验证码邮件—php下通过phpmailer类库的smtp协议链接postfix来发送邮件。
web环境与postfix在同一台CentOs6.5(64位)系统下,postfix不对外提供smtp亦不转发外部MUA邮件,仅转发(或发送)web环境下(MUA)的邮件,也就是仅转发本机(或者说本域)邮件。同时也不接收其他MTA的邮件(也就是说不接受他人发过来的邮件)。
本文就不介绍postfix、sasldb2、saslauthd等软件了,网上一大把。
本文配置postfix的目的通俗的讲就是:本机PHP脚本(MUA)通过smtp协议连接本机postfix(MTA),发送邮件到指定邮箱;本机postfix不转发(或发送)其他MUA的邮件,也不接收其他MTA转过来(发送过来)的邮件(也就是说本机postfix下的邮箱不接收邮件)。或这么讲:本机postfix启用smtp服务,但不对公网开放25端口;既然有smtp就会有账号和密码,postfix可以用centos系统的账户和密码,但这种方式总觉得不安全,所以启用sasldb2提供postfix的smtp虚拟账户和密码—这样即简洁也是postfix开发组推荐的方式。
二:postfix的安装
centos6.5默认自带postfix,便于说明,有些系统mail服务默认为sendmail,渣渣不理它也卸载掉,并更改服务器的mta:
需要注意的是,卸载postfix会同步卸载掉定时服务crontabs,务必在卸载后重新安装。
1 2 3 4 5 6 7 8 9 10 11 12 13 | #开始yum安装前 更换yum源 建议aliyun源 参考://www.pomelolee.com/1548.html (如果是国外云主机,感觉更换不更换无所谓,下载时间都差不多) #备份原先的yum源信息 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup #从阿里云镜像站下载centos6的repo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo #最后yum重新生成缓存 yum makecache yum remove sendmail #卸载sendmail yum remove postfix #卸载postfix yum install postfix #重新安装postfix #yum安装会自动建立postfix用户组和用户名 yum install crontabs #因为卸载postfix的时候系统定时服务也被卸载 核心服务 也同步安装下 |
安装sasldb、saslauthd 检验服务权限部分
postfix开机启动设置,因为采用sasldb2提供postfix的smtp账户和密码,无需saslauthd服务运行,故而saslauthd服务不用启动—看吧,使用sasldb2还减少资源占用:
1 2 3 4 5 6 7 8 9 10 11 12 13 | yum install cyrus-sasl* #提供smtp的虚拟账户和密码服务 #sasldb2包含在saslauthd当中 就不要再问为什么没有安装sasldb2的shell代码了 #当前mta查看 alternatives --display mta #设置mta /usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix #再次查看mta alternatives --display mta #输出结果最后一行会有类似如下的提示:mta即设置完毕 #Current `best' version is /usr/sbin/sendmail.postfix. #启动运行 chkconfig postfix on |
三:postfix配置并启用smtp
postfix配置文件在/etc/postfix目录下,主要修改的配置文件为:/etc/postfix/main.cf,配置说明详见代码段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | vi /etc/postfix/main.cf #vi编辑postfix配置文件 #找到如下配置项酌情修改 ###### myhostname = mail.i5a6.com #postfix主机名,修改成你的域名 此项需要添加A记录并指向postfix所在主机公网IP mydomain = i5a6.com #域名 myorigin = $mydomain #本机postfix的邮箱域名后最 此项默认值使用myhostname #此处使用了前项mydomain 也就是说本机postfix邮箱后缀为:@i5a6.com inet_interfaces = localhost #指定postfix系统监听的网络接口 此处必须是localhost或127.0.0.1或内网ip #若注释或填入公网ip 服务器的25端口将对公网开放 #默认值为all 即监听所有网络接口 #此项指定localhost后 本机postfix就只能发邮件不能接收邮件 inet_protocols = ipv4 #网络协议 ipv6在国内还不怎么普及 这里ipv4即可 mydestination = $myhostname, localhost.$mydomain, localhost #指定postfix接收邮件时收件人的域名,换句话说,也就是你的postfix系统要接收什么样的邮件。 #此项配置中$myhostname表示postfix接受@$myhostname为后缀的邮箱的邮件 逗号分割支持指多项 #此项默认值使用myhostname local_recipient_maps = #此项制定接收邮件的规则 可以是hash文件 此项对本次配置无意义 可以直接注释 mynetworks = 8.8.8.8, 10.200.9.xxx, 127.0.0.1 #指定你所在的网络的网络地址 #鄙人生产服务器公网IP8.8.8.8(开玩笑我哪有这个ip)、内网ip10.200.9.xxx(第四位做了隐藏)、以及localhost的ip127.0.0.1 #请依据实际情况修改 smtpd_banner = IA ESMTP Server #指定MUA通过smtp连接postfix时返回的header头信息 #原始配置附带有postfix版本号 去掉即可,此项酌情处理 #SMTP Config broken_sasl_auth_clients = yes #指定postfix兼容MUA使用不规则的smtp协议--主要针对老版本的outlook 此项对于本次配置无意义 smtpd_client_restrictions = permit_sasl_authenticated #指定可以向postfix发起SMTP连接的客户端的主机名或ip地址 #此处permit_sasl_authenticated意思是允许通过sasl认证(也就是smtp链接时通过了账号、密码效验的用户)的所有用户 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination #发件人在执行RCPT TO命令时提供的地址进行限制规则 此处照搬复制即可 smtpd_sasl_auth_enable = yes #指定postfix使用sasl验证 通俗的将就是启用smtp并要求进行账号、密码效验 smtpd_sasl_local_domain = $mydomain #指定SMTP认证的本地域名 本次配置可以使用 smtpd_sasl_local_domain = '' 或干脆注释掉 默认为空 smtpd_sasl_security_options = noanonymous #取消smtp的匿名登录 此项默认值为noanonymous smtp若能匿名登录危害非常大 此项请务必指定为noanonymous message_size_limit = 5242880 #指定通过postfix发送邮件的体积大小 此处表示5M ###### |
查看postfix配置文件的所有配置项:
1 | postconf #不带任何命令参数 即可输出所有postfix配置项以及默认值 |
四:sasldb2建立smtp用户和密码
smtp的账户密码建立也就是建立邮箱账户(类似[email protected]的邮箱地址)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #配置postfix启用sasldb2作为smtp的账号秘密效验方式 #编辑通过sasl启用smtp账号密码效验的配置 vi /etc/sasl2/smtpd.conf #vi写入或编辑内容如下: ##### pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: plain login CRAM-MD5 DIGEST-MD5 ##### #这里需要注意的是:这个配置文件的位置是64位机器上的,32位机器应该在:/usr/lib/sasl2/smtpd.conf #创建smtp账号 saslpasswd2 -c -u `postconf -h mydomain` test #回车会要求输入密码,连续两次 #表示创建test@$mydomain的邮箱账号(也是smtp的账号)和密码 #本例就是创建[email protected]账号和密码 #此处注意的是smtp登录用的账号并不是单纯的用户名 而是整个邮箱地址字符串 #假设此处设置的smtp账号[email protected]密码为test123 下方测试时要用到 #查看sasldb2的用户和密码 sasldblistusers2 #此命令进用户查看sasldb的用户情况 #此命令回车后会输出诸如这样的内容:[email protected]: userPassword #每次添加smtp用户完毕之后需重启postfix或reload |
测试postfix配置文件并启动postfix
1 2 3 4 5 6 7 8 9 | #测试postfix配置文件 service postfix check #没有问题的话会返回着色[ok]字样 #启动postfix service postfix start #设置postfix开机启动 chkconfig postfix on #更改sasldb2数据的权限,让postfix可以读取 chmod 755 /etc/sasldb2 |
五:测试smtp
直接本机telnet,上述添加的[email protected]账号和test123密码需要base64编码,编码后的字符串为:
[email protected]为:xxxxxxxxb20uY24=
test123为:dGVzdDEyMw==
telnet测试时需要用到,base64编码太简单就不多做解释,例如php的函数base64_encode()
1 2 3 4 5 6 7 8 9 10 11 | #若没安装telnet 需安装telnet yum install telnet #telnet测试smtp连接postfix telnet 127.0.0.1 25 #回车后会显示由$smtpd_banner配置的欢迎信息 EHLO jjonline #输入ehlo消息头进行握手 消息返回后继续 AUTH LOGIN #要求进行smtp账号密码效验 返回后输入[email protected]的base64编码 xxxxxxxxb20uY24= #返回后输入test123密码 也是base64编码 dGVzdDEyMw== #回车后就会显示smtp效验成功 接下来还可以测试发送邮件功能 本文就不再做示例了 #注意 要退出telnet 输入quit回车即可 |
自此,自建postfix并启用smtp和smtp的虚拟账号完成
六:域名解析记录设置
postfix配置完毕,想要通过这台postfis邮件服务器发送的邮件被其他邮箱服务商所接受,还需要做A记录、txt记录还mx记录,请适配你自己的域名和ip地址。截图如下:
七:使用telnet发送邮件成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | [root@iZ62rh0rx0bZ ~]# telnet 127.0.0.1 25 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 IA ESMTP Server EHLO IA 250-mail.i5a6.com 250-PIPELINING 250-SIZE 5242880 250-VRFY 250-ETRN 250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN 250-AUTH=DIGEST-MD5 CRAM-MD5 PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN AUTH LOGIN 334 VXNlcm5hbWU6 dGVzdEBpYXRvZG8uY29t 334 UGFzc3dvcmQ6 dGVzdDEyMw== 235 2.7.0 Authentication successful MAIL FROM:<test@i5a6.com> 250 2.1.0 Ok RCPT TO:<hongxin571@126.com> 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> TO:hongxin571@126.com FROM:test@i5a6.com SUBJECT:test by telnet/smtp test from IA SERVER code. . 250 2.0.0 Ok: queued as 88F64C061C |
文章来源:http://blog.jjonline.cn/linux/185.html
文章作者: Lee
本文地址: https://www.pomelolee.com/1551.html
除非注明,Pomelo Lee文章均为原创,转载请以链接形式标明本文地址
一条评论 to CentOS6.5安装配置postfix邮件系统 启用并配置SMTP虚拟账户
saslpasswd2 -d “[email protected]” 删除用户
Leave a comment
Search
相关文章
热门文章
最新文章
文章分类
- ajax (10)
- algorithm-learn (3)
- Android (6)
- as (3)
- computer (85)
- Database (30)
- disucz (4)
- enterprise (1)
- erlang (2)
- flash (5)
- golang (3)
- html5 (18)
- ios (4)
- JAVA-and-J2EE (186)
- linux (143)
- mac (10)
- movie-music (11)
- pagemaker (36)
- php (50)
- spring-boot (2)
- Synology群晖 (2)
- Uncategorized (6)
- unity (1)
- webgame (15)
- wordpress (33)
- work-other (2)
- 低代码 (1)
- 体味生活 (40)
- 前端 (21)
- 大数据 (8)
- 游戏开发 (9)
- 爱上海 (19)
- 读书 (4)
- 软件 (3)
2016 年 08 月 15 日