陈奇网络工作室

【我的Linux我做主!】手动设置Postfix邮件服务器

系统操作和维护

目录:

(一)了解邮件收发的全过程

(2)配置postfix邮件服务器

(C)使用图形客户端发送和接收邮件

(一)了解邮件收发的全过程

电子邮件是我们日常生活中经常使用的信息传输服务。我们可能使用自己公司的邮件服务器,也可能使用互联网提供的知名邮件服务器,如QQ邮箱、163邮箱、126邮箱等。而收发邮件的流程是一样的。假设有一个126邮件服务器,有两个账户,即tom@126.com和bob@126.com。这时,如果汤姆要给鲍勃发邮件,邮件会先到达126邮件服务器,并标上“to:bob@126.com”。此时,126服务器发现发送的邮件属于其注册用户。然后126邮箱会把这封邮件投递到bob的邮箱。当鲍勃进入他的邮箱时,他发现他有一封未读邮件。此时,tom用户已经完成了向bob发送邮件的需求,也就是在同一个邮件服务器中发送邮件的过程。

现在我们的环境中又多了一台QQ邮件服务器,mail.qq.com。QQ的域内还有一个域名解析服务器,ns.qq.com,对域内所有主机进行域名解析。假设QQ服务器上有一个mary@qq.com帐户。Tom@126.com将向mary@qq.com的用户发送一封标有“to:mary@qq.com”的电子邮件。这时,126服务器收到邮件后,发现mary@qq.com并不是自己服务器中的账号,所以126服务器需要知道QQ邮件服务器的IP地址。126服务器会先向自己域内的dns服务器发出查询IP地址的请求,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:mary@qq.com”邮件发送到QQ域的邮件服务器。这个时候QQ邮件服务器会发现mary是自己服务器里的一个账号,这个邮件会在这个时候投递到mary的账号。玛丽可以通过浏览器或邮件客户端查看她的帐户中的邮件。这是整个邮件服务器的工作流程。

(1.2)收发邮件时我们通常会使用一些客户端,如Outlook邮箱、Foxmail邮箱、雷鸟邮箱等。对于这些客户端工具,我们称之为MUA(邮件用户代理)。当我们发送邮件时,我们使用的协议是SMTP(简单邮件传输协议),简单邮件传输协议使用TCP端口25。在接收电子邮件时,我们使用的协议是POP3(邮局协议-版本3)或IMAP(交互式邮件访问协议)。对于POP3,我们使用TCP端口110,对于IMAP,我们使用TCP端口143。如果要搭建一个主机作为邮件服务器,需要安装相应的软件,比如postfix,sendmail,Exchange?服务器等。这些软件被称为MTA(邮件传输代理)。当126的用户tom向bob或mary发送电子邮件时,该电子邮件将首先到达126电子邮件服务器,然后126电子邮件服务器将发送该电子邮件。邮件投递的这个过程叫做MDA(邮件投递代理),是postfix中的一个过程。在客户端,我们使用的协议是POP3或者IMAP,由dovecot提供。安装后,用户可以正常接收邮件,我们称之为MRA(邮件接收代理)。126邮箱收到汤姆发来的邮件后,发现有必要将邮件转发给玛丽。这个转发过程称为中继。这时就会引入openrelay的概念,意思是一个邮件服务器不做任何限制,世界上任何人都可以向我的服务器发送和转发邮件,甚至不需要在我的邮件服务器上注册,可以直接让我的服务器发送和转发邮件。此时,我们的邮件服务器处于openrelay状态。互联网中会有一个订阅RBL(实时黑名单),将互联网中的异常邮件服务器添加到RBL的实时黑名单中。此时,如果目标邮件服务器订阅了RBL,它将不会再收到任何由我们的异常邮件服务器发送的邮件。

(2)配置postfix邮件服务器

(2.1)首先,我们在vms001主机上配置DNS服务,在/etc/unbound/local.d目录下创建aa.conf的配置文件,并填写相应的DNS解析条目。那么我们在vms002主机上设置DNS服务器为192.168.26.101后,可以发现example.com域的主机名是vms002.example.com,然后通过主机名查询可以发现vms002主机的IP地址是192.168.26.102,查询结果是正确的。

#主持人-t MX example.com

#主持人-vms002.example.com

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

(2.3)VMs 002主机的main.cf文件主要包含常用参数,具体格式如下。同时,在配置文件中定义参数时一定要从顶框开始,否则默认是上一行的延续。Myhostname是一个非常重要的参数。如果我们不设置一个具体的值,那么postconf中就会有一个默认值。默认值通常是主机名。

格式:

Key1=值1,值11

Key2=值2

Key3=$key1,value3

此时,key3=值1,值11,值3。

# postconf myhostname

# postconf | grep ^myhost

(2.4)在main.cf文件中,mydomain的默认值将取myhostname的第一个点之后的部分。如果我们通过postconf -e参数修改myhostname,修改后的结果会直接记录在main.cf文件中,而此时使用postconf查询mydomain时,我们会发现结果也会被修改到myhostname的第一个点之后的部分。如果修改是通过配置文件进行的,则需要重新启动服务才能生效,而如果修改是通过命令行进行的,则修改会立即生效。

# postconf | grep ^mydom

# post conf-e my hostname=aa . bb . cc . DD . ee . com

(2.5)在main.cf文件中,myorigin参数的主要作用是自动填写收件人邮箱的后缀名称信息。我们发现myorigin参数的默认值是$myhostname。现在,我们使用root用户向vms002主机上的jerry用户发送电子邮件。我们试着用杰里或jerry@vms002.example.com作为接收者。这时我们发现两种方式发送的邮件都可以正常看到以下邮件信息。因此,如果你遇到一个不是标准电子邮件格式的收件人,比如杰里,那么postfix将自动填充为杰里@$myorigin,即jerry@vms002.example.com。

# mail -u杰瑞

# echo ' Hello I \ \ \ ' m root ' | mail-s ' Hello Jerry ' jerry@vms002.example.com

(2.6)main . cf文件中的inet_interfaces表示当前服务监听的端口,默认情况下监听主机环回接口。此时,我们应该将其设置为监听所有接口。最后,记得通过SMTP添加防火墙。

# systemctl重新启动postfix.service

# netstat -tunlp | grep :25

#防火墙-cmd附加服务=SMTP永久

(2.7)main . cf文件中的inet_protocols表示监听协议,可以自己选择监听ipv4或者ipv6。默认情况下,它会监听所有。

(2.8)main . cf文件中的mydestination表示一个列表库,用于在邮件服务器投递需要发送的邮件时,判断邮件的收件人是否为其注册用户。例如,根用户通常可以通过使用jerry@vms002.example.com作为收件人姓名将邮件发送到杰里的邮箱。然而,当jerry@example.com被用作收件人姓名时,默认情况下它不能被发送到杰里的邮箱。如果我们希望像jerry@example.com一样以常规格式接收收件人姓名,我们需要添加mydomain参数,因为my domain代表myhostname的第一个点之后的所有内容,所以mydestination的第二行的配置是打开的(图2-20)。当在/etc/postfix/目录的main.cf文件中的mydestination参数后添加$mydomain选项并重新启动服务时,可以正常识别jerry@example.com收件人信息,邮件可以正确传递(图2-22)。如果不添加$mydomain参数,vms002邮件服务器会一直询问DNS服务器邮件的主机地址是什么,DNS服务器会回复说是vms002主机本身。转发给自己后会发现邮件后缀不是自己域名所在大陆的注册用户,会再次询问DNS,形成死循环,所以建议一般要加这个参数。

# tailf /var/log/maillog—查看邮件发送的后台日志。

# echo '你好,我是root' | mail -s \\\ '你好,杰瑞\ \ \ ' jerry@example.com

(2.9)在main.cf文件中,mynetworks表示允许openrelay的IP地址范围,mynetworks值表示默认的IP地址范围。只有在此范围内的主机才能使用openrelay进行邮件转发(图2-29)。现在我们创建一个新的主机MailTest(192.168.26.103),然后配置邮件测试主机的相关CD。此时,vms002主机上没有xxyy用户,但我们可以使用xxyy帐户在MailTest主机上发送电子邮件。我们在MailTest主机上安装了telnet软件,并编辑了发送的电子邮件信息(图2-27)。这时,我们发现jerry用户收到了vms002主机上不存在的xxyy帐户发送的电子邮件(图2-28)。不过我们平时都是用公司的邮箱收发邮件。如果我们回家,我们的IP地址可能不在我的网络范围内。这时候如果不能转发邮件就会很麻烦,所以mynetworks允许的范围要尽量大。不过这个时候我们可以用SMTP认证来解决openrelay的问题,使得用户不得不输入用户名和密码信息。

#远程登录192.168.26.102 25

\ \ \ \西洛example.com

\ \ \ \邮件from:xxyy@example.com

\ \ \ \ rcpt to:jerry@example.com

\ \ \ \数据

\ \ \ \哈哈,我\ \ \ ' xxyy

\ \ \.终结者

\ \ \ \退出

# post conf | grep ^mynetworks—-query“我的网络”的默认网段范围。

(2.10)main . cf文件中的relayhost表示我们的转发主机是哪一台,我们在vms002主机上配置的relayhost转发的主机地址是192.168.26.103。我们在MailTest主机上配置邮件服务器的相关内容。首先,我们设置MailTest主机的inet_interfaces来监听所有地址。然后我们添加带有变量$mydomain的参数mydestination,创建一个用户jerry,在MailTest主机上重启服务,打开MailTest主机的防火墙。此时,我们在vms002主机上重启服务后,虽然vms002主机无法解析MailTest主机的域名,但发送的邮件仍然可以正常到达MailTest主机的jerry用户的邮箱,主要是因为设置了relayhost的值(图2-35)。虽然vms002主机发现jerry@server.example.com不是自己域名的注册用户,但是由于设置了转发地址,vms002主机直接将邮件发送给了MailTest主机,MailTest主机通过mydestination发现邮件是自己域名的注册用户,于是直接投递到了杰瑞的邮箱。

#防火墙-cmd附加服务=SMTP永久

(2.11)此时,如果vms002上的root用户将邮件地址发送到jerry@example.com,虽然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的值设置为null,并在vms002主机上将main.cf文件中的mydestination设置为null后重新启动邮件服务。我们发现我们在vms002主机上没有收到任何邮件,但是邮件测试主机收到了发送到jerry@example.com地址的邮件。这种邮件转发功能一般用在企业有大量邮件服务器的情况下。例如,公司有三台邮件服务器,我们不希望邮件服务器直接访问互联网。这时我们可以配置一个邮件网关,邮件服务器发送的所有邮件都直接转发到邮件网关。我们可以在邮件网关上做更多的安全策略和垃圾邮件过滤策略来保护我们内部邮件服务器的安全。例如,边缘传输服务器(Exchange服务器中的五个组件之一)就扮演了这一角色。

(2.13)main . cf文件中的alias_maps是指在/etc/aliases文件中配置别名信息,这样在发送邮件时就可以将邮件发送给同类用户。我们在/etc/aliases文件中定义别名all来表示一组三个用户,即root、jerry和marry。当给所有人发送邮件时,jerry@vms002.example.com会收到邮件(图2-42)。如果我们想以正常格式接收jerry@example.com的邮件,可以设置myorigin=$mydomain,此时将邮件发送给所有人,这样我们就可以在本机所有用户的邮箱中看到收到的邮件信息(图2-44)。当然,如果all所代表的用户数量非常大,我们可以使用/etc/userlist文件,然后将用户列表写入userlist文件。

# newaliases

(2.14)main . cf文件中的home_mailbox表示定义用户邮件存储的文件名。定义完成后,该文件通常会存储在用户的主目录中。默认情况下,我们的邮件存储在/var/spool/mail目录中(图2-46)。我们将home_Mailbox的值设置为Mailbox,然后重新启动邮件服务。这时,在所有用户的主目录下都会生成一个邮箱文件来接收邮件信息(图2-48)。如果我们将home_mailbox的参数改为Maildir/,重新启动邮件服务后,所有发送的邮件都将存储在用户主目录下的Maildir目录中。

# systemctl重新启动postfix.service

(C)使用图形客户端发送和接收邮件

(3.1)一般来说,用户在收发邮件时习惯使用图形界面。在客户端接收邮件时,一般使用POP3或IMAP协议,分别监听110端口和143端口。如果客户端需要连接到服务器来接收电子邮件,它需要在vms002主机上安装dovecot软件。同时需要在防火墙中打开pop3和imap服务的端口。

# yum安装鸽笼-y

# gremapip/etc/services-查询imap协议使用的端口。

# grep pop3/etc/services--查询pop 3协议使用的端口。

# firewall-cmdadd-port=110/TCP永久

# firewall-cmdadd-port=143/TCP永久

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

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

(3.4)然后我们继续在Win7的邮箱客户端上创建jerry的邮箱。这时候我们可以尝试在图形界面客户端使用jerry的邮箱给marry的用户发送邮件。

(3.5)这时我们发现,marry用户在客户端工具上也可以正常接收jerry用户发来的邮件。

这是这篇文章的结尾,谢谢你的阅读。36860 . 68686868661

更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理官网:www.chenqinet.cn。

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3