【我的Linux,我做主!】动手搭建Postfix邮件服务器

目录:
(一)了解邮件的整个收发流程
(二)配置postfix邮件服务器
(三)使用图形客户端收发邮件



(一)了解邮件的整个收发流程

(1.1)电子邮件在我们的日常生活中,属于经常用到的一种信息传输服务。我们使用的可能是自己公司的邮件服务器,也可能使用的是互联网中提供的知名邮件服务器,例如QQ邮箱、163邮箱、126邮箱等,它们收发邮件的流程都是一样的。假设现在有一个126邮件服务器,在邮件服务器上有两个帐户,分别是[email protected]和[email protected],此时如果tom想要发送邮件给bob,那么他发送邮件后,邮件首先会到达126邮件服务器,并标注“to:[email protected]”,此时126服务器发现发送的邮件是属于自己的注册用户,那么126邮箱就会将这封邮件投递到bob的邮箱中,当bob进入到自己的邮箱后发现自己有一封未读的邮件,此时tom用户就完成了发送邮件给bob的需求,这是在同一台邮件服务器中发送邮件的过程。

现在我们的环境中又出现了一台QQ的邮件服务器mail.qq.com,在QQ的域中还存在着域名解析服务器ns.qq.com,对域中的所有主机进行域名解析的操作,假设在QQ服务器上存在着一个[email protected]的账户。[email protected]准备给[email protected]用户发送一封邮件并标注“to:[email protected]”,此时126服务器接收到邮件后发现[email protected]并不是自己服务器中的账户,因此126服务器需要知道QQ邮件服务器的IP地址,126服务器首先会将查询IP地址的请求发送给自己域中的DNS服务器,126域中的邮件服务器向DNS服务器查询的方式主要是通过递归查询。此时126域中的DNS服务器会去向全球13台根域名服务器进行查询,通过迭代查询的方式,经历了根域、顶级域、一级域、二级域...最终找到了QQ域中的DNS服务器,此时126域中的DNS服务器会向QQ域中的DNS服务器发送查询请求:“请问你知道QQ域中的邮件服务器是那一台吗?”此时QQ域中的DNS服务器便会去查询自己服务器上的MX记录找到优先级高的邮件服务器,并向126域中的DNS服务器回应:“知道,域中的邮件服务器是mail1.qq.com”,接着126域中的DNS服务器继续询问:“请问mail1.qq.com主机的A记录是什么呢?”此时QQ域中的DNS服务器会回答:“知道,mail1.qq.com的A记录是xxx”,这个时候126域中的DNS服务器便会将查询的结果告诉给126域中的邮件服务器,126域中的邮件服务器知道了QQ域中的邮件服务器后,便会把服务器中的“to:[email protected]”邮件发送到QQ域中的邮件服务器上,此时QQ邮件服务器发现mary是自己服务器中的一个账户,此时就会将这封邮件投递到mary的账户中,mary通过浏览器或者邮件客户端便可以查收自己账户中的邮件了,这就是整个邮件服务器的工作流程。

(1.2)平时我们在收发邮件的时候都会使用一些客户端,比如Outlook邮箱、Foxmail邮箱、Thunderbird邮箱等,对于这些客户端工具来说,我们将其称之为MUA(邮件用户代理)。我们在发邮件的时候,使用的协议是SMTP(简单邮件传输协议),其中简单邮件传输协议所使用的是TCP的25号端口;在收邮件的时候,我们所使用的协议是POP3(邮局协议版本3)或者IMAP(交互邮件访问协议),对于POP3来说所使用的是TCP的110端口,对于IMAP来说所使用的是TCP的143端口。如果我们想要将一台主机搭建为一台邮件服务器,那么就需要安装相对应的软件,比如postfix、sendmail、Exchange?Server等,这些软件我们称之为MTA(邮件传输代理)。当126的用户tom发送了一封给bob或者mary的邮件后,邮件首先会到达126邮件服务器,接着126邮件服务器会进行邮件投递的操作,邮件投递的这个过程,我们称之为MDA(邮件投递代理),在postfix中它是一个进程。在客户端我们所使用的协议是POP3或者IMAP,它是由dovecot提供的,安装之后用户才可以正常的接收邮件,这个我们把它称之为MRA(邮件接收代理)。126邮箱接收到tom发送的邮件后,发现需要将邮件转发给mary,这个转发的过程我们称为relay(转发)。这时候就会引出一个概念openrelay,表示一个邮件服务器不作任何的限制,全球任何人都可以向我的服务器发送转发邮件,甚至不用在我的邮件服务器上注册,也可以直接让我的服务器发送转发邮件,此时我们的邮件服务器就是出于openrelay的状态。在互联网中会有一个订阅RBL(实时黑名单),它会将互联网中异常的邮件服务器添加到RBL的实时黑名单中,此时如果目标邮件服务器订阅了RBL后,就不会再接收到我们的异常邮件服务器发送的邮件了。



(二)配置postfix邮件服务器
(2.1)首先我们在vms001主机上配置好DNS服务,在/etc/unbound/local.d目录中创建一个aa.conf的配置文件,并且填写好相应的DNS解析条目。接着在vms002主机上我们将DNS服务器设置为192.168.26.101后,我们可以查询到example.com域的主机名为vms002.example.com,然后通过主机名查询A记录,便可以查询到vms002主机的IP地址为192.168.26.102,查询的结果是正确的。
# host -t mx example.com
# host -t A vms002.example.com


(2.2)postfix服务在我们系统中默认是已经安装好的,进入到/etc/postfix目录下,可以查看main.cf文件。当然main.cf文件中的配置参数并不是包含全部的内容,如果我们想要查看所有的参数信息,可以使用postconf命令,其中postconf是列出所有参数的当前值,而postconf -d是列出所有参数的默认值。Postconf中一共有816个参数,main.cf文件中只放置了常用的参数。




(2.3)在vms002主机的main.cf文件中主要包含的是常见的参数,具体的格式如下,同时我们在配置文件中进行参数定义的时候一定要顶格开始,否则会被系统默认为时上一行的延续。myhostname是一个很重要的参数,如果我们没有设置具体的值,那么postconf中会有默认值存在,默认值一般是主机名。
格式:
Key1=value1,value11
Key2=value2
Key3=$key1,value3
此时key3=value1,value11,value3
# postconf myhostname
# postconf | grep ^myhost

(2.4)在main.cf文件中mydomain的默认值会取myhostname第一个点之后的部分,如果我们通过postconf -e参数对myhostname进行修改,那么修改的结果会直接记录到main.cf文件中,且此时使用postconf查询mydomain时,会发现结果也随之修改为myhostname第一个点之后的部分。如果是通过配置文件进行修改那么需要重启服务才会生效,而通过命令行进行修改,则会立刻生效。
# postconf | grep ^mydom
# postconf -e myhostname=aa.bb.cc.dd.ee.com




(2.5)在main.cf文件中myorigin参数的主要作用是自动补齐收件人邮箱的后缀名称信息,我们查询到myorigin参数的默认值为$myhostname。现在我们在vms002主机上使用root用户对jerry用户发送一封邮件,我们尝试使用jerry或者是[email protected]作为收件人,此时我们发现使用两种方式发送过来的邮件都可以正常的看到如下的邮件信息。所以如果遇到了不是标准邮件格式的收件人,比如jerry,那么此时postfix会自动补齐为[email protected]$myorigin即[email protected]
# mail -u jerry
# echo "Hello I‘m root" | mail -s "Hello jerry" [email protected]





(2.6)在main.cf文件中的inet_interfaces表示的是当前服务所监听的端口,默认是监听在主机回环接口上的,此时我们应该设置为监听在所有的接口之上。最后还要记得将防火墙添加SMTP可以通过。
# systemctl restart postfix.service
# netstat -tunlp | grep :25
# firewall-cmd --add-service=smtp --permanent



(2.7)在main.cf文件中的inet_protocols表示监听的协议,可以自己选择监听ipv4或者监听ipv6,默认是监听所有的all

(2.8)在main.cf文件中的mydestination表示的是当邮件服务器将需要发送的邮件进行投递的时候判断邮件的收信人是否是自己的注册用户的列表库,例如root用户使用[email protected]作为收件人名是可以正常的将邮件投递到jerry用户的邮箱的,但是使用[email protected]作为收件人名时默认是不能投递到jerry用户的邮箱的,如果我们希望接收到类似于[email protected]这样常规格式的收件人名,就需要将$mydomain参数添加进来,因为mydomain表示的是myhostname第一个点之后的所有内容,所以开启mydestination第二行的配置(图2-20)。当在/etc/postfix/目录下main.cf文件中mydestination参数后添加了$mydomain的选项并重启服务后,此时便可以正常的识别[email protected]收件人信息,并正确的投递邮件(图2-22)。如果不添加$mydomain参数的话,此时vms002邮件服务器会不停的询问DNS服务器发送邮件的主机地址是多少,而DNS服务器会回复是vms002主机自己,转发给自己后发现邮件后缀并不是自己域名内地注册用户,这样又会向DNS询问,形成了一个死循环,所以建议一般情况下是需要添加这个参数的。
# tailf /var/log/maillog---查看邮件发送的后台日志
# echo "Hello I‘m root" | mail -s ‘Hello jerry‘ [email protected]




(2.9)在main.cf文件中的mynetworks表示的是允许使用openrelay的IP地址范围,mynetworks值表示的是默认IP地址范围,在此范围内的主机才可以使用openrelay进行邮件转发的操作(图2-29),现在我们创建一个新的主机MailTest(192.168.26.103),然后配置好邮件测试主机的相关光盘镜像挂载、YUM源等信息。此时vms002主机上并不存在xxyy用户,但是我们可以在MailTest主机上使用xxyy账号发送邮件,我们在MailTest主机上安装好telnet软件,并编辑发送的邮件信息(图2-27),此时我们在vms002主机上便发现jerry用户已经接收到了不存在的xxyy账号发送过来的邮件了(图2-28)。不过一般我们使用公司的邮箱收发邮件,如果我们回到家后在IP地址可能就不在mynetworks的范围中了,此时如果不能进行邮件的转发会非常的麻烦,所以mynetworks允许的范围还是尽量要大一些,不过这个时候我们是可以使用SMTP的认证解决openrelay的问题的,使用了SMTP的认证,使得用户必须要输入用户名和密码信息。
# telnet 192.168.26.102 25
\>helo example.com
\>mail from:[email protected]
\>rcpt to:[email protected]
\>data
\>haha,I‘m xxyy
\>.---结束符
\>quit
# postconf | grep ^mynetworks---查询mynetworks默认的网段范围






(2.10)在main.cf文件中的relayhost表示的是指明我们的转发主机是哪一台,我们在vms002主机上配置relayhost转发的主机地址是192.168.26.103。我们在MailTest主机上配置好邮件服务器的相关内容,首先设置MailTest主机的inet_interfaces可以监听所有的地址,接着将参数mydestination加上$mydomain变量,并创建一个用户jerry,在MailTest主机上将服务重启一下,同时还要将MailTest主机的防火墙开放一下。此时我们在vms002主机上将服务重启完成后,虽然vms002主机并不能解析MailTest主机的域名,但是发送的邮件仍然可以正常的到达MailTest主机的jerry用户的邮箱中年,主要是因为设置了relayhost的值(图2-35),虽然vms002主机发现了[email protected]并不是自己域名内的注册用户,但是由于设置了转发地址relayhost,所以vms002主机直接将邮件发送给了MailTest主机,而MailTest主机通过mydestination发现邮件是自己域名内的注册用户,所以直接将邮件投递到了jerry用户的邮箱中了。
# firewall-cmd --add-service=smtp --permanent






(2.11)此时如果vms002主机上的root用户发送给[email protected]的邮件地址时,虽然MailTest主机的域名是example.com(图2-37),但是vms002主机自己的域名也是example.com,虽然此时我们在vms002主机上已经配置了relayhost转发的主机地址是192.168.26.103,但是最终发送的邮件会在本机的jerry用户的邮箱进行接收(图2-36)。这是由于对于vms002主机来说,虽然设置了relayhost,但是只有在发送的邮件不是vms002主机的注册用户的时候才会生效。

(2.12)如果我们希望从vms002主机发出的邮件全部都转发到MailTest主机上,那么此时我们应该将mydestination的值设置为空值即可,在vms002主机上将main.cf文件里的mydestination设置为空值后,将邮件服务重启一下。我们发现在vms002主机上并没有收到任何的邮件,但是MailTest主机上却收到了发送给[email protected]地址的邮件了。这种邮件转发的功能一般是在企业中邮件服务器数量非常多的时候使用的,例如公司有三台邮件服务器,我们并不希望邮件服务器直接接入互联网,此时我们可以配置一个邮件网关,此时邮件服务器发送的所有邮件都直接转发给邮件网关,我们在邮件网关上可以做更多的安全策略,垃圾过滤策略等,以此来保护我们内部邮件服务器的安全性。例如在Exchange服务器中五大组件之一的边缘传输服务器就是起到这个作用的。



(2.13)在main.cf文件中的alias_maps表示的是在/etc/aliases文件中配置别名信息,使得发送邮件的时候可以向同一类用户发送邮件。我们在/etc/aliases文件中定义别名all代表的是root、jerry、marry三个用户的一个集合,当给all发送邮件时[email protected]便会接收到邮件(图2-42)。如果我们希望是以常规的格式[email protected]接收到邮件,则可以设置myorigin=$mydomain,此时向all发送邮件,我们便可以在本机的所有用户邮箱中看到已经接收的邮件信息了(图2-44)。当然如果all代表的用户数量非常大时,我们可以使用/etc/userlist文件,然后将用户列表写入到userlist文件中。
# newaliases



(2.14)在main.cf文件中的home_mailbox表示的是定义用户的邮件存放的文件名,定义完成后一般这个文件会存在用户的家目录下,在默认情况下我们的邮件都是/var/spool/mail目录下存放的(图2-46)。我们设置home_mailbox的值为Mailbox,然后将邮件服务重启一下,此时便会在所有用户的家目录下产生一个Mailbox文件用来接收邮件信息(图2-48),如果我们将home_mailbox的参数修改为Maildir/后,则重启邮件服务后,所有发送的邮件便会都存放在用户的自己家目录下的Maildir目录中。
# systemctl restart postfix.service






(三)使用图形客户端收发邮件
(3.1)一般情况下,用户在收发邮件的时候都是习惯使用图形化界面操作的,在客户端接收邮件的时候一般是使用POP3或者IMAP协议,分别监听的是110端口和143端口,客户端如果需要连接到服务器接收邮件的话,则需要在vms002主机上安装dovecot软件。同时需要将pop3和imap服务的端口在防火墙打开。
# yum install dovecot -y
# grep imap /etc/services---查询imap协议使用的端口
# grep pop3 /etc/services---查询pop3协议使用的端口
# firewall-cmd --add-port=110/tcp --permanent
# firewall-cmd --add-port=143/tcp --permanent


(3.2)接着我们还需要进入/etc/dovecot/目录查看dovecot.conf配置文件,其中这里系统protocols的默认值就是这三个参数,其中lmtp表示的是本地邮件传输协议。然后可以进入到/etc/dovecot/conf.d/目录下,编辑10-auth.conf配置文件,是否禁用明文发送,这里我们应该设置为no;然后进入到/etc/dovecot/conf.d/目录下,编辑10-mail.conf配置文件设置mail_location的值为maildir:~/Maildir,设置用户接收到文件后自动将邮件接收到家目录下的Maildir/目录下,同时我们需要在vms002主机上的/etc/postfix/目录下的main.cf文件中将home_mailbox的值设置为Maildir/(图3-5-1);最后在/etc/dovecot/conf.d/目录下,编辑10-ssl.conf配置文件,由于我们并不需要SSL验证,所以设置ssl的值为no






(3.3)接着我们找到一台Win7系统,并在Win7系统上安装客户端Foxmail的客户端软件,接着我们选择手动设置连接到vms002主机的邮件服务器上,并将marry账户的邮箱创建出来。




(3.4)接着我们继续将jerry用户的邮箱也创建在Win7的邮箱客户端上,此时我们便可以尝试在图形界面的客户端上使用jerry用户向marry用户发送邮件了。



(3.5)此时我们发现marry用户在客户端工具上也能够正常的接收到jerry用户发送过来的邮件了。

—————— 本文至此结束,感谢阅读 ——————

原文地址:https://blog.51cto.com/13613726/2458737

时间: 2024-07-31 15:56:35

【我的Linux,我做主!】动手搭建Postfix邮件服务器的相关文章

linux redhat6.5 中 搭建Postfix邮件服务器

Postfix 是一种电子邮件服务器,它是由IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的.最早在1990年代晚期出现,是一个开放源代码的软件.实验需要:软件包 postfix(发送传输邮件) .dovecot(接受邮件) bind(DNS解析)实验目标:使zhangsan lisi 帐号通过postfix可以互发邮件 1:安装DNS 编辑named.conf 2:编辑named.rf

【转】Linux 下搭建Postfix邮件服务器详解:

在我自己的服务器上面搭建了邮件服务器,为的是接下来写shell脚本进行报警监控.当服务器发生意外,可以及时发送邮件服务器到邮箱. 看了两个教程,按照两个教程来搭建的,感谢原作. Linux 下搭建Postfix邮件服务器详解: 1.首先关闭sendmail服务 service sendmail stop 2.chkconfig sendmail off(关闭开机自启动) 3.修改DNS正解文件,使DNS能够解析邮箱服务 添加下面两行 mail.zhubf.com. IN A           

linux平台搭建postfix邮件服务器

一,搭建邮件服务器前准备如下: Centos 7.2 64位Postfix-2.8.12.tar.gz Postfix MTA(邮件传输代理)Dovecot-2.1.8.tar.gz IMAP 和 POP3 邮件服务器Postfixadmin-2.3.5.tar.gz 采用PHP编写的开源WEB邮箱及域名账号管理工具Roundcubemail-0.8.1.tar.gz 采用PHP编写的开源IMAP邮件WEB客户端 二,安装过程 1.安装Postfix yum -y install postfix

CentOS7下搭建postfix邮件服务器实现extmail的web访问

CentOS7.1最新1503版本最小化安装,基于lnmp,nginx与mysql为yum安装,当然没有安装php,其他编译所需要的全是官网上下载的最新稳定版,搭建的过程中出了很多错误,经过几天的实验,最后终于搭建成了,这次博客也是重新搭建,边写边搭建,如果再次出现错误的话,会将错误一并写出来. 一.  装备工作 1.防止不必要的麻烦关闭Selinux setenforce 0 关闭防火墙 systemctl stop firewalld 2.清空iptables iptables -P INP

Linux搭建Postfix邮件服务

Postfix为何物,详见:http://zh.wikipedia.org/wiki/Postfix 0.关于Postfix postfix的产生是为了替代传统的sendmail.相较于sendmail,postfix在速度,性能和稳定性上都更胜一筹.现在目前非常多的主流邮件服务其实都在采用postfix. 当我们需要一个轻量级的的邮件服务器是,postfix不失为一种选择. 1. postfix是免费的: postfix想要作用的范围是广大的Internet用户,试图影响大多数的Interne

烂泥:Postfix邮件服务器搭建之准备工作

说实话,Postfix邮件服务器的搭建是一件很麻烦的事情,需要各种软件之间的配置和调试.在写这篇文章之前,我也是搭建测试了不下于10次才算把整个流程给走通,今天刚好有时间把整个搭建过程记录下来. 在正式安装postfix之前,我们先来介绍在搭建之前所需要做的准备工作. 一.域名解析 因为邮件服务器牵涉到域名的问题比较多,所以在此我们先来介绍有关域名解析的相关配置. 我们需要在域名解析控制台添加MX.TXT和相关的A记录,在平时的域名解析过程中,使用最多的是DNSPod以及万网,下面分别一一介绍下

烂泥:Postfix邮件服务器搭建之软件安装与配置

本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb Postfix邮件服务器的搭建需要使用到几个软件,分别是cyrus-sasl.postfix.dovecot.postfixadmin.roundcubemail,只有这几个软件相互配合才能搭建一套完整的邮件服务器. PS:本次实验在centos6.5 64bit上进行. 一.软件功能介绍 cyrus-sasl.postfix.dovecot.postfixadmin.roundcub

烂泥:Postfix邮件服务器搭建之虚拟用户配置

本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 在前一篇文章<烂泥:Postfix邮件服务器搭建之软件安装与配置>中,我们介绍了psotfix邮件服务器搭建所需要的软件,以及各个软件的基本配置. 目前已经达到了通过系统用户可以登录到postfix邮件服务器,但是为了管理的方便和系统安全,我们一般是通过postfix的虚拟用户来管理邮件用户的. Postfix虚拟用户的原理是,先在系统中创建一个用户,该用户不能登录到系统,然后把邮件

Linux下使用Apache搭建Web网站服务器

Linux下使用Apache搭建Web网站服务器 实验目标 apache服务器常见概念 apache服务器安装及相关配置文件 实战: 例1:为公司内网搭建一个web服务器 例2:取消apache默认欢迎页: 例3:使用rpm搭建lamp 环境 例4, 使用别名,引用网站根目录以外的路径. 例6:打开软链接功能. 通过软件链接直接引用网站根目录以外的内容 例5,当一个目录下没有默认首页时,访问http://192.168.1.63/phpmyadmin/禁止显示目录列表 例7:通过用户认证的方式,