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

c.pass 的博客

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

 
 
 

日志

 
 

FreeBSD中mail的配置1  

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

  下载LOFTER 我的照片书  |
邮件服务器

邮件服务器是因特网上常用的服务器,我们平常收发电子邮件都必须经过邮件服务器。通常一般人都是使用 ISP 或免费的电子邮件信箱,由于这种服务的使用者很多,您的电子邮件账号通常很长,而且不是您所喜欢的名称。例如 ,如果您的名字是 Alex,您大概很难申请到 alex@yahoo.com 这么好记的地址,只能申请到类似 alex0706_tw@yahoo.com 这种又臭又长的信箱。如果您想要有比较好的信箱地址,则必须自行架设一台邮件服务器。

本章将介绍如何使用 FreeBSD 架设邮件服务器,读完本章后,您将可以对邮件服务器的运作更加了解。本章将包含下列主题:

  • 电子邮件的运作原理。
  • 如何架设安全的邮件服务器。
  • 如何架设 POP3 及 IMAP 服务器。
  • 如何设定邮件别名及自动转寄。
  • 如何限制信件大小。
  • 邮件结构及限制寄件者来源。
  • 邮件收发问题处理。

16.1 电子邮件概论

一个电子邮件地址可以分为二个部份,第一个部份是使用者名称,第二个部份是主机名称。以 john@yahoo.com 为例,yahoo.com 就是主机名称,而 john 为使用者名称。john@yahoo.com 可以念作「John at yahoo.com」,翻成中文就是在 yahoo.com 上的使用者 John。

假设 Alex 使用的信箱是 alex@gmail.com,则当 Alex 要寄信给 john@yahoo.com 时,会经过下列步骤:

  1. 首先 Alex 从个人计算机中写好一封信,送到他所属的 gmail.com 的主机中。

    2.   gmail.com 会先将信件存在自己的机器上的暂存区。

    3.   gmail.com 会检查信件目的地,并查找 yahoo.com 的 IP 地址。

    4.   接着经由因特网将信件送到 yahoo.com 的主机。

    5.   yahoo.com 的主机收到信后,发现是给自己机器中的使用者,所以将信件存放到使用者的新件匣中。

    6.   当 John 有空时,从家里打开计算机,并主动去 yahoo.com 检查是否有新的信件,当发现有新的信,则下载到自己的计算机中。

图 16-1

如果 alex@gmail.com 要寄信给 john@gmail.com,因为寄信者和收信者使用同一个邮件服务器,所以在上述步骤二中,gmail.com 的主机发现收信者是自己机器的使用者,则会将该信件存放在使用者的新件匣中。

从寄信到收信的流程中,每一个网络上的组件都扮演着不同的角色,我们分别来谈一下每一个角色的功能:

  • Mail User Agent (MUA):邮件使用者代理人,这是使用者用来写信、收信的程序。例如,我们常用的 Outlook Exporess、Thunderbird 等。它的作用在于提供使用者一个好用的收发信件接口,并将信传到自己的邮件服务器。
  • Mail Transfer Agent (MTA):邮件转送代理人,是一个负责转送信件的服务器。UNIX 中使用的 Sendmail、Postfix 就是 MTA 软件。它的作用在于收到 MTU 寄来的信后,根据信件地址,将信件转送到目的地。在目的地中,也有另一台 MTA 会负责接收信件。有时候信件并不会一次就从使用者的计算机传送到目的地的主机,而是会经由许多 MTA 转送到目的地的主机。这种 MTA 接收非自己的信件,并转送到别台 MTA 的动作就叫作「Relay」。
  • Mail Delivery Agent (MDA):邮件递送代理人,负责将要给本地使用者的邮件分配到使用者的信箱中。在 UNIX 中,MDA 通常是 mail 这支程序。

图 16-2

当我们在寄信时,所使用的是 SMTP (Simple Mail Transfer Protocol) 通讯协议,在一台邮件服务器上,必须要先安装邮件服器软件,以接收 SMTP 协议所寄来的信件。MTA 和 MTA 之间传送信件时也是使用 SMTP 协定。而收信时,使用的是 POP3 (Post Office Protocol) 或是 IMAP (Internet Message Access Protocol) 协定。

一般常用的 SMTP 软件为 FreeBSD 内附的 Sendmail、Qmail、或 Postfix。而收信时所使用的 POP3 及 IMAP 软件 FreeBSD 并未内建,因此我们必须自行安装。然而做为一台 Mail Server,我们要设定的是最少要做到可以正常使用 POP3 及 SMTP 来让使用者收发信。另外,我们也将介绍使用 Web 接口的邮件收发软件,Web 接口的邮件收发软件可以让使用者不必使用 Outlook 等软件即可经由任何操作系统的浏览器轻松收发信件。

传统上,SMTP 在接受使用者寄信时,并不须经过身份认证,任何人都可以使用你的主机来制造垃圾信。因此 FreeBSD 内建的 Sendmail 是不接受 SMTP 寄信的。而一般的 ISP 业者大多是以控制联机来源的方式,禁止非允许网域的使用者 RELAY。但如果我们以控制联机来源的方式,便无法在其它非允许的IP地址使用SMTP,这对于想要任何地方都可以发信的人十分不分便。因此,本章里我们将介绍如何让使用者透过 FreeBSD 使用 SMTP 身份认证的功能来寄信,让要使用诸如 Outlook 以 SMTP 寄信的使用者必须先通过本机的身份认证。

在开始架设邮件服务器之前,您必须先设定好 DNS。由于传送信件时,必须查找目的地主机的 IP。如果您的主机没有合法的 DNS 设定,信件将无法正确送达。假设您要架设一台处理 twbsd.org 的邮件服务器,在 DNS 设定方面有二种方式。第一种是直接将您的主机名称设为 twbsd.org,并设定 DNS 将 twbsd.org 对映到您的主机 IP。第一种方法是使用 DNS 的 MX 设定,将 twbsd.org 的邮件交由另一台主机处理。如果您的 DNS 是交由申请单位代管,则只要到申请单位设定好名称对映即可。如果您要自行架设 DNS 服务器,请参考「DNS 服务器」一章的说明。

另外,您的服务器 IP 也必须设好反解,IP 名称必须和您的主机名称对映,如果反解不正常,有的服务器可能会拒收您所送出的信件。

16.2 具身份认证的 sendmail

本文参考自中央研究院计算器中心张毓麟先生所发表的「具身分认证的邮件传送系统」,该文件的网址是 http://beta.wsl.sinica.edu.tw/~ylchang/Email/sendmail-auth。张先生对于在 FreeBSD 系统上建立安全的邮件服务器有多篇文章,您可以自 http://beta.wsl.sinica.edu.tw/~ylchang/Email/index.html 取得更多内容。

由于本章有许多指令,为了避免打字错误造成安装失败,笔者将这些安装过程写成一个快速安装的程序,您可以自本书光盘二中取出安装。安装方式如下:

# mount /cdrom  # cp -R /cdrom/mailserver /tmp/  # cd /tmp/mailserver  # sh mailserver.sh

接着依照画面指示即可快速安装本章具身份认证的 sendmail 了。安装完成之后,您可以使用下列指令以启动 sendmail:

# /usr/local/etc/rc.d/saslauthd.sh  # /usr/sbin/sendmail -bd -q30m

如果我们希望在一开机便启动 Sendmail,请在 /etc/rc.conf 中加入下面这一行:

sendmail_enable="YES"  

如果您希望自行一步步操作,请依下列各小节的说明来安装,但请特别注意一些标点符号的差异,例如 ` (位于键盘左上角) 及 ' (位于键盘右边) 等符号。笔者建议您如果要自行安装,在输入设定档内容时请使用本书光盘片中的范例,以免打字错误。

16.2.1 安装 Cyrus SASL

SASL (Simple Authentication and Security Layer) 可以让一些通讯协议 (例如 SMTP、IMAP 等) 具有身份认证的功能。Sendmail 自从 8.10 就支持 SASL 的功能。目前 cyrus-sasl 版本是 cyrus-sasl-2.1.21.tar.gz,我们可以 ftp 到各大 FTP 站台的 distfiles 目录下去取得最新版的 cyrus-sasl 或从本书光盘中的 mailserver 目录中取得。取回后以下列指令安装。

# tar zxf cyrus-sasl-2.1.21.tar.gz  # cd cyrus-sasl-2.1.21  # ./configure --enable-login --enable-plain  # make  # make install  # cd /usr/lib  # ln -s /usr/local/lib/sasl2 .  # ln -s /usr/local/lib/sasl2 sasl  # ln -s /usr/local/lib/libsasl* .  # echo "pwcheck_method: saslauthd " > /usr/lib/sasl2/Sendmail.conf

接着我们要在一开机时就执行 saslauthd 这支认证用的程序,请新增文件名为 /usr/local/etc/rc.d/saslauthd.sh 的执行档,内容如下:

#!/bin/sh    case $1 in  "start")   echo "Starting saslauthd"   /usr/local/sbin/saslauthd -a pam   ;;  "stop")   echo "Stoping saslauthd"   killall saslauthd   ;;  *)   echo "Usage $0 start|stop"   ;;  esac

然后将该档案属性变为可执行,并建立一个 saslauthd 所需使用的工作目录:

# chmod 755 /usr/local/etc/rc.d/saslauthd.sh  # mkdir -p /var/state/saslauthd

16.2.2 安装 Sendmail

在安装 Sendmail 之前,如果系统中正在执行旧版的 Sendmail,请先使用以下指令将它停掉:

# kill -9 `cat /var/run/sendmail.pid|head -1`

接着请到 www.sendmail.org 去下载最新版的 sendmail,您也可以在光盘二的 /ports/mailserver 目录中找到 Sendmail 8.13.5。Sendmail 自 8.12.0 版起,需要先建立一个使用者smmsp及所属群组供 Sendmail 使用。而 FreeBSD 自从 4.5-RELEASE 起己经内建了该使用者,如果你使用的是 4.5-RELEASE 以前的版本,请先编辑 /etc/group 加入下面一行:

smmsp:*:25:  

再来增加使用者,执行 vipw 并增加下面一行:

smmsp:*:25:25::0:0:Sendmail user:/var/spool/clientmqueue:/sbin/nologin  

将抓回来的 sendmail.8.13.5.tar.gz 放到 /tmp 底下,并以下列指令解压缩:

# tar zxvf sendmail.8.13.5.tar.gz

接着 ee /tmp/sendmail-8.13.5/devtools/Site/site.config.m4 建立档案并加入下列内容:

PREPENDDEF(`confENVDEF', `-DMAP_REGEX')  PREPENDDEF(`confOPTIMIZE', `-O2')  APPENDDEF(`confENVDEF', `-DTCPWRAPPERS -DSASL=2')  APPENDDEF(`conf_sendmail_LIBS', `-lwrap -lsasl2')  APPENDDEF(`confLIBDIRS', `-L/usr/local/lib')  APPENDDEF(`confINCDIRS', `-I/usr/local/include')  APPENDDEF(`confENVDEF', `-DMILTER')  

由于上述档案内容中,有很多特殊的符号,为了避免打错字,建议您直接使用本书所附第二片光盘中的 /examples/site.config.m4 。完成后就可以开始安装 Sendmail 了:

# cd /tmp/sendmail-8.13.5  # sh Build  # sh Build install

为了要让本地的使用者不必经由身份认证使用 SMTP,还须再做下列设定:

# cd /tmp/sendmail-8.13.5/obj*  # cd mail.local  # make force-install  # chown root /usr/libexec/mail.local  # chmod u+s /usr/libexec/mail.local

接下来编辑 sendmail 设定模板档案以便产生出具有身分认证功能的 sendmail.cf 设定文件,请以下列指令执行:

# cd /tmp/sendmail-8.13.5/cf/cf  # cp generic-bsd4.4.mc MYCF.mc  # cd ../feature  # cat access_db.m4 >> ../cf/MYCF.mc  # cat delay_checks.m4 >> ../cf/MYCF.mc  # cat virtusertable.m4 >> ../cf/MYCF.mc  # cd ../cf  # cat >> MYCF.mc  TRUST_AUTH_MECH(`LOGIN PLAIN')dnl  define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl  ^D(同时按Ctrl+D)

上述要增加到 MYCF.mc 的二行字符串,您一样可以在本书所附第二片光盘中的 /examples/ 目录中找到 MYCF.mc.append 。为了避免打字错误,您可以使用下列指令来将上述二行附加在 MYCF.mc 中:

# mount /cdrom  # cat /cdrom/example/MYCF.mc.append >> MYCF.mc

接着我们要建立 sendmail.cf

# sh Build MYCF.cf  # cp MYCF.mc /etc/mail/sendmail.mc  # cp MYCF.cf /etc/mail/sendmail.cf

接下来请编辑 /etc/mail/access 这个档案,我们可以在 access 指定哪些 IP 或 domain 来源的机器是否可以经由我们的服务器寄信。如果您希望自己内部网域的机器可以不必使用身份认证,你可以在这个档案中加入内部网域的 IP。

127.0.0.1      RELAY  192.168.0.1 RELAY  # 内部网络不需要认证  192.168.0     RELAY  

接着请产生二个 sendmail 所需要的档案:

# touch /etc/mail/virtusertable  # touch /etc/mail/aliases

然后请新增 /etc/mail/local-host-names 的档案,里面填入 localhost 以及机器的完整名字 (如 mail.abc.com),当收到信的收件者不是给 mail.abc.com 时便会拒绝。接着,再新增一个档名为 /etc/mail/relay-domains 的档案填入本地的 domainname,例如 mydomain.com,这样一来由本地的 domain 发信时便不需再一次做使用者认证。然后将这些档案做成 sendmail 能接受的 DB 格式:

# cd /etc/mail  # makemap hash access.db < access  # makemap hash virtusertable.db < virtusertable  # newaliases

这样就完成了。您可以执行 sendmail -d0.1 -bv root | grep SASL 应该会出现 SASL 的字样,表示己可认证。

最后,我们可以使用下列指令来启动认证所需的程序及 Sendmail:

# /usr/local/etc/rc.d/saslauthd.sh start  # /usr/sbin/sendmail -bd -q30m

在启动 Sendmail 之后,如果执行 telnet localhost 25 ,再打ehlo localhost,我们应该看到一堆 250- 开头的讯息,其中有一行 250-AUTH LOGIN PLAIN 就代表 Sendmail 己经具有身份认证的功能,此时请输入 quit 结束。万一没有出现,请阅读 /var/log/maillog 里面的讯息可以知道错在哪里。

# telnet localhost 25  Trying ::1...  telnet: connect to address ::1: Connection refused  Trying 127.0.0.1...  Connected to localhost.  Escape character is '^]'.  220 vmware.alexwang.com ESMTP Sendmail 8.13.5/8.13.5; Sat, 24 Sep 2005 19:16:09 +0800 (CST)  ehlo localhost  <--输入 ehlo localhost  250-vmware.alexwang.com Hello localhost [127.0.0.1], pleased to meet you  250-ENHANCEDSTATUSCODES  250-PIPELINING  250-EXPN  250-VERB  250-8BITMIME  250-SIZE  250-DSN  250-ETRN  250-AUTH LOGIN PLAIN  <-- 有这一行表示安装成功了!!  250-DELIVERBY  250 HELP  quit  <-- 输入 quit 以离开  221 2.0.0 vmware.alexwang.com closing connection  Connection closed by foreign host.  

如果我们希望在一开机便启动 Sendmail,请在 /etc/rc.conf 中加入下面这一行:

sendmail_enable="YES"

16.2.3 Client 端的设定

微软的 outlook 由 4.0 版开始支持发信时身分认证功能,只要在 outlook 的设定里面将『外寄邮件服务器需要查验身分』的选项打勾就可以了。

第一步骤,选取『工具』菜单的『账号』选项:

图 16-3

第二步骤,选取账号选单中的『内容』按钮:

图 16-4

步骤三,将『外寄邮件服务器需要查验身分』功能项打勾:

图 16-5

按确定钮回到 outlook 中,即可使用身分认证功能发信。

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

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

历史上的今天

评论

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

页脚

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