postfix(邮件服务器)说明与postconfig命令详解

  • postfix(邮件服务器)

    • 邮件的整个收发流程
    • 邮件相关协议
  • 邮件相关名词

  • Postfix介绍

  • 配置postfix

    • postfix的配置文件结构
  • postfix的基本配置说明

    • 方法一,修改配置文件
  • 方法二,通过命令(postconfig)写入配置文件

  • postfix常用参数说明

    • 1.myhostname
  • 2.mydomain

  • 3. relay_domains

  • 4.myorigin

  • 5. mydestination

  • 6. notify_classes

  • 7.relayhost

    • 8.mynetworks
  • 9.inet_interfaces (设置监听端口)

  • 10.local_transport

  • 11.sasl

  • postfix不常用参数说明

    • postfix的UCE(unsolicited commercial email)控制
  • check_client_access

  • HELO

  • check_helo_access

  • RFC 821信头限制

  • check_sender_access maptype:mapname

  • reject_non_fqdn_sender

  • reject_unknown_recipient_domain

  • reject_non_fqdn_recipient

  • posftfix的性能控制

  • 使用图形客户端收发邮件

postfix(邮件服务器)

=============================================================================

邮件的整个收发流程


邮件相关协议

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议, 工作在TCP的25端口。它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。跟名字一样smtp非常简单,无法做到认证,邮件存放等功能。

POP3(Post Office Protocol)邮局协议第3版,工作在TCP的110端口。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。POP 协议支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是PC机或 MAC。一旦邮件发送到 PC 机或MAC上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。

IMAP4(Internet Mail Access Protocol)因特网邮件访问协议第4版,工作在TCP的143端口。IMAP4协议与POP3协议一样也是规定个人计算机如何访问网上的邮件的服务器进行收发邮件的协议,但是IMAP4协议同POP3协议相比更高级。IMAP4支持协议客户机在线或者离开访问并阅读服务器上的邮件,还能交互式的操作服务器上的邮件。IMAP4协议更人性化的地方是不需要像POP3协议那样把邮件下载到本地,用户可以通过客户端直接对服务器上的邮件进行操作(这里的操作是指:在线阅读邮件 在线查看邮件主题 大小 发件地址等信息)。用户还可以在服务器上维护自己邮件目录(维护是指移动)新建 删除重命名共享 抓取文本 等操作)。IMAP4协议弥补了POP3协议的很多缺陷。

在这里插入图片描述

邮件相关名词

一般情况下,我们把电子邮件程序分解成传输代理,投递代理和用户代理。用户代理用来接受用户的指令,将用户的信件传送至信件传输代理.而投递代理则从信件传输代理取得信件传送至最终用户的邮箱.当用户试图发送一封电子邮件的时候,他并不能直接将信件发送到对方的机器上,用户代理必须试图去寻找一个信件传输代理,把邮件提交给它。信件传输代理得到了邮件后,首先将它保存在自身的缓冲队列中,然后,根据邮件的目标地址,信件传输代理程序将找到应该对这个目标地址负责的邮件传输代理服务器, 并且通过网络将邮件传送给它。对方的服务器接收到邮件之后,将其缓冲存储在本地,直到电子邮件的接收者查看自己的电子信箱。

1)MTA(Mail Transfer Agent)

邮件传输代理工具,通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。常用的MTA有:

SendMail:邮件的鼻祖。

Qmail:一个数学家开发,作为Linux下面主流的邮件系统内核,大量著名的商业邮件系统都是在Qmail内核下开发,比如Hotmail。

Postfix:IBM安全专家开发,模块化设计,并且比sendmail兼容效率更高。

Exim:是基于GPL协议的开放源代码软件,由英国剑桥大学的Philip Hazel开发。

Exchange:微软公司的一套电子邮件服务组件,是个消息与协作系统。

2)MDA(Mail Delivery Agent)

邮件投递代理,投递代理则从信件传输代理取得信件传送至最终用户的邮箱。常用的MDA有:

ProcMail:Postfix默认的邮件投递工具。

MailDrop:相对比较专业的投递代理工具。

3)MRA(Mail Retrieval Agent)

邮件取回代理,使用POP3或IMAP4协议工作。一般用于从用户信箱取回邮件到邮件用户代理客户端。常用的MRA有:

Dovecot:是一个开源的支持IMAP和POP3协议的收邮件服务器(自带SASL功能)。

4)MUA(Mail User Agent)

邮件用户代理工具。常用的MUA有:

OE:Windows旧版本自带的工具。

Outlook:Office套件带的工具。

FoxMail:腾讯公司的邮件客户端工具。

Thunderbird:雷鸟是Linux下的客户端工具。

Mutt:Linux下的字符界面客户端工具。

5)WebMail

基于Web的电子邮件收发系统,扮演邮件用户代理角色,一般而言,WebMail系统提供邮件收发、用户在线服务和系统服务管理等功能。WebMail的界面直观、友好,不需要借助客户端,免除了用户对E-mail客户软件(如:Foxmail、Outlook等)进行配置时的麻烦,只要能上网就能使用WebMail,方便用户对邮件进行接收和发送。WebMail使得E-mail在Internet上的应用广泛。常用的Webmail有:

Openwebmail:台湾开发的。

Squirrelmail:Centos系统自带。

Extmail,Extman:国内开发的也被称为EMOS系统。

6)Mail Relay

邮件中继,先要明白一个概念,一封邮件只要不是发送给本域内用户的,比如从当前域发送到另一个域,或从当前域发送到另一个域然后转到另外一个域的,这就属于中继。但是一般邮件服务器都会允许本地或本域内的用户进行中继。不然就只能在本域内发送邮件而不能给外部邮箱发送邮件。Postfix默认只能基于IP地址做中继认证。

7)SASL(simple authentication secure layer)

简单认证安全层,是一种用来扩充C/S模式验证能力的机制。在Postfix可以利用SASL来判断用户是否有权使用转发服务,或是辨认谁在使用你的服务器。

常用的Sasl有:

cyrus-sasl:Redhat系列自带的SASL认证框架。

dovecot-sasl:dovecot组件带的SASL认证框架。

courier-authlib:这是一个带有MTA,MDA以及SASL认证的软件,但是一般只是用它的SASL功能。

Postfix介绍

Postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。是为了改良sendmail邮件服务器而产生的。其特点:

  1. postfix是免费的:postfix想要作用的范围是广大的Internet用户,试图影响大多数的Internet上的电子邮件系统,因此它是免费的。

  2. 更快:postfix在性能上大约比sendmail快三倍。一部运行postfix的台式PC每天可以收发上百万封邮件。

  3. 兼容性好:postfix是sendmail兼容的,从而使sendmail用户可以很方便地迁移到postfix。Postfix支持/var[/spool]/mail、/etc/aliases、 NIS、和 ~/.forward 文件。

  4. 更健壮:postfix被设计成在重负荷之下仍然可以正常工作。当系统运行超出了可用的内存或磁盘空间时,postfix会自动减少运行进程的数目。当处理的邮件数目增长时,postfix运行的进程不会跟着增加。

  5. 更灵活:postfix是由超过一打的小程序组成的,每个程序完成特定的功能。你可以通过配置文件设置每个程序的运行参数。

6.安全性:postfix具有多层防御结构,可以有效地抵御恶意入侵者。如大多数的postfix程序可以运行在较低的权限之下,不可以通过网络访问安全性相关的本地投递程序等等。

Postfix服务器工作原理

在这里插入图片描述

邮件服务器工作在两种情况下:一种是相同域内转发;二是不同域内转发。所以MTA(postfix)内部一般都会有服务端(smtpd)、客户端(smtp)和MDA。smtpd邮件服务器非常简单,只负责转发邮件别的什么功能也没有并且发送方不管是什么地址都可以从smtpd服务器转发到目标地址。

根据上图分别阐述一下邮件服务器两种工作机制:

相同域内转发:用户A通过工具连接到SMTPD服务端,然后发送一份邮件,而目标收件人是B用户。当SMPTD收到邮件后判断发现是同域内的用户,就会直接启动MDA进程把邮件投进用户邮箱中,当用户通过MUA工具(如mail命令)就可以直接收到邮件。

不同域内转发:用户A通过工具连接到SMTPD服务端,然后发送一份邮件,而目标收件人是C用户。当SMPTD收到邮件后判断发现是不同域内用户,就会启动SMTP客户端来转发此邮件。SMTP收到请求后就会解析对方MX记录,然后连接对方SMTPD服务器并把邮件发送过去。当对方SMTPD发现此邮件就是本域内的邮件后也会调用MDA进程把邮件投递进用户邮箱中,当用户通过MUA工具(如mail命令)就可以直接收到邮件。

配置postfix


配置过程中,建议开启smtp的认证功能(必须输入用户名和密码),否则任意一封邮件都会转发到你的邮箱,容易被人写一个脚本一直往你邮箱发送垃圾内容,导致你邮箱无法正常使用。

postfix一般都是已经装好并启动起来的,所以只需要修改main.cf即可,查看是否启动:systemctl is-active postfix 为active即是启动的:

在这里插入图片描述

postfix可以查看所有的选项有800多个,但是main.cf里只有很少的几个条目,格式为:

key1=value1,value11(多个参数用,隔开)

key2=value2

key3=key1,value3(也可以调用参数key*)

注:每行的内容都要顶头写,不能有空格,负责会认为是上一行的延续。

postfix的配置文件结构

postfix的配置文件位于/etc/postfix下,安装完postfix以后,我们可以通过ls命令查看postfix的配置文件:

[root@mail postfix]# ls

install.cf main.cf master.cf postfix-script

这四个文件就是postfix最基本的配置文件,它们的区别在于:

mail.cf:是postfix主要的配置文件。

Install.cf:包含安装过程中安装程序产生的postfix初始化设置。

master.cf:是postfix的master进程的配置文件,该文件中的每一行都是用来配置postfix的组件进程的运行方式。

postfix-script:包装了一些postfix命令,以便我们在linux环境中安全地执行这些postfix命令。

postfix的基本配置说明

有两种方法,第一种是直接在配置文件中修改,第二种是通过命令写入配置文件。

方法一,修改配置文件

postfix大约有100个配置参数,这些参数都可以通过main.cf指定。配置的格式是这样的,用等号连接参数和参数的值。如:myhostname = mail.mydomain.com

等号的左边是参数的名称,等号的右边是参数的值; 当然,我们也可以在参数的前面加上$来引用该参数,如:myorigin = $myhostname

虽然postfix有100个左右的参数,但是postfix为大多数的参数都设置了缺省值,所以在让postfix正常为你服务之前,你

只需要配置为数不多的几个参数。下面我们一起来看一看这些基本的postfix参数。需要注意的是,一旦你更改了main.cf文件的内容,则必须运行

postfix reload命令使其生效或者重启服务:systemctl restart postfix.service

方法二,通过命令(postconfig)写入配置文件

实现原理其实和直接编辑配置文件写入配置文件一样,这个只是通过命令把一些常用配置文件写入文件中更方便一点而已,格式为:postconfig -e “参数” ,比如:[root@server common]# postconf -e "myorigin = example.com"#指明发件人所在域名

postfix常用参数说明

注:下列参数适用于上述的方法一和方法二。

1.myhostname

myhostname参数指定运行postfix邮件系统的主机的主机名。缺省地,该值被设定为本地机器名。你也可以指定该值,需要注意的是,要指定完整的主机名。如:myhostname = mail.domain.com

2.mydomain

mydomain参数指定你的域名,在通过Postfix发送邮件的时候,如果From字段不完整,Postfix会根据myorigin的值将地址补全为 *@mail.100p.com,缺省地,postfix将myhostname的第一部分删除而作为mydomain的值。你也可以自己指定该值,如:mydomain = domain.com

3. relay_domains

relay_domains参数是设置可转发的邮件域名,这个参数决定了Postfix 可以帮忙传递哪些域的邮件,如:

#relay_domains = $mydestination, 126.com

4.myorigin

myorigin参数指明发件人所在的域名(主机名)。如果你的用户的邮件地址为 user@domain.com ,则该参数指定@后面的域名。

缺省地, postfix使用本地主机名作为myorigin,但是建议你最好使用你的域名,因为这样更具有可读性。比如:安装postfix的主机为 mail.domain.com则我们可以这样指定myorigin:myorigin = domain.com

当然我们也可以引用其他参数,如:myorigin = $mydomain

5. mydestination

mydestination参数指定postfix接收邮件时收件人的域名,换句话说,也就是你的postfix系统要接收什么样的邮件,如果收到的邮件既不符合转发规则,又不符合接受规则,则拒绝收信。为空则表示接受所有人的邮件:mydestination= ,也可以指定后缀域名,比如:你的用户的邮件地址为 mydestination=user@domain.com, 也就是你的域为domain.com, 则你就需要接收所有收件人为user_name@domain.com的邮件。与myorigin一样,缺省地,postfix使用本地主机名作为mydestination。如:mydestination = $mydomain ,mydestination = domain.com

6. notify_classes

在postfix系统中,必须指定一个postfix系统管理员的别名指向一个用户, 只有这样,在用户遇到问题时才有报告的对象,postfix也才能将系统的问题报告给管理员。notify_classes参数就是用来指定向postfix管理员报告错误时的信息级别。共有以下几种级别:

  • bounce:将不可以投递的邮件的拷贝发送给postfix管理员。出于个人隐私的缘故,该邮件的拷贝不包含信头。

  • 2bounce:将两次不可投递的邮件拷贝发送给postfix管理员。

  • delay:将邮件的投递延迟信息发送给管理员,仅仅包含信头。

  • policy:将由于UCE规则限制而被拒绝的用户请求发送给postfix管理员,包含整个SMTP会话的内容。

  • protocol:将协议的错误信息或用户企图执行不支持的命令的记录发送给postfix管理员。同样包含整个SMTP会话的内容。

  • resource:将由于资源错误而不可投递的错误信息发送给postfix管理员,比如:队列文件写错误等等。

  • software:将由于软件错误而导致不可投递的错误信息发送给postfix管理员。缺省值为:notify_classes = resource, software

7.relayhost

relayhost理解为指定收件人吧!参数可以是ip也可以是hostname,如

relayhost=1.1.1.1 #(ip)

relayhost=ccx #(hostname查看主机名,要完整的)

8.mynetworks

mynetworks参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问。你可以用标准的A、B、C类网络地址,也可以用CIDR(无类域间路由)地址来表示,如:192.168.1.0/24 ,192.168.1.0/26(多个地址用逗号隔开即可)

9.inet_interfaces (设置监听端口)

inet_interfaces 参数指定postfix系统监听的网络接口,或者理解为postfix使用的ip,如果对文件不做修改,则默认监听127.0.0.1的邮件收发。缺省地,postfix监听所有的网络接口。如果你的postfix运行在一个虚拟的ip地址上,则必须指定其监听的地址。如:

inet_interfaces = all #所有

inet_interface = 192.168.1.1 #指定ip

10.local_transport

(默认值:local:$myhostname)默认的邮件传递传输和下一跳目的地,用于最终传递到使用$mydestination列出的域,以及匹配$myhostname)默认的邮件传递传输和下一跳目的地,用于最终传递到使用$mydestination列出的域,以及匹配inet_interfaces$proxy_interfaces[ipaddress]目标。该信息可以用transport(5)表格推翻。

也可以简单理解为,如果是错误参数,就发送到指定服务器,而且这个指定服务器也可以设置为空,格式如下:

local_transport = error:fdsjf(error:这是任意输入的内容)

11.sasl

sasl是一种认证方式,如 smtp不需要SASL认证时,设置为no。

smtpd_sasl_auth_enable = no

postfix不常用参数说明

postfix的UCE(unsolicited commercial email)控制

所谓UCE控制就是指控制postfix接收或转发来自于什么地方的邮件。

缺省地,postfix转发符合以下条件的邮件:

来自客户端ip地址符合$mynetworks的邮件。

来自客户端主机名符合$relay_domains及其子域的邮件。

目的地为$relay_domains及其子域的邮件。

缺省地,postfix接受符合以下条件的邮件:

目的地为$inet_interfaces的邮件。

目的地为$mydestination的邮件。

目的地为$virtual_maps的邮件。

但是我们也可以通过下面的规则来实现更强大的控制功能:

1. 信头过滤

通过header_checks参数限制接收邮件的信头的格式,如果符合指定的格式,则拒绝接收该邮件。可以指定一个或多个查询列表,如果新邮件的信头符合列表中的某一项则拒绝该接收邮件。如:

header_checks = regexp:/etc/postfix/header_checks

header_checks = pcre:/etc/postfix/header_checks

缺省地,postfix不进行信头过滤。

2.客户端主机名/地址限制

通过smtpd_client_restrictions参数限制可以向postfix发起SMTP 连接的客户端的主机名或ip地址。可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:

reject_unknown_client:如果客户端的ip地址在DNS中没有PTR记录则拒绝转发该客户端的连接请求。可以用

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

面试题总结

其它面试题(springboot、mybatis、并发、java中高级面试总结等)

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
讲义、实战项目、讲解视频,并且会持续更新!**

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

面试题总结

其它面试题(springboot、mybatis、并发、java中高级面试总结等)

[外链图片转存中…(img-VxPZkS22-1713270316435)]

[外链图片转存中…(img-sxy9TY3d-1713270316435)]

[外链图片转存中…(img-1jVKwFYA-1713270316435)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 28
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是安装和配置postfix和dovecot的命令: 1. 安装postfix: ``` sudo apt-get update sudo apt-get install postfix ``` 2. 配置postfix: ``` sudo nano /etc/postfix/main.cf ``` 在文件中添加以下内容: ``` myhostname = example.com mydomain = example.com myorigin = $mydomain inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, $mydomain mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 home_mailbox = Maildir/ smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) smtp_tls_security_level = may smtpd_tls_security_level = may smtp_tls_note_starttls_offer = yes smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom ``` 保存并退出文件,然后重新启动postfix: ``` sudo service postfix restart ``` 3. 安装dovecot: ``` sudo apt-get install dovecot-core dovecot-imapd dovecot-pop3d ``` 4. 配置dovecot: ``` sudo nano /etc/dovecot/conf.d/10-auth.conf ``` 找到以下行: ``` #disable_plaintext_auth = yes ``` 取消注释并将其更改为以下内容: ``` disable_plaintext_auth = no ``` 保存并退出文件。 然后打开以下文件: ``` sudo nano /etc/dovecot/conf.d/10-mail.conf ``` 找到以下行: ``` mail_location = mbox:~/mail:INBOX=/var/mail/%u ``` 将其更改为以下内容: ``` mail_location = maildir:~/Maildir ``` 保存并退出文件。 最后启动dovecot: ``` sudo service dovecot restart ``` 现在你已经成功安装和配置postfix和dovecot,你可以使用邮件客户端测试它是否正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值