Linux【12】-其他2--阿里云centos 7 创建postfix服务器

由于centos默认会自带sendmail,而sendmail存在安全性问题和使用复杂的问题,故而选择postfix服务器,由于暂时没有收邮件的需求,故未安装dovecot。

为邮件服务器添加DNS解析

虽然不加DNS解析也能把邮件发出去,但会被大多数邮件服务器当作垃圾邮件。根据我们的实际经验,需要添加三条DNS解析记录:A记录、MX记录、TXT记录。比如域名cnblogs.info,对应的DNS记录如下:

为了防止垃圾邮件,先到域名控制面板设置好。 MX记录、 A 记录及TXT记录

其中TXT记录如下 @ spf1 a mx ~all

意思就是使用spf1协议,允许a记录和MX记录对应的IP,不允许之外的任何IP

经过这一步,基本可以防止SPAM了

一、安装 postfix

1.1 软件安装

[root@postfix-server ~]# yum remove sendmail -y    #卸载自带的sendmail

[root@postfix-server ~] #yum install postfix –y  # 安装postfix服务的主程序包

1.2 配置

vim /etc/postfix/main.cf

需要修改的地方:

#主机名,这个一般跟MX记录设置成一样的
myhostname = sam  #指向真正的域名mail.example.com,也写入到了dns解析

#域名

mydomain = qinqianshan.com  #指向根域;设置域名(我们将让此处设置将成为E-mail地址“@”后面的部分);在这里,我并不是用sina来作为邮件服务器,所以 mydomain=sina.cn



#原始域名引用上面的变量
myorigin = $mydomain

#设置允许接收哪些地址的邮件,这里默认是all,意思是接收所有来源的邮件,我们改为loopback-only就变为只接收本机发送的邮件,也可以使用localhost达到同样的效果
inet_interfaces = loopback-only

允许stmp使用 465 端口,vim /etc/postfix/master.cf ,取消 smtps 的注释

smtps     inet  n       -       y       -       -       smtpd

参数解释:

queue_directory= /var/spool/postfix #队列目录,也是运行的根目录
mydomain = demo.test.com #指定邮件域,接收用来识别的
myhostname= test.com #发送邮件的主机名
mynetworks= 127.0.0.0/8 #指定允许使用的ip地址段
myorigin =$mydomain #发信地址,此设置显示为@postfix-server
inet_interfaces= localhost # 由于我只需要监听本地的,故选择localhost,若需要监听所有则选择all
mydestination= $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks_style= subnet #允许转发的来源网段,可选subnet子网,class网段,host本机
local_recipient_maps = //212行,把前面的注释拿掉
relay_domains= $mydestination #允许转发的目标域
alias_maps= hash:/etc/aliases #对某个用户发,文件中的用户都可以收到邮件
alias_database= hash:/etc/aliases 
smtpd_banner= $myhostname ESMTP "postfix mail server" #自定服务器信息

inet_protocols = ipv4 #只允许使用ipv4,由于服务器不支持ipv6,在配置完毕后重启发现无法启动postfix服务器,排错后修改此项启动成功

继续配置stmp验证

smtpd_banner = test.com 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服务

service postfix restart

#设置开机启动
chkconfig postfix on

如果之前安装过其他的邮件服务还需要设置禁用其他邮件服务,并将postfix设为默认和开机启动。

查看之前的mta

alternatives --config mta

There are 2 programs which provide 'mta'.
Selection Command
#-----------------------------------------------
*+ 1 /usr/sbin/sendmail.sendmail # ← 当前状态:sendmail为默认MTA
/usr/sbin/sendmail.postfix
Enter to keep the current selection[+], or type selection number: 2  ← 在这里输入2,使Postfix成为默认MTA

经过上面的步骤之后,我们就可以使用php的mail函数发送邮件啦~~~

四 测试

命令行输入$:

echo "hehezzz" | mailx -v -s "test" ***@sina.cn


Resolving host smtp.sina.cn . . . done.
Connecting to 202.108.5.186:465 . . . connected.
Error in certificate: Peer's certificate issuer is not recognized.
Comparing DNS name: "*.sina.cn"
SSL parameters: cipher=AES-256-GCM, keysize=256, secretkeysize=256,
issuer=CN=GeoTrust RSA CA 2018,OU=www.digicert.com,O=DigiCert Inc,C=US
subject=CN=*.sina.cn,OU="Sina.com Technology(China)Co.,ltd",O=新浪网技术(中国)有限公司,L=北京,C=CN
220 smtp-5-124.smtpsmail.fmail.xd.sinanode.com ESMTP
>>> EHLO sam
250-smtp-5-124.smtpsmail.fmail.xd.sinanode.com
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-STARTTLS
250 8BITMIME
>>> AUTH LOGIN
334 VXNlcm5hbWU6
>>> dGllaGFu
334 UGFzc3dvcmQ6
>>> UXFzODIxMDExMjIwMTU=
235 OK Authenticated
>>> MAIL FROM:<****@sina.cn>
250 ok
>>> RCPT TO:<****@sina.cn>
250 ok
>>> DATA
354 End data with <CR><LF>.<CR><LF>
>>> .
250 ok queue id 240032394054
>>> QUIT
221 smtp-5-124.smtpsmail.fmail.xd.sinanode.com

Postfix邮件的log位置是:

/var/log/maillog

telnet测试发送邮件

telnet mail.域名.com 465

mail from: <***@sina.cn>
rcpt to:<***@sina.cn>
data
.
quit


Date: Tue, 22 May 2007 10:10:00 -0500
From: Your Friend <test@hoho.com>
To: <***@sina.cn>
Reply-To: <tieha@sina.cn>
Subject: How are you?

This is a test Mail. Ignore it!
.
quit

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn