邮件服务器

翻译自Fedora 18文档System Administrator's Guide中的Mail Servers一节。

目录

1 电子邮件协议
1.1 邮件传输协议
1.2 邮件访问协议
2 电子邮件程序分类
2.1 邮件传输代理
2.2 邮件投递代理
2.3 邮件用户代理
3 邮件传输代理
3.1 Postfix
3.2 Sendmail
3.3 Fetchmail
3.4 邮件传输代理(MTA)配置
4 邮件投递代理
4.1 Procmail配置
4.2 Procmail配方(Recipe)
5 邮件用户代理
5.1 安全通信
6 其他资源
6.1 已安装文档
6.2 有用的网站
6.3 相关书籍

电子邮件出生于1960年代。信箱(mailbox)是用户家目录的一个文件,只能被用户自己读取。原始的邮件应用程序附加新的文本信息到那个文件末尾,使得用户在不断增长的文件中阅读某一条消息变得很艰难。这一系统只能向同一系统中的用户发送消息。

电子邮件的第一次网络传输发生在1971年,一个叫Ray Tomlinson的计算机工程师通过ARPANET(Internet的前身)在两台机器间发送了一条测试信息。通过电子邮件进行通信很快变得流行,在不到两年的时间内就占用了ARPANET网络传输量的75%。

现在,基于标准化网络协议的电子邮件系统已经演变成因特网上最广泛使用的服务之一。Fedora包含许多先进的应用程序,用于提供电子邮件服务及访问电子邮件。

这一节回顾当前所使用的电子邮件协议,以及一些发送和接收电子邮件的程序。

1 电子邮件协议

现在,电子邮件的投递使用客户端/服务器架构。邮件客户端程序创建一条电子邮件信息,然后把这信息发给一个服务器。服务器把信息转发给接收方的邮件服务器,然后信息被提供给接收方的邮件客户端。

下面所描述的,是传输电子邮件最常用的协议。

1.1 邮件传输协议

从客户端应用程序到服务器,以及从源服务器到目的服务器的邮件投递,由简单邮件传输协议(SMTP,Simple Mail Transfer Protocol)处理。

1.1.1 SMTP

SMTP的主要目的是在邮件服务器间传输电子邮件。不过,它对电子邮件客户端也很关键。为发送一封邮件,客户端把信息发给一个外发邮件服务器,这个服务器接下来会联系目标邮件服务器以便投递邮件。由于这一原因,配置电子邮件客户端的时候必须指定一个SMTP服务器。

在Fedora里,用户可以在本地主机上配置一个处理邮件投递的SMTP服务器。不过,也可以使用外部SMTP服务器来外发邮件。

关于SMTP协议有重要的一点需要指出,它不要求鉴定(authentication)。这允许互联网上的任何一个人可以把电子邮件发给其他任何人,甚至发给一大群的人。SMTP的这一特征让垃圾邮件或垃圾邮件群发成为可能。强加(impose)一个转播约束可限制因特网上的任意用户通过你的SMTP服务器,往因特网上的其他服务器发送电子邮件。未强加这一约束的服务器称为开放转播(open relay)服务器。

Fedora提供的SMTP程序有Postfix和Sendmail。

1.2 邮件访问协议

电子邮件客户端程序使用两个主要的协议从邮件服务器取回电子邮件:邮局协议(POP,Post Office Protocol)和因特网信息访问协议(IMAP,Internet Message Access Protocol)。

1.2.1 POP

Fedora下默认的POP服务器是Dovecot,由dovecot软件包提供。

安装dovecot软件包。要使用Dovecot,先要以root用户运行下面命令确保dovecot软件包安装在系统中:

yum install dovecot

使用Yum安装软件包的更多信息,参考Section 5.2.4, “Installing Packages”

使用POP服务器时,邮件客户端程序会把电子邮件信息下载下来。大多数POP邮件客户端默认情况下自动配置为下载成功后删除邮件服务器上的邮件,不过这一设置通常可以修改。

POP完全兼容重要的因特网信息发送标准,如允许电子邮件附件的多用途因特网邮件扩展(MIME,Multipurpose Internet Mail Extensions,)。

对使用一个系统阅读邮件的用户来说,POP极为合适。对不能持续连接到因特网,或包含邮件服务器的网络的用户,它也能很好地运转。不幸的是,由于POP要求鉴定后的客户端程序下载每一条信息的全部内容,对网络连接速度很慢的用户来说,如果邮件含有很大的附件,这会花费相当长的时间。

POP协议的最新版本是POP3。

然而,还有一些较少用到的POP协议变体:

  • APOP —— 包含MDS(Monash Directory Service)鉴定的POP3。电邮客户端给服务器发送编码后的用户密码散列值,而不是未加密的密码。
  • KPOP —— 包含Kerberos鉴定的POP3。
  • RPOP —— 包含RPOP鉴定的POP3。它使用类似密码的单用户ID鉴定POP请求。然而,这一ID并没有加密,所以并不会比标准的POP安全。

要加强安全性,可把安全套接层(SSL,Secure Socket Layer)加密用于客户端鉴定和数据传输会话。这可以通过pop3s服务,或/usr/sbin/stunnel程序实现。了解电子邮件通信加密的更多信息,参考Section 15.5.1, “Securing Communication”

1.2.2 IMAP

Fedora中默认的IMAP服务器是Dovecot,由dovecot软件包提供。参考Section 15.1.2.1, “POP”获取Dovecot的安装方法。

使用IMAP服务器的时候,电邮信息仍然在服务器上,用户可以读取或删除它们。IMAP还允许客户端应用程序创建、重命名或删除服务器上的邮件目录,以组织及存储邮件。

如果用户使用多台机器访问他们的电子邮件,IMAP会特别有用。这一协议对使用慢速连接访问邮件服务器的用户也很方便,打开邮件前,只会下载头信息,节省了带宽。用户还能在不浏览或下载的情况下删除邮件。

为方便起见,IMAP客户端应用程序可以在本地缓存数据报拷贝,当用户没有直接连接到IMAP服务器的时候,可以浏览先前阅读过的信息。

像POP那样,IMAP也完全兼容重要的因特网报文发送标准,如允许电子邮件附件的MIME。

要加强安全性,可以使用SSL加密客户端鉴定和数据传输会话。通过imaps服务,或/usr/sbin/stunnel程序启用加密。获取电子邮件通信加密的更多信息,参考Section 15.5.1, “Securing Communication”

还有其他免费及商业IMAP客户端和服务器可用,它们中的很多扩展了IMAP协议并提供了额外的功能。

1.2.3 Dovecot

实现IMAP协议的imap-login进程和实现POP3协议的pop3-login进程,由dovecot主守护进程(包含于dovecot软件包)派生而来。IMAP和POP3的使用在/etc/dovecot/dovecot.conf设置。dovecot默认使用SSL运行IMAP和 POP3的安全版本。要设置dovecot使用POP,完成下面步骤:

  1. 编辑/etc/dovecot/dovecot.conf,确保protocols变量未被注释掉(移除那一行打头的#号)且包含pop3参数。例如:
    protocols = imap imaps pop3 pop3s

    如果protocols变量被注释掉,devecot会使用这一变量的默认值。

  2. 以root用户运行下面命令使这一改变生效:
    systemctl restart dovecot.service
  3. 让设置在下一次重启后也有效,运行这个命令:
    systemctl enable dovecot.service

dovecot服务启动POP3服务器。请注意,dovecot只会报告它启动了IMAP服务器,但其实也启动了POP3服务器。

不同于SMTP,IMAP和POP3要求连接到它的客户端使用一个用户名和密码进行鉴定。两个协议默认都不加密传输的密码。

设置dovecot上的SSL:

  • 根据个人偏好编辑/etc/pki/dovecot/dovecot-openssl.conf。不过,通常这个文件不需要修改。
  • 重命名、移动或删除/etc/pki/dovecot/certs/dovecot.pem和/etc/pki/dovecot/private/dovecot.pem。
  • 执行/usr/libexec/dovecot/mkcert.sh脚本,创建devecot自签名证书。这些证书会被拷贝到/etc/pki/dovecot/certs和/etc/pki/dovecot/private目录里。要让变化生效,以root身份输入下面命令:
    systemctl restart dovecot.service

dovecot的更多细节可在http://www.dovecot.org找到。

2 电子邮件程序分类

通常,所有电子邮件程序都至少可以归为三个分类之一。每一分类在电子邮件的移动和管理过程中都有自己独特的角色。尽管大多数用户只能觉察到他们接受和发送邮件的邮件程序,每一类别对确保邮件到达正确的目的地都很重要。

2.1 邮件传输代理

邮件传输代理(MTA,Mail Transport Agent)使用SMTP在主机间传输邮件信息。一封邮件向目的地移动的过程中可能会经过多个MTA。

在机器间投递邮件看起来或许非常简单,但决定某个MTA可以或应该接受并投递一封邮件的整个过程相当复杂。另外,由于垃圾邮件问题,MTA的配置或MTA所在网络的访问配置通常会限定对某个MTA的使用。

许多现代的电子邮件客户端程序在发送邮件的时候可以作为一个MTA。不过,不应把这一行为与真正的MTA角色混淆。邮件客户端程序可以像MTA那样发送邮件的唯一原因是运行这一程序的主机没有自己的MTA。对不基于UNIX的操作系统上的电子邮件程序更是如此。但是,这些客户端程序只是把邮件外发给授权它们使用的一个MTA,并不直接把邮件发向收件人的邮件服务器。

由于Fedora提供两个MTA——Postfix和Sendmail——电子邮件客户端程序通常不要求充当MTA。Fedora还包含一个特殊目的的MTA,Fetchmail。

Postfix,Sendmail,Fetchmail的更多信息,参考3 邮件传输代理

2.2 邮件投递代理

邮件投递代理(MDA,Mail Delivery Agent)由MTA引用,把收到的邮件发到恰当的用户邮箱里。在许多情况下,MDA实际上是LDA(Local Delivery Agent,本地投递代理),如mail或Procmail。

任何程序,只要实际上为投递处理邮件信息,且处理后的结果可被邮件客户端直接读取,都可认为是MDA。由于这一原因,一些MTA(如Sendmail和Postfix),当它们把新的邮件信息附加到本地用户的邮件缓存文件(mail spool file)上时,可以充当MDA的角色。通常,MDA既不在系统间传输信息,也不提供用户界面;MDA在本地系统上为邮件客户端分发和归类信息。

2.3 邮件用户代理

邮件用户代理(MUA,Mail User Agent)与邮件客户端程序是同义词。MUA是这样一个程序,至少让用户能读取和创作邮件信息。许多MUA可以通过POP或IMAP协议获取邮件,设置邮箱来储存邮件,以及外发邮件到MTA。

MUA可能是图形界面的,例如Evolution,也可能是简单文本界面,例如pine。

3 邮件传输代理

Fedora提供两个主要的MTA:Postfix和Sendmail。Postfix被设置为默认MTA,不过要把默认MTA切换成Sendmail也很容易。要把Sendmail切换为默认MTA,作为root用户,你可以卸载Postfix或用下面命令切换到Sendmail:

alternatives --config mt

你也可以使用下面命令启用/禁用服务:

systemctl enable|disable service.service

3.1 Postfix

最初在IBM,由安全专家和程序员Wietse Venema开发的Postfix,是一个与Sendmail兼容的MTA,设计目标是安全,快速,易于设置。

为改进安全性,Postfix使用了模块化设计,即让主守护程序加载权限受限的小进程。更小、权限更少的进程,执行涉及邮件投递各个阶段的非常具体的任务,并且运行在一个改变了root的环境以限制攻击的影响。

要让Postfix接受除本机外其他主机的网络连接只需要小小修改它的配置文件。对需求更为复杂的用户,Postfix提供了多种配置选项,还有第三方插件,这样它成为一个多用途全功能的MTA。

Postfix的配置文件易于阅读,且向上支持250个指令。与Sendmail不同,配置文件的生效不需要宏处理(macro processing),并且多数常用选项都在注释里有详细的描述。

3.1.1 默认Postfix安装

Postfix的默认执行文件是/usr/sbin/postfix。这一守护程序加载所有需要进程来处理邮件投递。

Postfix的配置文件在/etc/postfix/目录。下面是常用文件的列表:

  • access - 用于访问控制,这一文件指出哪些主机允许连接到Postfix。
  • main.cf - Postfix全局配置文件。大多数配置选项都在这个文件中指定。
  • master.cf - 指出Postfix如何与各个进程交互,以完成邮件投递。
  • transport - 把邮件地址映射到中继主机(relay host)。

在/etc/目录还能发现aliases文件。这一文件由Postfix和Sendmail共享。它是一个邮件协议要用到的可配置列表,描述用户ID别名。

配置Postfix作为其他客户端的服务器。默认的/etc/postfix/main.cf不允许Postfix接受除本机外来自其他主机的网络连接。把Postfix设置为其他客户端的服务器的说明,参考3.1.2 Postfix基本设置

如果改变了/etc/postfix目录下的配置文件,需要重启postfix服务才能使配置生效。root用户使用下面命令重启postfix服务:

systemctl restart postfix.service

3.1.2 Postfix基本设置

Postfix默认不接受除本机外其他主机的网络连接。用root用户执行下面步骤启用对网络中其他主机的邮件投递:

  • 用文本编辑器编辑/etc/postfix/main.cf,例如vi。
  • 移除mydomain那一行前面的#,以便取消注释。把domain.tld替换为邮件服务器提供邮件服务的域名,例如example.com。
  • 取消myorigin = $mydomain那一行的注释。
  • 取消myhostname那一行的注释,把host.domain.tld替换为机器的主机名。
  • 取消mydestination = $myhostname, localhost.$mydomain那一行的注释。
  • 取消mynetworks那一行的注释,把168.100.189.0/28替换为有效的网络设置,使得允许的主机可以连接到服务器。
  • 取消inet_interfaces = all那一行的注释。
  • 把inet_interfaces = localhost那一行注释掉。
  • 重启postfix服务。

这些步骤完成之后,主机可以接收外部邮件来投递。

Postfix有着各式各样的配置选项。学习如何配置Postfix的最好方式是阅读/etc/postfix/main.cf里面的注释。额外的信息,包括Postfix配置、集成SpamAssassin或/etc/postfix/main.cf参数的详细描述,可到http://www.postfix.org/在线获取。

3.1.3 结合LDAP使用Postfix

Postfix可以使用LDAP目录作为各种查找表(例如aliases,virtual,canonical,等等)的来源。这允许LDAP存储层次化的用户信息,当需要时只会给Postfix提供LDAP查询的结果。不在本地储存这些信息,让管理员易于维护。

3.1.3.1 /etc/aliases查找示例

下面是一个使用LDAP查找/etc/aliases文件的基本示例。确保你的/etc/postfix/main.cf包含:

alias_maps = hash:/etc/aliases, ldap:/etc/postfix/ldap-aliases.cf

创建一个/etc/postfix/ldap-aliases.cf文件(如果你还没有创建),确保它包含:

server_host = ldap.example.com
search_base = dc=example, dc=com

ldap.example.com,example和com这些参数需要替换为可用LDAP服务器的信息。

/etc/postfix/ldap-aliases.cf文件。/etc/postfix/ldap-aliases.cf文件可以指定许多参数,包括启用LDAP SSL和STARTTLS的参数。更多信息,参考ldap_table(5)手册页(man page)。

LDAP的更多信息,参考Section 16.1, “OpenLDAP”

3.2 Sendmail

Sendmail的核心目的,像其他MTA那样,是安全地在主机间传输邮件,通常使用SMTP协议。Sendmail具有很高的可配置型,几乎允许控制邮件处理的各个方面,包括使用的协议。由于它的强大和灵活性,许多系统管理员把Sendmail作为他们的MTA。

3.2.1 目标和局限

知道Sendmail是什么、能做什么、不是什么,很重要。在这些庞大的软件充当多个角色的日子里,Sendmail看起来可能是组织内运行一个邮件服务器唯一需要的应用程序。技术上说这是真的,因为Sendmail可以把邮件分发到每一用户的目录中,也可以为用户向外投递邮件。不过大多数用户实际上需要的不仅仅是简单邮件投递。用户通常希望用MUA(使用POP或IMAP)与他们的邮件交互,下载邮件到他们本地机器上。或者,他们可能喜欢用Web界面访问自己的邮箱。这些其他软件可以与Sendmail一起使用,但它们实际上为其他原因而存在并可以各自独立运作。

探索所有应该或者能够设置Sendmail来做的事情已经超出了这一节的讨论范围。不夸张地讲,它有数百个不同的选项和规则集,许多书籍整本都在帮助解释所有它能做的事以及当出现问题时如何解决。6 其他资源里有一个Sendmail的资源列表。

这一节回顾Sendmail默认安装的文件和基本的配置改变,包括如何停止不想要的电子邮件(垃圾邮件),以及如何用轻型目录访问协议(LDAP,Lightweight Directory Access Protocol)扩展Sendmail。

3.2.2 默认Sendmail安装

要使用Sendmail,先确保安装了sendmail软件包。root用户运行命令:

yum install sendmail

为了配置Sendmail,确保安装了sendmail-cf软件包。root用户运行命令:

yum install sendmail-cf

使用Yum安装软件的更多信息,参考Section 5.2.4, “Installing Packages”

使用Sendmail之前,必须把默认MTA从Postfix切换过来。切换默认MTA的方法,请参考3 邮件传输代理

Sendmail的执行文件是/usr/sbin/sendmail。

Sendmail那冗长而又详细的配置文件是/etc/mail/sendmail.cf。不要直接编辑sendmail.cf文件。要改变Sendmail的配置,编辑/etc/mail/sendmail.mc,备份原始的/etc/mail/sendmail.cf,用下述方法之一生成新的配置文件:

  • 使用/etc/mail中的makefile(~]# make all -C /etc/mail/)创建一个新的/etc/mail/sendmail.cf配置文件。/etc/mail里其他所有生成的文件(db文件)如果需要都会被重新生成。老的makemap命令仍然可用。systemctl start|restart|reload sendmail.service会自动使用make命令。
  • 你还能用m4宏处理器创建一个新的/etc/mail/sendmail.cf。m4宏处理器默认不安装。用它创建/etc/mail/sendmail.cf前,先用root用户安装m4包:
    yum install m4

设置Sendmail的更多信息可以在3.2.3 常见Sendmail配置更改找到。

/etc/mail目录下安装了多个不同的Sendmail配置文件,包括:

  • access - 指定哪一系统可以使用Sendmail外发邮件。
  • domaintable - 指定域名映射。
  • local-host-names - 指定主机的别名。
  • mailertable - 指定覆盖域名路径(override routing for particular domains)的指令。
  • virtusertable - 指定一个域名相关的别名,允许多个虚拟域使用一台机器作为主机。

/etc/mail/中的一些配置文件,如access、domaintable、mailertable和virtusertable,在Sendmail可以使用任何配置更改前,必须把它们的信息实际储存到数据库文件里。要把这些配置的更改包含在它们的数据库文件里,用root用户运行下面命令:

makemap hash /etc/mail/name < /etc/mail/name

name代表要更新的配置文件名称。你可以重启sendmail服务让更改生效:

systemctl restart sendmail.service

例如,要把所有到example.com域的邮件地递到bob@other-example.com,在virtusertable文件加上下面一行:

@example.com bob@other-example.com

 

要完成改变,必须更新virtusertable.db文件:

makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable

Sendmail会创建一个包含新配置的virtusertable.db文件。

3.2.3 常见Sendmail配置更改

修改Sendmail配置文件的时候,最好不要编辑现有的文件,而是生成一个全新的/etc/mail/sendmail.cf文件。

改变其内容前,先备份sendmail.cf。修改sendmail.cf文件前,最好先创建它的一个拷贝作为备份

要给Sendmail添加想要的功能,以root身份编辑/etc/mail/sendmail.mc。结束编辑后重启sendmail服务,如果安装了m4软件包,m4宏处理器会自动生成一个新的sendmail.cf配置文件:

systemctl restart sendmail.service

配置Sendmail作为其他客户端的服务器。默认的sendmail.cf不允许Sendmail接受除本机外其他主机的网络连接。要让Sendmail作为其他客户端的服务器,编辑/etc/mail/sendmail.mc文件,要么把DAEMON_OPTIONS指令Addr=选项的地址由127.0.0.1改为活动网络设备的IP地址,要么在DAEMON_OPTIONS那一行指令的最前面加上dnl,把它注释掉。结束以后,重启服务以便重新生成/etc/mail/sendmail.cf:

systemctl restart sendmail.service

Fedora自带的默认配置对大多数仅使用SMTP的站点都可用。不过,它无法用在UUCP(UNIX-to-UNIX Copy Protocol,UNIX到UNIX拷贝协议)站点。如果使用UUCP邮件传输,必须重配置/etc/mail/sendmail.mc并重生成/etc/mail/sendmail.cf

编辑/usr/share/sendmail-cf目录里面任何文件之前,请先查阅/usr/share/sendmail-cf/README文件,因为它们会对/etc/mail/sendmail.cf未来的配置产生影响。

3.2.4 伪装

Sendmail的一个常见配置是把单独一台机器作为网络内所有机器的邮件网关。例如,一个企业可能想让mail.example.com这台机器处理他们所有邮件,并把一个一致的返回地址指派给所有外发邮件。

在这一情况下,Sendmail服务器必须在企业网络里伪装机器名,以便它们的返回地址是user@example.com而不是user@host.example.com。

要做到这一点,把下面这些行添加到/etc/mail/sendmail.mc:

FEATURE(always_add_domain)dnl
FEATURE(`masquerade_entire_domain')dnl
FEATURE(`masquerade_envelope')dnl
FEATURE(`allmasquerade')dnl
MASQUERADE_AS(`bigcorp.com.')dnl
MASQUERADE_DOMAIN(`bigcorp.com.')dnl
MASQUERADE_AS(bigcorp.com)dnl

使用m4宏处理器生成新的sendmail.cf之后,这一配置让所有来自内部的邮件看起来是从bigcorp.com发出的。

3.2.5 阻止垃圾邮件

可以把垃圾邮件定义为未请求通讯的用户收到的不必要和不想要的邮件。它是对因特网通信标准的一种具有破坏性、代价高昂的广泛滥用。

Sendmail可以较容易地阻止新的垃圾邮件发送技术。它甚至默认就屏蔽了常见的垃圾邮件发送手段。sendmail包含的主流反垃圾邮件特性包括邮件头检查(header checks)、中继拒绝(relaying denial,从8.9版开始)、访问数据库(access database)和发件人信息检查(sendr information checks)。

例如,SMTP信息的转发(也被称为中继)自Sendmail 8.9版开始默认禁用。在这一变化产生前,Sendmail指示邮件主机(x.edu)从一个团体(y.com)接收信息并把它们发给一个不同的团体(z.net)。然而现在,要让任意域通过服务器中继邮件必须设置Sendmail。要设置中继域,编辑/etc/mail/relay-domains并重启Sendmail:

systemctl restart sendmail.service

不过,许多时候用户会被来自Internet上其他主机的垃圾邮件轰炸。在这些情况下,Sendmail通过/etc/mail/access提供的访问控制特性可以用来阻止不希望连接的主机。下面是如何使用这一文件既阻止又允许访问Sendmail服务器的示例:

badspammer.com ERROR:550 "Go away and do not spam us" tux.badspammer.com OK 10.0 RELAY

这一示例显示所有发自badspammer.com的邮件都使用一个遵从550 RFC-821的错误代码拒绝,并给垃圾邮件发送者返回一条信息。接受从tux.badspammer.com子域发送的邮件。行末显示所有从10.0.*.*网络发送的邮件都可以通过邮件服务器中继。

由于/etc/mail/access.db文件是一个数据库,要以root身份用makemap命令对改变进行更新:

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

消息头分析(message header analysis)让你可以根据头内容拒绝邮件。SMTP服务器在消息头储存邮件的旅程。当信息从一个MTA旅行到另一MTA时,每一MTA都会在所有其他Received头之上放置一个Received头。有重要的一点需要注意,垃圾邮件发送者可能会修改这一信息。

上面例子只是以允许或阻止访问对Sendmail能做的一小部分事情做出示范。/usr/share/sendmail-cf/README有更多的信息和示例。

由于Sendmail投递邮件时调用Procmail MDA,也可以使用垃圾邮件过滤程序如SpamAssassin为用户识别和归档垃圾邮件。4.2.6 垃圾邮件过滤器有SpamAssassin的更多信息。

3.2.6 结合LDAP使用Sendmail

要在一个更大的组织里寻找某用户的特定信息,使用LDAP是一个迅速和强大的方式。例如,一个LDAP服务器可以根据用户的姓从公共企业目录查找特定的邮件地址。在这一类型的实现中,LDAP基本上是与Sendmail分离的,因为LDAP储存层次性用户信息,Sendmail只是在预处理的邮件信息中获取到LDAP的查询结果。

不过,Sendmail支持更好的LDAP集成,它使用LDAP代替分开维护的文件(比如/etc/aliases和/etc/mail/virtusertables),让不同的邮件服务器协同工作,来支持一个中等到企业级的组织。总之,LDAP把Sendmail的邮件寻路层(mail routing level)和分开的配置文件抽象到一个强大的LDAP集群上,让许多不同的应用程序利用。

当前版本的Sendmail包含对LDAP的支持。要扩展Sendmail服务器以使用LDAP,先要有一台已配置好且正在运行LDAP服务器(可以使用OpenLDAP)。然后编辑/etc/mail/sendmail.mc,添加:

LDAPROUTE_DOMAIN('yourdomain.com')dnl
FEATURE('ldap_routing')dnl

进阶配置。这只是让Sendmail使用LDAP的一个非常基本的配置。基于不同的LDAP实现,配置可能会有非常大的区别,特别是让多台Sendmail机器使用一个公共LDAP服务器的时候。

查阅/usr/share/sendmail-cf/README,里面有详细的LDAP寻路(routing)配置说明和示例。

接下来,使用m4宏处理器重新创建/etc/mail/sendmail.cf文件并重启Sendmail。3.2.3 常见Sendmail配置更改有操作说明。

LDAP的更多信息,参考Section 16.1, “OpenLDAP”

3.3 Fetchmail

Fetchmail是一个从远端服务器获取邮件并投递到本地MTA的MTA。许多用户会赞许它把下载邮件过程和在MUA阅读组织邮件过程分开的能力。考虑到拨号用户的需求,Fetchmail使用任意数量的协议(包括POP3和IMAP)连接并迅速把邮件信息下载到邮件存储文件(mail spool file)。如果需要,它甚至可以把邮件信息转发到一个SMTP服务器。

安装fetchmail。要使用Fetchmail,先确保系统里安装了fetchmail软件包。root用户执行:

yum install fetchmail

Yum安装软件包的更多信息,参考Section 5.2.4, “Installing Packages”

每一个用户用自己家目录下的.fetchmailrc文件配置Fetchmail。如果这个文件不存在,在家目录创建它。

Fetchmail使用.fetchmailrc文件里面的参数检查并下载远端服务器上的邮件。然后把邮件投递到本地机器的25端口,使用本地MTA把邮件放在正确用户的存储文件里。如果Procmail可用,它会加载并过滤邮件然后把邮件放到邮箱,这样MUA可直接读取。

3.3.1 Fetchmail配置选项

虽然可以在命令行提供所有需要的选项让Fetchmail来检查远端服务器上的邮件,使用.fetchmailrc文件会更简单些。把每次使用fetchmail命令都会用到的常用选项放在.fetchmailrc里。运行Fetchmail的时候可以使用命令行选项覆盖这些配置。

用户的.fetchmailrc文件包含三种类别的配置选项:

  • 全局选项 - 控制程序的运转的选项,或每次检查邮件时都需要的选项。
  • 服务器选项 - 提供要检查的主机的必要信息。比如主机名,特定邮件服务器的参数(如端口号,超时时间)。这些选项影响到所有使用那个服务器的用户。
  • 用户选项 - 包含使用特定邮件服务器检查邮件所需要的鉴定信息(如用户名和密码)。

全局选项在.fetchmailrc文件的最顶端,后面跟着一个或多个服务器选项。每一个服务器选项都指出了一台Fetchmail应检查的邮件服务器。用户选项跟在服务器选项之后,用于每个用户账户检查邮件服务器。与服务器选项类似,可以为特定服务器指定多个用户选项,也可以检查同一服务器上的多个邮件账户。

服务使用在.fetchmailrc文件使用特别的选项动词,poll或skip,调用服务器选项。这些选项动词放在服务器信息之前。poll告诉Fetchmail在运行的时候使用这一服务器选项,用相关的用户选项检查邮件。skip之后的服务器选项不会被检查,除非运行Fetchmail的时候指定了服务器的主机名。在测试.fetchmailrc文件里面的配置时,skip选项很有用,因为在明确指定了以后它只会检查那个被忽略的服务器,不会影响到当前可用的配置。

下面是一个.fetchmailrc文件示例:

set postmaster "user1"
set bouncemail

poll pop.domain.com proto pop3
    user 'user1' there with password 'secret' is user1 here

poll mail.domain2.com
    user 'user5' there with password 'secret2' is user1 here
    user 'user7' there with password 'secret3' is user1 here

在这个例子中,全局选项指出用户把发邮件作为最后的手段(postmaster选项),所有的邮件错误都发给postmaster而不是发件人(bouncemail选项)。set告诉Fetchmail这一行包含一个全局选项。接下来指定了两个邮件服务器,一个使用POP3检查,另一个尝试不同协议并使用可用的协议。使用第二个服务器的选项检查两个用户,但任何用户的邮件都发到user1的邮件存储里。这样可以检查多个服务器的多个邮箱,但邮件只在一个MUA的收件箱显示。用户的信息以user打头。

在配置文件里省略密码。不要求用户把密码放在.fetchmailrc文件里。如果省略了with password 'password',Fetchmail在运行时会要求用户输入密码。

Fetchmail有很多全局、服务器和本地选项。这些选项中有很多很少使用,或仅适用于非常特别的场合。fetchmail手册页详细解释了每一选项,但最常用的被列在下面三个小节中。

3.3.2 全局选项

每一全局选项都单独占用一行,且以set打头。

  • daemon seconds - daemon模式,Fetchmail在后台运行。把seconds替换为检查服务器前Fetchmail需要等待的秒数。
  • postmaster - 指定一个本地用户,当投递发生问题时使用这个用户发送邮件。
  • syslog - 指定记录错误和状态信息的日志文件。默认是/var/log/maillog.

3.3.3 服务器选项

服务器选项必须放在.fetchmailrc里他们自己那一行,在poll或skip之后。

  • auth auth-type - 把auth-type替换为要使用的鉴定类型。默认使用password(密码)鉴定,不过有些协议支持其他类型的鉴定,包括kerberos_v5,kerberos_v4和ssh。如过使用了any鉴定类型,Fetchmail首先尝试不需要密码的手段,然后是伪装(mask)了密码的手段,最后尝试向服务器发送未加密密码进行鉴定。
  • interval number - 每隔number次检查所有已配置服务器上的邮件之后,检查特定的服务器一次。这一选项通常用在用户很少收到信息的邮件服务器上。
  • port port-number - 把port-number替换为端口值。这一数值覆盖了协议的默认端口号。
  • proto protocol - 使用protocol协议(例如pop3或imap)在服务器上检查邮件。
  • timeout seconds - 在服务器处于非活动状态seconds秒之后,Fetchmail终止连接尝试。如果没有设置这个值,默认是300。

3.3.4 用户选项

用户选项可以放在服务器选项下另外一行,也可以与服务器选项放在同一行。不管是哪种情况,选项必须在user之后。

  • fetchall - 让Fetchmail下载队列中所有信息,包括已经阅读了的信息。Fetch默认只下载新信息。
  • fetchlimit number - 取回number条信息后停止。
  • flush - 取新信息之前删除队列中先前浏览过的信息。
  • limit max-number-bytes - max-number-bytes是允许Fetchmail取回的最大邮件大小,单位字节。如果网络很慢,下载大邮件占用太长的时间,这一选项会有用。
  • password 'password' - 把password替换为用户的密码。
  • preconnect "command" - 把command替换为取邮件前需要为用户执行的命令。
  • postconnect "command" - 把command替换为取邮件后需要为用户执行的命令。
  • ssl - 激活SSL加密。
  • user "username" - Fetchmail使用username这个用户名取邮件。这一选项必须在所有其他用户选项之前

3.3.5 Fetchmail命令行选项

大多数Fetchmail的命令行选项在执行fetchmail命令的时候都反映了.fetchmailrc的配置选项。用这种方式,有没有配置文件都可以使用Fetchmail。大多数用户没有在命令行使用这些选项是因为把它们放在.fetchmailrc文件里面更简单。

有时候会想为了特别的目的使用其他选项运行fetchmail命令。也可以使用命令行选项暂时覆盖造成错误的.fetchmailrc设置,因为命令行提供的任何选项都会覆盖配置文件中的值。

3.3.6 信息或调试选项

在fetchmail命令之后使用这些选项可以提供重要的信息。

  • --configdump - 根据.fetchmailrc和Fetchmail默认值显示所有可能的选项。使用这个选项时,不会取任何用户的邮件。
  • -s - 以安静模式执行Fetchmail,阻止除错误外的任何信息显示在fetchmail命令之后。
  • -v - 以啰嗦(verbose)模式执行Fetchmail,显示Fetchmail和远端邮件服务器间的每一次通信。
  • -V - 显示详细的版本信息,列出它的全局选项,展示用于每一个用户的设置,包括邮件协议和鉴定手段。使用这个选项时,不会取任何用户的邮件。

3.3.7 特殊选项

这些选项在覆盖.fetchmailrc文件中常用的默认选项时偶尔有用。

  • -a - Fetchmail从远端邮件服务器下载所有信息,不管是新的还是先前浏览过的。Fetchmail默认只下载新信息。
  • -k - Fetchmail在下载后把信息留在远端邮件服务器上。这一选项覆盖了下载后删除信息的默认行为。
  • -l max-number-bytes - Fetchmail不下载大于特定大小的信息,并把它们留在远端邮件服务器上。
  • --quit - 退出Fetchmail守护程序进程。

更多命令以及.fetchmailrc选项可以在fetchmail手册页(man page)找到。

3.4 邮件传输代理(MTA)配置

邮件传输代理(MTA)是发送邮件的基础。邮件用户代理(MUA)如Evolution、Thunderbird和Mutt用来阅读和创作邮件。用户从MUA发送邮件的时候,信息被传给MTA,MTA再通过一系列的MTA发送信息,直到达到目的地。

即使用户不打算从系统发送邮件,一些自动任务或系统程序也可能会使用/bin/mail命令给本地系统的root用户发送包含日志信息的电子邮件。

Fedora 18提供两个MTA:Postfix和Sendmail。如果两个都安装了,Postfix会是默认MTA。

4 邮件投递代理

Fedora包含两个主要MDA,Procmail和mail。两个应用程序都可以认为是LDA,它们都是把邮件从MTA的存储文件(spool file)移动到用户的邮箱。不过,Procmail提供了一个健壮的过滤系统。

本节只详细说明Procmail。mail命令的信息请参考其手册页(man mail)。

邮件被放置在本机的邮件存储文件后,Procmail对其进行投递和过滤。它强大、资源占用少并被广泛使用。在投递邮件让客户端程序读取这一行为上,Procmail可以扮演一个关键的角色。

Procmail可以以多种方式调用。每当MTA把邮件放在邮件存储文件里时,Procmail都会启动。Procmail会过滤并把邮件发给MUA,然后退出。还可以让MUA收到邮件后执行Procmail,以便把信息移动到它们正确的邮箱里。每当MTA收到一个新信息的时候,Procmail会引用(invoke)/etc/procmailrc或用户家目录的~/.procmailrc文件(也被称为rc文件)。

默认在/etc/目录不存在系统级rc文件,用户的家目录也不存在.procmailrc文件。因此,要使用Procmail,每一用户必须创建一个有着特定环境变量和规则的.procmailrc文件。

Procmail是否对一条邮件信息做出行动,取决于这信息是否匹配rc文件里一个给定的条件集合或配方(recipe)。如果信息匹配一个配方,那么邮件或者放在特定的文件里、或者删除、或者另外处理。

Procmail运行时,它读取邮件信息并把邮件内容和邮件头信息分开。接下来,Procmail查找一个/etc/procmailrc文件,还在/etc/procmailrcs目录查找rc文件,获取默认的,系统级的Procmail环境变量和配方。接着Procmail在用户的家目录寻找一个.procmailrc文件,许多用户也会在他们的家目录为Procmail创建额外的rc文件(在.procmailrc中引用)。

4.1 Procmail配置

Procmail配置文件包含重要的环境变量。这些环境变量指定对哪些信息进行分类,如果信息不与任何配方匹配如何处理等事情。

这些环境变量通常以下面形式出现在~/.procmailrc文件起始处:

env-variable="value"

在这一例子中,env-variable是变量名,value定义了这个变量。

有好多环境变量大部分Procmail用户都不会用到,许多重要的环境变量已经定义了默认值。大多数时间,会用到下面这些变量:

  • DEFAULT - 设置默认的邮箱,当信息不匹配任何配方时,放在这个邮箱。DEFAULT的默认值与$ORGMAIL相同。
  • INCLUDERC - 指定额外的rc文件,包含更多检查信息的配方。这可以把Procmail配方列表分离成扮演不同角色的多个文件,如阻止垃圾邮件和控制邮件列表,今后可在~/.procmailrc文件用注释字符开启或关闭。
    例如,用户的.procmailrc文件里面的行看起来可能像这样:

    MAILDIR=$HOME/Msgs INCLUDERC=$MAILDIR/lists.rc INCLUDERC=$MAILDIR/spam.rc

    要关闭Procmail对邮件列表的过滤,但保持对垃圾邮件的控制,用井号(#)把第一个INCLUDERC那一行注释掉。

  • LOCKSLEEP - 设置Procmail尝试使用一个特殊的锁文件(lockfile)的间隔时间长度,单位秒。默认是8秒。
  • LOCKTIMEOUT - 设置在锁文件上次修改后,在Procmail认为锁文件已经过期并可以被删除前必须经过的时间长度,单位秒。默认是1024秒。
  • LOGFILE - Procmail的信息和错误信息写入这个文件。
  • MAILDIR - 设置Procmail的当前工作目录。如果设置,所有其他Procmail路径都相对于这个目录。
  • ORGMAIL - 如果邮件不能放到默认的或配方指定的位置,则放置在此变量指定的原始邮箱,或另外一个放置信息的位置。
    默认值是/var/spool/mail/$LOGNAME。
  • SUSPEND - 如果必需资源(如swap空间)不可用,此变量设置Procmail暂停的时间,单位秒。
  • SWITCHRC - 允许一个用户指定一个外部文件,包含额外的Procmail配方。很像INCLUDERC选项,但不会再检查引用它的配置文件上的配方,而只使用SWITCHRC指定的文件上的配方。
  • VERBOSE - 让Procmail在日志中记录更多信息。这一选项对调试很有用。

其他重要的环境变量从shell获取,如LOGNAME,登录名称;HOME,家目录的位置;SHELL,默认shell。

所有环境变量及它们的默认值,在procmailrc的手册页有全面解释。

4.2 Procmail配方(Recipe)

新用户会发现学习使用Procmail最难的地方在构建配方。某种程度上,这是可以理解的。因为配方使用正则表达式进行消息匹配,而正则表达式是一种指定字符串匹配的特殊格式。不过,正则表达式的构建并不是很难,甚至在阅读时还很易理解。另外,Procmail配方书写方式的一致性(不去关心正则表达式)让它很容易通过例子学习。要查看Procmail配方,参考4.2.5 配方示例

Procmail配方使用下面形式:

:0flags: lockfile-name * special-condition-character
        condition-1 * special-condition-character
        condition-2 * special-condition-character
        condition-N
        special-action-character
        action-to-perform

Procmail配方的头两个字符是冒号和数字0。0之后可以放置各种标志(flag)来控制Procmail如何处理这个配方。标志之后的冒号部分指出为此消息创建了一个锁文件。如果创建了锁文件,把lockfile-name替换为其文件名。

一个配方可以包含数个条件来匹配邮件。如果没有条件,每一邮件都匹配这个配方。一些条件里会放置正则表达式来进行信息匹配。如果用到多个条件,必须全部匹配才会采取相应的动作。根据配方第一行标志的设置对条件进行检查。放置在星号(*)之后的可选特殊字符可以进一步控制条件。

action-to-perform参数指定当信息匹配一个条件时应采取的动作。每一配方只能有一个动作。在许多情况下,这里的邮箱名称用来引导匹配的信息放到那个文件里,高效地分类邮件。在指定动作前,也可以使用特殊的动作字符。详见4.2.4 特殊条件和动作

4.2.1 投递vs.不投递配方

如果配方匹配一个邮件,这时进行的动作决定了它是投递还是不投递配方。投递配方包含一个把邮件写入文件的行为,把邮件发到其他程序,或把邮件转发到另一个邮箱地址。不投递配方包含所有其他行为,例如嵌套块(nesting block)。嵌套块是一个包含在大括号{}里动作集,当信息匹配配方时会去执行。嵌套块可以多层嵌套,对信息的识别和执行的动作提供更佳的控制。

当信息匹配投递配方时,Procmail执行指定的动作并停止消息与其他配方的比对。匹配不投递配方的消息继续与其他配方进行比对。

4.2.2 标志

标志决定一个配方的条件如何及是否比对一个信息。下面是常用的标志:

  • A - 前一没有A或a标志的配方也与这一消息匹配时才使用本配方。
  • a - 前一有着A或a标志的配方也与这一消息匹配且成功完成时,才使用本配方。
  • B - 分析邮件内容并查找匹配条件。
  • b - 在任何结果动作中都使用邮件内容,如把邮件写入一个文件或转发邮件。这是默认行为。
  • c - 生成邮件的一个拷贝。对投递配方这会很有用,要求的动作会应用到消息上,消息的拷贝可以继续在rc文件中处理。
  • D - 让egrep比对区分大小写。默认比对过程不区分大小写。
  • E - 与A相似,前一个没有E标志的配方不匹配时才比对这一配方中的条件。它和else动作类似。
  • e - 前一个配方的动作失败(fail)时,才把消息与本配方比对。
  • f - 把pipe用作一个过滤器。
  • H - 分析邮件头查找匹配条件。这是默认行为。
  • h - 在结果动作中使用邮件头。这是默认行为。
  • w - 让Procmail等待指定的过滤器或程序终止,并在处理过滤后的消息前报告成功与否。
  • W - 忽略“Program failure(程序失败)”信息,其他与w相同。

参考procmailrc手册页获取其他标志的详细列表。

4.2.3 指定一个本地锁文件

Procmail使用锁文件确保不会有超过1个的进程同时修改一个信息。在配方的第一行,标志之后使用一个冒号(:)指定一个本地锁文件。这会根据目标文件的名称以及LOCKEXT全局环境变量的值创建一个本地锁文件。

还可以在冒号后指定要使用的本地锁文件的名称。

4.2.4 特殊条件和动作

用在Procmail配方的条件和动作之前的特殊字符会改变解释它们的方式。

下面字符可用在配方条件行开头的星号字符(*)之后:

  • ! - 在条件行,这一字符把条件反转,让条件不匹配消息时产生一个匹配。
  • < - 检查信息是否低于指定的字节数。
  • > - 检查信息是否高于指定的字节数。

下述字符用来执行特殊的动作:

  • ! - 在动作行,这一字符告诉Procmail转发信息到特定的邮箱地址。
  • $ - 引用rc文件先前定义的变量集。这通常用于设置被多个配方引用的邮箱。
  • | - 启动一个指定的程序处理信息。
  • {和} - 构建一个嵌套块,用来包含额外的配方来匹配信息。

如果动作行的开头没有使用特殊字符,Procmail假定动作行是指定写入信息的邮箱。

4.2.5 配方示例

Procmail是一个极其灵活的程序,但灵活的结果是,让新手从零开始创作一个配方很困难。

掌握建造Procmail配方这个技能的最好方式来自于对正则表达式较强的理解加上阅读很多其他人建造的示例。正则表达式的全面解释超出了本节的讨论范围。Procmail配方的结构以及有用的Procmail配方示例可以在因特网的许多地方找到(例如http://www.iki.fi/era/procmail/links.html)。正则表达式的使用方式和合适的修改可以通过查看这些示例获得。另外,正则表达式的介绍及基本规则可以在grep手册页找到。

接下来的简单示例展示了Procmail配方的基本结构,也可作为更加复杂的配方的基础。

一个基本的配方甚至都不包含条件,见下例:

:0: new-mail.spool

第一行指出要创建一个本地锁文件,但没指定名称,因此Procmail使用目标文件名并在其后附加LOCKEXT环境变量的值。未提供条件,因此每一个消息都匹配这一配方,并且被放置在单独的存储文件new-mail.spool里。这个文件在MAILDIR环境变量指定的目录中。接下来可以使用MUA浏览这个文件中的信息。

一个基本的配方,例如这个,可以放在所有rc文件的末尾,来引导邮件进入默认位置。

下面这个例子匹配来自指定邮件地址的消息,并把它们丢弃。

:0 * ^From: spammer@domain.com /dev/null

在这一例子中,所有来自spammer@domain.com的信息都发往/dev/null设备,也就是把它们删除。

给/dev/null发消息。为了永久删除而把信息发往/dev/null之前,先确认规则如预想的那样工作。如果一个配方无意中捕捉了意料之外的消息,并且这些消息消失了,这就变得难以对规则排错。

更好的解决方法是让配方的动作指向一个特殊的邮箱,可以偶尔检查这个邮箱以寻找误判。一旦确认没有消息会被偶然匹配,删掉这个邮箱并修改动作,把信息发往/dev/null。

下面的配方抓取来自某邮件列表的邮件,并把它们放在特定的文件夹里。

:0: * ^(From|Cc|To).*tux-lug tuxlug

从tux-lug@domain.com邮件列表发来的任何信息都会自动为MUA放在tuxlug邮箱里。注意本例的条件所匹配的消息,其邮件列表地址在From、Cc或To里。

6 其他资源提供的许多Procmail在线资源有更多详细及强大的配方。

4.2.6 垃圾邮件过滤器

由于是在接收到新邮件后由Sendmail、Postfix和Fetchmail调用,Procmail可被用作与垃圾邮件搏斗的强大工具。

当把Procmail与SpamAssassin一起使用时更是这样。这两个程序能迅速识别垃圾邮件,并分类或破坏它们。

SpamAssassin使用头分析、文本分析、黑名单、垃圾邮件跟踪数据库,以及自学习贝叶斯(Bayesian)垃圾邮件分析来快速准确地识别及标记垃圾邮件。

安装spamassassin软件包。要使用SpamAssassin,先要确保系统安装了spamassassin软件包。以root用户运行下面命令:

yum install spamassassin

Yum安装软件包的更多信息,参考Section 5.2.4, “Installing Packages”

本地用户使用SpamAssassin最简单的方式是把下面这一行放在~/.procmailrc文件接近顶部的位置:

INCLUDERC=/etc/mail/spamassassin/spamassassin-default.rc

/etc/mail/spamassassin/spamassassin-default.rc包含一个简单的Procmail规则,为所有收到的邮件激活SpamAssassin。如果一封邮件被判定为垃圾邮件,会在头部对其标记并给标题加上下面样式:

*****SPAM*****

邮件正文也会附加运行标签(running tally),指出由于哪些元素判定其为垃圾邮件。

要把邮件作为垃圾邮件归档,可以使用类似下面的规则:

:0 Hw * ^X-Spam-Status: Yes spam

这一规则把所有在头部标记为垃圾邮件的邮件发到一个叫做spam的邮箱。

既然SpamAssassin是一个Perl脚本,在一个繁忙的服务器上就有必要使用二进制SpamAssassin守护程序(spamd)和客户端程序(spamc)。要把SpamAssassin设置为这种方式,需要主机的root权限。

启动spamd守护程序,执行下面命令:

systemctl start spamassassin.service

在系统启动时启动SpamAssassin守护程序,执行:

systemctl enable spamassassin.service

参考Chapter 9, Services and Daemons了解如何在Fedora设置服务。

要让Procmail使用SpamAssassin客户端程序而不是Perl脚本,把下面这行放在~/.procmailrc文件接近顶部的位置。对系统范围的配置,放在/etc/procmailrc:

INCLUDERC=/etc/mail/spamassassin/spamassassin-spamc.rc

5 邮件用户代理

Fedora提供多种邮件程序,图形界面的客户端程序如Evolution,还有文本界面的程序如mutt。

本节的剩余部分关注客户端和服务器间的安全通信。

5.1 安全通信

Fedora包含的流行MUA,如Evolution和mutt,都提供SSL加密邮件会话。

像其他网络上未加密的服务那样,重要的电子邮件信息,如用户名、密码以及整个信息,都可能被网络上的用户拦截。此外,由于标准的POP和IMAP协议传递鉴定信息时不加密,攻击者能够在用户名和密码通过网络时获取它们,并以此访问用户账户。

5.1.1 加密邮件客户端

Linux下大多数从远端服务器检查电子邮件的MUA设计上都支持SSL加密。要在取回邮件时使用SSL,必须在服务器和客户端都启用SSL。

客户端启用SSL很简单,通常在MUA配置窗口按一个按钮或修改一个MUA配置文件的选项即可。加密IMAP和POP有已知的端口号(分别是993和995),MUA使用它们来鉴定并下载信息。

5.1.2 为邮件客户的端通信加密

在电子邮件服务器上提供SSL加密很简单。

首先,创建一个SSL证书。可用两种方式完成:向证书授权机构(CA,Certificate Authority)申请一个SSL证书或创建一个自签名证书。

不要使用自签名证书。自签名证书只应该用于测试。在生产环境使用的服务器应使用CA授权的SSL证书。

要为IMAP或POP创建一个自签名SSL证书,切换到/etc/pki/dovecot/目录,根据你的偏好编辑/etc/pki/dovecot/dovecot-openssl.conf配置文件中的证书参数,然后以root身份执行下面命令:

dovecot]# rm -f certs/dovecot.pem private/dovecot.pem
dovecot]# /usr/libexec/dovecot/mkcert.sh

结束以后,确保/etc/dovecot/conf.d/10-ssl.conf文件包含下面配置:

ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

执行systemctl restart dovecot.service命令重启dovecot守护程序。

作为另一选择,stunnel命令可作为加密封装器,对标准、不安全的IMAP或POP连接加密。

stunnel工具使用包含在Fedora中的外部OpenSSL库提供提供强密码系统并保护网络连接。建议到CA申请一个SSL证书,不过也可以创建一个自签名证书。

安装stunnel软件包。要使用stunnel,先确保系统安装了stunnel软件包。以root身份运行:

yum install stunnel

使用Yum安装软件包的更多信息,参考Section 5.2.4, “Installing Packages”

要创建自签名SSL证书,切换到/etc/pki/tls/certs/目录,输入下面命令:

certs]# make stunnel.pem

回答所有问题来完成这一过程。

证书生成以后,创建一个stunnel配置文件,例如/etc/stunnel/mail.conf,包含下面内容:

cert = /etc/pki/tls/certs/stunnel.pem

[pop3s]
accept  = 995
connect = 110

[imaps]
accept  = 993
connect = 143

执行/usr/bin/stunnel /etc/stunnel/mail.conf命令,用上面创建的配置文件启动stunnel,就可以让IMAP或POP邮件客户端使用SSL加密连接邮件服务器。

stunnel的更多信息,参考stunnel手册页或/usr/share/doc/stunnel-version-number/目录中的文档,其中version-number是stunnel的版本号。

6 其他资源

下面是电子邮件应用程序的其他文档列表。

6.1 已安装文档

  • 配置Sendmail的信息包含在sendmail和sendmail-cf软件包里。
    • /usr/share/sendmail-cf/README - 包含m4宏处理器、Sendmail文件位置、支持的邮寄者(mailer)、如何使用增强特性等信息。

    此外,sendmail和aliases手册页包含Sendmail选项和恰当配置Sendmail /etc/mail/aliases文件的有用信息。

  • /usr/share/doc/postfix-version-number - 包含大量配置Postifx的信息。把version-number替换为Postfix的版本号。
  • /usr/share/doc/fetchmail-version-number - 包含一个说明Fetchmail完整特性的FEATURES文件,一个介绍性FAQ文档。把version-number替换为Fetchmail的版本号。
  • /usr/share/doc/procmail-version-number - 包含README文件,概述Procmail;包含FEATURES文件,介绍程序的每一个特性;包含FAQ文件,回答了常见的配置问题。把version-number替换为Procmail的版本号。
    在学习Procmail如何工作及学习创建新配方时,下面的手册页是非常宝贵的:

    • procmail - 包含Procmail如何工作的概览,以及过滤邮件的步骤。
    • procmailrc - 介绍构建配方的rc文件格式。
    • procmailex - 给出一些有用的、真实世界的Procmail配方实例。
    • procmailsc - 解释Procmail使用的加权评分技术,用特定的配方匹配一个信息。
    • /usr/share/doc/spamassassin-version-number/ - 包含大量与SpamAssassin有关的信息。把version-number替换为spamassassin软件包的版本号

6.2 有用的网站

6.3 相关书籍

  • Sendmail Milters: A Guide for Fighting Spam作者Bryan Costales和Marcia Flynt;Addison-Wesley - 一个很好的Sendmail指南,能帮你定制邮件过滤器。
  • Sendmail作者Bryan Costales和Eric Allman et al.;O'Reilly & Associates -一个很好的Sendmail参考书,在Delivermail和Sendmail原始创建者的帮助下写成。
  • Removing the Spam: Email Processing and Filtering作者Geoff Mulligan;Addison-Wesley Publishing Company - 审视邮件管理员使用的多种方法,用已建立的工具如Sendmail和Procmail来应付垃圾邮件难题。
  • Internet Email Protocols: A Developer's Guide作者Kevin Johnson;Addison-Wesley Publishing Company - 提供主要邮件协议及它们安全性的全面回顾。
  • Managing IMAP作者Dianna Mullet和Kevin Mullet;O'Reilly & Associates - 详述配置一个IMAP服务器的步骤。

7 后记

这次翻译过程让我十分痛苦,花费时间也很多。我需要重新审视以翻译作为学习手段是否合适。

Visits: 738

此条目发表在Linux分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

15 − 5 =