精华内容
参与话题
问答
  • 邮件服务器

    千次阅读 2013-11-30 19:21:09
    邮件服务器 邮件服务器的功能与运作原理:他是利用网络传递一些信息给远程服务器的一种信息传递行为,相当具有时效性,不过现在有很多人乱用,导致垃圾信件,色情,广告信件等等 的滥用,时至今日,Google和几个大型...

    邮件服务器

    邮件服务器的功能与运作原理:他是利用网络传递一些信息给远程服务器的一种信息传递行为,相当具有时效性,不过现在有很多人乱用,导致垃圾信件,色情,广告信件等等

    的滥用,时至今日,Google和几个大型的网络公司都有提供免费或者付费的邮件服务器,除非必要,不建议去架设mail server,因为搞定它十分的难,除了目前网络社会的垃圾

    信件太多,所以各个主要的ISP对于邮件控管上面越来越严格,而且基于当中的mail vs. DNS相关性又太高。

    你可以在地球上的任何一个有网络存在的地方,连上Internet去收取你的信件。

    电子邮件容易产生的一些问题:

    夹带病毒的电子邮件问题, 怪客透过邮件程序入侵, 广告信与垃圾信等, 主机被大量不明信件塞爆, 真实社会的讨厌情事, 不实的信件内容

    email 服务器的设定与管理真的很难,因为如果你设定的太简单和便利,那就越容易被攻击或遭利用,反过来说,如果针对邮件服务器管的太严,那么你的主管可能就不太满意

    Mail server 与 DNS 之间的关系,是否要架设 mail server 就『宿命』的一定得架设 DNS server 在你的主机上面吗?

    Mail server 与合法的主机名:现今我们收到的email都是使用【账号@主机名】的方式来处理的,所以说,你的邮件服务器【就一定要有一个合法注册过的主机名】才可以,

    所以想要架设mail server 就必需要有合法的主机名,既然我只要一个合法的主机名即可,那么表示我不需要架设一部 DNS 主机,只要你有合法的主机名,亦即在DNS的查询

    系统当中你的主机名拥有一个A的标志,理论上你的mail server就可以架设成功,只不过由于垃圾信件会占用掉太多的宽带,导致整个网络社会花费过多的成本消耗在这些垃圾

    资料上了,因此要想办法杜绝这种可恶的垃圾信件,目前大型网络供应商(ISP)都会针对不明来源的邮件加以限制,所以就造成架设mail server越来越难了

    DNS 的反解也很重要:对于一般的服务器来说,我们只要使用正解让客户端可以正确的找到我们服务器的IP即可架站,例如www服务器,不过由于目前收信端的邮件服务器会

    针对邮件来源的IP进行反解,而如果你的网络环境不是固定IP时,该种IP在ISP方面通常会主动的以xxx.dynamic.xxx 之类的主机名来管理,偏偏这样的主机名会被主要的大型邮件

    服务器(hotmail yahoo) 视为垃圾信件,所以你的邮件服务器所发出的信件将可能被丢弃。所以如果想要架设一部Mail Server的话,请务必向你的上层ISP申请IP的反解的对应,

    不要再使用预设的反解主机名,否则很容易导致你的邮件服务器所发出的信件会在Internet上面流浪,其实你还是可以不用申请 IP 的反解,不过就得要利用所谓的 relayhost 或

    者是 smarthost 来处理邮件转递的问题

    需要 DNS 的 MX 及 A 标志啊 (超重要的 MX)

    邮件服务器系统到底是如何使用DNS的信息来进行邮件的传递,MX代表的是Mail eXchange,当一封邮件想要传送出去时,邮件主机会先分析那封信的【目标主机的DNS】,取得

    MX标志(MX标志可能会有多部主机),然后以最优先MX主机为准将信件发送出去,,我们以底下这个 DNS 范例来说:

    xyz.com.vbird IN MX 10 mail.xyz.com.vbird,

    xyz.com.vbird IN MX 20 mail2.xyz.com.vbird

    xyz.com.vbird IN A aaa.bbb.ccc.ddd

    当有一封信要传给user@xyz.com.vbird 时,由于 MX 标志最低者优先,如果由于mail.xyz.com.vbird 由于种种原因,导致无法收下该

    封信时,该封信将以次要 MX 主机来传送,那就是传送到 mail2.xyz.com.vbird 那部主机上头,如果两部 MX 主机都无法负责的话,那么该封信会直接以 A 的标志,亦即直接

    传送到aaa.bbb.ccc.ddd 那个 IP 上头去, 也就是 xyz.com.vbird 本身啦!这个过程中,必需要注意到:mail.xyz.com.vbird 及 mail2.xyz.com.vbird 必需要是可以帮 、

    xyz.com.vbird 转信的主机才行,这两部主机通常是你公司最上游的邮件主机,不要随意填写,那两部主机还需要针对你的 xyz.com.vbird 来设定『邮件转递』才行! 否则你的信

    会被踢掉的。架设服务器虽然不必自行设定DNS服务器,不过最好要申请一个MX的标志才行,此外,MX标志一定要设定正确,否则你的信件可能会被直接被MX服务器踢掉

    为了要设定 MX 但是我们没有上层邮件服务器时,所以你可以指定 MX 为自己,利用自己当 MX 服务器即可,MX的好处是目标主机挂掉了,那你的邮件通常会直接退还给

    原发送者,但如果有MX主机时,这部MX主机会先将该封信放在他的队列当中,等到你的目标主机重新提供邮件服务器后,MX会主动将你的信件传送给目标主机,如此一来你的

    信件就比较不会遗失。

    Email 的地址写法

    email 通常是『账号@主机名』的方式来处理,例如www.centos.vbird 主机上面有个 dmtsai 的使用者,则我的 email 将会成为:『dmtsai@www.centos.vbird

    当有人要寄信给我时,他会分析@后面的主机名,亦即 www.centos.vbird 的 MX/A 标志等等,然后再透过刚刚说明的流程来传出信件,然后再透过刚刚说明的流程来传出信件

    当中,

    邮件传输所需要的组件 (MTA, MUA, MDA) 以及相关协议

    假设你要寄信给一个用户,他的电子邮件『a_user@gmail.com』好了,也就是说,你要寄一封信到gmail.com这个主机上的意思,那你的桌面计算机是否能够将这封信『直接』

    透过网络送给 gmail.com 那个主机上? 当然不行,你得要设定帮你转信的邮件服务器才行,也就是说,你必须要先向某一部邮件服务器注册,以取得一个合法的电子邮件权限

    后,才能够发送邮件出去的。所以说,你要寄出一封信件时是需要很多接口的帮忙的,底下列出一个简单的说明:


    A. MUA (Mail User Agent):MUA 就是『邮件使用者代理人』的意思,因为除非你可以直接利用类似telnet之类的软件登入邮件服务器来主动发出邮件,否则你就要透过MUA来

    帮你送信到邮件服务器上头去,最常见的MUA像是Mozilla 推出的Thunderbird (雷鸟) 自由软件,或者是 Linux 桌面 KDE 常见的 Kmail,及 Windows 内件的 Outlook Express

    (OE) 等,MUA主要的功能就是接受邮件主机的电子邮件,以及提供用户浏览和编写邮件的功能。

    B. MTA (Mail Transfer Agent):MUA 帮用户传送邮件到邮件主机上,那这部邮件主机如果能够帮用户将这封信寄出去,那他就是一部邮件传送主机 (MTA) ,这个MTA就是

    『邮件传送代理人』的意思,既然是『传送代理人』,那么使用者寄出的信,帮用户将属于该用户的信件收下时,就是找它(MTA)就对了,基本上,MTA的功能有这些:

    1.接受信件:使用简单邮件传送协议(SMTP) :MTA主机最重要的功能是:将来自客户端或者是其他MTA的来信收下来,这个时候MTA使用的是Simple Mail Transfer Protocol

    (SMTP),他使用的是 port 25。

    2. 转递信件:如果该封信件的目的地并不是本身的用户,且该封信的相关数据符合使用 MTA 的权力, 那么咱们的 MTA 就会将该封信再传送到下一部主机上。这即是所谓的转

    递 (Relay) 的功能。

    总之,我们一般提到的 Mail Server 就是 MTA ,而严格来说, MTA 其实仅是指 SMTP 这个协议而已。而达成 MTA 的 SMTP 功能的主要软件包括老牌的 sendmail,后起

    之秀的 postfix,还有 qmail 等等。底下我们来看看,那么在 MTA 上头还有哪些重要的功能

    C. MDA (Mail Delivery Agent):邮件传递代理人,事实上,这个MDA是挂在MTA底下的一个小程序,最主要的功能就是:分析由MTA所收到的信件表头或内容等数据,来决定

    邮件的去向,所以说,上面提到的MTA的信件转递功能,其实是由MDA达成的,例如,如果 MTA 所收到的这封信目标是自己,那么 MDA 会将这封信给他转到使用者的信箱

    (Mailbox) 去, 如果不是呢?那就准备要转递出去了,此外,MDA只有分析与过滤邮件的功能,举例来说:

    1. 过滤垃圾信件:可以根据该封邮件的表头资料,或者是特定的信件内容来加以分析过滤。例如某个广告信的主题都是固定的, 如『AV情色...』等等,那就可以透过 MDA 来

    过滤并去除该邮件

    2. 自动回复:如果您出差了导致某一段时间内无法立即回信时,就可以透过 MDA 的功能让邮件主机可以自动发出回复信件, 如此您的朋友就不会认为你太大牌!^_^

    各主要的 MTA 程序 (sendmail,postfix...) 都有自己的 MDA 功能,不过有些外挂的程序功能更强大,举例来说 procmail 就是一个过滤的好帮手,另外 Mailscanner +

    Spamassassion 也是可以使用的一些 MDA

    D. Mailbox:就是电子邮件信箱嘛!简单的说,就是某个账号专用的信件收受档案,我们的 Linux 系统默认的信箱都是放在 /var/spool/mail/使用者账号,若 MTA 所收到的信件

    是本机的使用者,MDA 就会将信件送到该 mailbox 当中去

    好了,那么来想一想,你如何透过 MUA 来将信件送到对方的邮件信箱 (Mailbox) 去呢?

    Step 0:取得某部 MTA 的权限: 本机端的MUA想要使用MTA来传送信件,当然需要取得MTA的权限,通常就是:我们必须要向MTA注册一组可使用email的帐号与密码才行

    Step 1:使用者在 MUA 上编写信件后,传送至 MTA 上头: 用户在MUA上面编写信件,信件主要有:信件标头,信件内容,编写好之后按下传送钮,该封信就会送至你的MTA服务器

    上面了,注意:是你的MTA而不是对方的MTA,如果你确定可以使用该部MTA,那么这封信会被放置到MTA的队列(queue)当中等待被传送出去了。

    Step 2.1:如果该封信的目标是本地端 MTA 自己的账号:你是可以寄信给你自己的,所以如果你的MTA收到该封信的目录是自己的用户时,那就会透过MDA将这封信送到

    Mailbox去。

    Step 2.2:如果该封信目的为其他 MTA ,则开始转递 (Relay) 的流程: 如果该封信的目标是其他的主机,这个时候我们的MTA就会开始分析该封信是否具有合法的权限,若有权限,

    则我们的MDA会开始进行邮件传递,亦即该封信会透过我们的MTA向下一部MTA的smtp(port 25)发送出去,如果该封信件顺利的发送出去了,那么该封信会在队列中移除掉了

    Step 3:对方 MTA 服务器收受信件:远程MTA会收到我们MTA所发出的那封信,并将该信件放置到正确的使用者信箱当中,等待使用者登入来读取或下载。

    在整个过程当中,你会发现你的信件是由我们的MTA帮忙发送出去的,此时MTA提供的协议是简单邮件传输协议(smtp),并且该封信最终停留在对方主机的MTA上头,并不是你

    朋友的MUA上头。

    了解了传送信件时 MTA 需要启动 smtp (port 25) 之后,再来我们得要谈谈那这封信件对方要如何接收啊?

    使用者收信时服务器端所提供的相关协议: MRA 

    使用者如果想要收信时,当然可以透过MUA直接来联机取得自己的邮件信箱内的数据,整个过程有点下这样:

    E. MRA (Mail Retrieval Agent): 使用者可以透过MRA服务器提供的邮政服务协议(POP)来收下自己的信件,也可以透过IMAP协议将自己的信件保留在邮件主机上面,并进一步

    建立邮政数据匣等进阶工作,也就是说,当客户端收受信件时,使用的是MRA的POP3,IMAP等通讯协议,并非MTA的SMTP。

    POP3 的收信方式:

    1. MUA 透过 POP3 (Post Office Protocol version 3) 的协议连接到 MRA 的 port 110, 并且输入账号与密码来取得正确的认证与授权;

    2. MRA确认该用户账号/密码没有问题后,会前往该使用者的 Mailbox (/var/spool/mail/使用者账号) 取得使用者的信件并传送给用户的 MUA 软件上;

    3. 当所有的信件传送完毕后,用户的 mailbox 内的数据将会被删除

    上面的3个步骤中可以看出MRA必须要启动POP3这个协议才行,这个协议的收件方式较有趣,因为使用者收信是由第一封信件开始收下直到最后一封信件传输完毕,不过

    由于某些MUA程序撰写问题,若有些邮件有病毒的可能性时,透过防病毒软件将可能导致该MUA软件的断线,如此一来由于没有传输完毕,因此MRA主机并不会将用户的信件

    删除,此时如果使用者又再一次的按下接受按键,那么原来已接收的信件又会重复收到,而没有收到的还是没有收到。

    因为POP3的协议预设会将信件删除,那如果我今天在办公室将我的信收到办公室的计算机中,当我回家时再度启动MUA时,此时是收不到被接收了的信件的,那就要使用

    IMAP这个协议可以让你将mailbox的数据转存到你主机上的家目录,亦即/homt/帐号/那个目录下,那你不但可以建立邮件数据匣,也可以针对信件分类管理,而且在任何一个可

    连上网络的地方只要登入主机,原本的信件就还是存在的。

    不过,使用 IMAP 时,用户的目录最好能够加点限制,例如利用 quota 来管理用户的硬盘权限,否则因为信件都在主机上头,如果用户过多且误用时,你的硬盘空间会被吃光。

    通过上面的步骤,我们可以知道要架设一部可以使用MUA进行收发信件的MTA,MRA服务器,你至少需要启动SMTP以及POP3这两个协议才行,而这两个协议启动程序

    并不相同,所以架设上还是要小心注意的。

    pop3s, imap2 与 SMTP 的困扰

    由于邮件数据在因特网上面传输的,透过的 SMTP, POP3, IMAP 等通讯协议,通通是明码传输的,尤其 POP3, IMAP 这两个通讯协议中,使用者必须要输入帐号密码才能收到

    信件,因为涉及帐号密码,所以当然加密这两个通讯协议的数据较佳,于是就有了POP3s,IMAPs通讯协议出现,通过SSL加密,既然已经有 pop3s, imaps,那有没有smtps

    答案是有的,只不过没人用,因为IMAP与POP3只是与MRA及自己的用户有关,并不会影响其他的服务器,但是MTA就不同了,因为MTA必须与其他的MTA沟通,因此,若你

    使用了smtps,那么全世界与你的MTA沟通者,通通需要改变为smtps通讯协议才行,这个工程实在太浩大,目前没有任何一家ISP有能力进行,所以,目前没有SMTPs的协议

    此时既然MTA(smtp)无法加密,那么就将自己的邮件数据加密后,再交由MTA传送即可,这也是目前很多急需加密名数据的邮件用户所需要的手段。

    Relay 与认证机制的重要性

    MTA帮你将信寄到下一部MTA去,这个动作称为邮件转递(Relay),如果所有的人可以籍由这一部MTA帮忙进行Relay时,这个情况称之为Open Relay的动作,当你的MTA发生

    Open Relay时,并且由于设定不良的关系导致具有Open Relay的主机出现状况,加上你的MTA确实是连上因特网时,由于因特网上面用port scan软件的闲人太多,你的MTA

    具有Open Relay的功能这件事情,很快会被人察觉的,此时那些垃圾信件就会利用你的这部Open Relay MTA发送他们的广告,所以你会发生的问题至少有:

    1. 你主机所在的网域正常使用的连接速度将会变慢,因为网络带宽都被广告、垃圾信吃光了;

    2.  你的主机可能由于大量发送信件导致主机资源被耗尽,容易产生不明原因当机之类的问题;

    3. 你的 MTA 将会被因特网社会定义为『黑名单』,从此很多正常的邮件就会无法收发

    4. 你 MTA 所在的这个 IP 将会被上层 ISP 所封锁,直到你解决这个 OpenRelay 的问题为止

    5. 某些用户将会对你的能力产生质疑,对您公司或者是你个人将会有信心障碍!甚至可能流失客源;

    6. 如果你的 MTA 被利用来发黑函,你是找不到原发信者的,所以你这部 MTA将会被追踪为最终站

    所以,目前所有的distributions都一样,几乎将MTA预设启动为仅监听内部循环接口而已,而且也将Open Relay的功能取消了,既然取消了Open Relay的功能,那么怎么使用

    这部 MTA 的 Relay 来帮忙转信?所以上面就说了你必须要取得合法使用该MTA的权限,也就是说,设定谁可以使用Relay的功能就是我们管理员的任务,通常Relay方法有几种

    1. 规定某一个特定客户端的 IP 或网段,例如规定内部 LAN 的192.168.1.0/24 可使用 Relay

    2. 若客户端的 IP 不固定时 (例如拨接取得的非固定 IP) 可以利用认证机制来处理

    3. 将 MUA 架设在 MTA 上面,例如 OpenWebMail 之类的 web 接口的 MUA 功能。

    认证机制上面常见的有 SMTP 邮件认证机制, 以及 SMTP after POP 两种, 无论哪种基本上都是透过使用者输入认证用的帐号与密码,来确定他有合法使用该MTA的权限,然后

    针对,然后针对通过认证者开启 Relay 的支持就是了。如此一来你的 MTA不再启动 Open Relay ,并且客户端还是可以正常的利用认证机制来收发信件。

    电子邮件的数据内容:email主要有标头(header)以及内容 (body) 两部份

    email 的标头部分 (类似邮件信封) 会有几个重要信息,包括,信件来自哪个MTA,由谁发送出来的,要送给谁,主旨为何等等,至于内容(类似信封内的信纸)则是发送者填写的

    一些说明,如果使用dmtsai的身份下达这个指令:

    echo "HaHa.." | mail -s "from vbird" dmtsai 

    将自己的信箱内容叫出来看:cat /var/spool/mail/dmtsai  从结果中看出标头部分记录了收,发件者数据,以及相关的来源,目标之MTA信息,但是那个『Received:...』那一行资

    料是『会变动的』,如同前面谈到的MX标志,如果一封信由MUA传送到 MTA 再由 MTA 传送到 MX 主机后,才传送到最终的 MTA 时,那么这个 Received: 的数据将会记录每一部

    经手过的 MTA 信息,所以可以借着这个记录数据慢慢的找回这封信的传递方向。

    此外,这个邮件的标头以及内容的分析部分,你还可以籍由某些分析软件来进行过滤,先知道一封邮件至少要有的这些数据。

    MTA 服务器: Postfix 基础设定

    由于sendmail的配置太过于难懂,以及早期的程序漏洞问题导致的主机安全性缺失,加上sendmail将所有的功能都整合在/usr/sbin/sendmail 这个程序当中,导

    致程序太大可能会有效能方面的疑虑等等,所以新版的CentOS已经将预设的mail server调整为postfix,先介绍下postfix:

    Postfix 设计的理念上面,主要是针对『想要完全兼容于 sendmail』所设计出来的一款『内在部分完全新颖』的一个邮件服务器软件,ostfix 在外部配置文件案的支持度,与

    sendmail 几乎没有两样,同样的支持 aliases 这个档案,同样的支持 ~/.forward 这个档案,也同样的支持 SASL 的 SMTP 邮件认证功能

    Postfix所需要的软件与软件结构:主要的配置文件都在/etc/postfix/当中:

    /etc/postfix/main.cf  这就是主要的 postfix 配置文件,几乎所有的设定参数都是在这个档案内规范的,这个档案预设就是一个完整的说明档,可以参考这个档案的内容就设定

    好属于你的postfisx MTA,主要修改过这个档案,记得要重新启动postfix

    /etc/postfix/master.cf 主要规定了postfix每个程序的运作参数,这个档案预设已经很OK了,通常无需改动

    /etc/postfix/access (利用 postmap 处理) ,可以设定开放Relay或拒绝联机的来源与目标地址等信息的外部配置文件,不过这个档案要生效还需要在/etc/postfix/main.cf启动这个

    档案的用途才行,且设定完毕后需要以postmap来处理成为数据库档案。

    /etc/aliases (利用 postalias 或 newaliases 均可)  做为邮件别名的用途,也可以作为邮件群组的设定

    常见的执行档则有底下这些:

    /usr/sbin/postconf (查阅 postfix 的设定数据) 这个命令可以列出目前你的postfix的详细设定数据,包括系统默认值也会被列出来,数据比较庞大,如果你在main.cf里面曾经修改

    过某些预设参数的话,想要仅列出非默认值的设定数据,则可以使用postconf -n这个选项。

    /usr/sbin/postfix (主要的 daemon 指令) 此为postfix的主要执行档,可以简单的使用他来启动或重新读取配置文件:

    postfix check <==检查 postfix 相关的档案、 权限等是否正确

    postfix start <==开始 postfix 的执行

    postfix stop <==关闭 postfix

    postfix flush <==强制将目前正在邮件队列的邮件寄出

    postfix reload <==重新读入配置文件,也就是/etc/postfix/main.cf

    要注意每次更动过main.cf后,务必重新启动postfix,可简单的使用『postfix reload』即可。不过老实说,习惯使用 /etc/init.d/postfixreload..

    /usr/sbin/postalias 设定别名数据库的指令,因为MTA读取数据库格式的档案效能较佳,所以我们都会将ASCII格式的档案重建为数据库,在postfix当中,这个指令主要在

    轮换/etc/aliases成为/etc/aliases.db用法为:postalias hash:/etc/aliases ,hash是一种数据库格式,然后那个/etc/aliases.db 就会自动被更新

    /usr/sbin/postcat 主要用在检查放在 queue (队列) 当中的信件内容,由于队列当中的信件内容是给MTA看得,所以格式并不是一般我们看得懂的文字数据,这个时候你得要用

    postcat才可以看出该信件的内容, 在 /var/spool/postfix 内有相当多的目录,假设内有一个文件名为 /deferred/abcfile , 那你可以利用底下的方式来查询该档案的内容

    postcat /var/spool/postfix/deferred/abcfile

    /usr/sbin/postmap 这个指令的用法与 postalias 类似,不过他主要在转换 access 这个档案的数据库!用法为: postmap hash:/etc/postfix/access

    /usr/sbin/postqueue 类似 mailq 的输出结果,例如你可以输入『postqueue -p』看看就知道了

    一个邮件服务器的设定案例,主要的参数是这样的:

    邮件服务器的主要名称为: www.centos.vbird , 邮件服务器尚有别名为 linux.centos.vbird 及 ftp.centos.vbird 也可以收发信件;  此邮件服务器已有 MX 设定,直接指向自己

    (www.centos.vbird),这个 www.centos.vbird 有个 A 的标志指向 192.168.100.254

    让 Postfix 可监听 Internet 来收发信件

    在预设的情况下,CentOS 6.x 的 MTA 仅针对本机进行监听,所以你要修改成对整个Internet开放的话,需要修改/etc/postfix/main.cf 这个档案中的某些设定。

    『 # 』符号是批注的意思; 

    所有设定值以类似『变量』的设定方法来处理,例如 myhostname = www.centos.vbird,请注意等号的两边要给予空格符,亦即『my..』要由行首写起

    可以使用『 $ 』来延伸使用变量设定,例如 myorigin = $myhostname,会等于 myorigin = www.centos.vbird

    如果该变量支持两个以上的数据,则使用空格符来分隔,不过建议使用逗号加空格符『, 』来处理,例如: mydestination = $myhostname, $mydomain,linux.centos.vbird,意指

    mydestination 支持三个数据内容之意

    可使用多行来表示同一个设定值,只要在第一行的最后有逗号,且第二行开头为空格符,即可将数据延伸到第二行继续书写,(所以刚刚第二点才说,开头不能留白!);

    若重复设定某一项目,则以较晚出现的设定值为准

    要让你的 postfix 可以收发信件时,你必需要启动的设定数据有底下这些:

    myhostname:设定主机名,需使用 FQDN :这个项目在于设定你的主机名,这个练习当中,应该设定为myhostname = www.centos.vbird 才对,除了这个设定之外,还有一个

    mydomain的设定项目,这个项目默认会取$myhostname 第一个【.】之后的名称,例如预设的mydomain就是centos.vbird 啰!你也可以自行设定他

    myorigin :发信时所显示的『发信源主机』项目:这个项目在设定『邮件头上面的 mail from 的那个地址』,也就是MTA传出去的信件将以此设定值为准,如果本机寄信时忘了

    加上Mail From字样的话,那么就以此值为准,默认这个项目以$myhostname 为主的,例如 myorigin = $myhostname

    inet_interfaces :设定 postfix 的监听接口 (极重要):预设Postfix只会监听本机回还接口(127.0.0.1)而已,如果想要监听整个Internet的话,请开放成为对外接口,或者开放给

    全部接口,常见的设定为: inet_interfaces = all 才对,如果有重复设定项目时,会以最晚出现的设定值为准,所以最好保留一组inet_interfaces 的设定

    inet_protocols :设定 postfix 的监听 IP 协议:预设CentOS的postfix会去同时监听IPv4,IPv6两个版本的IP,如果你的网络环境仅有IPv4,那么可以直接指定 inet_protocols =

    ipv4 就会避免看到 :::1 之类的 IP 出现

    mydestination :设定『能够收信的主机名』 (极重要):我们的主机有非常多的名字,那么对方填写的mail to到底要写哪个名字我们才能将该信件收下,就是这里规范的,

    也就是说仅有写入这个设定值的名称才能作为email的主机地址,在我们这个练习当中这部主机有三个名字,所以写法为:

    mydestination = $myhostname, localhost, linux.centos.vbird, ftp.centos.vbird,如果想要将此设定移动到外部档案,做法为:mydestination = /etc/postfix/local-host-names

    然后在ocal-host-names 里面将可收信的主机名写入即可,一般不建议你额外建立local-host-names 这个档案,直接写入main.cf 即可,如果你的DNS里头的设定有MX标志

    的话,那么请将MX指向的那个主机名一定要写在这个mydestination 内, 否则很容易出现错误讯息

    mynetworks_style :设定『信任网域』的一项指标:这个设定值在规定『与主机在同一个网域的可信任客户端』的意思,例如我的主机IP是192.168.100.254,如果我相信整个局

    域网络内(192.168.100.0/24) 的用户的话,那我可规定此设定值为『 subnet 』,不过,一般来说,因为底下的mynetworks 会取代这个设定值, 所以不设定也没有关系,

    如果设定的话,最好设定成为 host 即可 (亦即仅信任这部 MTA 主机而已)

    mynetworks :规定信任的客户端 (极重要):你的MTA能不能帮忙进行Relay与这个设定值有关系,例如:我要开放本机与内部网域的 IP 时,就可以这样进行设定: mynetworks =

    127.0.0.0/8,192.168.100.0/24,如果你想要以 /etc/postfix/access 这个档案来控制relay 的用户时,那建议你将上述的数据改写成这样:

    mynetworks =127.0.0.0/8, 192.168.100.0/24, hash:/etc/postfix/access,然后你只要再建立access 之后重整成数据库后,嘿嘿!就能够设定 Relay 的用户。

    relay_domains :规范可以帮忙 relay 的下一部 MTA 主机地址:相对于 mynetworks 是针对『信任的客户端』而设定的,这个 relay_domains 则可以视为『针对下游 MTA 服务器』

    而设定的,例如:如果你这部主机是 www.niki.centos.vbird 的 MX 主机时,, 那你就得要在 relay_domains 设定针对整个 niki.centos.vbird 这个领域的目标信件进行转递才行。

    在预设的情况下,这个设定值是 $mydestination 而已

    alias_maps :设定邮件别名:就是设定邮件别名的设定项目,只要指定到正确的档案去即可,这个设定值可以保留默认值

    开始设定:

    vim /etc/postfix/main.cf 

    myhostname = www.centos.vbird

    myorigin = $myhostname 

    inet_interfaces = all

    inet_protocols = ipv4

    mydestination = $myhostname, localhost.$mydomain, localhost, linux.centos.vbird, ftp.centos.vbird

    mynetworks = 127.0.0.0/8, 192.168.100.0/24, hash:/etc/postfix/access

    relay_domains = $mydestination

    alias_maps = hash:/etc/aliases

    alias_database = hash:/etc/aliases  # 其他的设定值就先保留默认值即可

    设定好之后,执行:

    postmap hash:/etc/postfix/access

    postalias hash:/etc/aliases

    main.cf 当中我们有额外加入两个外部配置文件 (mynetworks 及 alias_maps),所以才会额外进行 postmap 及 postalias。然后准备来启动

    # 1. 先检查配置文件的语法是否有错误  /etc/init.d/postfix check <==没有讯息,表示没有问题

    # 2. 启动与观察 port number   /etc/init.d/postfix restart   netstat -tlunp | grep ':25'

    此时假设你的防火墙已经处理完毕,那么你的Postfix已经可以开放客户端进行转递,并且也可以收受信件,不过,预设的情况下我们的postfix可以收下那些信件,又可以针对

    哪些设定值的内容进行转递。

    信件传送流程与收信、relay 等重要观念

    一般来说一封邮件传送会经过许多的流程为:  送信端与收信端两部主机间会先经过一个握手 (ehlo) 的阶段,此时送信端被记录为发信来源(而不是 mail from),通过握手后就可以

    进行信件标头的传递。

    2. 此时收信端主机会分析标头的信息,若信件之 Mail to: 主机名为收信端主机,且该名称符合 mydestination 的设定,则该信件会开始被收下至队列,进一步送到mailbox当中,若

    不符合mydestination 的设定,则终止联机且 不会进行信件内容 (body) 的传送。

    3. 若 Mail to: 主机名非为收信端本身,则开始进行转递 (relay) 的分析。

    4. 转递过程首先分析该信件的来源是否符合信任的客户端,亦即来源是否符合(mynetworks)的设定值,若符合则可以收下信件至列队中,并等待MDA等信件再转递出去,若

    不符mynetworks则继续下一步;

    5. 分析信件来源或目标是否符合 relay_domains 的设定,若符合则信件将被收下至队列,并等待 MDA 将信件再转递出去

    6. 若这封信的标头数据都不合乎上述的规范,则终止联机,并不会接受信件的内容数据的

    整个流程有点像底下这样:



    也就是说标头分析通过后,你的信件内容才会开始上传到主机的队列,然后透过MDA 来处理该信件的流向,而不是将信件完整的传送到主机后才开始进行分析,这个要注意,

    透过上述的流程,在暂不考虑 access 以及 MDA 的分析机制中,一部MTA想要正确的收,发信件时,电子邮件必须需要符合:

    收信方面:必需符合底下需求: 1. 发信端必需符合 $inet_interfaces 的设定; 2.信件标头之收件者主机名必需符合 $mydestination 的设定, 或者收件主机名需要符合 $virtual_maps

    (与虚拟主机有关) 的设定

    转递方面 (Relay):必需符合底下需求:

    1. 发信端必需符合 $inet_interfaces 的设定;

    2.发信端来源必需为 $mynetworks 的设定;发信端来源或信件标头之收件者主机名符合 $relay_domains 之设定内容

    同样的原理与想法你可以将他用在 sendmail 的设定当中

    设定邮件主机权限与过滤机制 /etc/postfix/access,指定了 Postfix 的 mynetworks 的信任来源就能够让使用者 relay 了,设定你的 mynetworks 的话,那么我们还

    可以利用 access 这个档案来额外管理我们的信件过滤呢!基本的 access 语法为:

    规范的范围或规则                       Postfix 的动作 (范例如下)

    IP/部分 IP/主机名/Email 等        OK/REJECT

    假设你想要让 120.114.141.60 还有 .edu.tw 可以使用这部 MTA 来转递信件,且不许av.com 以及 192.168.2.0/24 这个网域的使用时,可以这样做:

    vim /etc/postfix/access

    120.114.141.60   OK

    .edu.tw  OK

    av.com  REJECT

    192.168.2.   REJECT

    # OK 表示可接受,而 REJECT 则表示拒绝

    postmap hash:/etc/postfix/access          ls -l /etc/postfix/access*

    -rw-r--r--. 1 root root 19648 2011-08-09 14:05 /etc/postfix/access

    -rw-r--r--. 1 root root 12288 2011-08-09 14:08 /etc/postfix/access.db

    # 你会发现有个 access.db 的档案才会同步更新!这才是 postfix 实际读取的,这个档案设定最大的好处就是不必重新启动postfix,只要将数据库建立好,立刻生效,这个档案

    还有其他进阶功能,你可以自行进入该档案查阅,但是进阶设定还需要main.cf内的其他参数有设定才行,如果只有之前$mynetworks 的设定值时,你只能利用 access.db 的方式

    来开放 relay 的能力而已。不过,至少他可以让我们的设定简化

    设定邮件别名: /etc/aliases, ~/.forward:当如果以某些系统帐号执行的程序若有讯息发生时,他会将email发送给root,这是因为其他的系统帐号并没有密码可登入,自然就无法

    接收邮件了,所以若有邮件就给系统管理员,不过,我们的MTA怎么知道这些信件要传给root?这就得要aliases这个邮件别名配置文件来处理

    邮件别名配置文件: /etc/aliases ,在你的 /etc/aliases 档案内,你会发现类似底下的字样: vim /etc/aliases

    mailer-daemon: postmaster

    postmaster: root

    bin:root

    daemon:root

    左边是【别名】右边是实际存在的使用者帐号或者是email address ,就是透过设定这个值,所以让我们可以将所有系统账号所属的信件通通丢给 root 啊

    postalias hash:/etc/aliases

    ll /etc/aliases*

    -rw-r--r--. 1 root root 1535 2011-08-09 14:10 /etc/aliases

    -rw-r--r--. 1 root root 12288 2011-08-09 14:10 /etc/aliases.db

    从此之后不论dmtsai@www.centos.vbird 还是 dermintsai@www.centos.vbird 都会将信件丢到 /var/spool/mail/dmtsai 这个信箱当中

    /etc/aliases 实际应用一:让一般账号可接收 root 的信

    假设你是系统管理员,而你常用的一般账号为 dmtsai,但是系统出错时的重要信件都是寄给 root,偏偏 root 的信件不能被直接读取,此时可以将给root的信件转寄一份给dmtsai

    vim /etc/aliases

    root: root,dmtsai <==建议这种写法  ,# 信件会传给 root 与 dmtsai 这两个账号

    postalias hash:/etc/aliases

    /etc/aliases 实际应用二:发送群组寄信功能

    vim /etc/aliases

    student2011: std001,std002,std003,std004...

    postalias hash:/etc/aliases

    如此一来,只要寄送到部主机的 student2011 这个不存在的账号时,,该封信就会被分别存到各个账号里头去, 管理上面是否很方便,除了填写自己主机上面的实体用户之外,还

    可以填写外部主机的email,例如你要将本机的dermintsai 那个不存在的用户的信件除了传给 dmtsai 之外,还要外传到dmtsai@mail.niki.centos.vbird 时,可以这样做:

    vim /etc/aliases

    dermintasi: dmtsai,dmtsai@mail.niki.centos.vbird

    postalias hash:/etc/aliases

    个人化的邮件转递: ~/.forward:虽然/etc/aliases 可以帮我们达到邮件别名设定的好处,不过/etc/aliases是只有root才能修改的档案权限,那我们一般使用者如果也想要进行邮件

    转递时,该如何是好?没关系,可以透过自己家目录下的 .forward 这个档案,例如,我的dmtsai这个帐号所接收的信件除了自己保留一份之外,还要传给本机上的vbird以及

    dmtsai@mail.niki.centos.vbird 时,那你可以这样做设定:

    vim .forward

    # 注意!我现在的身份现在是 dmtsai 这个一般身份,而且在他的家目录下!

    dmtsai

    vbird

    dmtsai@mail.niki.centos.vbird

    [dmtsai@www ~]$ chmod 644 .forward,这个档案内容是一行一个账号 (或 email) ,而且权限方面非常重要

    该档案所在用户家目录权限,其 group、other 不可以有写入权限。.forward 档案权限,其 group、other 不可以有写入权限

    察看信件队列信息: postqueue, mailq

    有时候由于网络的问题或者对方主机的问题,可能导致某些信件无法送出而被暂存在队列中,那我们如何了解队列中有那些邮件?还有,队列中等待送出的信件如何送出?

    如果该封信在五分钟之内无法寄出,则通常系统会发出一封『警告信』给原发信者, 告知该封邮件尚无法被寄送出去,不过,系统仍会持续的尝试寄出该封邮件;

    如果在四小时候仍无法寄出,系统会再次的发出警告信给原发信者;

    如果持续进行五天都无法将信件送出, 那么该封邮件就会退回给原发信者了

    当然啦,某些 MTA 已经取消了警告信的寄发,,不过原则上,如果信件无法实时寄出去的话 MTA 还是会努力尝试 5 天的,如果接下来的 5 天都无法送出时,才会将原

    信件退回给发信者。 一般来说,如果 MTA 设定正确且网络没有问题时,应该是不可能会有信件被放在队列当中而传不出去的, 所以如果发现有信件在队列时,当然得要仔细的瞧一瞧

    检查队列内容的方法可以使用 mailq , 也可以使用 postqueue -p 来检查的: postqueue -p

    不过如果你将 postfix关闭, 并尝试发一封信给任何人,那就可能会出现如下的画面:/etc/init.d/postfix stop          echo "test" | mail -s "testing queue" root         postqueue -p

    输出结果中的第一行就说明了无法寄出的原因为 Mail system is down 

    输出的信息主要为:

    Queue ID:表示此封邮件队列的代表号 (ID),这个号码是给 MTA 看的,我们看不懂不要紧;

    Size :这封信有多大容量 (bytes) 的意思;

    Arrival Time:这封信什么时候进入队列的,并且可能会说明无法立即传送出去的原因;

    Sender/Recipient:送信与收信者的电子邮件

    事实上这封信是放置在 /var/spool/postfix 里面,由于信件内容已经编码为给MTA 看的资料排列, 所以你可以使用 postcat 来读出原信件的内容,cd /var/spool/postfix/maildrop

    postcat 5CFBB21DB <==这个档名就是 Queue ID

    named_attribute: rewrite_context=local <==分析 named (DNS) 的特性来自本机

    sender_fullname: root <==发信者的大名与 email

    sender: root

    recipient: root   <==就是收件者!

    如此一来就知道我们的MTA主机有多少未送出的信件,还有未送出信件的内容你也可以追踪到的,如果你想要我们的 postfix 立刻尝试将这些在队列当中的信件寄出去:

    执行/etc/init.d/postfix restart              postfix flush           比较建议使用 postfix flush 

    接下来,让我们先来处理一下收信的 MRA 服务器, 搞定后再来处理客户端的用户接口

    防火墙设置  因为整个 MTA 主要是透过 SMTP (port 25) 进行信件传送的任务,因此,针对postfix 来说,只要放行 port 25 即可

    vim /usr/local/virus/iptables/iptables.rule

    # 找到底下这一行,并且将它批注拿掉

    iptables -A INPUT -p TCP -i $EXTIF --dport 25 --sport 1024:65534 -j ACCEPT

    /usr/local/virus/iptables/iptables.rule  这样就放行整个 Internet 对您服务器的 port 25 的读取

    MRA 服务器: dovecot 设定

    除非你想要架设 webmail 在你的 MTA 上头,否则,你的MTA收下了信件,你总得连上 MTA 去收信,收信要用的通讯协议pop3 以及 imap,这就是所谓的 MRA 服务器

    CentOS 6.x 使用的是dovecot 这个软件来达成 MRA 的相关通讯协议的,但由于 pop3/imap 还有数据加密的版本,底下我们就依据是否加密 (SSL) 来设定 dovecot 

    基础的 POP3/IMAP 设定

    你得要先确定已经安装了 dovecot 这个软件。而这个软件的配置文件只有一个,就是 /etc/dovecot/dovecot.conf 。我们仅要启动 pop3/imap 而已,所以可以这样设定即可

    yum install dovecot

    vim /etc/dovecot/dovecot.conf

    # 找到底下这一行,大约是在第 25 行左右的地方,复制新增一行内容如下:

    #protocols = imap pop3 lmtp

    protocols = imap pop3

    vim /etc/dovecot/conf.d/10-ssl.conf     ssl = no<==将第 6 行改成这样

    改完之后你就可以启动 dovecot,且检查看看 port 110/143 (pop3/imap) 有没有启动/etc/init.d/dovecot start,chkconfig dovecot on,netstat -tlnp | grep dovecot

    搞定!这样就可以提供使用者来收信件,这里只提供基本的明码 pop3/imap 传输而已, 如果想要启动其他如 pop3s (传输加密机制) 协议时,就得要额外的设定

    加密的 POP3s/IMAPs 设定:如果担心数据在传输过程会被窃取,或者是你的登入信息(账号与密码) 在使用,pop3/imap 时会被窃听, 那么这个 pop3s/imaps 就显的重要

    似的, 其实我们都是透过 openssl 这个软件提供的 SSL 加密机制来进行数据的加密传输。方式很简单,预设的情况下,CentOS 已经提供了 SSL 凭证范例文件给我们使用了。

    如果你一点都不想要使用预设的凭证,那么我们就来自己建一个,# 1. 建立凭证:到系统提供的 /etc/pki/tls/certs/ 目录下建立所需要的 pem凭证档:

    cd /etc/pki/tls/certs/      make vbirddovecot.pem

    # 2. 因为担心 SELinux 的问题,所以建议将 pem 档案放置到系统默认的目录去较佳!

    mv vbirddovecot.pem ../../dovecot/

    restorecon -Rv ../../dovecot

    # 3. 开始处理 dovecot.conf,只要 pop3s, imaps 不要明码传输的咯

    vim /etc/dovecot/conf.d/10-auth.conf

    disable_plaintext_auth = yes <==第 9 行改成这样!取消批注

    vim /etc/dovecot/conf.d/10-ssl.conf

    ssl = required<==第 6 行改成这样

    ssl_cert = </etc/pki/dovecot/vbirddovecot.pem <==12, 13 行变这样

    ssl_key = </etc/pki/dovecot/vbirddovecot.pem

    vim /etc/dovecot/conf.d/10-master.conf

    inet_listener imap { port = 0 <== 15 行改成这样}

    inet_listener pop3 { port = 0 <== 36 行改成这样}

    # 4. 处理额外的 mail_location 设定值!很重要!否则网络收信会失败:

    vim /etc/dovecot/conf.d/10-mail.conf

    mail_location = mbox:~/mail:INBOX=/var/mail/%u <==第 30 行改这样

    # 5. 重新启动 dovecot 并且观察 port 的变化: /etc/init.d/dovecot restart   netstat -tlnp | grep dovecot  , 最终你看到的 993 是 imaps 而 995 则是 pop3s

    防火墙设置

    上面的练习中,我们将 pop3/imap 关闭,转而打开 pop3s/imaps 了,,因此防火墙启动的埠口会不一样! 请依据您实际的案例来设定你所需要的防火墙才好。我们这里主要是开放

    993, 995 两个埠口

    vim /usr/local/virus/iptables/iptables.rule

    # 大约在 180 行左右,新增底下两行去!

    iptables -A INPUT -p TCP -i $EXTIF --dport 993 --sport 1024:65534 -j ACCEPT

    iptables -A INPUT -p TCP -i $EXTIF --dport 995 --sport 1024:65534 -j ACCEPT

    /usr/local/virus/iptables/iptables.rule  如果你的 pop3/imap 还是决定不加密的话,请将上面的 993/995 改成 143/110 即可

    MUA 软件:客户端的收发信软件

    Linux mail 

    LInux的操作系统当中有一支可以进行收发信件的软件,那就是mail这个指令,这个指令是由 mailx 这个软件所提供的,由于 mail 是 Linux 系统的功能,所以即使你的 port 25

    (smtp)没有启动,他还是可以使用的,只是该封邮件就只会被放到队列,而无法寄出去,底下我们来谈一谈最简单的 mail 用法

    mail dmtsai@www.centos.vbird

    Subject: Just test <==这里填写信件标题

    This is a test email. <==底下为信件的内容

    . <==注意,这一行只有小数点!代表结束输入之意! 

    这样就可以将信件寄出去了!另外,早期的 mail server 是可以接受 IP 寄信的,举例来说: mail dmtsai@[192.168.100.254] ,记得 IP 要用中括号包起来。不过由于

    受到垃圾邮件的影响, 现在这种方式几乎都无法成功的将信件寄出了

    利用已经处理完毕的『纯文本档』寄出信件,这不是【附件夹带】的方式,因为在程序里编写信件很痛苦,可以使用数据流导向来将一个文件中的内容寄给别人,可以这样作:

    mail -s 'My bashrc' dmtsai < ~/.bashrc

    开始查阅接收的信件

    同样的收信还是使用 mail。直接在提示字符之后输入 mail 时, 会主动的捉取使用者在 /var/spool/mail 底下的邮件信箱 (mailbox), 例如我 dmtsai 这个账号在输入 mail 后,

    就会将 /var/spool/mail/dmtsai 这个档案的内容读出来并显示到屏幕上

    输入mail 查看邮件,读信直接按Enter或输入数字按Enter,显示标题: (直接数入 h 或输入 h 数字),回复邮件: (直接输入 R ) ,删除邮件: (输入 d 数字)

    储存邮件到档案: (输入 s 数字 文件名),离开 mail: (输入 q 或 x )

    以『附件夹带』的方式寄信,你需要 uuencode 这个指令的帮忙,在 CentOS 当中这个指令属于sharutils ,请先利用 yum 来安装他吧,接下来你可以这样使用:

    [root@www ~]# uuencode [实际档案] [信件中的檔名] | mail -s '标题' email

    # 1. 将 /etc/hosts 以附件夹带的方式寄给 dmtsai

    uuencode /etc/hosts myhosts | mail -s 'test encode' dmtsai 这样就能寄出去了,

    不过,如果收下这封信件,同样的我们得要透过译码器来解碼 ,你得先将该档案存下来,然后这样做:

    [dmtsai@www ~]$ mail

    & s 11 test_encode

    [dmtsai@www ~]$ uudecode test_encode -o decode

    ll *code*

    -rw-r--r--. 1 dmtsai dmtsai 380 Aug 9 15:15 decode <==译码后的正确数据

    虽然 mail 这个指令不是挺好用的,不过至少他可以提供我们在 Linux 纯文本模式下的一个简单的收发信件功能! 不过,目前有个更棒的替代方案,那就是 mutt 这玩意儿

    Linux mutt  mutt 除了可以仿真 mail 这个指令之外, 他还能够透过 pop3/imap 之类的协议去读取外部的信件,yum install mutt 安装好

    直接以 mutt 进行寄送信件的动作:含快速附件夹带文件

    mutt [-a 附加檔] [-i 内文档] [-b 秘密副本] [-c 一般副本]  > [-s 信件标题] email 地址

    -a 附加檔:后面就是你想要传送给朋友的档案,是附加档案,不是信件内容

    -i 内文档:就是信件的内文部分,先编写成为档案而已;

    -b 秘密副本:原收件者不知道这封信还会寄给后面的那个秘密副本收件者;

    -c 一般副本:原收件者会看到这封信还有传给哪位收件者;

    -s 信件标题:这还需要解释吗?这封信的标头!

    email 地址:就是原收件者的 email

    # 1. 直接在线编写信件,然后寄给 dmtsai@www.centos.vbird 这个用户

    mutt -s '一封测试信' dmtsai@www.centos.vbird

    /root/Mail 不存在。 建立吗? ([yes]/no): y <==第一次用才会出现这个讯息

    To: dmtsai@www.centos.vbird

    Subject: 一封测试信

    随便写写!随便看看~! <==会进入 vi 画面编辑!很棒

    y:寄出 q:中断 t:To c:CC s:Subj a:附加档案 d:叙述  ?:求助 <== 按下 y 寄出

    # 2. 将 /etc/hosts 当成信件内容寄给 dmtsai@www.centos.vbird 这个用户:mutt -s 'hosts' -i /etc/hosts dmtsai@www.centos.vbird 记得最终在 vim 底下要按下 :wq 来储存寄出

    与 mail 在线编写文字不一样,mutt 竟然会呼叫 vi 让你去编辑你的信件,整个画面非常的直觉化!相当容易处理,如果需要附件夹带呢?尤其是夹带 binary program时,可以这样做:

    # 1. 将 /usr/bin/passwd 当成附件夹带,寄给 dmtsai@www.centos.vbird 用户

    mutt -s '附件' -a /usr/bin/passwd -- dmtsai@www.centos.vbird

    看到上表中的附件底下那两行,I 代表的是直接附在信件内的内文, A 才是附加档案,不过你想要使用 mutt 来附加档案时,必须要有底下的注意事项才行:

    1. -a filename 这个选项必须是在指令的最后面,如果上述的指令改写成:『 mutt -a /usr/bin/passwd -s "附件" ... 』就不行!会失败的

    2. 在文件名与 email 地址之间需要加上两个连续减号『 -- 』才行!如同上面测试的指令模样!

    以 mutt 来读不同通讯协议的信箱,与 mail 比较之下,mutt 可以直接透过网络的 pop3, imap 等通讯协议来读信,是相当优秀的一个功能

    mutt [-f 信箱位置] -f 信箱位置:如果是 imaps 的信箱,可以这样:『 -f imaps://服务器的IP 』

    # 1. 直接用 dmtsai 的身份读取本机的信箱内容: mutt

    # 2. 在上面的信件 14 号内容反白后,直接按下 Enter 会出现如下画面!

    # 3. 在上面画面按下 v 后,会出现相关的附件数据: 反白处按下 s 就能够储存附加档案,最后离开时,一直按下 q 

    我用 root 的身份去收 dmtsai 的 imaps 信件,会是怎样的情况

    # 1. 在服务器端必须要让 mail 这个群组能够使用 dmtsai 的家目录,所以要这样:

    # 2. 开始在客户端登入 imaps 服务器取得 dmtsai 的新邮件与邮件文件夹,mutt -f imaps://www.centos.vbird 

    在 www.centos.vbird 的使用者名称:dmtsai

    dmtsai@www.centos.vbird 的密码: 

    最终在密码设定正确后,你就会看到刚刚我们所看到的信件了,不过要注意的是,如果你的用户家目录在非正规目录, 那么可能会出现 SELinux 的错误,这时就得要重新修

    订一下你的 SELinux 安全本文的类型,如此一来,我们就直接以文本模式来取得网络邮件信箱

    Thunderbird 好用的跨平台 (Windows/Linux X) 软件

    自由软件最大的好处之一就是该软件大多可以进行移植,也就是在任何操作系统上面几乎都能够执行该软件的意思 http://moztw.org/thunderbird/    ThunderBird (雷鸟)

    以 dmtsai@www.centos.vbird 这个账号为范例来说明

    由于是第一次启动,所以 thunderbird 里面没有任何识别数据。此时你可以填写你要在 email 上面让人家看到的数据, 以及包括你登入远程信箱的账号密码等信息

    由于 Thunderbird 会尝试使用你输入的账号密码去登入远程服务器的 imaps 服务,所以就会出现如下图一般的凭证取得示意, 这时要按啥?当然是确认永久储存该凭证

    确定凭证 OK、账号密码也 OK 的话,就可以开始使用 Thunderbird 啦!

    由于是 imaps 的通讯协议,因此 Thunderbird 的内容会与服务器上面的 /var/spool/mail/dmtsai 这个信箱内容同步喔!不像 POP3 抓下来就删除服务器的信件! 真是好好用的软件

    由于 gmail 等免费邮件的盛行,目前连 Openwebmail 自由软件都很少人安装了,几乎全部使用gmail, yahoo mail, hotmail 等的 web 接口的 MUA,根本没人在用本机端的 MUA 了

    但是, 某些时刻某些过时的信件还是得要从web mail 上面捉下来,这时,Thunderbird 就派上用场

    邮件服务器的进阶设定

    在这一个小节当中,关于收信的过滤机制方面,底下主要针对 postfix 的邮件收下过滤处理,以及重新发送的 Relay 过程进行介绍,这两个过程在 postfix 的设定中,主要有几个重要

    的项目管理:

    smtpd_recipient_restrictions:recipient 是收件者的意思,这个设定值主要在管理『由本机所收下的信件』的功能,因此大部分的设定都是在进行邮件过滤以及是否为可信任邮件的意

    思。 来源可以是 MTA 或 MUA 的意思

    smtpd_client_restrictions:client 是客户端的意思,因此主要在管理客户端的来源是否可信任。 可以将非正规的 mail server 来信拒绝掉的!来源当然就是 MUA

    smtpd_sender_restrictions:sender 是寄件人的意思,可以针对信件来源(对方邮件服务器) 来进行分析过滤的动作。来源理论上就是 MTA

    邮件过滤一:用 postgrey 进行非正规 mail server 的垃圾信抵挡 

    在邮件无法顺利寄出时该邮件会暂时放置到队列中一段时间, 并一直尝试将信件寄出的动作,预设直到五天后若还是无法寄出才会将信件退回。

    根据这个合法与非法的邮件服务器运作流程而发展出一套所谓的曙光 (postgrey)软件, 你可以参考底下的几个说明来了解这个软件:

    http://isg.ee.ethz.ch/tools/postgrey/         http://www.postfix.org/SMTPD_POLICY_README.html

    基本上 postgrey 主要的功能是在记录发信来源而已,若发信来源同一封信第一次寄来时, postgrey 预设会抵挡他,并且将来源地址记录起来,在约 5 分钟后,若该

    信件又传来一次时, 则该信件会被收下来。如此则可以杜绝非发邮件服务器单次发送的问题,但对于你确定合法的主机则可以开放所谓的『白名单 (whitelist) 』来优先通过而不抵挡

    主要是这样进行的:(参考http://projects.puremagic.com/greylisting/whitepaper.html)

    1. 确认发信来源是否在白名单中,若是则予以通过;

    2. 确认收信者是否在白名单中,若是则予以通过;

    3. 确定这封信是否已经被记录起来呢?放行的依据是:

    4.若无此信件的记录,则将发信地址记录起来,并将信件退回;

    5. 若有此信件的记录,但是记录的时间尚未超过指定的时间 (预设 5分钟),则依旧退回信件;

    6. 若有信件的记录,且记录时间已超过指定的时间,则予以通过;

    整个过程简单的来说就是这样而已。不过为了要快速的达成 postgrey 的『记录』能力,所以数据库系统又是不可避免的东西。 且 postgrey 是由 perl 写成的,你可

    能也需要加入很多相依的 perl 模块才行。总的来说,你需要的软件至少要有:

    BerkeleyDB: 包括 db4, db4-utils, db4-devel 等软件:

    Perl: 使用 yum install perl 即可;

    Perl 模块: perl-Net-DNS 是 CentOS 本身有提供的,其他没有提供的可以到 http://rpmfind.net/去搜寻下载

    安装流程:  官网介绍:http://wiki.centos.org/HowTos/postgrey   在线安装软件:http://wiki.centos.org/AdditionalResources/Repositories/RPMForge

    http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm 这个软件且放置到 /root 底下,然后这样做:

    rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt

    rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

    yum install postgrey

    上述的动作在进行数字签名档案的安装、yum 配置文件的建置,以及最终将 postgrey透过网络安装起来而已,整个流程简单到不行呢!最重要的是,找到适合你的 yum 配

    置文件软件来安装就是了

    启动与设定方式: 因为 postgrey 是额外的一个软件,因此我们还是得要将它视为一个服务来启动,同时 postgrey 是本机的 socket 服务而非网络服务,他只提供给本机的 postfix 来

    作为一个外挂,因此观察的方式并不是观察 TCP/UDP 之类的联机,

    /etc/init.d/postgrey start

    chkconfig postgrey on

    netstat -anlp | grep postgrey

    上表中最重要的就是那个输出的 path 项目啦!/var/spool/postfix/postgrey/socket 是用来做为程序之间的数据交换, 这也是我们的 postfix 要将信件交给 postgrey 处

    理的一个相当重要的接口,有了这个数据后,接下来我们才能够开始修改 postfix 的main.cf

    vim /etc/postfix/main.cf

    # 1. 更改 postfix 的 main.cf 主配置文件资料:

    # 一般来说, smtpd_recipient_restrictions 得要手动加入才会更动默认值:

    smtpd_recipient_restrictions = permit_mynetworks, <==默认值,允许来自 mynetworks设定值的来源

    reject_unknown_sender_domain, <==拒绝不明的来源网域 (限制来源MTA )

    reject_unknown_recipient_domain, <==拒绝不明的收件者 (限制目标MTA)

    reject_unauth_destination, <==默认值,拒绝不信任的目标

    check_policy_service unix:/var/spool/postfix/postgrey/socket

    # 重点是最后面那一行!就是指定使用 unix socket 来连接到 postgrey 之意

    # 2. 更改 postgrey 的抵挡秒数,建议将原本的 300 秒 (五分钟) 改为 60秒较佳:

    vim /etc/sysconfig/postgrey <==预设不存在,请手动建立

    OPTIONS="--unix=/var/spool/postfix/postgrey/socket --delay=60"

    # 重点是 --delay 要抵挡几秒钟,默认值为 300 秒,我们这里改为 60 秒等待

    /etc/init.d/postfix restart

    /etc/init.d/postgrey restart

    由于过往的经验指出,等待 5 分钟有时候会让某些正常的 mail server 也会被拒绝好久,对于紧急的信件来说,这样有点不妥。 因此,CentOS 官网也建议将这个数值改小

    一点,例如 60 秒即可。反正,不正常的信件第一次寄就会被拒绝, 等多久似乎也不是这么重要了。然后,在 postfix 的设定中,默认值仅有允许本机设定(permit_mynetworks) 以及拒绝

    非信任的目标 (reject_unauth_destination), 根据经验,先加入拒绝发件人 (MTA) 的不明网域以及拒绝收件者的不明网域的信件了,这样也能够减少一堆不明的广告信件。最终才加入

    postgrey 的分析

    要注意的是,smtpd_recipient_restrictions 里面的设定是有顺序之分的!以上面的流程来说, 只要来自信任用户,该封信件就会被收下会转递,然后不明的来源与

    目标会被拒绝,不受信任的目标也会被拒绝, 这些流程完毕之后,才开始正常信件的postgrey 机制处理!这样其实已经可以克服一堆广告信了! 接下来,让我们测试看看

    postgrey 有没有正常运作!请在外部寄一封信到本机来吧!例如寄给dmtsai@www.centos.vbird, 然后查一下 /var/log/maillog 的内容看看

    事先取消 permit_mynetworks 之后才开始测试,测试完毕后又将permit_mynetworks 加回来才好!这样才能看到上述的资料。 这表示 postgrey 已经开始顺利运作了!

    并且来源主机的相关记录也已经记载在/var/spool/postfix/postgrey/ 目录下啰!如此一来您的 postfix 将可以透过postgrey 来挡掉一些莫名其妙的广告信

    设定不受管制的白名单:

    不过 postgrey 也是有缺点的,怎么说呢?因为 postgrey 预设会先将信件退回去, 所以你的信件就可能会发生延迟的问题, 延迟的时间可能是数分钟到数小时,端看你

    的 MTA 设定而定。如果你想要让『某些信任的邮件主机不需要经过 postgrey 的抵挡机制』时,就得要开放白名单

    白名单的开启也很简单啊,直接编写 /etc/postfix/postgrey_whitelist_clients这个档案即可。 假设你要让鸟哥的邮件服务器可以自由的将信寄到你的 MTA 的话,那

    么你可以在这个档案内加入这一行:

    vim /etc/postfix/postgrey_whitelist_clients

    mail.vbird.idv.tw

    www.centos.vbird

    # 将主机名写进去吧!

    /etc/init.d/postgrey restart

    如果你还有更多信任的 MTA 服务器的话,将他写入这个档案当中!那他就可以略过postgrey 的分析。

    邮件过滤二:关于黑名单的抵挡机制

    讲到的 Open Relay 的问题吧?你的 MTA 可千万不能成为 OpenRelay 的状况,否则对你的网络与『信用』影响很大,一般来说,只要是 Open Relay的邮件 MTA 都会被列入黑名单

    当中, 例如台湾地区的学术网络黑名单以及因特网社会上提供的黑名单数据库: http://rs.edu.tw/tanet/spam.html  http://cbl.abuseat.org/

    既然黑名单数据库里面的 mail server 本身就是有问题的邮件主机,那么当黑名单里面的主机想要跟我的 mail server 联机时,我当然可以『合理的怀疑该信件是有

    问题的! 您说是吧! 所以来自黑名单或者是要送至黑名单的信件最好是不要接受

    您当然可以自行前往该网站将有问题的主机列表给他加入自己的邮件主机抵挡机制当中, 不过就是不太人性化!既然因特网社会已经提供了黑名单数据库了,我们就

    可以利用这个数据库来抵挡嘛! 在决定是否进行 Relay 之前,先要求我们的 postfix前往追踪黑名单的数据库, 若目标的 IP 或主机名是黑名单的一员,则我们就将该信件拒绝

    Postfix 设定黑名单检验真的很简单,你只要这样做即可:

    vim /etc/postfix/main.cf

    smtpd_recipient_restrictions =

    permit_mynetworks,

    reject_unknown_sender_domain,

    reject_unknown_recipient_domain,

    reject_unauth_destination,

    reject_rbl_client cbl.abuseat.org,

    reject_rbl_client bl.spamcop.net,

    reject_rbl_client cblless.anti-spam.org.cn,

    reject_rbl_client sbl-xbl.spamhaus.org,

    check_policy_service unix:/var/spool/postfix/postgrey/socket

    # 请注意整个设定值的顺序才好!在 postgrey 之前先检查是否为黑名单

    smtpd_client_restrictions =

    check_client_access hash:/etc/postfix/access,

    reject_rbl_client cbl.abuseat.org,

    reject_rbl_client bl.spamcop.net,

    reject_rbl_client cblless.anti-spam.org.cn,

    reject_rbl_client sbl-xbl.spamhaus.org

    # 这个设定项目则是与客户端有关的设定!拒绝客户端本身就是黑名单的一员!

    smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain

    # 此项目则在抵挡不明的送件者主机网域啰!与 DNS 有关系的

    /etc/init.d/postfix restart

    上表当中的特殊字体部分『reject_rbl_client』是 postfix 内的一个设定项目,后面可以接因特网上提供的黑名单!您得要注意的是,这个黑名单数据库可能会持续的变动,

    请您先以 dig 的方式检查每个数据库是否真的存在, 如果存在才加以设定在您的主机上头啊!(因为因特网上头很多文献所提供的黑名单数据库似乎已经不再持续服务的样子!)

    检查你的邮件服务器是否在黑名单当中?

    既然黑名单数据库所记录的是不受欢迎的来源与目标 MTA ,那么您的 MTA 当然最好不要在该数据库中嘛! 同时这些数据库通常也都有提供检测的功能,所以你也可以

    用该功能来检查你的主机是否『记录有案』呢? 你可以这样处理的:

    1. 是否已在黑名单数据库中: 确认的方法很简单,直接到『http://cbl.abuseat.org/lookup.cgi 』输入您的主机名或者是 IP ,就可以检查是否已经在黑名单当中;

    2. 是否具有 Open Relay: 如果要测试你的主机有没有 Open Relay ,直接到『http://rs.edu.tw/tanet/spam.html 』这个网页, 在这个网页的最下方可以输入你的 IP 来检查,注意喔,不

    要使用别人的 email IP 吶! 此时该主机会发出一封 mail 的测试信看看你的 mail server 会不会主动的代转, 然后将结果回报给您。要注意的是,回传的网页可能有编码的问题,如果

    出现乱码时,请调整为 big5 编码即可

    3. 如何移除:如果被检查出,您的主机已经在黑名单当中,那么请立刻将 Open Relay 的功能关闭,改善你的 Mail Server 之后,你可能还要到各个主要的 Open Relay 网站进行移除的

    工作。如果是学术网络的话, 请与您单位的管理员联络。至于一般常见的黑名单数据库则通常会主动的帮您移除,只不过需要一些时间的测试就是了。

    邮件过滤三:基础的邮件过滤机制

    在整封信的传送流程当中,客户端若通过主机的重重限制后,最终应该可以到达邮件队列当中。 而由队列当中要送出去或者是直接送到 mailbox 就得要透过 MDA 的处

    理。MDA 可以加挂很多机制呢! 尤其是他可以过滤某些特殊字眼的广告信件或病毒信件呢! MDA 可以透过分析整封信件的内容 (包括标头以及内文) 来撷取有问题的关键词,然后决

    定这封信的『命运』说!

    咱们的 postfix 已经有内建可以分析标头或者是内文的过滤机制了,那就是/etc/postfix/ 目录下的 header_checks 以及 body_checks 这两个档案啊!在预设的

    情况下这两个档案不会被 postfix 使用, 你必需要用底下的设定来启用他:

    vim /etc/postfix/main.cf

    header_checks = regexp:/etc/postfix/header_checks

    body_checks = regexp:/etc/postfix/body_checks

    # 那个 regexp 代表的是『使用正规表示法』的意思

    touch /etc/postfix/header_checks

    touch /etc/postfix/body_checks

    /etc/init.d/postfix restart

    接下来你必需要自行处理 header_checks 以及 body_checks 的规则设定,在设定前请您确认『 你对于正规表示法是熟悉的 』才行!因为很多信息都必需要透过正规表示法

    来处理啦!然后开始设定的依据是:

    只要是 # 代表该行为批注,系统或直接略过;

    在默认的规则当中,大小写是视为相同的;

    规则的设定方法为:

    /规则/ 动作 显示在登录文件里面的讯息

    请注意,要使用两个斜线『 / 』将规则包起来,举个例子来说明:例如我想要 (1)抵挡掉标题为 A funny game 的信件,(2)并且在登录文件里面显示drop header deny,则可以在

    header_chekcs 档案中可以这样写:/^Subject:.*A funny game/  DISCARD  drop header deny

    关于动作有底下几个动作:

    REJECT :将该封信件退回给原发信者;

    WARN : 将信件收下来, 但是将该封信的基本数据记录在登录文件内;

    DISCARD:将该封信件丢弃,并不给予原发信者回应!

    自己可以作一些规则的比对,只不过.....效能不好!如果您有兴趣的话,可以自行下载来看看, 不过,使用的后果请自行评估!因为每个人的环境都不一样

    header: http://linux.vbird.org/linux_server/0380mail/header_checks

    body: http://linux.vbird.org/linux_server/0380mail/body_checks

    记得,如果你自行修改过这两个档案后,务必要检查一下语法才行! postmap -q - regexp:/etc/postfix/body_checks < /etc/postfix/body_checks

    如果没有出现任何错误,那就表示您的设定值应该没有问题,你也可以使用procmail 这个抵挡的小程序来处理。 不过,鸟哥觉得 procmail 在大型邮件主机当中,

    分析的过程太过于繁杂,会消耗很多 CPU 资源,因此后来都没有使用这玩意儿

    非信任来源的 Relay:开放 SMTP 身份认证

    由 MUA 透过 MTA 来寄发信件时 (具有 Relay 的动作时),理论上 MTA 必需要开放信任用户来源才行,这就是为啥我们必需要在 main.cf 里头设定 smtpd_recipient_restrictions 那个

    设定项目的原因了(mynetworks)!不过人总有不方便的时候, 举例来说,如果你的客户端使用的是拨接制的 ADSL 所以每次取得的 IP 都非固定,那如何让你的用户使用你的 MTA

    这个时候 SMTP认证或许有点帮助。

    什么是 SMTP 呢?就是让你在想要使用 MTA 的 port 25 (SMTP 协议) 时,得要输入账号密码才能够使用的意思!既然有了这个认证的功能,于是乎,你就可以不用设定

    MTA 的信任用户项目! 举例来说, 在本章提到的环境下, 你可以不用设定 mynetworks 这个设定值啊!启动 SMTP 认证,让你的用户需要输入账密才能 Relay !那如何让 SMTP

    支持身份认证咱们的 CentOS 已经有提供内建的认证模块,那就是 Cyrus SASL 这个软件的帮忙

    Cyrus SASL (http://cyrusimap.web.cmu.edu/),在 SMTP 认证方面,Cyrus 主要提供了 saslauthd 这个服务来进行账号密码的比对动作,也就是说:当有任何人想要

    进行邮件转递功能时, Postfix 会联络 saslauthd 请其代为检查账号密码,若比对通过则允许客户端开始转寄信件

    好了,如果你想要使用最简单的方式,就是直接透过 Linux 自己的帐密来进行SMTP 认证功能,而不使用其他如 SQL 数据库的身份认证时,在 CentOS 当中你应该要这样做:

    1. 安装 cyrus-sasl, cyrus-sasl-plain, cyrus-sasl-md5 等软件;

    2. 启动 saslauthd 这个服务;

    3. 设定 main.cf 让 postfix 可以与 saslauthd 联系;

    4. 客户端必需要在寄信时设定『邮件主机认证』功能。

    如此一来客户端才能够启动 SMTP AUTH 喔!关于软件安装方面,请使用 yum 直接安装吧!不再多啰唆!底下我们由启动 saslauthd 这个服务开始谈起

    启动 saslauthd 服务:进行 SMTP 明码身份验证功能

    saslauthd 是 Cyrus-SASL 提供的一个账号密码管理机制,他能够进行挺多的数据库验证功能,不过这里我们仅使用最单纯简单的明码验证 (PLAIN)!如果我们想要直

    接使用 Linux 系统上面的用户信息, 也就是 /etc/passwd, /etc/shadow 所记载的账号密码相关信息时,可以使用 saslauthd 提供的『 shadow 』这个机制, 当然也能使用『 pam 』

    啦!更多的 saslauthd 联机至 MTA 的机制请『 man saslauthd 』来查阅吧。 由于我们的帐密可能来自网络其他类似 NIS 服务器,因此这里建议可以使用 pam模块

    saslauthd 的启动真是好简单,首先你必需要选择密码管理机制,这个可以使用底下的方式处理:

    # 1. 先了解你的 saslauthd 有支持哪些密码管理机制:

    saslauthd -v

    saslauthd 2.1.23

    authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap

    # 上列的特殊字体部分就是有支持的!我们要直接用 Linux 本机的用户信息, # 所以用 pam 即可,当然也能够使用 shadow 啦

    # 2. 在 saslauthd 配置文件中,选定 pam 的验证机制: [root@www ~]# vim /etc/sysconfig/saslauthd   MECH=pam <==其实这也是默认值啊!

    # 这也是默认值,有的朋友喜欢单纯的 shadow 机制,也可以啦!

    # 3. 那就启动吧!

    [root@www ~]# /etc/init.d/saslauthd start

    [root@www ~]# chkconfig saslauthd on

    之后我们必需要告知 Cyrus 这个咚咚使用来提供 SMTP 服务的程序为 saslauthd 才行,设定的方法很简单:vim /etc/sasl2/smtpd.conf

    log_level: 3  <==登录文件信息等级的设定,设定 3 即可

    pwcheck_method: saslauthd <==就是选择什么服务来负责密码的比对啊

    mech_list: plain login <==那么支持的机制有哪些之意

    我们可以使用 mech_list 列出特定支持的机制。而且 saslauthd 是个很简单的账号密码管理服务,你几乎不需要进行什么额外的设定,直接启动他就生效了

    更改 main.cf 的设定项目:让 postfix 支持 SMTP 身份验证

    那我们的 postfix 该如何处理呢?其实设定真的很简单,只要这样做就好了:

    vim /etc/postfix/main.cf

    # 在本档案最后面增加这些与 SASL 有关的设定资料:

    smtpd_sasl_auth_enable = yes

    smtpd_sasl_security_options = noanonymous

    broken_sasl_auth_clients = yes

    # 然后找到跟 relay 有关的设定项目,增加一段允许 SMTP 认证的字样:

    smtpd_recipient_restrictions =

    permit_mynetworks,

    permit_sasl_authenticated, <==重点在这里!注意顺序!

    reject_unknown_sender_domain,

    reject_unknown_recipient_domain,

    reject_unauth_destination,

    reject_rbl_client cbl.abuseat.org,

    reject_rbl_client bl.spamcop.net,

    reject_rbl_client cblless.anti-spam.org.cn,

    reject_rbl_client sbl-xbl.spamhaus.org,

    check_policy_service unix:/var/spool/postfix/postgrey/socket

    /etc/init.d/postfix restart

    上面关于 SASL 的各个项目的意义是这样的:

    smtpd_sasl_auth_enable:设定是否要启动 sasl 认证的意思,如果设定启动后 postfix 会主动去加载 cyrus sasl 的函式库, 而该函式库会依据 /etc/sasl2/smtpd.conf 的设定

    来连结到正确的管理账号与密码的服务

    smtpd_sasl_security_options 由于不想要让匿名者可以登入使用 SMTP 的 Relay 功能,于是这个项目中只要设定 noanonymous 即可

    broken_sasl_auth_clients 这个是针对早期非正规 MUA 的设定项目,因为早期软件开发商在开发 MUA 时没有参考通讯协议标准, 所以造成在 SMTP 认证时可能会发生的一些困扰

    。这些有问题的 MUA 例如 MS 的 outlook express 第四版就是这样! 后来的版本应该没有这个问题。所以这个设定值你也可以不要设定

    smtpd_recipient_restrictions 最重要的就是这里啦!我们的 sasl 认证可以放在第二行,在局域网络这个可信任区域的后面加以认证。 上表的设定意义是:局域网络内的 MUA 不需要

    认证也能够进行 relay ,而非区网内的其他来源才需要进行 SMTP 认证之意。

    设定完毕也重新启动 postfix 之后,我们先来测试看看是否真的提供认证了?   telnet localhost 25

    250-AUTH LOGIN PLAIN <==你得要看到这两行才行呦!

    在客户端启动支持 SMTP 身份验证的功能:以 thunderbird 设定为例

    既然已经在 MTA 设定了 SMTP 身份验证,那么我们 MUA 当然要传送账号、密码给MTA 才能通过 SMTP 的验证,所以,在 MUA 上面就得要加上一些额外的设定才行

    我们依旧以 Thunderbird 来作为介绍,请打开 thunderbird,选择『工具』-->『账号设定』后会出现如下画面:

    先选择 SMTP 寄件服务器;,然后选择所需要的寄件 SMTP 服务器后,点选编辑, 就会出现上图中的窗口项目。选择不安全传输的密码后,在填入你要使用的账号即可

    如果要测试的话,记得此客户端不要在局域网络内,否则将不会经过认证的阶段,因为我们的设定以信任网域为优先

    如果一切都顺利的话,那么当客户端以 SMTP 来验证时,你的登录档应该会出现类似底下的讯息才是: tail -n 100 /var/log/maillog | grep PLAIN

    Aug 10 02:37:37 www postfix/smtpd[18655]: 01CD43712: client=vbirdwin7   [192.168.100.30], sasl_method=PLAIN, sasl_username=dmtsai

    非固定 IP 邮件服务器的春天: relayhost

    们上面提到,如果你要架设一部合法的 MTA 最好还是得要申请固定的 IP 以及正确对应的反解比较恰当。 但如果你一定要用浮动 IP 来架设你的 MTA 的话,也不是不可以啦,

    尤其今年 (2011) 光纤到府已经可达 50M/5Mbps 的下载/上传速度了!你当然可以用家庭网络来架站啊!只不过你就得要透过上层 ISP 所提供的 relay 权限

    当你的 MTA 要传信件给目标 MTA 时,如果直接传给目标 MTA,由于你的 IP 可能是非固定的,因此对方 MTA 恐怕会把你当成是垃圾来源!那如果我们可以透过 ISP 进

    行转递,当你要传给目标 MTA 时:先将信件交给妳的 ISP,因为你是 ISP 的客户,通常来信都会被 ISP 接受,因此这个时候这封信就会被你的ISP 给 relay 出去;

    被 ISP 所 relay 的信件到目标 MTA 时,对方会判断是来自那部 ISP 的 MTA,当然是合法的 mail server, 所以该封信件就毫无疑问的被收下

    不过想要以此架构来架设你的 MTA 仍有许多需要注意的地方:

    你还是得要有一个合法的主机名,若要省钱,可以使用 DDNS 来处理;

    你上层的 ISP 所提供的 MTA 必需要有提供你所在 IP 的 relay 权限;

    你不能使用自定义的内部 DNS 架构了,因为所有 relay 的信都会被送至ISP 的 MTA

    尤其是最后一点,因为所有外送的信件全部都会被送到 ISP 处,所以像我们之前自己玩的 centos.vbird 这种非合法的领域数据就没用了!为什么呢?你想想看,如果

    你要将信件送给 www.centos.vbird, 但由于上述 relayhost 的功能,所以这封信会被传到 ISP 的 MTA 来处理, ISP 的 MTA 会不会认识你的 centos.vbird

    说是挺难的,做起来却很简单,只要在 main.cf 里面加设一段数据即可。 假设你的环境是台湾地区的 hinet 所提供的用户,而 hinet 提供的邮件主机为

    ms1.hinet.net , 则你可以直接这样设定vim /etc/postfix/main.cf

    # 加入底下这一行就对啦!注意那个中括号!

    relayhost = [ms1.hinet.net]

    /etc/init.d/postfix restart

    之后你只要尝试寄一封信出去看看,就会了解这封信是如何寄送的了。看一下登录档的内容会像这样:tail -n 20 /var/log/maillog

    经由上层 ISP 来转寄啦!如此一来,你的 MTA 感觉上就似乎是部合法的 MTA,不过,可别利用这个权限来滥发广告信,因为您所透过的那个 ISP 邮件主机可是有

    记录你的 IP 来源, 如果你乱来的话,后果可是不堪设想

    其他设定小技巧

    除了之前谈到的几个主要的设定之外, postfix 还有提供一些不错的设定要给大家使用的

    单封信件与单个邮件信箱的大小限制

    在预设的情况下,postfix 可接受的单封信件最大容量为 10MBytes ,不过这个数值我们是可以更改的, 动作很简单:

     vim /etc/postfix/main.cf

    message_size_limit =40000000

    postfix reload

    上面的单位是 bytes,所以我将单封信件可接受大小改为 40MByte 的意思啦,请按照你的环境来规定这个数值。 而从前我们要管制 /var/spool/mail/account 大多是使用

    文件系统内的 quota 来达成, 现在的 postfix 不需要,可以这样做:vim /etc/postfix/main.cf

    mailbox_size_limit = 1000000000  postfix reload  我给每个人 1GB 的空间

    寄件备份:SMTP 自动转寄一份到备份匣

    收件备份我们知道可以使用 /etc/aliases 来处理的, 但是如果想要送件也备份,利用底下的方式即可:

    vim /etc/postfix/main.cf      always_bcc = some@host.name

    [root@www ~]# postfix reload

    如此一来任何人寄出的信件都会复制一份给 some@host.name 那个信箱。不过,除非您的公司很重视一些商业机密, 并且已经公告过所有同仁,否则进行这个设定值,

    个人认为侵犯隐私权很严重

    配置文件的权限问题:权限错误会不能启动 postfix

    这部份我们以 Sendmail 官方网站的建议来说明喔!其实也适用于 postfix 的啦!其中,大部分是在于『目录与档案权限』的设定要求上面

    请确定 /etc/aliases 这个档案的权限,仅能由系统信任的账号来修改,通常其权限为 644 ;

    请确定 Mail server 读取的数据库 (多半在 /etc/mail/ 或/etc/postfix/ 底下的 *.db 档案),例如 mailertable, access,virtusertable 等等,仅能由系统信任的用户读取,其他一概不能读取,

    通常权限为 640

    系统的队列目录 (/var/spool/mqueue 或 /var/spool/postfix) 仅允许系统读取,通常权限为 700 

    请确定 ~/.forward 这个档案的权限也不能设定成为任何人均可查阅的权限,否则您的 e-mail 数据可能会被窃取

    总之,一般用户能够不用 ~/.forward 与 aliases 的功能,就不要使用!

    不过整体的使用上还是需要身为网站管理员的您多费心!多多观察登录档

    备份资料:与 mail 有关的目录是哪些

    不管什么时候,备份总是重要的!那么如果我是单纯的 Mail Server 而已,我需要的备份数据有哪些?

    /etc/passwd, /etc/shadow, /etc/group 等与账号有关的资料

    /etc/mail, /etc/postfix/ 底下的所有档案数据

    /etc/aliases 等等 MTA 相关档案

    /home 底下的所有用户数据;

    /var/spool/mail 底下的档案与 /var/spool/postfix 邮件队列档案

    其他如广告软件、病毒扫瞄软件等等的设定与定义档

    错误检查:查出不能启动 postfix 的问题流程

    虽然 Mail 很方便, 但是仍然会有无法将信件寄出的时候!如果您已经设定好 MTA了,但是总是无法将邮件寄出去,那可能是什么问题呢?你可以这样追踪看看:

    1. 关于硬件配备: 例如,是否没有驱动网卡?是否调制解调器出问题?是否 hub 热当啦?是否路由器停止服务等等的!

    2. 关于网络参数的问题: 如果连不上 Internet ,那么哪里来的 Mail Server 呢?所以请先确认你的网络已经正常的启用了! 关于网络的确认问题

    3. 关于服务的问题:  请务必确认与 mail server 有关的埠口已经顺利启动!例如 port 25, 110, 143,993, 995 等等,使用 netstat 指令即可了解是否已经启动该服务

    4. 关于防火墙的问题: 很多时候,很多朋友使用 Red Hat 或者其他 Linux distribution 提供的防火墙设定软件,结果忘了启动 port 25 与 port 110 的设定,导致无法收发信件!请特别留

    意这个问题喔!可以使用 iptables 来检查是否已经启用该 port

    5. 关于配置文件的问题: 在启动 postfix 或者是 sendmail 之后,在登录档当中仔细看看有无错误讯息发生? 通常如果设定数据不对,在登录文件当中都会有记载错误的地方

    6. 其他档案的设定问题: (1)如果发现只有某个 domain 可以收信,其他的同一主机的 domain 无法收信,需要检查 $mydestination 的设定值才行; (2)如果发现邮件被挡下来了!而且老

    是显示 reject 的字样,那么可能被 access 挡住了; (3)如果发现邮件队列(mailq) 存在很多的邮件,可能是 DNS 死掉了,请检查 /etc/resolv.conf 的 设定是否正确

    7. 其他可能的问题: 最常发生的就是认证的问题了!这是由于使用者没有在 MUA 上面设定『我的邮件需要认证』的选项啦! 请叫你的用户赶紧勾选

    8. 还是不知道问题的解决方案:如果还是查不出问题的话,那么请务必检查您的 /var/log/maillog (有的时候 是 /var/log/mail ,这个要看 /etc/syslog.conf 的设定),当你寄出一封信的时

    候,例如 dmtsai 寄给 bird2@www.centos.vbird 时,那么 maillog 档案里面会显示出两行,一行为 from dmtsai 一行为 to bird2@www.centos.vbird, 也就是『我由哪里收到信,而这封

    信会寄到哪里去!』的意思,由这两行就可以了解问题了!尤其是 to 的那一行,里面包含了相当多的有用信息,包括邮件无法传送的错误原因的纪录。

















    4. 关于防火墙的问题:



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































     ,以及 SMTP after POP 两种,



    展开全文
  • 搭建私人邮件服务器

    万次阅读 多人点赞 2019-05-24 14:26:54
    怎样使用本地服务器搭建一个邮箱,这样就可以脱离qq或者其他企业邮箱的限制,即可以做到节省成本,又可以得到收发邮件的一个保密性。 这里我们先展示一下本地搭建邮箱服务器后的成功例子: 可以看到,这里qq邮箱...

    怎样使用本地服务器搭建一个邮箱,这样就可以脱离qq或者其他企业邮箱的限制,即可以做到节省成本,又可以得到收发邮件的一个保密性。
    这里我们先展示一下本地搭建邮箱服务器后的成功例子:
    在这里插入图片描述
    可以看到,这里qq邮箱收到我这边发送的一个测试邮件例子(特别说明一下,这里的wordcap.top 是我自己购买的一个域名)
    同样qq也可以向我发送邮件:
    在这里插入图片描述

    怎样搭建一个属于自己的私人邮箱服务器了,我这里演示一遍:
    准备:
    一个顶级域名:国内国外的都可以,当然也可以不需要顶级域名,前提是这个域名需要解析到你的服务器ip上
    frp 内网穿透(包含公网ip的服务器):这个方便本地调试(如果不是很懂也可以查看上篇微信中内网穿透文章)
    邮件服务器:Linux上可以用iredmail,Windows是可以用hMailServer,由于我为了方便测试,所以我用的是Windows版本的。
    Linux安装方式(这里大家如果是用的Linux服务器可以用这个)
    官网(开源iredmail安装方式):
    https://docs.iredmail.org/install.iredmail.on.rhel-zh_CN.html

    1.安装软件
    下载Windows版本的hMailServer
    https://www.hmailserver.com/download
    双击运行安装

    1.1输入邮件登录密码
    在这里插入图片描述
    安装完成之后连接本地服务器:
    1.2添加一个主机域名:
    在这里插入图片描述
    1.3添加一个邮箱账号
    在这里插入图片描述

    1.4查看该邮箱服务器是否是启动状态:
    在这里插入图片描述
    1.5使用foxmail 测试一下:
    下载安装
    在这里插入图片描述
    运行后手动配置(手动设置,设置密码等等):
    在这里插入图片描述
    1.6本地写封邮件测试:
    在这里插入图片描述
    本地虽然发送成功,但是收到腾讯的处理消息:
    在这里插入图片描述

    2.配置软件需要环境
    由于我们的ip地址是动态的,不是固定的所以受到限制
    2.1配置域名解析到服务器IP上
    这里我们为了方便测试,在某平台上花了9块人民币购买了一个域名,并配置了二级域名和解析地址:
    在这里插入图片描述

    2.2配置内网穿透文件
    同时为了方便测试,我们用内网穿透工具frp在本地进行测试:
    首先我们测试一下,端口在不符合常规邮件端口的情况下能否收到邮件:
    我们修改成这样:
    在这里插入图片描述
    2.3测试
    试着用qq发送邮件:
    在这里插入图片描述
    显示已经发生成功,但是我们查看邮件时却并未收到任何邮件
    在这里插入图片描述
    在这里插入图片描述
    2.4准确配置邮件监听端口
    我们监听一下25这个端口(收邮件端口并不进行修改):
    在这里插入图片描述
    2.6重新测试
    再重新写一封,我们发现通过25这个端口是可以接收到邮件的:
    在这里插入图片描述

    我们试着给qq发送一封小邮件:
    在这里插入图片描述
    发现也可以正常的收到
    所以,设置邮件服务器端口和我平常设置网页不一样,平常http接口可以通过url后缀进行修改端口号,但是邮件服务器端口都是指定的
    2.7使用代码实现注册邮件激活功能
    我们现在试着用代码测试一下发送一个激活邮件的功能(这里我是用的是spring boot 框架):
    代码如下(虽然可以配置spring boot yml 文件,但是测试时我这边使用的是代码,大家实际运用是改动一下就可以了):

       @Test
        public void sendSimpleMail() throws Exception {
            //手动创建的实例的属性和配置文件中的大致相同
            JavaMailSenderImpl sender=new JavaMailSenderImpl();
            sender.setDefaultEncoding("utf8"); //编码
            sender.setHost("mail.wordcap.top");//163 smtp服务器
            sender.setPort(25); //端口
            sender.setUsername("test@mail.wordcap.top"); //邮箱
            sender.setPassword("123456");//授权码
            sender.setProtocol("smtp"); //协议
            //配置额外属性
            Properties properties=new Properties();//额外设置的属性
            properties.setProperty("mail.smtp.auth", "true");//是否需要验证
            properties.setProperty("mail.smtp.timeout","2000");//超时
    //    properties.setProperty("mail.smtp.ssl.enable", "true");//ssl加密
    
    
            properties.setProperty("mail.debug", "true");//是否显示调试信息(可选测试用)
            properties.setProperty("mail.transport.protocol", "smtp");//协议
            properties.setProperty("mail.smtp.auth", "true");//设置用户验证
            properties.setProperty("mail.smtp.timeout","250000");//超时时间
            properties.setProperty("mail.smtp.connectiontimeout","250000");//超时时间
    
    
            sender.setJavaMailProperties(properties);
    
    
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom("test@mail.wordcap.top");
            message.setTo("2562957962@qq.com");
            message.setSubject("测试");
            message.setText("你的注册链接激活地址为 http://user.wordcap.top?m=678giyiy756gqwehoudas9f8heuqy9w8ehfashuihuwiqerhhd154845jdaskljgadjlfjaslfjasl0ewqnjngvjk");
            sender.setJavaMailProperties(properties);
            sender.send(message);
    
        }
    

    运行之后,qq上直接收到这封邮件:
    在这里插入图片描述
    在这里插入图片描述

    本地编译器输出如下:
    在这里插入图片描述

    测试完毕感觉还是不错的。

    展开全文
  • 主要问题如题.. 邮件服务器 按照这个连接 搭建完成了 http://www.tuicool.com/articles/FbQNZr6 使用 foxmail 也能连接...这几天才接触到 邮件服务器. 要 是有比较 详细 的文档 看看也可以. 麻烦 大家 啦. 谢谢
  • 1. 如何在我换了端口的情况 下使其它的邮件能向我的邮件服务器发送邮件 . 我尝试换端口 , 可以解决垃圾邮件问题,但是 . 其它(qq ) 邮件 的回复 无法收到. 2. 我对 inbound 的ip 进行了限制 使用 其它 邮件 向我 发...
  • 搭建邮件服务器,过程非常简单

    万次阅读 多人点赞 2017-11-10 15:54:59
    搭建邮件服务器,过程非常简单,只需几个步骤即可。通常在Linux搭建邮件服务器是需要安装很多软件和配置文件的,所以我们可以使用一个开源邮件服务器软件来搭建的。

    搭建邮件服务器,过程非常简单,只需几个步骤即可。

    通常在Linux搭建邮件服务器是需要安装很多软件和配置文件的,所以我们可以使用一个开源邮件服务器软件来搭建的。

    准备一台服务器与系统

    • 云服务器或本地虚拟的服务器都可以。
    • 服务器需要能链接网络。
    • 安装centos6/7系统,需要全新干净的系统环境。

    配置系统

    检查swap是否已启动,如没启动需要配置启动swap。
    

    下载EwoMail邮件服务器

    在git下载EwoMail开源版
    git地址:https://gitee.com/laowu5/EwoMail
    
    EwoMail集成的软件:
    
    Postfix:邮件服务器
    Dovecot:IMAP/POP3/邮件存储
    Amavisd:反垃圾和反病毒
    Fail2ban:监控策略
    LNAMP:apache2.2,nginx1.8, mysql5.5,php5.4
    EwoMail-Admin:WEB邮箱管理后台
    Rainloop:webmail
    

    安装

    将安装包重新命名ewomail.zip
    解压安装
    
    unzip -o ewomail.zip
    cd EwoMail/install
    #需要输入一个邮箱域名,不需要前缀,列如下面的xxx.com
    sh ./start.sh xxx.com
    安装成功会出现“Complete installation”
    剩下只需要配置域名DNS即可使用了
    

    配置域名DNS

    域名DNS

    请参考上图DNS配置
    将mail.ewomail.cn 改成你的安装的域名,例如(mail.安装的域名)
    红色部分请改为你的服务器IP

    管理后台

    这里写图片描述

    管理后台用于管理你的邮箱和域名,可以无限添加域名和邮箱。
    地址:http://IP:8010 (IP是你的服务器公网IP)

    WebMail

    这里写图片描述

    WebMail用于登录邮箱,发送与接收邮件。

    结尾

    经过以上几个步骤,基本已经完成搭建一个邮件服务器了,使用过程中如果有什么问题可以留言给我

    展开全文
  • 公司postfix邮件服务器,一直存在有被别人当做肉鸡在本地向外发送垃圾邮件一直 以来没有解决,下面为配置文件 queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/...
  • 企业邮件服务器系统

    千人学习 2017-03-03 16:16:11
    让每个人都能熟练企业实战的Linux平台邮件系统。
  • 配置邮件服务器及空邮件服务器

    千次阅读 2018-08-03 15:51:06
    配置邮件服务器 基础邮件服务 电子邮件服务器的基本功能 Ø 为用户提供电子邮箱存储空间(用户名@邮件域) Ø 处理用户发出的邮件——传递给收件服务器 Ø 处理用户收到的邮件——投递/存储到邮箱 注:DNS...

    配置邮件服务器

    基础邮件服务

    电子邮件服务器基本功能

    Ø 为用户提供电子邮箱存储空间(用户名@邮件域

    Ø 处理用户发出的邮件——传递给收件服务器

    Ø 处理用户收到的邮件——投递/存储到邮箱

    注:DNS起导航员的作用,引导用户发送给哪个邮箱服务器(识别ip)等

    搭建基本邮件服务器

    Ø 用户发邮件的协议 :SMTP  端口号 25(TCP 25,SMTP)

    Ø 用户收邮件的协议 :pop3  端口号 110        IMAP  端口号 143

     

    标配邮件服务器:本机的程序 ==》本机的postfix邮件服务器 

    普通邮件服务器:本机或其他主机的程序 ==》postfix邮件服务器 

    快速部署postfix邮件服务器

    • 装包、配置、起服务

    Ø 默认的标准配置即可为本机提供发/收邮件服务

    Ø 若有必要,可扩大服务范围(邮件域)

    (监听端口号为 TCP 25 SMTP):

    使用mail命令发信/收信

    发信操作:mail ---> 本机postfix

    mail  -s :邮件的主题

          -r:发件人

          -u:查看指定用户的邮件

         mail -s “邮件标题” 收件人[@收件域]

    ----回车输入邮件内容最后以.结束 或【Ctrl + d 提交】

    非交互式发邮件

    1.利用管道: echo “内容” | mail -s “主题” -r 发件人 收件人

    2.利用重定向输入 < 可以将文本文件的内容,当作命令的输入

    mail  -s  '邮件标题'  收件人地址  < 邮件正文.txt

    收信操作:mail ---> 本机的用户邮箱

        mail [-u 用户名]

    mail  -f  邮箱位置

    其他的邮件客户端软件:Outlook、Foxmail、Thunderbird、手机邮箱

    补充 【/etc/mail.rc】

    用户邮箱位置:

    /var/spool/mail/用户名

    home_mailbox = Maildir  【~用户/Maildir文件】

    home_mailbox = Maildir/  【~用户/Maildir目录】

    ###############################################################################

    示例:搭建postfix基础邮件服务

    在虚拟机server0上配置 postfix 基础服务,具体要求如下:

        监听本机的所有接口     将邮件域和邮件服务主机名都改为 server0.example.com

    然后在server0上使用mail命令测试发信/收信操作:

        由 yg 给虚拟机desktop0用户 xln 发一封测试邮件

        查收用户 xln 的邮箱,读取邮件内容,确保是从 yg@server0.example.com 发过来的

    步骤一:在Server0上配置postfix基础邮件服务

      1.设置永久的主机名) # echo server0.example.com > /etc/hostname

      2.安装postfix软件包  # yum  -y  install  postfix

      3.修改配置文件/etc/postfix/main.cf

    99行   myorigin = server0.example.com         //默认补全的(发件人)域名后缀

    116行 inet_interfaces = all                   //设置监听的网络接口(所有)

    164行 mydestination = server0.example.com  //符合(的收件人)域名的判定为本域邮件

    4.重起postfix服务:systemctl restart postfix

    5.查看邮件服务监听状态 # netstat  -antpu | grep  :25

        tcp    0    0 0.0.0.0:25        0.0.0.0:*        LISTEN      1739/master         

        tcp6   0     0 :::25              :::*           LISTEN      1739/master 

    步骤二:使用mail命令发信/收信

    创建测试用户# useradd yg

          # echo 123 | passwd --stdin yg    //创建yg用户,设置密码123

    1)给用户root发一封测试邮件

    #mail -s '葵花宝典' -r  yg   xln

    I find it!!!!

    .               //系统以点做为单独一行作为结束邮件编辑标识

    EOT

    此处也可用非交互发邮件:# echo 'I find it!!!!'  |  mail  -s  '葵花宝典' -r xln

    步骤三:在desktop0上配置postfix基础邮件服务(desktop0.example.com)

     1.设置永久的主机名 # echo desktop0.example.com > /etc/hostname

     2.安装postfix软件包  # yum  -y  install  postfix

     3.修改配置文件/etc/postfix/main.cf

    .. ..

     myhostname = desktop0.example.com //本机的主机名

    99行   myorigin = desktop0.example.com         //默认补全的(发件人)域名后缀

    116行 inet_interfaces = all                   //设置监听的网络接口(所有)

    164行 mydestination = desktop0.example.com //符合(的收件人)域名的判定为本域邮件

    4.重起postfix服务:systemctl restart postfix

    步骤二:使用mail命令发信/收信

    创建测试用户 # useradd xln

            # echo 123 | passwd --stdin xln    //创建xln用户,设置密码123

            # mail -u xln

    Heirloom Mail version 12.5 7/5/10.  Type ? for help.

    "/var/mail/xln": 1 message 1 new

    >N  1 yg@server0.example.c  Sat Aug 26 11:02  18/604   "葵花宝典"

    &  1            //读取第1封邮件内容

    Message  1:

    From yg@server0.example.com  Sat Aug 26 11:02:23 2017

    Return-Path: <yg@server0.example.com>

    X-Original-To: xln

    Delivered-To: xln@desktop0.example.com

    Date: Sat, 26 Aug 2017 11:02:23 +0800

    From: yg@server0.example.com

    To: xln@desktop0.example.com

    Subject: 葵花宝典                //检查邮件标题

    User-Agent: Heirloom mailx 12.5 7/5/10

    Content-Type: text/plain; charset=us-ascii

    Status: R

    I find it!!!!          //检查邮件内容

    & q                   //按q退出mail程序

    ###############################################################################

    nullclient邮件服务

    nullclient,空客户端

    本机程序 ==》postfix邮件服务器 ==》后端邮件服务器

    Ø 不提供任何邮箱帐号,因此不需要投递邮件  (类似于秘书,代发邮件

    Ø 但是可以为用户代发邮件

    postfix空客户端邮件服务器的功能

    Ø 不为用户提供电子邮箱

    Ø 为邮箱用户向其他邮件服务器发送邮件 (条件:后端普通邮件服务器)

    Ø 不接受(投递/存储)发送给给本服务器的邮件

    空客户端邮件服务器的工作环境:

    客户端 ---> 空客户端邮件服务器(发)---> 普通邮件服务器(发/收)

    因为客户端服务器发送邮件速度较慢,由空客户端代发,发送速度较快,且更安全

    排错查看:/var/log/maillog

    #########################################################################

    普通邮件服务器(desktop0):

    1)提供邮箱存储

    2)向外发送邮件

    3)对内投递邮件

     

    空客户端邮件服务器(server0):

    1)不提供邮箱存储

    2)向外发送邮件(伪装成指定的后端邮件服务器)

    3)不对内投递邮件

    示例:postfix空客户端邮件服务

    初始化后端邮件服务器desktop0.example.com,操作如下:lab  smtp-nullclient  setup 

    然后将虚拟机server0配置为空客户端邮件服务器,具体要求如下:

        此系统不接收外部发送来的邮件,本地发送的任何邮件都会自动路由到 smtp0.example.com       所发出的邮件显示来自于 desktop0.example.com

    在 server0 上发送一封标题为 Test1 的邮件给本地用户 student ;实际结果将由 desktop0 上的本地用户 student 接收到此邮件

    配置要点:将server0调整为空客户端邮件服务器:指定后端服务器,发件来源,禁止邮件投递功能

    步骤一:将server0配置为空客户端邮件服务器

    设置永久的主机名(server0.example.com)/etc/hostname

    1)安装postfix软件包 # yum  -y  reinstall  postfix

    注:新实验时要删除配置文件# rm  -rf  /etc/postfix/main.cf,再重装postfix

    2)修改main.cf配置文件,调整或修改现有配置

        # vim  /etc/postfix/main.cf

    99行myorigin = desktop0.example.com         //后端邮件服务器管辖的邮箱域

    116行inet_interfaces = loopback-only         //仅本机,或=localhost

    164行mydestination =                            //将投递域设为空(不投递)

    317行relayhost = [smtp0.example.com]    //后端邮件服务器的域名,将邮件交给smtp0

         mynetworks = 127.0.0.0/8  [::1]/128                  //【添加】信任网络smtp0

    3)启动postfix服务 # systemctl  restart  postfix

    4)查看邮件服务监听状态 # netstat  -antpu | grep  :25

        tcp        0      0 127.0.0.1:25      0.0.0.0:*     LISTEN      2054/master         

        tcp6       0      0 ::1:25            :::*          LISTEN      2054/master

    步骤二:将desktop0配置为后端邮件服务器

    设置永久的主机名(server0.example.com)/etc/hostname

    1)执行 lab smtp-nullclient setup //此命令为用于实验用的自定义命令

    [root@desktop0 ~]# lab  smtp-nullclient  setup  

    Setting up desktop machine... 

    Setting up dovecot... 

    Generating new dovecot certificate... 

    Setting up postfix... Generating new postfix certificates... 

    Setting up firewall... 

    Setting up user student... 

    Installing httpd to share cert...

     验证:空客户端发件给student,在desktop上的student接收到邮件

    2)确认发信服务(postfix) # netstat  -antpu | grep  :25

        tcp        0      0 0.0.0.0:25      0.0.0.0:*      LISTEN      31366/master        

        tcp6       0      0 :::25             :::*         LISTEN      31366/master        

    3)确认取信服务(dovecot)# netstat  -antpu | grep  dovecot

        tcp        0      0 0.0.0.0:143     0.0.0.0:*     LISTEN      31229/dovecot       

    步骤三:使用mail命令测试空客户端邮件服务器

    1)在server0(空客户端邮件服务器)上给本机用户student发信

        # echo  'Mail Data.'  |  mail  -s  'Test1'  student

        # mail  -u  student             //本机用户并不会收到邮件

    2)在desktop0(后端邮件服务器)上的同名用户student可以收到信

       # mail  -u  student            //收件正常 

    排错:

    1)在空客户端服务器上(server0)

    # > /var/log/maillog  //清空日志

    # mail .....

    # cat  /var/log/maillog   【less分页查看文件】

    .. ..

    status=sent  

    2)在后端邮件服务器上(desktop0)

    # cat  /var/log/maillog 

    .. ..

     loopback to myself        //邮件未成功投递

    展开全文
  • 主流邮件服务器地址

    千次阅读 2019-11-20 10:49:15
    163邮箱 POP3服务器:pop.163.com SMTP服务器:smtp.163.com IMAP服务器:imap.163.com QQ邮箱 ...yahoo邮箱smtp服务器 接:pop.mail.yahoo.com.cn 发:smtp.mail.yahoo.com 126邮箱smtp服务器 pop...
  • 邮件和邮件服务器

    千次阅读 2011-08-18 19:49:46
    邮件和邮件服务器   1. 我们普通个人使用163邮箱、QQ邮箱、雅虎邮箱、Gmail邮箱、新浪邮箱等等就足够了。   2. 大型企业或者有特殊需求的公司需要一个“自己的”邮件服务器,例如下面列举的企业邮件的地址: ...
  • 常见邮件服务器(接收服务器和发送邮件服务器)地址 ,平时设置ootlook的时候可以查看。 腾讯QQ邮箱 接收服务器:pop.qq.com 发送服务器:smtp.qq.com  网易126邮箱 接收服务器:pop3.126.com ...
  • gitlab 邮件服务器配置

    千次阅读 2017-03-29 09:58:22
    gitlab 邮件服务器配置
  • 配置邮件服务器

    千次阅读 2017-08-29 15:49:16
    去年配置一次,没有成功,没想到配置一个免费的邮件服务器,会那么复杂。前些天碰巧在GIT上看到有人做了一个dock image,把邮件服务器的各种程序打包,配好了,就又勾起了再一次配置邮箱服务器的想法,因为在vps上...
  • 接收邮件服务器 常用邮箱登陆入口: http://mail.163.com/ http://mail.sina.com.cn/ http://mail.sohu.com/ http://mail.tom.com/ http://mail.sogou.com/ http://www.126.com/ http://mail.10086.cn/ ...
  • 常见邮件服务器(接收服务器和发送邮件服务器)地址 ,平时设置ootlook的时候可以查看。 腾讯QQ邮箱 接收服务器:pop.qq.com 发送服务器:smtp.qq.com  网易126邮箱 接收服务器:pop3.1
  • foxmail常见邮件服务器地址设置

    万次阅读 2017-10-24 16:29:35
    腾讯QQ邮箱 接收服务器:pop.qq.com 发送服务器:smtp.qq.com  ...接收服务器:pop3.126.com ...发送服务器:smtp.126.com  ...接收服务器:pop.163.com ...发送服务器:smtp.163.com ...接收服务器:pop.vip.163.co
  • Linux搭建Postfix邮件服务器

    千次阅读 2019-06-04 15:55:48
    第一章:实验环境和目标 1.实验环境 ...CentOs7下搭建Postfix邮件服务器,配置域名服务远程登录访问,新建用个测试用户(sent,recv),两个用户用telnet命令登录邮件服务器,实现两个用户的邮件互发,...
  • 邮件服务器配置

    万次阅读 2018-08-10 20:09:31
    邮件服务器 postfix 仅提供 smtp 服务,不提供 pop3 和 imap 服务,主要是用发送和接收邮件的(接收到的邮件后,一般转交 dovecot 处理,dovecot 负责将 postfix 转发过来的邮件保存到服务器硬盘上) dovecot 仅...
  • 一、安装邮件服务器组件 打开软件,点下一步        选择存储数据的数据库,这里有两种选择, 一种是使用嵌入型数据库Microsoft Sql Compact,另一种是自定义数据库。     设置hMailServer connect...
  • 要写一个通过Socket发送邮件的程序。...不通过发送方的邮件服务器。 能不能通过Socket,按照SMTP协议直接发送邮件到接收方的SMTP服务器? 为什么一定要一个SMTP服务器转发? 不太熟悉这块,希望不吝指教。
  • 各位dalao好,今天在做邮件发送的时候跟着视频用了易邮邮件服务器,遇到了一些问题,求帮忙看看。 1.服务器里创建的账号的用处是什么?是不是创建的账号可以在无网状态下进行邮件的相互发送? 2.我在服务器里创建...
  • 而越来越多的企业和单位,也开始考虑自己搭建邮件服务器,以加强员工间的信息交流,提高工作效率。那么,邮服务器具体又该如何搭建呢?本文将会详细的给大家介绍邮件服务器的搭建过程。 一、邮件服务器搭建软件的...
  • Winmail邮件服务器

    千次阅读 2018-12-05 09:50:40
    今天主要通过安装配置Winmail邮件服务器,通过Wireshark抓包,理解邮件收发协议(SMTP、POP3) 一、实验环境 Windows Server 2008:DNS服务器、Winmail邮件服务器 客户机:Windows 7 网卡连接:NAT(Vmnet 8) 1、...

空空如也

1 2 3 4 5 ... 20
收藏数 35,609
精华内容 14,243
关键字:

邮件服务器