1 / 60

电子邮件服务器

电子邮件服务器. 西安交通大学 李思 2004 年 8 月 24 日. 主要内容. Email 的基本原理与基本概念 Sendmail 的配置文件 快速建立一个 Email 服务器 Email 服务器的管理与维护 实用小技巧 Webmail 的安装. 1.Email 的基本原理与基本概念. MTS 、 MUA 、 MTA 和 MDA. MTS=Mail Transfer System ,即邮件传输系统 =MUA + MTA + MDA

sabin
Download Presentation

电子邮件服务器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 电子邮件服务器 西安交通大学 李思 2004年8月24日

  2. 主要内容 • Email的基本原理与基本概念 • Sendmail的配置文件 • 快速建立一个Email服务器 • Email服务器的管理与维护 • 实用小技巧 • Webmail的安装

  3. 1.Email的基本原理与基本概念

  4. MTS、MUA、MTA和MDA • MTS=Mail Transfer System ,即邮件传输系统=MUA + MTA + MDA • MUA=Mail User Agent,其作用是完成Email从用户终端到邮件服务器之间的传输。例如Foxmail、Outlook • MTA=Mail Transfer Agent,用于完成服务器之间的Email传输。例如Sendmail • MDA=Mail Deliver Agent,用于把本地服务器上的邮件分类存放到用户信箱。例如Procmail

  5. 早期Email系统 POP连接 SMTP连接 客户机 客户机 Email服务器

  6. SMTP 连接 SMTP Relay SMTP 连接 POP 连接 Email服务器 Email服务器 客户机 客户机 带Relay的小型Email系统 • SMTP Relay:是指将收件人帐号为非本机帐号的Email转发出去 • 注:图中只画出了一个Relay过程,实际上Email可能经过多次Relay才到达目标服务器

  7. 邮件存储池 SMTP连接 SMTP Relay SMTP服务器 POP服务器 SMTP连接 POP连接 客户机 注:图中仅画出了一次Relay过程 客户机 现代大型Email系统 SMTP 服务器

  8. Email路由 • 是指SMTP服务器接收到Email后将它转发到何处的决策过程 • Email路由可以在Email头信息中看到 Received: (qmail 46284 invoked from network); 14 Oct 2003 14:16:23 -0000 Received: from unknown (HELO bigfoot.com) (211.115.216.226) by 202.106.182.233 with SMTP; 14 Oct 2003 14:16:23 -0000 Received: from ausmtp01.au.ibm.com ([202.81.18.186]) by BFLITEMAIL-KR3.bigfoot.com (LiteMail v3.03(BFLITEMAIL-KR3)) with SMTP id 14Oct2003_BFLITEMAIL-KR3_188589_9013268; Tue, 14 Oct 2003 10:18:15 -0400 EST Received: from sd0112e0.au.ibm.com (d23rh903.au.ibm.com [202.81.18.201]) by ausmtp01.au.ibm.com (8.12.10/8.12.9) with ESMTP id h9EEGFai022248 for <samuel_lee@bigfoot.com>; Wed, 15 Oct 2003 00:16:15 +1000 Received: from d23m0013.cn.ibm.com (d23av02.au.ibm.com [9.190.250.243]) by sd0112e0.au.ibm.com (8.12.9/NCO/VER6.6) with ESMTP id h9EDHL3c107890 for <samuel_lee@bigfoot.com>; Wed, 15 Oct 2003 00:16:12 +1000

  9. SMTP • SMTP = Simple Mail Transfer Protocol • 中文名为:简单邮件传输协议 • 它规定了Internet上Email传输的方法 • 是一种基于TCP的应用层协议 • 标准端口号为25 • 采用明文方式进行传输 • 工作方式:客户机/服务器交互(一问一答)

  10. SMTP实例 S: 220 mailei.xjtu.edu.cn C: HELO foo.com S: 250 Hello foo.com, pleased to meet you C: MAIL FROM: <samuel_lee@263.net> S: 250 samuel_lee@263.net… Sender ok C: RCPT TO: <lazy@mailei.xjtu.edu.cn> S: 250 lazy@mailei.xjtu.edu.cn … Recipient ok C: DATA S: 354 Enter mail, end with “.” on a line by itself C: How are you? C: . S: 250 Message accepted for delivery C: QUIT S: 221 mailei.xjtu.edu.cn closing connection • 客户端C, 主机名为foo.com • SMTP服务器S, 主机名为mailei.xjtu.edu.cn

  11. SMTP常用命令 • HELO: SMTP服务标记验证 • MAIL FROM: 用于指定发信人Email地址 • RCPT TO: 用于指定收信人Email地址 • DATA: 邮件的主体信息,以“.”结束 • QUIT: 发送结束,断开SMTP连接 • HELP: 显示帮助信息

  12. POP • POP = Post Office Protocol • 中文名为:邮局协议 • 它规定了用户从服务器接收Email的方法 • 是一种基于TCP的应用层协议 • 标准端口号为110 • 采用明文方式进行传输 • 工作方式:客户机/服务器交互(一问一答) • 目前常用的POP协议为第三版,称为POP3

  13. POP3实例 [root@21h245 mail]# telnet localhost 110 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK POP3 localhost.localdomain v2001.78 server ready user Samuel +OK User name accepted, password please pass xxxxxx +OK Mailbox open, 3 messages stat +OK 3 1807 list +OK Mailbox scan listing follows 1 602 2 610 3 595 .

  14. POP3实例(续) retr 1 +OK 602 octets Return-Path: <root@21h245.xjtu.edu.cn> Received: from 21h245.xjtu.edu.cn (localhost.localdomain [127.0.0.1]) by 21h245.xjtu.edu.cn (8.12.8/8.12.8) with ESMTP id h9M2CCO7001877 for <Samuel@21h245.xjtu.edu.cn>; Wed, 22 Oct 2003 10:12:12 +0800 Received: (from root@localhost) by 21h245.xjtu.edu.cn (8.12.8/8.12.8/Submit) id h9M2CCXT001875 for Samuel; Wed, 22 Oct 2003 10:12:12 +0800 Date: Wed, 22 Oct 2003 10:12:12 +0800 From: root <root@21h245.xjtu.edu.cn> Message-Id: <200310220212.h9M2CCXT001875@21h245.xjtu.edu.cn> To: ls@21h245.xjtu.edu.cn Subject: Hello Status: RO This is a test email. . dele 1 +OK Message deleted quit +OK Sayonara

  15. POP3常用命令 • USER: 输入帐号名 • PASS: 输入密码 • STAT: 显示邮箱当前的状态 • LIST: 列出所有邮件的大小 • RETR: 读取邮件 • DELE: 把邮件标记为删除 • RSET: 取消邮件删除标记 • QUIT: 收信完毕,断开连接 • HELP: 显示帮助信息

  16. Base64编码的引入 • 根据SMTP协议规定,一个字节只传送低7位,最高一位被置零,这种方式适合于传送英文文本,不适合于传送中文字符或者二进制文件 • 虽然有些新的MTA并不会把字节的最高位置0,但是并不是所有的MTA都这样 • 为了使得中文或者二进制文件能顺利传送,引入了base64编码,它的目的是要把二进制比特流转化成英文字符发送

  17. Base64编码规则 • Base64编码算法将输入的二进制位流看成是6个bit一个字节,高位在前,然后用下面的 64 个字符重新表示:0~25: A~Z 26~51: a~z 52~61:0~9 62: + 63: / • 如果输入流的bit数量不是6的整数倍,则在后面补零,使其bit数是6的整数倍 • 如果编码后的字符数不是4的整数倍,则用等号“=”补全成4的整数倍

  18. Base64编码 • 中文: 你好 • 汉字内码:C4 E3 BA C3 • 8 bit位流: 11000100111000111011101011000011 • 6 bit位流: 110001001110001110111010110000110000 • Base64编码后的数值 49 14 14 58 48 48 • Base64编码后的字符 x O O 6 w w = =

  19. DNS与Email服务器 • DNS服务器记录分为A记录、MX记录、PTR记录等 • A = Address,用于一般性的域名解析 • MX = Mail eXchange,用于Email域名解析 • 可给不直接连接在Internet上的主机发信 • 可以使用后备Email服务器 • PTR记录用于反向域名解析,即根据IP查域名 • 如果没有MX记录将无法以域名形式发送Email • 如果没有PTR记录,该服务器发出的信可能被拒收 • 配置Email服务器之前应该在该域的DNS服务器上添加与之对应的MX记录和PTR记录

  20. 垃圾邮件原因1:Open Relay • Open Relay是指未经授权的、无条件的Relay即SMTP服务器无条件地接收并转发一切Email • Open Relay曾经导致了世界上70%的垃圾邮件 • 反垃圾邮件的最重要的手段是关闭Open Relay • SMTP服务器应该只接收或转发来自特定位置或者帐号的Email

  21. 垃圾邮件原因2:冒名发信 • 一些SMTP服务器虽然关闭了Open Relay,但是允许转发信人地址为本地帐号地址的Email • 冒名发信是指冒用别人的Email地址发送Email • 在无法使用Open Relay的情况下,冒名发信是最常见的发垃圾邮件的手段 • 克服冒名发信的办法是对发信人进行身份验证(通过验证密码)

  22. 垃圾邮件的对策 • 垃圾邮件是不可能彻底避免的,但是可以采取一定措施尽可能地避免 • 禁止Open Relay • 采用ESMTP进行身份验证 • 建立垃圾邮件“黑名单” • 尽量不要暴露自己的Email地址例如:Samuel_lee at 263 dot net • 采用人工智能的方法加以鉴别

  23. ESMTP • ESMTP即SMTP服务扩展 • ESMTP要求使用发信人提供帐号和口令 • ESMTP命令: • EHLO:EMSTP标识符,与HELO类似 • AUTH LOGIN:认证登陆开始 • xxxx 输入经过base64编码的帐户名 • xxxx 输入经过base64编码的口令 • 其它命令与SMTP相同

  24. 2.Sendmail的配置

  25. Sendmail是什么? • Sendmail是一个SMTP服务器程序 • 它是历史最悠久的免费服务器软件之一 • Sendmail本身并不提供POP服务 • 它提供邮件路由功能,即 • 接收邮件 • 若是本机用户邮件则存放在本机等待处理 • 否则把收到的邮件转发到下一站

  26. Sendmail的主要配置文件 • /etc/mail/sendmail.cf 主配置文件 • /etc/mail/access.db 使用sendmail的权限列表 • /etc/aliases.db 本地帐号和别名的对照表 • /etc/mail/local-host-names 本地收信主机名表 • /etc/mail/virtusers.db 带域名的帐号别名 • /etc/mail/trusted-users.db 信任用户列表 • /etc/mail/domaintable • /etc/mail/mailertable • /etc/mail/submit.cf

  27. xxxx与xxxx.db文件的关系 • xxxx是指列表文件例如:域名列表、信任用户列表等 • 当列表过大时,会造成查找困难 • xxxx.db是根据xxxx生成的哈希表,它能有效降低查找时间 • Sendmail只读取xxxx.db文件,因此xxxx必须转化成xxxx.db文件才有效 • 转化办法:makemap hash xxxx.db < xxxx

  28. xxxx.mc与xxxx.cf文件的关系 • 每次启动Sendmail时,程序会自动读入sendmail.cf文件 • .cf文件是为方便机器解析而设计的配置文件格式 • .mc是为了方便用户配置而设计的宏文件 • .mc文件必须展开成.cf文件才有效 • 使用m4命令可以展开.mc文件m4 sendmail.mc > sendmail.cf

  29. /etc/mail/sendmail.mc(1) Sendmail.mc可以包含以下内容: • define –定义一个变量 • undefine –取消某个变量的定义 • include –包含一个文件 • dnl –忽略掉从从dnl开始到行末的字符,用于注释 • divert –用于管理输出流,避免输出不必要的信息

  30. /etc/mail/sendmail.mc(2) • OSTYPE 用于指定操作系统类型 • Linux, sgi, solaris…… • 因为不同的操作系统可以把sendmail的文件放在不同的位置 • VERSIONID 设定Sendmail的版本用于显示 • DOMAIN 用于包含域名文件以对不同的域名作出不同响应(一般的小型email服务器无需使用) • MAILER 指定邮件发送代理,即接受到邮件后如何处理

  31. /etc/mail/sendmail.mc(3) • FEATURE 用于设置sendmail的特性 • use_cw_file 允许使用local-host-name文件 • use_cf_file 允许使用trusted-users文件 • access_db 允许使用access.db文件 • redirect 允许邮件转发 • smrsh 指定sendmail受限shell的位置 • always_add_domain 当本地用户发信未指定域名时,给它加上本地域名 • no_default_msa 关闭默认的MSA功能

  32. /etc/mail/sendmail.mc(4) • FEATURE(续) • blacklist_recipients拒收收件人在黑名单中的邮件 • accept_unresolvable_domains 接收来自不可解析域名的Email • local_procmail 指定procmail程序用于投递本地信件 • LOCAL_DOMAIN 定义本机域名 • DAEMON_OPTIONS 将sendmail服务器进程与指定的IP地址和端口号绑定起来

  33. /etc/mail/access(1) • 用于控制sendmail的访问权限 • 前面提到的Relay的问题,可以通过修改这个文件进行控制。例如: • 202.117.21 RELAY • 263.net RELAY • xjtu.edu.cn OK • yahoo.com REJECT • foo.com 550 You are a bad user! • Abc@bar.com 550 I hate you!! • 当文件左边一栏的模式得到匹配时,Sendmail会执行右边一栏的动作

  34. /etc/mail/access(2) 匹配模式的几种格式: • IP(包括子网):例如192.168.0表示一个子网 • 域名,例如:xjtu.edu.cn • Email地址,例如:abc@foo.com 还可以添加from:和to:前缀,例如: • To: abc@abc.com 收信人Email地址 • From:abc.com 发信人Email地址的域名 • 有from前缀的只检查发信人,有to前缀的只检查收信人

  35. /etc/mail/access(3) • 可设定的动作 • OK 不管后面的规则如何,无条件接收 • RELAY 允许转发邮件 • REJECT 拒绝该邮件 • DISCARD 忽略该邮件 • ### xxxx ###是RFC821定义的错误码,XXX 是提示信息 • Sendmail8.9之后版本默认的动作是REJECT。如果不在access中添加相应记录,主机就无法通过Sendmail发送Email

  36. /etc/aliases 用于指定用户的别名,例如 mailer-daemon: postmaster postmaster: root bin: root daemon: root 则发给mailer-daemon、postmaster、bin、daemon的信实际上都是发给root

  37. /etc/mail/local-host-names • 本机的域名列表文件 • Sendmail将收信人Email中的域名与该文件中的域名列表比较,如果有相匹配的,则邮件不会被转发出去 • 当服务器有多个域名时,可以向该文件添加多个域名 • 若不设定,sendmail有可能把应该属于本地的Email,再次查询DNS后转发出去,可能造成循环传送或者Email传送失败。

  38. /etc/mail/domaintable • 类似于/etc/aliases,它可以指定带域名的别名 • 该文件实际上是Email路由的一个配置文件 • 例子: foo@bar.com root @bar.org Samuel@263.net @sina.com %1@vip.sina.com 第一行表示将info@bar.com的Email全部发给本地的root 第二行表示把所有目标为bar.org的邮件全部发给Samuel@263.net 第三行相当于把发送到sina.com的邮件全部发送到vip.sina.com

  39. 其它配置文件 • /etc/mail/trusted-users.db信任用户列表,对这些用户系统不产生警告信息 • /etc/mail/domaintable用于提供域名映射 • /etc/mail/mailertable用于不同协议之间的Email路由 • /etc/mail/submit.cfMSP的配置文件 • 以上配置文件都用得比较少

  40. 3.快速建立一个Email服务器

  41. Sendmail快速启动 • 修改/etc/mail/sendmail.mc,将DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA‘)dnl改为: DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl • m4 sendmail.mc > sendmail.cf • 在/etc/mail/access中添加允许使用本服务器的主机列表,例如202.117.21.224 RELAY • makemap hash access.db < access • service sendmail restart

  42. POP3服务器的启动 • 因为POP3服务相对简单,因此无需配置 • POP3服务由超级服务器进程xinetd管理 • RedHat Linux附带的POP3服务程序叫ipop3 • 注意与pop3s相区别,后者是带SSL加密的POP3服务程序 • 启动ipop3的方法:先用ntsysv允许ipop3服务,然后service xinetd start • 只有本机系统帐号才能通过POP3收取Email

  43. Sendmail与SASL(1) • SASL = Simple Authentication & Security Layer,简单认证安全层 • Sendmail必须依靠SASL才能完成发信认证的过程 • Sendmail的配置方法,在/etc/mail/sendmail.mc中添加以下几行: define(`confAUTH_OPTIONS', `A')dnl TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5')dnldefine(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5')dnl

  44. Sendmail与SASL(2) • m4 sendmail.mc > sendmail.cf • 把/usr/lib/sasl/Sendmail.conf文件内容改为 pwcheck_method:shadow 或 pwcheck_method:pam 用下面命令重新启动Sendmail即可service sendmail restart • 可以telnet到25端口用ehlo进行测试

  45. 4.Email服务器的管理与维护

  46. 帐号的添加和删除 • Sendmail使用Linux系统帐号作为Email帐号,因此添加删除Sendmail帐号就是添加删除Linux系统帐号 • 添加帐号的命令:useradd name • 修改帐号的密码:passwd name • 删除帐号:注意删除帐号后应该把用户主目录和该用户的信件一起删掉 userdel –r name; rm /var/mail/name

  47. Sendmail运行产生的文件 • /var/log/maillog邮件日志记录,记录了系统每一个Email的时间、发送者、发送状态、失败原因等信息 • /var/spool/mail 本地用户邮件的存放处 文件名就是用户帐号名,文件大小就是用户占用的信箱大小 • /var/spool/mqueue 等待发送的Email的队列,可以使用mailq命令来查看它

  48. 邮件与邮箱大小限制 • 邮件大小限制修改/etc/mail/sendmail.cf,在文件中找到MaxMessageSize一行,把它改为:O MaxMessageSize=xxxxx (注意去掉注释符#)xxx为允许的最大邮件字节数 • 邮箱大小限制在Sendmail中不能直接限制某个用户的邮箱大小。但是可以通过Shell编程来实现。利用Shell脚本程序定时检查用户邮箱大小,若超过限量,则将用户Email地址添加到access文件中,不允许再接收新邮件即可

  49. 遇到麻烦怎么办? • telnet登陆smtp(25)端口,检查Sendmail工作是否正常 • 如果sendmail无法启动,请检查/var/log/messages,以获取错误信息 • 如果只有部分用户使用不正常,请检查/etc/mail/access、/etc/alises和用户主目录下的.forward文件 • 不明原因的信件丢失或者无法发送请打开/var/log/maillog,查看日志记录,了解邮件接收或转发过程的情况

  50. 5.几个有用的小技巧

More Related