zoukankan      html  css  js  c++  java
  • [转]Ubuntu搭建简易Postfix邮箱服务器

    原文: https://blog.csdn.net/oolocal/article/details/52861583

    --------------

    本文转载自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

    Ubuntu搭建简易Postfix邮箱服务器

    为什么要搭建自己的邮箱服务器呢?你知道希拉里⋅克林顿曾经使用过一个专用的私人邮箱服务器吗?

    搭建自己的私人邮箱服务器可以有效的解决邮件的隐私问题。因为只有你,邮箱服务器的管理员,才能看见服务器上的邮件。但是自己搭建邮箱服务器是一个比较麻烦的过程,因为你需要掌握许多许多的知识,使邮箱服务器正常运转。

    所以,我把邮箱服务器的搭建分成几个部分来讲,减少小白的痛苦。这篇文章是第1部分,讲解搭建一个非常简易的Postfix邮箱服务器的步骤。Postifx是一个SMTP服务器。SMTP服务器也被称为MTA(message transfer agent)。完成了这篇教程,你就能拥有一个属于自己域名的邮箱地址,比如我的网站邮箱地址是gnu@linuxdashen.com 。并且能用这个邮箱地址向Gmail,Yahoo,QQ,网易等邮箱发送邮件并从这些邮箱服务提供商接收邮件。这篇教程以Ubuntu 14.04服务器作为示例。

    关于Postfix

    Postfix是一个顶尖的SMTP服务器,也被称为MTA。Postfix负责从其他SMTP服务器接收邮件,将MUA递交的邮件传递给收件人。MUA(mail user agent)就是我们平常使用的Thunderbird,Foxmail,Outlook等邮箱客户端。Postfix程序采用模块化的设计,每一个模块都尽可能以最低的权限运行。这种设计非常有助于安全。Postfix与Unix的结合度非常高。一台Linux服务器的Postfix可以负责多个域名的邮件发送和接收。这篇文章只介绍单个域名的发送和接收。

    安装Postfix之前的准备工作

    Postfix的原作者是Wietse Venema,他可是一位Unix专家。对于Unix已经提供的功能,Postfix都尽可能不再重复提供。所以,要让Postfix发挥最大功效,我们需要合理地配置好Unix/Linux服务器。

    设置正确的主机名(hostname)

    一般情况下,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 <your-fqdn>

    通常邮箱服务器的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系统用命令配置时区并同步系统时间

    为邮箱服务器设置好DNS记录

    MX记录

    MX记录的作用是告诉全世界的SMTP服务器,你的邮箱服务器mail.yourdomain.com负责yourdomain.com的邮件发送和接收。

    MX记录       @      mail.linuxdashen.com

    邮箱服务器的常见DNS名字是mail.yourdomain.com。如果一个域名有多个邮箱服务器,那么可以设置多个MX记录,并设置优先级。优先级用数字表示,数字越小表示优先级越高。

    A记录

    当其他SMTP服务器知道mail.yourdomain.com负责yourdomain.com的邮件发送和接收后,还必须要知道mail.yourdomain.com这台主机的IP才能建立连接并发送邮件。A记录就是将主机名解析成IP地址的一个记录。

    mail.linuxdashen.com          <IP地址>

    PTR记录

    PTR记录也叫做pointer记录,它将IP地址转换成主机名,与A记录刚好相反。这种解析被称为反向DNS解析(rDNS)。

    PTR记录可以帮助我们过滤垃圾邮件。很多SMTP服务器会查找对方SMTP服务器的PTR记录,得到一个主机名,然后与对方SMTP声称的主机名作比较,如果两者一致,就接收邮件,反之不接收邮件或放进垃圾箱。为了不让你的邮件被拒收或放进垃圾箱,你应该为你的服务器IP设置PTR记录。

    查找一个IP地址的PTR记录的命令为:

    dig -x <IP> +short

    或者

    host <IP>

    因为你是从主机商获得服务器的IP,所以你得在主机商那里设置PTR记录(反向DNS解析),而不是在域名注册商那里设置。

    做完了以上准备工作,我们就可以安装Postfix了。

    安装Postfix

    在ubuntu服务器上运行下面的命令:

    sudo apt-get update
    
    sudo apt-get install postfix -y

    安装过程中会让你选择一种Postfix配置类型。一般情况下,我们需要选择第二种类型:Internet Site。

    ubuntu搭建Postfix邮件服务器

    No configuration 表示不要做任何配置;
    Internet Site 表示直接使用本地SMTP服务器发送和接收邮件;
    Internet with smarthost 表示使用本地SMTP服务器接收邮件,但发送邮件时不直接使用本地SMTP服务器,而是使用第三方smart host来转发邮件;
    Satellite system 表示邮件的发送和接收都是由第三方smarthost来完成。
    Local only 表示邮件只能在本机用户之间发送和接收。

    在第二个页面System mail name中填入你的域名,也就是邮箱地址@符号后面的域名,比如,我的邮箱地址是gnu@linuxdashen.com,所以我填的是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号端口。

    ubuntu搭建Postfix邮件服务器

    在发送测试邮件之前,我们最好是查看25号端口是否被防火墙或主机商屏蔽。nmap可以帮助我们扫描服务器的开放端口。在你的个人电脑上运行下面的命令。

    sudo nmap <your-server-ip>

    ubuntu搭建Postfix邮件服务器

    从图中可以看见我的服务器TCP 25号端口是开放的。如果的输出结果显示25端口被过滤,请查看iptables防火墙设置。如果你的主机商屏蔽了25号端口,给你的主机商提交工单,要求打开25号端口。

    发送测试邮件

    实际上,现在我们就能用命令行发送和接收邮件了。如果你的服务器有一个用户名是user1,那么这个用户的邮箱地址就是user1@yourdomain.com。你可以发送一封邮件给root用户: root@yourdomain.com。也可以向Gmail,Yahoo,QQ,网易等邮箱用户发送邮件。不过现在我们只能在服务器上用命令行发送和查看邮件。

    Postfix在安装时,会同时安装一个sendmail的程序(/usr/sbin/sendmail)。你可以用这个sendmail二进制程序向你的Gmail邮箱发送一封测试邮件。在服务器上输入下面的命令:

    echo "test email" | sendmail your-account@gmail.com

    这是一条很简单的命令, sendmail从标准输入读取到test email,将test email作为邮件正文,然后发送到Gmail邮箱。现在你可以查看你的Gmail邮箱,应该会看见你的测试邮件。尽管我们没有指明发件人地址,但Postfix会自动将你的域名添加到发送人地址中。你也可以在Gmail中回复这封测试邮件,然后在邮箱服务器上查看是否可以收到Gmail发来的邮件。

    每个用户的邮件保存在/var/spool/mail<username>和/var/mail/<username>文件中。如果你不知道收件箱保存在哪里,运行这条命令:

    postconf mail_spool_directory

    Postfix的收发日志保存在/var/log/mail.log文件中。Postfix本身的运行错误日志保存在/var/log/mail.err文件中。

    使用mail程序来发送邮件,查看收件箱

    sendmail的功能非常有限,现在让我们来安装一个命令行邮箱客户端。

    sudo apt-get install mailutils

    使用mail发送邮件的命令为

    mail username@gmail.com
    user@mail:~$ mail username@gmail.com
    Cc: 
    Subject: 2nd test email
    I'm sending this email using the mail program.

    输入主题和正文后,按Ctrl+D来发送邮件。

    要查看收件箱,输入mail就行了。

    mail

    以下是用mail管理收件箱的操作方法。

    • 要查看第一封邮件,输入数字1。如果邮件只显示了一半,按Enter键来显示剩下的消息。
    • 将所有邮件从第一封排序,输入h。
    • 要显示最后一屏邮件,输入h$或z。
    • 阅读下一封邮件,输入n。
    • 删除第一封邮件,输入d 1。
    • 删除第一封,第二封和第四封邮件,输入d 1 2 4。
    • 删除前10封邮件,输入d 1-10。
    • 回复第1封邮件,输入reply 1。
    • 退出mail程序,输入q或x。

    如果你按q来退出mail程序,那么已经阅读过的邮件将会从/var/mail/<username>移动到/home/<username>/mbox文件中。这意味着其他邮箱客户端将不能阅读这些邮件。如果你不想移动已经阅读的邮件,输入x退出mail程序。

    如果需要自动转发邮件,那么在用户的home目录下新建一个.forward文件,在这个文件里输入转发邮件地址,然后保存就行了。注意:用户邮箱不会保留原始邮件。

    文章总结

    现在,我们在Ubuntu服务器上搭建了一个很简陋的Postfix邮箱服务器。我们可以在服务器上用命令行来发送和阅读邮件。另外如果这台ubuntu服务器上搭建了一个网站,那么PHPMailer等网站程序就能向外发送邮件了。但是这种方式有很多不方便,比如每次发送或查看邮件都要SSH登录服务器,而且只能查看纯文本的邮件,不能阅读HTML邮件。在接下来的文章中,我将介绍如何在我们的个人电脑上使用Thunderbird,outlook等邮箱客户端来发送和阅读邮件,如何从浏览器中登录邮箱服务器以及如何加密我们的邮件, urhh,还有很多其他的高级设置。

  • 相关阅读:
    【Redis】搭建主从复制
    【安装】Ubuntu之Docker
    【安装】Ubuntu之MySQL
    【Docker】Dockerfile构建指令
    【Docker】常用命令
    【14】Flask 请求上下文
    【13】Flask 上下文前夕
    【12】Flask 分析线程和协程
    【11】Flask 高级进阶
    【10】Flask 高级摘要
  • 原文地址:https://www.cnblogs.com/oxspirt/p/14815304.html
Copyright © 2011-2022 走看看