RH358配置电子邮件传输--配置仅发送电子邮件服务

简介: RH358配置电子邮件传输--配置仅发送电子邮件服务

RH358配置电子邮件传输–配置仅发送电子邮件服务

第六章介绍如何配置电子邮件传输,但并不是整个邮件服务器的搭建,所以在金鱼哥看来,此章节实用性也一般。

RH358专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html

1. 描述电子邮件架构和空客户端

在当今的企业环境中,电子邮件是一种必不可少的沟通方式。用户通过使用web浏览器访问远程服务器上运行的基于web的电子邮件应用程序来阅读和发送电子邮件,或者通过使用专用的电子邮件客户端,如Evolution和mutt,这些客户端使用IMAP或POP3协议从本地系统连接到远程服务器。运行在Linux系统上的服务也可能发送电子邮件消息,向管理员报告状态更新和错误。

基于web的电子邮件应用程序、其他服务器进程和许多电子邮件客户机通过运行一个名为sendmail的标准助手程序或使用SMTP协议在端口25/TCP上与本地邮件服务器通信来为用户发送电子邮件消息。在Red Hat Enterprise Linux 8中,Postfix软件包提供了这个功能。

在大多数包含发送电子邮件消息的服务的系统上,管理员将Postfix配置为空客户机。空客户端运行一个本地邮件服务,该服务配置为使用SMTP协议将它发送到出站邮件中继的所有电子邮件转发。中继根据收件人域的MX DNS记录将消息发送到收件人域的邮件服务器。然后,收件人的邮件服务器将其发送到用户的邮箱。

(有时候,我们需要在自己的服务器上配置一个邮件服务器,这个邮件服务器不接受外部发过来的邮件,但是本地发送的邮件会自动路由到其他的服务器上去,因此,如果你给你自己发邮件,你将收不到)

2. 使用Postfix发送电子邮件

Postfix是一个功能强大且易于配置的邮件服务器,由postfix RPM包提供。Postfix作为一组协作程序运行,这些程序由一个称为master的守护进程协调。最重要的Postfix配置文件是/etc/postfix/main.cf。

注意:/etc/postfix目录中还包含其他Postfix配置文件。例如,另一个重要的配置文件/etc/postfix/master.cf控制由主进程启动的子服务。

修改主Postfix配置

管理/etc/postfix/main.cf配置文件可以以两种方式之一进行设置:直接使用文本编辑器编辑文件,或使用postconf实用程序。

postconf命令可以显示所有Postfix配置设置或单个设置的当前值。它可以修改设置,显示未显式设置的内置默认值,或仅显示与内置默认值不同的当前配置设置。

不带参数的postconf将显示所有/etc/postfix/main.cf的设置。

[root@host ~]# postconf
2bounce_notice_recipient = postmaster
access_map_defer_code = 450
access_map_reject_code = 554
address_verify_cache_cleanup_interval = 12h
address_verify_default_transport = $default_transport
...output omitted...

指定一组用空格分隔的特定选项,以便只显示它们的值。

[root@host ~]# postconf inet_interfaces myorigin
inet_interfaces = loopback-only
myorigin = $myhostname

重要:/etc/postfix/main.cf以美元符号($)开头的值不是文字值,而是引用另一个设置的值。在前面的示例中,myorigin设置与myhostname设置具有相同的值。这种语法简化了维护,因为值只需要在一个地方更新。

改变/etc/postfix/main.cf使用postconf -e ‘setting = value’ 命令进行设置。此命令使用指定的值编辑现有设置,否则它将在配置文件的底部使用新设置添加一行

例如,下面的命令更改了myorigin设置,以便从服务器发送的消息使用example.com作为发件人电子邮件地址的域部分,而不是服务器的主机名。

[root@host ~]# postconf -e 'myorigin = example.com'

重要:当你在/etc/postfix/main.cf中更改任何设置时,你必须重新加载(或重启)postfix服务使更改生效。当更改inet接口设置时,必须重新启动服务,重新加载是不够的。

postconf(5)手册页包括所有/etc/postfix/main.cf的概述的设置。

将Postfix配置为空客户机

要作为空客户端,主机上的Postfix必须配置为如下行为:

  • 所有由使用Postfix的sendmail助手程序发送的电子邮件都必须传递到另一个服务器上的现有邮件中继。邮件中继处理每封电子邮件,以便将其传输到每个邮件收件人的目标服务器。

  • 本地Postfix服务不得接受任何用于本地投递的电子邮件。必须拒绝这些消息,或者必须将来自本地的消息发送到邮件中继,以便在组织现有的中央邮件服务器上传递

下图说明了空客户端设置的工作方式。要发送邮件, serverX上的空客户端将所有邮件发送到公司SMTP邮件服务器smtpX.example.com

Postfix空客户端配置设置

设置 价和目的
inet_interfaces loopback-only 它将Postfix配置为仅在地址127.0.0.1或::1上侦听端口25/ TCP上的新电子邮件消息。(因此,仅适用于由空客户机本身发送的消息。)
mynetworks 127.0.0.0/8 [::1]/128 这将使Postfix将消息提交给mynetworks设置值列表中任何网络上的主机的邮件中继。此列表中的项目可以用逗号或空格分隔。
myorigin 设置为本系统用户发送的电子邮件的DNS域。 这将把发件人的电子邮件地址重写到@符号右侧,并有助于确保这些电子邮件的回复发送到正确的邮件服务器。例如,myorigin = example.com将使系统上用户alerts发送的电子邮件看起来像是由alerts@example.com发送的。
relayhost 设置为用方括号括起来的邮件中继的主机名。 这将把所有发送消息提交给该中继以进行传递。例如,relayhost = [smtp.example.com] 提交所有消息到smtp.example.com上的中继。缺省情况下,消息以纯文本形式提交到邮件中继的端口25/TCP,不进行身份验证。如果中继通过其客户机的IP地址验证其客户机,并且不需要进一步的验证,则此方法有效。
mydestination 将其设置为空字符串值。 Postfix接受发送给目标域中域列表中的用户的邮件,以便将其发送到本地邮箱。因为空客户端不接受本地发送的电子邮件,所以这应该是空的。 如果您在配置文件中完全没有设置mydestination(或使用postconf -x mydestination删除它),它将被设置为一个默认值,该值接受发送到本地主机名或Localhost的邮件,这是不希望的。

STANDARD_CONFIGURATION_README文件包含更多关于Postfix 空客户端配置的文档。安装Postfix后,额外的文档会安装在/usr/share/doc/postfix/README_FILES/目录中。

向已验证的中继提交邮件

前面的示例假设出站邮件中继不需要身份验证或根据空客户机的IP地址对其进行身份验证。然而,通常将邮件中继实现为消息提交代理message submission agent (MSA),该代理在端口587/TCP 代替 (25/TCP)上侦听其空客户端,需要TLS加密,并需要对空客户端进行身份验证。

假设您的MSA接受用户名和密码验证,您需要对空客户端上的Postfix配置做以下更改:

relayhost = [smtp.example.com]:587 (add :587 to your relayhost value)

smtp_use_tls = yes to use TLS

smtp_sasl_auth_enable = yes to use authentication

smtp_sasl_security_options = noanonymous to require authentication and allow username/password as a method

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd to use /etc/postfix/sasl_passwd to store the user name and password for authentication

编辑/etc/postfix/sasl_passwd文件,以包含relayhost的定义以及以冒号分隔的用户名和密码,这些是向MSA进行身份验证所需的。在本例中,relayuser@example.com是用户名,mysecretpassword是重新发送邮件的密码:

[smtp.example.com]:587 relayuser@example.com:mysecretpassword

运行postmap /etc/postfix/sasl_passwd,用您的密码更新Postfix配置。确保postmap创建的/etc/postfix/sasl_passwd和/etc/postfix/sasl_passwd.db文件由root用户和root组拥有,并且只能由root读取。

3. 电子邮件传输故障排除

systemd日志记录了所有与postfix.service相关的操作。此外,/var/log/maillog日志文件包含有关任何邮件服务器相关操作的信息。

当消息没有被传递到远程SMTP服务器时,使用postqueue命令。postqueue -p命令显示已排队的所有外发邮件的列表。postqueue -f命令立即尝试再次传递所有排队的消息。Postfix通常每小时重新发送一次排队的消息,直到它们被接受或过期

如果您的电子邮件被发送到一个为客户端提供POP3或IMAP访问的服务器上,您可以安装mutt包并使用mutt命令来检索您的邮件。下面的命令连接到IMAP上的imap.lab.example.com,。提示您进行身份验证,并在您的终端窗口中显示该服务器上的消息:

[user@host ~]$ mutt -f imaps://imap.lab.example.com

4. 课本练习

[student@workstation ~]$ lab smtp-sendonly start

该命令确保DNS、SMTP和IMAP服务对lab.example.com SMTP中继服务器提供支持。

在servera上安装并配置Postfix作为空客户端,以便通过smtp.lab.example.com中继邮件。在发送的电子邮件中使用lab.example.com作为组织的域名。

通过使用支持imap的邮件客户端从imap.lab.example.com检索测试电子邮件。 (作为用户和邮件收件人的student,IMAP密码为student)。

1. 安装postfix包。

[root@servera ~]# yum -y install postfix

2. 使用relayhost指令配置Postfix将所有消息传递到公司邮件中继。

将公司邮件中继的主机名用方括号括起来,以防止DNS服务器查找MX记录

[root@servera ~]# postconf -e 'relayhost=[smtp.lab.example.com]'

3. 将服务器Postfix空客户端配置为只中继来自本地系统的邮件。

[root@servera ~]# postconf -e 'inet_interfaces=loopback-only'
[root@servera ~]# postconf -e 'mynetworks=127.0.0.0/8 [::1]/128'

4. 配置空客户端将所有外发消息的发件人地址重写发送到公司域lab.example.com。

[root@servera ~]# postconf -e 'myorigin=lab.example.com'

5. 禁止Postfix空客户端将任何邮件发送到本地帐户。

配置空客户端以将所有邮件转发到中继服务器。将mydestination选项设置为空值以实现此目的。

[root@servera ~]# postconf -e 'mydestination='

6. 在服务器上启用并启动Postfix。

[root@servera ~]# systemctl enable --now postfix

7. 编写测试邮件。

在servera.上打开一个新的终端。通过向student@lab.example.com发送以servera null client为主题并以null client test为内容的消息来测试空客户端配置。mail命令使用Postfix提供的/usr/sbin/sendmail来传输电子邮件

mail -s 'servera null client' student@lab.example.com
null client test
.
EOT

8. 使用mutt命令行邮件客户端来验证邮件是否已发送到指定的收件人。

使用IMAPS协议访问在IMAP上运行的imap.lab.example.com。以student用户身份向IMAP服务器进行身份验证,密码为student。

#在imap.lab.example.com上为学生阅读邮件。使用mutt命令行邮件客户端,使用IMAPS协议
[student@servera ~]$ mutt -f imaps://imap.lab.example.com
#该命令提示您接受主机SSL证书,然后提示您输入用户名和密码。键入a以永久接受该证书。
Username at imap.lab.example.com: student
Password for student@imap.lab.example.com: student

#验证测试消息是否student到达学生用户的电子邮件帐户。
#请阅读邮件并确认发件人的电子邮件地址为student@lab。example.com。
q:Quit d:Del u:Undel s:Save m:Mail r:Reply g:Group ?:Help
...
1 F May 20 (0.4K) servera null client
q

完成实验

[student@workstation ~]$ lab smtp-sendonly finish

总结

  • 介绍电子邮件架构和空客户端。
  • 如何使用Postfix发送电子邮件。
  • 电子邮件传输的Trouble Shooting。
  • 若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。

目录
相关文章
|
5月前
|
存储 数据安全/隐私保护
网络基础知识:FTP命令及应答码
网络基础知识:FTP命令及应答码
136 0
|
网络协议 网络安全 数据安全/隐私保护
从报文交互看Telnet协议的安全系数
从报文交互看Telnet协议的安全系数
从报文交互看Telnet协议的安全系数
udp回显客户端发送的数据
这里让客户端给服务端发送的数据被服务端自动发回来 客户端: import socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: client_socket.
1027 0
|
数据安全/隐私保护
|
关系型数据库 MySQL 测试技术
|
C# 数据安全/隐私保护
|
移动开发 C# 数据安全/隐私保护