注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

c.pass 的博客

众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。

 
 
 

日志

 
 

FreeBSD中mail的配置2  

2010-08-23 15:26:30|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

16.3 POP3 及 IMAP 设定

传统上使用 Outlook 等收信软件时,我们会使用 POP3 来下载服务器上的信件。使用者有新的信件时,该信件会存放于 /var/mail/username 中,这个档案我们称之为 inbox。当我们使用 POP3 收信软件下载信件时,在下载完毕后,除非我们有设定在服务器上保留原本的信件,否则预设会在下载后自动将该信件自服务器中移除,以节省空间。

然而,如果您平常使用多台计算机,或是想在不同的地方依然可以看到之前的信件,则 POP3 就不太符合需求。除了 POP3 外,还有一个邮件通讯协议名为 IMAP。IMAP 和 POP3 最主要的差异在于 IMAP 一开始只下载信件标题,直到点选该信件后,它才会将信件下载至您所使用的计算机中。而在下载之后,IMAP 并不会将服务器上的邮件删除,所有浏览过的信件依然保存于 /var/mail/username 中。随着信件越来越多,inbox 的资料也会越来越大。此时我们可以使用 IMAP 建立新信夹的功能,在使用者家目录中建立许多新的数据夹,并将 inbox 的信件移至新建立的数据夹中,以减少 inbox 的大小,并加快收信的速度。而且,当我们寄出新信件时,若使用 POP3 协定,则寄件备份只会存放于您寄信时所使用的计算机中,但 IMAP 则会将寄件备份存于于服务器中。因此,如果您常使用多台不同的计算机收信,使用 IMAP 会蛮方便的,但 IMAP 在使用上速度会比 POP3 慢。

本章中,我们将介绍二种不同的 POP3 及 IMAP 收信软件,您可以依自己的需求安装合适的软件。

16.3.1 简单的 POP3 服务器

POP3 的设定很简单,我们只要选一个喜欢的 pop3 软件,以 ports 安装完后再做一些设定就好了。在这里我选用 popa3d:

# cd /usr/ports/mail/popa3d  # make install clean

接着编辑 /etc/inetd.conf,找到 pop3 的部份,将开头的 # 拿掉后,并加以修改如下:

#  # example entry for the optional pop3 server  #  pop3    stream  tcp     nowait  root    /usr/local/libexec/popa3d       popa3d  

接着重新跑 inetd 即可:

# kill -HUP `cat /var/run/inetd.pid`

16.3.2 加密的 POP3 及 IMAP

在 FreeBSD ports 中,收录了许多 IMAP 及 POP3 的软件,我们选择了 IMAP-UW 这套软件来安装。IMAP-UW 不仅支持 IMAP 及 POP3,我们也可以设定要求使用加密过的 POP3 及 IMAP-UW 以加强密码及信件传送的安全性。首先,请使用下列指令安装 IMAP-UW:

# cd /usr/ports/mail/imap-uw  # make WITH_SSL_AND_PLAINTEXT=yes install

接下来,我们要产生 IMAP 及 POP3 所需使用的 SSL 凭证:

# cd /usr/ports/mail/imap-uw  # make cert

接着屏幕会出现一些问题,请依序回答:

输入国家代码,例如 TW。  Country Name (2 letter code) [NO]:TW  输入所在省份,例如 Taiwan。  State or Province Name (full name) [Some-State]:Taiwan  输入所在城市,例如 Taipei。  Locality Name (eg, city) []:Taipei  输入您的组织名称,你可以输入公司或学校名称,或直接按 Enter 即可。  Organization Name (eg, company) [FooBar Inc.]:My Company  输入单位名称,可以直接按 Enter 跳过。  Organizational Unit Name (eg, section) []:  输入您的机器完整名称,也就是您在 Outlook 等收信软件中所设定的服务器名称。  Common Name (FQDN of your server) []:mydomain.com  

接下来我们必须设定一下 /etc/inetd.conf,并加入 POP3 及 IMAP 的相关设定:

pop3 stream tcp nowait root /usr/local/libexec/ipop3d ipop3d  imap4 stream tcp nowait root /usr/local/libexec/imapd imapd  pop3s stream tcp nowait root /usr/local/libexec/ipop3d ipop3d  imaps stream tcp nowait root /usr/local/libexec/imapd imapd  

若您在开机时并未执行 inetd,请在 /etc/rc.conf 中加入下列设定:

inetd_enable="YES"  

若您已启动 inetd,则设定完 inetd.conf 之后,我们必须重新启动 inetd:

# kill -HUP `cat /var/run/inetd.pid`

现在我们就可以设定使用 Outlook 来收发。如果您想使用加密的 IMAP 或 POP3 联机,您可以在设定完新的邮件账号后,点选内容,并选取 [进阶] 的部份,将 [这个服务器需要安全联机] 打勾,即可设 IMAP 或 POP3 收信时使用加密的联机。

图 16-6

16.4 进阶邮件服务器设定

架设邮件服务器只是服务器管理的第一步,后续的维护更是重要。好的系统管理者不仅仅是把机器架好,而是要管理好系统安全、解决使用者问题、并尽可能满足使用者需求。因此,我们接下来必须说明服务器的进阶管理议题,在使用者有问题时,我们才知道要如何处理。

16.4.1 设定邮件别名及自动转寄

当有同事离职时,我们常会被要求将该同事的信件转给某人。这种自动转寄的功能在 Sendmail 中很容易就可以做到,我们只要设定 /etc/aliases 即可。

/etc/aliases 是用以告知 sendmail 要将信转给哪个使用者或是交由哪个程序处理。aliases 这个档案是用来设定邮件的别名,也就是可以设定要将某人的信件转给其它地方(人员或程序),你也可以同时将某人的信转给很多人。这个档案的位置是由 sendmail.cf 档案中的 AliasFile 这个选项所决定的。当 sendmail 收到信时,会一行一行比对,当第一行符合后,就不会再继续下去,所以应注意优先级。

我们来看下列几个设定的范例:

#本档案的语法开头的 "#" 代表该行是批注,大小写都视为一样。  # 范例一  root: alex    # 范例二  john: alex,john    # 范例三  webmanager: alex,jack,jim@other.hostname.com    # 范例四  nobody: /dev/null    # 范例五  homework: |/usr/local/bin/homework.sh    # 范例六  olduser: :include: /usr/local/olduser_list  

  • 范例一是将寄给 root 的信转给本机中的使用者 alex。
  • 范例二是将寄给 john 的信转给本机中的使用者 alex 及 john,也就是除了原本的 john 外,alex 也会收到寄给 john 的信。
  • 范例三是将寄给 webmanager 的信转给本地的使用者 alex,jack及 jim@other.hostname.com。
  • 范例四是将寄给 nobody 的信直接丢掉,丢入 /dev/null 这个无底深渊,也就是所有给 nobody 的信都直接删除。
  • 范例五是将寄给 homework 的信交给 /usr/local/bin/homework.sh 这支程序处理。
  • 范例六是将寄给 olduser 的信转给档案 /usr/local/olduser_list中所列出的所有使用者。olduser_list 为使用者清单的文字文件。

当设定了一堆复杂的别名之后,我们要看最后信会寄到哪里时,可以使用下面指令来看寄给 username 的信最后寄给谁:

# sendmail -bv username

aliases 档中将很多东西都转向 root,因此你可以去读 root 的信箱或是将 root 的信转给别的地方,下面这一行是将 root 的信都转给 my@my.domain:

root: me@my.domain

当邮件无法送出被退回时给使用者时,都是以 MAILER-DEAMON 为账号寄出。因为使用者可能会回复那封被退回的信,所以这个别名是必备的。而 postmaster 则负责处理所有关于邮件问题的信件,因此也是必备的,一定要保留下面二行,这是必要的系统基本设定:

MAILER-DAEMON: postmaster  postmaster: root

请注意,修改完 /etc/aliases 后,我们必须使用下列指令来让所做的修改在 Sendmail 中发生作用:

# newaliases

16.4.2 一舨使用者设定自动转寄及自动回信

除了管理者可以经由设定 /etc/aliases 来转信使用者的信件外,一般使用者也可以设定将寄给自己的信转寄一份给其它人。

一般使用者只要在自己的家目录中新增一个档名为 .forward 的档案,并设定要转寄的对象即可。以下为 .forward 的设定范例:

\alex  alexwang@yahoo.com

如果我们在使用者 john 的家目录中新的上述的 .forward 档,则所有寄给 john 的信都会转寄给本机的 alex 及 alexwang@yahoo.com。我们必须要注意的是在上述的设定中,使用者 john 并不会收到寄给自己的信。如果自己也要收到信的设,必须在 .forward 檔中加入自己的名字。

另外,如果您要出国旅游,可能有很长的一段时间无法收信,并希望当有人寄信给您时,系统能自动回信告诉寄件者,则可以使用 .forward 的功能加上 vacation 这个指令来达成。

假设您的使用者名称是 alex,首先,我们先在 alex 的家目录下新增档案 .forward,其内容如下:

\alex  "|/usr/bin/vacation alex"

接着,我们要在家目录下新增档案 .vacation.msg 并加入下列内容:

From: "Alex Wang" <alex@alexwang.com>  Subject: I am on vacation now    Hello,    I will not be reading my mail for a while.  Your mail will be read when I return.    Thanks,  Alex

如果有人寄信给 alex 的话,除了 alex 会收到信外,寄件者也会收到一封标题为「I am on vacation now」的信,内容就是 .vacation.msg 中的内容。

vacation 这个指令名字取的很有趣,作者大概认为无法收信就是渡假去了。我们在 .forward 档中设定了当有信件进来时,就交由 vacation 去处理,而 vacation 会自动将 .vacation.msg 的内容回复给寄件者,这样就达到了自动回信的功能了。

小提示

一般使用者可以经由设定 .forward 及 .vacation.msg 来自动回信,但是这种设定方式对于一般使用者而言可能不太方便。我们可以使用下一章要介绍的 Openwebmail 来提供从网页中设定自动回复的功能。

16.4.3 限制每封邮件大小上限

不论您的系统硬盘多大、网络多快,在复杂的网络世界中,难保没有人会恶意寄送大型邮件来灌瀑您的信箱。不论如何,我们还是应该要做好基本的防护。在 Sendmail 的设定档中,可以让我们限制接收的邮件大小。

如果您要限制接收信件的大小,可以修改 /etc/mail/sendmail.cf,将下列项目开头的批注移除:

# maximum message size  O MaxMessageSize=5000000

我们限制最大的信件大小为 5000000 bytes (即 5MB)。修改完后,您必须重新启动 sendmail 设定才会生效。

# killall sendmail  # /usr/sbin/sendmail -bd -q30m

16.5 邮件问题处理

在管理邮件服务器时,我们常会遇到使用者报怨信件无法送出、信件收不到、寄信出现错误等等。在遇到这类问题时,我们必须具备问题追踪的能力,以协助使用者解决寄信的问题。

在处理收发信件问题时,您可能必须查询 DNS 的设定、了解邮件结构。在说明如何处理收发信件问题前,我们先来了解一些基本的邮件管理知识。

16.5.1 邮件结构

Sendmail 会将所有的使用者新收到的信件放在 /var/mail 中,并将使用者刚寄出的信放在 /var/spool/mqueue 中。在 /var/mail 目录中,每个使用者的新件匣都是一个和使用者名称一样的档案。例如,使用者 alex 的新件匣是 /var/mail/alex、使用者 john 的新件匣是 /var/mail/john。当我们使用 Outlook 或 webmail 收信时,随然我们看到的是一封封的邮件,但在系统中,这些邮件是以纯文字模式全部存放在同一个档案中。所以,当使用者的信件很多时,该档案会越来越大,在使用 IMAP 或 webmail 收信时,速度也会变得比较慢。

由于 /var/mail/var/spool/mqueue 中的信件都是以纯文字格式存放信件,管理者可以直接使用任何文书编辑软件打开使用者的信箱。因此,管理者本身的操守很重要,否则所有人的机密都会被看见。

为了了解一封信的结构,我们还是要看一下信件的内容。您可以打开 /var/mail 目录中自己的信件,或是在 Outlook Express 中对着信按右键 -> [内容],再选 [详细资料] -> [邮件原始文件],即下图示:

图 16-7

接下来,我们可以看到一个邮件原始数据如下:

# Return-Path 表示要回信则会回给 edm@ebp.eracom.com.tw  Return-Path: <edm@ebp.eracom.com.tw>    # 这是由 alexwang.com 的 Sendmail 所产生的标头。表示信件是由 ebp135.eranet.net  # 所寄出,并由 alexwang.com 处理此信件。  Received: from eracom.com.tw (ebp135.eranet.net [203.95.231.171])   by alexwang.com (8.13.5/8.13.5) with ESMTP id j8QE1IpL059750   for <alex@alexwang.com>; Mon, 26 Sep 2005 22:01:24 +0800 (CST)    # 这是由 eracom 的邮件软件所产生的标头。  Received: from mail pickup service by eracom with Microsoft SMTPSVC;    Mon, 26 Sep 2005 22:01:25 +0800    # Thread-index 及 Thread-Topic 是用来在回信时让客户端的软件判断信件是和哪几封信  # 同一个主题用的。  thread-index: AcXCg/dY0ifrCKOiTJO8PTlqFlJD/A==  Thread-Topic: =?big5?B?pn6lTrDiVkqvqVPVIp9yp2qq6xV2kT6FJsXqkU6vnr+A=?=   =?big5?B?v/m5TA==?=    # From 是寄件者的名称及 Email。  From: =?big5?B?pn6lTrDisrw=?= <edm@ebp.eracom.com.tw>    # 这是收件者的信箱。  To: <alex@alexwang.com>    # CC 是复本收件者。  Cc:    # Subject 是本封信件的主题。  Subject: =?big5?B?pn6lTrDisrwgLqvmhqVPVIp9yp2qq6xV2kT6FJsXqkU6vnr+A=?=   =?big5?B?v/m5TA==?=    # Date 是收信的时间。  Date: Mon, 26 Sep 2005 18:20:49 +0800    # Message-ID 是由发信软件所产的邮件编号。  Message-ID: <9a3d401c5c283$f7587140$abe75fcb@louis1712gid2f>    # 此封邮件所使用的 MIME 版本。  MIME-Version: 1.0    # 邮件内容格式。  Content-Type: multipart/alternative;   boundary="----=_NextPart_000_9A3D5_01C5C2C7.057BB140"    # 邮件的优先级。  Priority: normal    # 表示这是 multi-part MIME 格式的邮件。  This is a multi-part message in MIME format.    # 以下为邮件本文  ... 略 ...  

我们可以从邮件的标头中看到信件真正的来源。有的邮件来源可能会假造,我们也可以从邮件的标头中看出来。

16.5.2 限制寄件者来源

邮件信箱用久了,难免会收到垃圾信。如果您常收到垃圾信,或是想要阻挡某一个网域寄来的信件,最简单的做法是使用 Sendmail 内建的阻挡功能。

我们可以经由设定 /etc/mail/access 来阻挡某个网域的信件。以下是几个设定的范例:

192.168                RELAY  free.spammail.com      REJECT  cyperspammer.com       550 We don't accept from spammers  somespammer.com        DISCARD  sendmail.org           OK

/etc/mail/access 的格式是先列出网域、网址、或 Email,再加上 DISCARD、REJECT、RELAY、OK、或是一串有错误代码的讯息。如果是 OK,表示可以寄信到这一台机器中,这是默认值,所以我们很少用到 OK 这个关键词。而 RELAY 表示可以使用这台机器送信到其它的机器。REJECT 表示不可以使用这台机器的邮件服器。DISCARD 表示将信收下,并直接删除,寄件者会以为信件正常被送出。550 加上一个字符串表示响应此字符串给寄件者。

在设定完 /etc/mail/access 后,我们必须执行下列指令,以将该档案做成 Sendmail 所使用的数据文件:

# makemap hash /etc/mail/access < /etc/mail/access

我们当我们收到垃圾信时,寄件者往往是假造的,但我们还是可以从邮件标头中看出该信件的真正来源。以下列标头为例:

Received: from hoho88_nserver.cx (10p2.ppp.odn.ad.jp [219.66.191.46])  by alexwang.com (8.13.1/8.13.1) with SMTP id j8P6ke57004728  for <alex@alexwang.com>; Sun, 25 Sep 2005 14:46:40 +0800 (CST)  Date: Sun, 25 Sep 2005 14:46:40 +0800 (CST)  Delivered-To: <alex@alexwang.com>    Message-ID: 20030120467mail@mail.hi9658754215_starweb88_mainserver.cx  From: mikas_mail_0911@yahoo.co.jp  To: alex@alexwang.com  Subject: =?iso-2022-jp?B?gXWCqJCimGKCyYLIgsGCxIKoguiC3IK3gUk=?=  MIME-Version: 1.0  Content-Type: text/plain;  charset="iso-2022-jp"

我们可以看到虽然寄件者是 mikas_0911@yahoo.co.jp、发信的主机是 hoho88_nserver.cx,但实际上是的来源 IP 是 219.66.191.46,这个 IP 就是我们要阻挡的地址。或者,您可以阻挡整个 ppp.odn.ad.jp 的信件。

16.5.3 处理未寄出之信件

系统中所有未寄出的信件都会放在 /var/spool/mqueue 中,在该目录中,一封未寄出的信会有二个档案,这二个档案包含了原始信件及寄件失败的原因。我们可以使用下列指令列出所有未寄出的信件。

# mailq                 /var/spool/mqueue (1 request)  -----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------  j8NFunJe071657    15472 Fri Sep 23 23:56 <>                  (Deferred: Connection refused by mail.somewhere.com.)                                          <www@some.your.com>                 Total requests: 1  

我们可以看到有一封信未送出,原因是被 mail.somewhere.com 拒绝了。

一般而言,Sendmail 每隔一段时间 (依启动 Sendmail 所加的 -q 参数而决定) 会自动重新送出队列中的信件,最后都无法送出则会通知寄件者。如果您要立即重新送出队列中的信件,可以使用下列指令:

# sendmail -qf

如果您要删除某一封在队列中的信件,请先使用 mailq 查看 Q-ID,再到 /var/spool/mqueue 中删除 qfXXXX 及 dfXXXX 的档案,其中 XXXX 是您要删除的 Q-ID。

16.5.4 收发信件问题处理

电子邮件在现在的企业中使用非常频繁,很多公司几乎所有事务都经由电子邮件处理,收发信不正常往往是 MIS 人员的恶梦。很多时候问题可能不是出现在邮件服务器本身,而是网络设定、DNS 问题、或是对方服务器的问题。当您遇到收发信件问题时,就必须要从系统记录、发信软件中查出蛛丝马迹。在检查问题之前,请先确认您的邮件服务器的 DNS 设定没问题,而且邮件服务器 IP 和主机名称正反解都正确。DNS 设定不正常的服务器往往是不能收发信件的主因。

发信问题处理

在发信问题方面,如果您使用发信软件寄不出信件,请先检查发信软件所秀出的讯息,再找解决之道。通常发信问题可以分为二类,一种是在使用 Outlook Express 送信时就已经送不出去,另一种是信送出了,但对方没收到。第一种问题比较好解决,我们只要看 Outlook Express 的错误讯息即可看出端倪。以下列讯息为例:

图 16-8

我们可以看到错误讯息中有「Relaying denied. Proper authentication required.」,很明显的是因为这一台服务器必须经过身份认证后才可以使用,我们只要在送信设定中使用身份认证即可。在 Outlook Express 的讯息中,也有可能出现类似 DNS 找不到、主机找不到、使用者不存在等问题。我们只要依这些讯息来查看设定、Email 地址,即可找到原因。

第二种问题是信件寄出了,但是对方没收到。这种情形,我们就必须要多花点心力了。首先,我们先到服务器上 /var/spool/mqueue 查看信件是否在队列中。如果在,则查看一下送出去出的原因,并依错误讯息解决问题。如果从错误讯息中看不出问题,则可以查阅 /var/log/maillog,并找出该信件的寄送讯息:

Sep 23 00:22:42 mail sendmail[22426]: j8MGMKkE022408:  to=john@myfriend.com, ctladdr=john@myfriend.com (1029/501),  delay=00:00:22, xdelay=00:00:05, mailer=esmtp, mailer=esmtp,  relay=alexwang.com, dsn=5.1.2, stat=Host unknown (Name server:  myfriend.com: host not found)

以上述范例为例,就是因为找不到 myfriend.com 这台主机。这时候,我们可以手动使用 nslookup 查找该主机,并检查 DNS 的设定是否有问题。如果是 DNS 主机的问题,则可以更换 DNS 服务器设定。

如果收件者的服务器有安装防垃圾信软件,有的时候我们的服务器所使用的 IP 可能会因为某些列为垃圾信。在发信后,您可能会收到下列退信:

 ----- The following addresses had permanent fatal errors -----  <jousset@sultant.com>  (reason: 554 EMail from mailserver at 10.22.102.129 is refused.    See  http://spamblock.outblaze.com/10.22.102.129)    ----- Transcript of session follows -----  ... while talking to sultant-com.outblaze.com.:  >>> DATA  <<< 554 EMail from mailserver at 10.22.102.129 is refused. See  http://spamblock.outblaze.com/10.22.102.129  554 5.0.0 Service unavailable  <<< 554 Error: no valid recipients

这时候我们就必须依该信件指示,到该黑名单网站中要求对方将我们的 IP 从黑名单中移除。

如果从 /var/log/maillog 中确认信已经从本机寄出而对方还是没收到,则接下来就要请对方 MIS 人员查看对方服务器是否有问题了。

总结关于发信问题处理步骤如下:

  • 检查 DNS 设定。
  • 查看发信软件的错误讯息。
  • 检查服务器的队列。
  • 查看 /var/log/maillog。
  • 依联机记录找出问题并解决。

收信问题处理

在收信问题方面,和发信问题一样,最关键的还是 DNS 设定。我们必须先检查客户端所使用的计算机是不是可以正常的找到邮件服务器。如果找不到,则必须修改 DNS 设定。

接下来,必须确认客户端的发信软件有连到服务器,并可以正常使用 POP3 或 IMAP。如果在联机时出现错误,您一样可以从 /var/log/maillog 中看出问题。以下列联机记录为例:

Sep 23 02:16:12 mail sm-mta-in[24776]: j8MV5024776: ruleset=check_rcpt,  arg1=<peter.fr@mail1.stofan.dk>, relay=[219.93.1.218], reject=550 5.7.1  <peter.fr@mail1.stofane.dk>... Relaying denied. IP name lookup failed

从记录中,我们可以看出来是因为反查 mail1.stofane.dk 失败,所以我们的服务器拒收此封信件。这就是为什么邮件服务器最好还是要设定好 IP 反查的原因。

如果有人抱怨一直没有收到客户寄来的信,我们可以从 /var/log/maillog 中找出该寄件者到底有没有将信件寄到我们的服务器。如果没有,则可以请对方检查邮件信箱是否正确、对方服务器中是否有其它讯息。

转载于:http://yangshuo123.blog.sohu.com/110994654.html

  评论这张
 
阅读(427)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017