本文转载自https://www.linuxdashen.com/ubuntu%E6%90%AD%E5%BB%BA%E7%AE%80%E6%98%93postfix%E9%82%AE%E7%AE%B1%E6%9C%8D%E5%8A%A1%E5%99%A8
最后更新
2016年4月20日
分类 Ubuntu服务器 最新文章 邮件服务器 标签 550 mail content denied Gnu mail Postfix PTR记录 邮箱服务器
为什么要搭建自己的邮箱服务器呢?你知道希拉里⋅克林顿曾经使用过一个专用的私人邮箱服务器吗?
搭建自己的私人邮箱服务器可以有效的解决邮件的隐私问题。因为只有你,邮箱服务器的管理员,才能看见服务器上的邮件。但是自己搭建邮箱服务器是一个比较麻烦的过程,因为你需要掌握许多许多的知识,使邮箱服务器正常运转。
所以,我把邮箱服务器的搭建分成几个部分来讲,减少小白的痛苦。这篇文章是第1部分,讲解搭建一个非常简易的Postfix邮箱服务器的步骤。Postifx是一个SMTP服务器。SMTP服务器也被称为MTA(message transfer agent)。完成了这篇教程,你就能拥有一个属于自己域名的邮箱地址,比如我的网站邮箱地址是[email protected] 。并且能用这个邮箱地址向Gmail,Yahoo,QQ,网易等邮箱发送邮件并从这些邮箱服务提供商接收邮件。这篇教程以Ubuntu 14.04服务器作为示例。
Postfix是一个顶尖的SMTP服务器,也被称为MTA。Postfix负责从其他SMTP服务器接收邮件,将MUA递交的邮件传递给收件人。MUA(mail user agent)就是我们平常使用的Thunderbird,Foxmail,Outlook等邮箱客户端。Postfix程序采用模块化的设计,每一个模块都尽可能以最低的权限运行。这种设计非常有助于安全。Postfix与Unix的结合度非常高。一台Linux服务器的Postfix可以负责多个域名的邮件发送和接收。这篇文章只介绍单个域名的发送和接收。
Postfix的原作者是Wietse Venema,他可是一位Unix专家。对于Unix已经提供的功能,Postfix都尽可能不再重复提供。所以,要让Postfix发挥最大功效,我们需要合理地配置好Unix/Linux服务器。
一般情况下,Postfix与其他SMTP服务器通信的时候会使用Unix/Linux服务器的主机名来表明自己的身份。主机名可以有两种形式,单个名字和FQDN.
通常,个人电脑使用单个名字来作为主机名。比如,你的Linux系统的主机名可能是linux,Debian, Ubuntu等。FQDN (Fully Qualified Domain Name) 由两个部分组成,节点名和域名。例如,
mail.linuxdashen.com
就是FQDN形式的主机名。mail是节点名,linuxdashen.com是域名。面向互联网的服务器一般使用FQDN形式的主机名。邮箱服务器也应该使用FQDN形式的主机名。FQDN将会出现在smtpd横幅中(smtpd banner),这是Postfix向其他SMTP服务器表明自己身份的方式。
如果你的SMTP服务器不用FQDN来表明自己的身份,那么收件人的SMTP服务器可能会拒收邮件。有些SMTP服务器甚至会查询DNS,验证FQDN是否真的解析为你的服务器IP。不过,在这垃圾邮件漫天飞的年代,这种做法是可以理解的。所以我们必须得正确设置好邮箱服务器的FQDN主机名。
输入下面的命令查看当前的主机名。
hostname -f
如果你的Ubuntu服务器还没有设置好主机名,可以使用hostnamectl来设置。
sudo hostnamectl set-hostname
通常邮箱服务器的FQDN主机名为mail.yourdomain.com。
邮件里都有一个时间戳(timestamp),这个时间戳就是Postfix根据当前系统时间设置的。这个时间戳也会出现在Postfix的日志里。所以调整好系统时间是非常必要的。
使用date命令查看时区设置以及当前的系统时间。
user@mail:~$ date Thu Mar 31 06:37:19 BST 2016
在Ubuntu系统上可以使用
sudo dpkg-reconfigure tzdata
命令来调整时区。时区调整后系统时间基本就没问题了。如果你需要保持非常精确的时间,可以使用NTP协议与远程时间服务器保持同步,具体请看这篇文章。
linux系统用命令配置时区并同步系统时间
MX记录的作用是告诉全世界的SMTP服务器,你的邮箱服务器mail.yourdomain.com负责yourdomain.com的邮件发送和接收。
MX记录 @ mail.linuxdashen.com
邮箱服务器的常见DNS名字是mail.yourdomain.com。如果一个域名有多个邮箱服务器,那么可以设置多个MX记录,并设置优先级。优先级用数字表示,数字越小表示优先级越高。
当其他SMTP服务器知道mail.yourdomain.com负责yourdomain.com的邮件发送和接收后,还必须要知道mail.yourdomain.com这台主机的IP才能建立连接并发送邮件。A记录就是将主机名解析成IP地址的一个记录。
mail.linuxdashen.com
PTR记录也叫做pointer记录,它将IP地址转换成主机名,与A记录刚好相反。这种解析被称为反向DNS解析(rDNS)。
PTR记录可以帮助我们过滤垃圾邮件。很多SMTP服务器会查找对方SMTP服务器的PTR记录,得到一个主机名,然后与对方SMTP声称的主机名作比较,如果两者一致,就接收邮件,反之不接收邮件或放进垃圾箱。为了不让你的邮件被拒收或放进垃圾箱,你应该为你的服务器IP设置PTR记录。
查找一个IP地址的PTR记录的命令为:
dig -x+short
或者
host
因为你是从主机商获得服务器的IP,所以你得在主机商那里设置PTR记录(反向DNS解析),而不是在域名注册商那里设置。
做完了以上准备工作,我们就可以安装Postfix了。
在ubuntu服务器上运行下面的命令:
sudo apt-get update sudo apt-get install postfix -y
安装过程中会让你选择一种Postfix配置类型。一般情况下,我们需要选择第二种类型:Internet Site。
No configuration 表示不要做任何配置;
Internet Site 表示直接使用本地SMTP服务器发送和接收邮件;
Internet with smarthost 表示使用本地SMTP服务器接收邮件,但发送邮件时不直接使用本地SMTP服务器,而是使用第三方smart host来转发邮件;
Satellite system 表示邮件的发送和接收都是由第三方smarthost来完成。
Local only 表示邮件只能在本机用户之间发送和接收。
在第二个页面System mail name中填入你的域名,也就是邮箱地址@符号后面的域名,比如,我的邮箱地址是[email protected],所以我填的是linuxdashen.com。当发件人的域名地址没有指定时,Postfix会自动将这个域名添加到发件人的地址中。
Postfix在安装过程中会生成/etc/postfix/main.cf配置文件。安装完成后Postfix会自动运行。我们可以用下面的命令查看Postfix的版本。
user@mail:~$ sudo postconf mail_version mail_version = 2.11.0
使用netstat来查看Postfix的监听情况:
sudo netstat -lnpt
Postfix的master进程监听TCP 25号端口。
在发送测试邮件之前,我们最好是查看25号端口是否被防火墙或主机商屏蔽。nmap可以帮助我们扫描服务器的开放端口。在你的个人电脑上运行下面的命令。
sudo nmap
从图中可以看见我的服务器TCP 25号端口是开放的。如果的输出结果显示25端口被过滤,请查看iptables防火墙设置。如果你的主机商屏蔽了25号端口,给你的主机商提交工单,要求打开25号端口。
实际上,现在我们就能用命令行发送和接收邮件了。如果你的服务器有一个用户名是user1,那么这个用户的邮箱地址就是[email protected]。你可以发送一封邮件给root用户: [email protected]。也可以向Gmail,Yahoo,QQ,网易等邮箱用户发送邮件。不过现在我们只能在服务器上用命令行发送和查看邮件。
Postfix在安装时,会同时安装一个sendmail的程序(/usr/sbin/sendmail)。你可以用这个sendmail二进制程序向你的Gmail邮箱发送一封测试邮件。在服务器上输入下面的命令:
echo "test email" | sendmail [email protected]
这是一条很简单的命令, sendmail从标准输入读取到test email,将test email作为邮件正文,然后发送到Gmail邮箱。现在你可以查看你的Gmail邮箱,应该会看见你的测试邮件。尽管我们没有指明发件人地址,但Postfix会自动将你的域名添加到发送人地址中。你也可以在Gmail中回复这封测试邮件,然后在邮箱服务器上查看是否可以收到Gmail发来的邮件。
每个用户的邮件保存在/var/spool/mail
postconf mail_spool_directory
Postfix的收发日志保存在/var/log/mail.log文件中。Postfix本身的运行错误日志保存在/var/log/mail.err文件中。
sendmail的功能非常有限,现在让我们来安装一个命令行邮箱客户端。
sudo apt-get install mailutils
使用mail发送邮件的命令为
mail [email protected]
user@mail:~$ mail [email protected] Cc: Subject: 2nd test email I'm sending this email using the mail program.
输入主题和正文后,按Ctrl+D来发送邮件。
要查看收件箱,输入mail就行了。
以下是用mail管理收件箱的操作方法。
如果你按q来退出mail程序,那么已经阅读过的邮件将会从/var/mail/
如果需要自动转发邮件,那么在用户的home目录下新建一个.forward文件,在这个文件里输入转发邮件地址,然后保存就行了。注意:用户邮箱不会保留原始邮件。
现在,我们在Ubuntu服务器上搭建了一个很简陋的Postfix邮箱服务器。我们可以在服务器上用命令行来发送和阅读邮件。另外如果这台ubuntu服务器上搭建了一个网站,那么PHPMailer等网站程序就能向外发送邮件了。但是这种方式有很多不方便,比如每次发送或查看邮件都要SSH登录服务器,而且只能查看纯文本的邮件,不能阅读HTML邮件。在接下来的文章中,我将介绍如何在我们的个人电脑上使用Thunderbird,outlook等邮箱客户端来发送和阅读邮件,如何从浏览器中登录邮箱服务器以及如何加密我们的邮件, urhh,还有很多其他的高级设置。