邮件服务器-postfix服务器

2023-11-11

Postfix 是一种电子邮件服务器,它是由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的。最早在1990年代晚期出现,是一个开放源代码的软件。

sendmail由于出现的比较早,但是各方面的问题也比较突出,postfix就是为了替代sendmail的缺点而出现的,postfix 邮件服务器的优点很明显:

  1. 开源的,要知道开源的即是免费的

  2. 速度更快,比sendmail×××倍

  3. 兼容性好,与sendmail兼容,两者互相迁移很方便。

  4. 更能干,在重负荷之下仍然能正常工作,当超负荷之后,他会自动调整

  5. 更灵活,不同于sendmail一体化的设计,postfix使用模块化的设计,各个模块专注于自己的工作。

  6. 安全性,具有多层的防御结构。

postfix的模块有哪些呢?

  1. smtpd 用于响应用户的请求

  2. cleanup 用于检测语法

  3. pickup 用于分检邮件

  4. smtp 类似于客户端,传输邮件

  5. qmgr 队列管理器 用于不同邮件状态的管理。

postfix由这些还有其他的一些模块来进行服务,各个模块自己完成自己的任务,他们由一个master进程统一调度

postfix的四种邮件队列?

  1. maildrop 本地邮件存放处

  2. incoming 放置正在到达或者队列管理进程尚未发现的邮件

  3. active 放置已经打开了正准备投递的邮件,当然它是由长度限制的。

  4. deferred 放置不能被投递的邮件

队列管理进程仅仅在内存中保留active队列,并且限制其长度。

postfix 对邮件风暴的处理

当有新的邮件到达的时候,postfix进行初始化,此时postfix同时只接受两个并发连接请求,当邮件投递成功后,可以同时接收的并发连接就会缓慢地增长,一直到可配置的值

当系统资源消耗已经达到不能承受的负载,就会停止并发连接数量的增长,或者postfix在处理邮件过程中遇到问题,数量也会减少。

当接收到的新邮件的数量,超过它的投递能力时,postfix会停止投递deferred队列中的邮件,去处理新接收到的邮件,因为处理新邮件的延迟小于处理defferred队列中的邮件。

postfix 对无法投递的邮件的处理

当第一次发送失败,postfix会给该邮件,贴上一个将来的时间有票,在达到这个时间之前,不会再处理该类邮件,到到达这个时间时,进行投递,再次失败,将再次贴上一个双倍与第一次的邮件将来时间的邮票,以此类推,进行多次尝试之后,放弃该邮件,回复用户错误信息

postfix对于目标不可达的目的邮件的处理

postfix内存之中保存了一个有长度限制的不可达的地址列表,避免想这些地方进行邮件投递

postfix的安全性

  1. 动态分配内存,放置系统缓冲区溢出

  2. 把大邮件分割成几块处理,投递时在进行重组

  3. postfix的各个进程互相不进行控制,只接受master主进程的控制

  4. postfix 的队列文件有其特殊格式,只能被postfix本身识别

postfix邮件服务对于邮件的处理过程:

接收的过程: 当接受新邮件时,新的邮件首选在incoming队列停留,并进行处理

  1. 对于来自与本地的邮件:local进程负责接收,并放置邮件于maildrop队列中,然后pickup进程对其进行完整性检测,maildrop目录的权限必须进行设置 避免用户删除其他用户的邮件

  2. 对于网络的邮件:smtpd 进程负责接收邮件,并且进行安全性检测

  3. postfix进程会自己产生邮件,用于将邮件的不可投递信息返回给发件人,这些工作由bounce后台程序产生

  4. postfix 产生邮件,提示postfix管理员 postfix运行过程中出现问题

  5. cleanup进程,对邮件进行处理,添加信头中丢失的Form信息。也就是将地址重写为标准的user@’域名‘ 的格式,从信头中抽取收件人的地址,投入到incoming队列中,请求处理该信件,请求地址重写进程将收件人地址转换为标准的user@‘域名’的格式

邮件的投递过程

上面的部分结束之后,邮件已经到达incoming的队列了,接下来进行邮件的投递。

  1. 邮件到达邮件队列管理进程,他将办含有队列文件路径信息,发件人地址,收件人地址的投递请求发送给投递代理。

  2. 与此同时,邮件队列管理进程维护者deferred,active队列,不同状态的邮件放置于的队列

  3. 针对于发送成功与失败,队列管理进程与rewrite,与bounce后台程序练习,成功的给rewrite进行地址解析,失败的给bounce返回信息给用户

  4. 检查成功的邮件送给投递代理进程,local和smtpd

实验:linux中实现postfix邮件服务器

实验环境:linux 虚拟机5.4

1.安装postfix。

[root@mailServer]# rpm -ivh postfix-2.3.3-2.1.el5_2.i386.rpm

[root@mailServer]# rpm -ivh system-switch-mail-0.5.25-12.noarch.rpm

//用于转换邮件服务器的工具,系统默认sendmail作为邮件服务器,转换为postfix

2.选择postfixmail

在这里插入图片描述

  1. 配置文件

模块管理文件 /etc/postfix/master.cf

主配置文档 /etc/postfix/main.cf

Postconf -d 查看默认的参数值

Postconf -n 查看新的参数值

Postconf -e 编辑

编辑main.cf文件

69myhostname = mail.163.com //本地域名

77mydomain = 163.com //自己的域名

93myorigin = $mydomain

//实现地址伪装,将邮件的真实来源改正为myorigin所指的域名中。

110inet_interfaces = localhost //只接受自己的用户

107inet_interfaces = all //监听所有

156mydestination = m y h o s t n a m e , l o c a l h o s t . myhostname, localhost. myhostname,localhost.mydomain, localhost, $mydomain

//哪些是本地信件,允许本地作用域发送邮件。

在这里插入图片描述

观察日志信息,如果咩有打开main.cf 156行的注释

在这里插入图片描述

邮件状态进入到了 deferred,发送失败

在这里插入图片描述

配置本地用户可以发送邮件。则发送成功!

Postfix mail的中继!!

255mynetworks = 168.100.189.0/28, 127.0.0.0/8

在所标记网段中 的 计算机发来的邮件允许中继。

Postfix mail的中安全认证!

broken_sasl_auth_clients= yes

smtpd_sasl_auth_enable= yes

smtpd_sasl_security_options= noanonymous //不允许匿名账号发送

#smtpd_sasl_application_name= smtpd //smtpd

#smtpd_client_restrictions= permit_sasl_authenticated,reject//经过验证可以连接,没经过

验证拒绝

#smtpd_client_restrictions= permit_sasl_authenticated //限制用户连接验证不验证都连

smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

将他们写入postfix的主配置文件中

在这里插入图片描述

在这里插入图片描述

[root@mail~]# service saslauthd restart

[root@mail~]# vim /usr/lib/sasl2/smtpd.conf

当然此时如果使用不存在的账号,来测试是否能通讯的话,还是能够发送邮件,那是因为身份验证不是强制性的。

673smtpd_client_restrictions = permit_sasl_authenticated,reject //更改配置文件

还是需要 auth login 进行验证账号密码 均为base64 编码

在这里插入图片描述

拓展:

SquirrelMail是一套基于标准的,采用PHP4开发Webmail 邮件系统。它内置纯PHP支持的IMAP和SMTP协议,所有页面都遵循HTML4.0标准(没有使用JavaScript支持),以便最大限度兼容更多浏览器上。它对系统要求非常低,并且安装和配置非常容易。SquirrelMail具备一个客户端邮件程序所应拥有的一切功能,包括支持增强型的MIME、地址薄、文件夹操作等等功能。Outlook皮肤主题。

[root@mail~]# yum install squirrelmail

[root@mail~]# cd /var/www/html/

[root@mailhtml]# ln -s /usr/share/squirrelmail mail

[root@mailsqurrmail]# cd /var/www/html/squrrmail

[root@mailsqurrmail]# ./conf.pl
在这里插入图片描述

与性能有关的配置

在这里插入图片描述

服务器设置

在这里插入图片描述

全局配置

在这里插入图片描述

语言选项

在这里插入图片描述

登陆测试

在这里插入图片描述

在这里插入图片描述

当登陆之后,提示错误,错误信息是没有imap服务器,也就是没有邮件接收服务器,而linux中的邮件接收服务器是dovecot,所以安装dovecot,并启动dovecot 服务之后

在这里插入图片描述
在这里插入图片描述

673#smtpd_client_restrictions = permit_sasl_authenticated,reject

编辑配置文件,注释行

邮件可以发送出去了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

邮件服务器-postfix服务器 的相关文章

  • C++串口问题

    我在 Visual Studio 上使用 C 连接到任何串行端口 想要与 Arduino 交换 时遇到问题 我正在使用串行类 http www arduino cc playground Interfacing CPPWindows在 Ar
  • 在 Windows 11 上无需管理员权限即可运行 Visual Studio 2022

    我在 Windows 11 上安装了 Visual Studio 2022 当我启动它时 它始终以管理员权限运行 我想在没有管理员权限的情况下运行它 我的 Windows 只有一个帐户 该帐户具有管理员权限 x 我做了什么 确认VS2022
  • 在 Windows 2008 上将 myprogram.exe 作为服务运行时出现问题

    MyProgram exe 是用来侦听来自管道的请求并使用命令提示符使其工作完美 但我尝试使用 Windows 服务来工作但没有成功我在 Windows Server 2008 Enterprise 上尝试了以下步骤 gt sc creat
  • RabbitMq 和“致命错误:握手失败 -handshake_decode_error”

    我正在使用 Windows Server 2012 Erlang 19 2 和 RabbitMq 3 6 6 我在使用 TLS 配置端点之间的连接时遇到问题 我已经尝试了所有关于 SO 的答案 以及所有 RabbitMq 文档here ht
  • 为什么 cygwin 无法读取我的主目录中的 .ssh/config 文件?

    我正在使用 cygwin 并且正在尝试设置 ssh config 文件 Cygwin 的文件夹位于我的 C 驱动器中 我的主目录是 C Users USER 我注意到 当我编辑 C Users USER ssh config 时 cygwi
  • 使用 IDLE 编辑的 .py 文件消失了

    我曾经有过Edit with IDLE当我右键单击时的选项 py文件 但我多次卸载 重新安装以使某些东西正常工作 但现在它消失了 我检查了注册表HKEY CLASSES ROOT and HKEY LOCAL MACHINE对于价值低于Py
  • 批处理文件 FOR /f 标记

    任何人都可以逐行准确解释以下代码是如何工作的 我真的迷路了 我一直在尝试学习如何使用 FOR 命令 但我不明白这一点 echo off for f tokens delims f in myfile do set line f call p
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 如何在 C++ 中急于提交分配的内存?

    总体情况 带宽 CPU 使用率和 GPU 使用率都极其密集的应用程序需要每秒从一个 GPU 向另一个 GPU 传输约 10 15GB 的数据 它使用 DX11 API 来访问 GPU 因此上传到 GPU 只能在每次上传都需要映射的缓冲区中进
  • 在 Cygwin 软件包列表中找不到 Openssl

    这里说的是https github com joyent node wiki Building node js on Cygwin Windows https github com joyent node wiki Building nod
  • Vim 在 Mingw 上表现异常

    我在 MinGW 4 6 2 上的 Vim 表现得很奇怪 例如 在插入模式下按 Backspace 会删除字符 但我必须用箭头键移动光标才能删除的字符消失 而且它也会使我退出插入模式 另一个例子 按 Del 删除字符有时会生成奇怪的字符 例
  • 如何使用来自 Microsoft-Windows-NDIS-PacketCapture 提供程序的实时 ETW 事件?

    更大的问题是一般如何使用实时 ETW 网络堆栈事件 但我特别感兴趣Microsoft Windows NDIS PacketCapture 提供程序 所有其他网络堆栈提供程序都部分工作 但 NDIS PacketCapture NDIS P
  • 需要 TensorFlow 依赖项。如何在 Windows 上运行 TensorFlow

    我有兴趣让 TensorFlow 在 Windows 上运行 但目前我意识到这是不可能的 因为某些依赖项无法在 Windows 上使用 例如巴泽尔 之所以出现这种需求 是因为据我目前了解 从 TensorFlow 访问 GPU 的唯一方法是
  • 在 Windows 上不使用 OpenSSL 从 pfx 文件或证书存储中提取私钥

    正如标题所示 我想在不使用 OpenSSL 或任何其他第三方工具的情况下导出我的私钥 如果我需要一个 cer文件或 pfx我可以通过 MMC 或 PowerShell 轻松导出这些文件pkiclient但我找不到获取私钥的方法 https
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 如何将 GIT 调用的输出获取到批处理脚本中的变量中?

    我有一个 git 命令来获取当前存储库的最新 SHA 如下所示 git log pretty format H n 1 我有一个 Windows 批处理脚本 我想按如下方式使用它 SET CURRENT SHA 但我不知道如何将从 git
  • 如何在批处理文件中回显换行符?

    如何从批处理文件输出中插入换行符 我想做类似的事情 echo hello nworld 这会输出 hello world Use echo hello echo echo world
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • SetCurrentDirectoryW 中的错误 206

    在我之后之前不清楚的问题 https stackoverflow com questions 44389617 long path name in setcurrentdirectoryw 我以某种方式能够创建一个具有长路径名的目录 但是

随机推荐

  • Ubuntu20安装gcc11

    Ubuntu20默认情况下没有安装gcc和g 等工具 最近学习C 20的协程编程 需要将g cc 直接升级到11 下面介绍下方法 首先 添加安装源 sudo add apt repository y ppa ubuntu toolchain
  • C语言学习笔记(六)

    1 C语言关键字 C语言的32个基本关键字 c语言关键字 鵛的博客 CSDN博客 2 注意 define不是关键字 define是编译器的预编译指令 是编译器实现的 不是C语言的内容
  • CentOS安装TexLive2023

    这里写自定义目录标题 下载 wget https mirrors tuna tsinghua edu cn CTAN systems texlive Images texline 版本 iso wget https mirrors tuna
  • 虚函数与虚函数表详解

    虚函数的定义要遵循以下重要规则 1 如果虚函数在基类与派生类中出现 仅仅是名字相同 而形式参数不同 或者是返回类型不同 那么即使加上了virtual关键字 也是不会进行滞后联编的 2 只有类的成员函数才能说明为虚函数 因为虚函数仅适合用与有
  • Android studio 启动指定的activity

    Android studio的强大就不用多说了 今天说一下studio怎么启动到指定的Activity 场景 有如下5个Activity MainActivity Activity2 Activity3 Activity4 Activity
  • 体验一个全新的RTOS-QNX系统功能介绍

    锋影 e mail 174176320 qq com QNX的简单的介绍 这个我就很惭愧的引用一下官方的一些说法 QNX Quick Unix Unix AT T QNX 实时操作系统是由加拿大著名的QNX SOFTWARE SYSTEMS
  • PL/SQL程序设计_基本语法

    DECLARE V DATE DATE SYSDATE v var VARCHAR2 20 V VALID BOOLEAN BEGIN IF V VAR IS NULL THEN DBMS OUTPUT PUT LINE V VAR IS
  • H264(NAL简介与I帧判断)

    1 NAL全称Network Abstract Layer 即网络抽象层 在H 264 AVC视频编码标准中 整个系统框架被分为了两个层面 视频编码层面 VCL 和网络抽象层面 NAL 其中 前者负责有效表示视频数据的内容 而后者则负责格式
  • 使用 JS 和GitHub Actions实现哔哩哔哩每日自动签到、投币、领取奖励

    使用 Axios 和GitHub Actions实现哔哩哔哩每日自动签到 投币 领取奖励 SCHEDULE BILIBILI 是一个B站自动执行任务的工具 使用 JS AXIOS 编写 通过它可以实现B站帐号的每日自动观看 分享 投币视频
  • Jetson Nano安装pytorch 基于torch1.6和torchvision0.7

    需要注意的是 博主使用的是win10主机 通过局域网连接的jetson nano 其中jetson nano的预制CUDA版本为10 2 Jetpack 4 1 1 分别执行以下命令 即可查看自己的jetson nano 预搭载的CUDA版
  • NLP系列(2)_用朴素贝叶斯进行文本分类(上)

    作者 寒小阳 龙心尘 时间 2016年1月 出处 http blog csdn net longxinchen ml article details 50597149 http blog csdn net han xiaoyang arti
  • 【OpenMMLab实践】01MMSegmentation官方教程实现过程记录(mmcv,mmsegmentation,torch)

    本文主要根据mmsegmentation的官方教程 教程链接在这里 并且看了b站的视频 一步步实现代码中的demo教程 主要包含以下两方面的功能 通过MMSeg加载预训练好的权重 输入单张图片 实现分割 并可视化分割图 自定义数据集 修改配
  • 注意力&Transformer

    注意力 注意力分为两步 计算注意力分布 alpha 其实就是 打分函数进行打分 然后softmax进行归一化 根据 alpha 来计算输入信息的加权平均 软注意力 其选择
  • nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping:

    原因是使用idea快捷键时 添加的注释为 注释里面我写了另外一条SQL 但是mybatis执行时仍然把里面的 routeId 执行了 导致报错 参数异常 需要参数两个 实际传参才只有一个 注意xml中的注释要使用 上图
  • 终于刷进去了联想官方固件

    联想官方社区 第四步 设置检验所有校验和 解决 tool dl image fail 若解决线刷时出现BROM ERROR S COM PORT OPEN FAIL 1013 教程 找不到端口 多试试吧 重启电脑 重换插口 重装驱动 注意
  • 基于netty游戏服后台搭建

    项目要转游戏开发了 所以搭个游戏服 游戏一般是长连接 自定义协议 不用http协议 BIO NIO AIO这些我就不说了 自己查资料 我现在用spring netty搭起简单的游戏服 思路 1自定义协议和协议包 2spring netty整
  • python元组列表里追加元素_Python元祖 tuple 内部列表添加元素相关

    面试python遇到的一道数据类型基础题 我们都知道python中不可变类型有tuple 但是如果tuple里面的列表增加元素会怎么样呢 先看代码 a 1 2 3 4 5 print a 3 4 5 a 3 append 6 print a
  • 学习笔记(5):MySQL数据库从入门到实战应用-数据完整性

    立即学习 https edu csdn net course play 27328 362521 utm source blogtoedu 实体完整性 要求每张表都有唯一标识符 每张表主键字段不为空且不能重复 唯一性约束 主键约束 标识列
  • MVC框架增删改查

    mvc对表单内容的增删改查 1 首先把所需的包导入项目内 2 连接数据库的帮助类DBAccess package com Liuyujian Dao import java io InputStream import java sql Co
  • 邮件服务器-postfix服务器

    Postfix 是一种电子邮件服务器 它是由任职于IBM华生研究中心 T J Watson Research Center 的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的 最早在1990年代晚期出现 是一