更多企业学院:
《中小企业管理全能版》 183 套讲座+89700 份资料
《总经理、高层管理》 49 套讲座+16388 份资料
《中层管理学院》 46 套讲座+6020 份资料
《国学智慧、易经》 46 套讲座
《人力资源学院》 56 套讲座+27123 份资料
《各阶段员工培训学院》 77 套讲座+ 324 份资料
《员工管理企业学院》 67 套讲座+ 8720 份资料
《工厂生产管理学院》 52 套讲座+ 13920 份资料
《财务管理学院》 53 套讲座+ 17945 份资料
《销售经理学院》 56 套讲座+ 14350 份资料
《销售人员培训学院》 72 套讲座+ 4879 份资料
更多企业学院:
《中小企业管理全能版》 183 套讲座+89700 份资料
《总经理、高层管理》 49 套讲座+16388 份资料
《中层管理学院》 46 套讲座+6020 份资料
《国学智慧、易经》 46 套讲座
《人力资源学院》 56 套讲座+27123 份资料
《各阶段员工培训学院》 77 套讲座+ 324 份资料
《员工管理企业学院》 67 套讲座+ 8720 份资料
《工厂生产管理学院》 52 套讲座+ 13920 份资料
《财务管理学院》 53 套讲座+ 17945 份资料
《销售经理学院》 56 套讲座+ 14350 份资料
《销售人员培训学院》 72 套讲座+ 4879 份资料
SMTP(Simple Mail Transfer Protocol)即,它是一组用于由源地址到目的地址传
送邮件的规则,由它来控制信件的中转方式。属于 TCP/IP 协议族,它帮助每台在
发送或中转信件时找到下一个目的地。通过 SMTP 协议所指定的,就可以把 E-
mail 寄到收信人的服务器上了,整个过程只要几分钟。SMTP 服务器则是遵循
SMTP 协议的发送邮件服务器,用来发送或中转发出的。
目录
展开
详细简介
SMTP 是一种提供可靠且有效传输的协议。 SMTP 是在 FTP 上的一种
邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。
SMTP 独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。
SMTP 重要特性之一是其能跨越邮件,即“ SMTP 邮件中继”。通常,
SMTP
一个网络可以由公用上 TCP 可相互访问的、防火墙分隔的 TCP/IP 网络上
TCP 可相互访问的主机,及其它 LAN/WAN 中的主机利用非 TCP 协议组成。
使用 SMTP ,可实现相同网络上处理机之间的邮件传输,也可通过中继器或
实现某处理机与其它网络之间的邮件传输。
在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中
间中继器或网关主机。系统(DNS)的邮件交换可以用来识别出传输邮件的
下一跳 IP 地址。
在传输文件过程中使用 25 号
协议原理
SMTP-简单邮件传输协议(SimpleMailTransferProtocol),是定义邮件传
输的协议,它是基于 TCP 服务的应用层协议,由 RFC0821 所定义。SMTP 协
议规定的命令是以明文方式进行的。为了说明 SMTP 的工作原理,我们以向
163 发送邮件为实例进行说明。
在 linux 环境下,使用"telnet . com 25"连接 . com 的 25
号端口(SMTP 的标准服务端口);在 windows 下使用程序,远程主机指定为
. com,而指定为 25,然后连接 . com:交互过程如下:
SMTP
[lix@nslix]$telnet . com 25
220 163 .com Anti-spam GT for Coremail System (163com[071018])
HELO .com
250 OK
auth login
334 dXNlcm5hbWU6
USER 加密后的用户名
334 UGFzc3dvcmQ6
PASS base64 加密后的密码
235 Authentication successful
MAILFROM:XXX@163 .COM
250 Mail OK
RCPTTO:XXX@163 .COM
250 Mail OK
DATA
354 End data with .
QUIT
SMTP
250 Mail OK queued as smtp5,D9GowLArizfIFTpIxFX8AA==.41385S2
1211766217
HELO 是客户向对方发出的标识自己的身份的命令,这里假设发送者为
ideal;MAILFROM 命令用来表示发送者的邮件地址;RCPTTO:标识接收者
的邮件地址,这里表示希望发送邮件给 XXX@163. COM,如果邮件接收者不
是本地用户,例如 RCPTTO:ideal,则说明希望对方邮件服务器为自己转发
(Relay)邮件,若该机器允许转发这样的邮件,则表示该邮件服务器是
OPENRELAY 的,否则说明该服务器不允许 RELAY;表示下面是邮件的数据
部分,输入完毕以后,以一个"."开始的行作为数据部分的结束标识;QUIT
表示退出这次会话,结束邮件发送。
这就是一个简单的发送邮件的会话过程,其实当使用 outlookexpress 等客
户发送时,进行的交互也是这样的,当然,为了处理复杂的邮件发送情况如
附件等等,定义了很多的命令及规定,具体可以通过阅读 821 来获得。
当你的一个朋友向你发送邮件时,他的邮件服务器和你的邮件服务器通
过 S
SMTP
MTP 协议通信,将邮件传递给你邮件地址所指示的邮件服务器上(这里假设
你的本地邮件服务器是 Linux 系统),若你通过 telnet 协议直接登录到邮件服
务器上,则可以使用 mail 等客户软件直接阅读邮件,但是若你希望使用本地
的 (MailUserAgent,如 outlookexpress 等客户软件)来阅读邮件,则本地客户
端通过或 IMAP 协议与邮件服务器,将邮件信息传递到客户端(如:win98 系
统)。而如果你向你的朋友回复一封信件时,你所使用的 MUA 也是通过 SMTP
协议与邮件服务(一般为发送邮件地址对应的地址)器通信,指示其希望邮
件服务器帮助转发一封邮件到你朋友的邮件地址指定的邮件服务器中。若本
地邮件服务器允许你通过它转发邮件,则服务器通过 SMTP 协议发送邮件到
对方的邮件服务器。这就是接受和发送邮件的全部过程。
个人 SMTP 服务器的配置方法
安装 POP3 和 SMTP 服务组件
Windows Server 2003 默认情况下是没有安装 POP3 和 SMTP 服务组件的,
因此我们要手工添加。
1.安装组件
以系统管理员身份登录 Windows Server 2003 系统。依次进入“控制面板→
添加或删除程序→添加/删除 Windows 组件”,在弹出的“Windows 组件向导”
对话框中选中“”选项,点击“详细信息”按钮,可以看到该选项包括两部分内
容:POP3 服务和 POP3 服务 Web 管理。为方便用户远程 Web 方式管理邮件
服务器,建议选中“POP 3 服务 Web 管理”。
2.安装 SMTP 服务组件
选中“应用程序服务器”选项,点击“详细信息”按钮,接着在“Internet 信息
服务(IIS)”选项中查看详细信息,选中“SMTP Service”选项,最后点击“确
定”按钮。此外,如果用户需要对邮件服务器进行远程 Web 管理,一定要选
中“万维网服务”中的“远程管理(HTML)”组件。完成以上设置后,点击“下
一步”按钮,系统就开始安装配置 POP3 和 SMTP 服务了。
配置 POP3 服务器
1.创建邮件域
点击“开始→管理工具→POP3 服务”,弹出 POP3 服务控制台窗口。选中
左栏中的 POP3 服务后,点击右栏中的“新域”,弹出“添加域”对话框,接着在
“域名”栏中输入邮件服务器的域名,也就是邮件地址“@”后面的部分,
2.创建用户邮箱
选中刚才新建的,在右栏中点击“添加邮箱”,弹出添加邮箱对话框,在“邮
箱名”栏中输入邮件用户名,然后设置用户密码,最后点击“确定”按钮,完成
邮箱的创建。
[1][2]完成 POP3 服务器的配置后,就可开始配置 SMTP 服务器了。点击“开
始→程序→管理工具→Internet 信息服务(IIS)管理器”,在“IIS 管理器”窗口
中右键点击“默认 SMTP 虚拟服务器”选项,在弹出的菜单中选中“属性”,进
入“默认 SM TP 虚拟服务器”窗口,切换到“常规”标签页,在“IP 地址”下拉列
表框中选中邮件服务器的 IP 地址即可。点击“确定”按钮,此时 SMTP 服务器
默认的是匿名访问,打开切换到“访问”标签页,点击“身份验证”按钮,在对
话框中去掉“匿名访问“选项,选中”基本身份验证(Basic authentication)“。
这样一个简单的邮件服务器就架设完成了。
工作过程
简单邮件(SMTP)是一种基于文本的电子邮件传输协议,是在中用于在
邮件服务器之间交换邮件的协议。SMTP 是应用层的服务,可以适应于各种
网络系统。
SMTP 的命令和响应都是基于文本,以命令行为单位,换行符为 CR/LF。
响应信息一般只有一行,由一个 3 位数的开始,后面可附上很简短的文字说
明。
SMTP
SMTP 要经过建立连接、传送邮件和释放连接 3 个阶段。具体为:
(1)建立 TCP 连接。
(2)客户端向服务器发送 HELLO 命令以标识发件人自己的身份,然后
客户端发送 MAIL 命令。
(3)服务器端以 OK 作为响应,表示准备接收。
(4)客户端发送 RCPT 命令。
(5)服务器端表示是否愿意为收件人接收邮件。
(6)协商结束,发送邮件,用命令 DATA 发送输入内容。
(7)结束此次发送,用 QUIT 命令退出。
SMTP 服务器基于 DNS 中的邮件交换(MX)记录电子邮件。发邮件时
是根据收信人的地址后缀来定位邮件服务器的。SMTP 通过用户代理程序
(UA)完成邮件的编辑、收取和阅读等功能;通过邮件传输代理程序
(MTA)将邮件传送到目的地。
安全和垃圾邮件
最初的 SMTP 的局限之一在于它没有对发送方进行身份验证的机制。因
此,后来定义了 SMTP-AUTH 扩展。
尽管有了身份认证机制,仍然是一个主要的问题。但由于庞大的 SMTP
安装数量带来的,大刀阔斧地修改或完全替代 SMTP 被认为是不现实的。
Internet Mail 2000 就是一个替代 SMTP 的建议方案。
因此,出现了一些同 SMTP 工作的辅助协议。IRTF 的研究小组正在研究
一些建议方案,以提供简单、灵活、轻量级的、可升级的源端认证。最有可
能被接受的建议方案是发送方策略框架协议。
SMTP 模型
smtp 提供了一种邮件传输的机制,当收件方和发件方都在一个网络上时,
可以把邮件直传给对方;当双方不在同一个网络上时,需要通过一个或几个
中间服务器转发。smtp 首先由发件方提出申请,要求与接收方 smtp 建立双向
的通信渠道,收件方可以是最终收件人也可以是中间转发的服务器。收件方
服务器确认可以建立连接后,双发就可以开始通信。
发件方 smtp 向收件方发处 mail 命令,告知发件方的身份;如果收件方
接受,就会回答 ok。发件方再发出 rcpt 命令,告知收件人的身份,收件方 smtp
确认是否接收或转发,如果同意就回答 ok;接下来就可以进行数据传输了。
通信过程中,发件方 smtp 与收件方 smtp 采用对话式的交互方式,发件方提
出要求,收件方进行确认,确认后才进行下一步的动作。整个过程由发件方
控制,有时需要确认几回才可以。
为了保证回复命令的有效,smtp 要求发件方必须提供接收方的服务器及
邮箱。邮件的命令和答复有严格的语法定义,并且回复具有相应的数字代码。
所有的命令由组成。命令代码是大小写无关的,如 mail 和 mail ﹑mail 是等
效的。
服务扩展
SMTP 提供一种可靠的有效的传送机制,它用于传送电子邮件。虽然十
几年来,它的作用已经有目共睹,可是对它功能的扩充也是必不可少的。对
SMTP 服务的扩展我们介绍一下:在 SMTP 转发的邮件中包括信封和内容这
两种东西。我们写信也写信封和信皮,我们可以借生活中的信件来帮助理解。
(1)SMTP 信封比较容易理解,它被作为一系列的 SMTP 协议单元传送,
它包括发送者地址,传送模式,还有一个或多个接收者地址。如果有不清楚
的地方,请参阅《SMTP 协议标准》。
SMTP
(2)至于内容,它是由两部分组成的,一部分是信头,一部分是信体,信头是
由一个个的域/值对(一个域,一个值)组成的,如果信体有结构的话,它的
结构是以 MIME 构造的。内容从根本上来说是文本的,一般也是由 ASCII 码
构成的,但是由于使用了 MIME,所以这个限制应该也是没有了,但信头却
不行,一般都应该使用 ASCII 码表示。虽然 SMTP 协议是一个不错的协议,
可是对它的扩展还是不可避免,本文主要说明了一种扩展方法,使用这种扩
展方法,服务器和用户之间可以相互知道对方使用了扩展,使用了多少,如
果进行通信。
通讯模型
SMTP 协议是中的一员,主要对如何将电子邮件从发送方地址传送到接
收方地址,也即是对传输的规则做了规定。SMTP 协议的通信模型并不复杂,
主要工作集中在发送 SMTP 和接收 SMTP 上:首先针对用户发出的邮件请求,
由发送 SMTP 建立一条连接到接收 SMTP 的双工通讯链路,这里的接收
SMTP 是相对于发送 SMTP 而言的,实际上它既可以是最终的接收者也可以
是中间传送者。发送 SMTP 负责向接收 SMTP 发送 SMTP 命令,而接收 SMTP
则负责接收并反馈应答。 SMTP 协议的命令和应答
从前面的通讯模型可以看出 SMTP 协议在发送 SMTP 和接收 SMTP 之
间的会话是靠发送 SMTP 的 SMTP 命令和接收 SMTP 反馈的应答来完成的。
在通讯链路建立后,发送 SMTP 发送 MAIL 命令指令邮件发送者,若接收
SMTP 此时可以接收邮件则作出 OK 的应答,然后发送 SMTP 继续发出 RCPT
命令以确认邮件是否收到,如果接收到就作出 OK 的应答,否则就发出拒绝
接收应答,但这并不会对整个邮件操作造成影响。双方如此反复多次,直至
邮件处理完毕。SMTP 协议共包含 10 个 SMTP 命令,列表如下:
SMTP 命令命令说明
HELLO<domain><CRLF>识别发送方到接收 SMTP 的一个 HELLO
命令
MAILFROM:<reverse-path><CRLF><reverse-path>为发送者地址。
此命令告诉接收方一个新邮件发送的开始,并对所有的状态和进行初始化。
此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱
中。
RCPTTO:<forward-path><CRLF><forward-path>标识各个邮件接收
者的地址
DATA<CRLF>
接收 SMTP 将把其后的行为看作邮件数据去处理,以<CRLF>.<CRLF
>标识数据的结尾。
REST<CRLF>退出/复位当前的邮件传输
NOOP<CRLF>要求接收 SMTP 仅做 OK 应答。(用于测试)
QUIT<CRLF>要求接收 SMTP 返回一个 OK 应答并关闭传输。
VRFY<string><CRLF>验证指定的邮箱是否存在,由于安全因素,服
务器多禁止此命令。
EXPN<string><CRLF>验证给定的邮箱列表是否存在,扩充邮箱列表,
也常禁止使用。
HELP<CRLF>查询服务器支持什么命令
通信安全
sendmail 是在 Unix 环境下使用最广泛的实现邮件发送/接受的邮件传输
代理程序。由于 Sendmail 邮件服务器的特点是功能强大而复杂,因此为保证
Sendmail 的安全性,需要作以下一些工作。
1、设置 Sendmail 使用"smrsh"
smrsh 程序的目的是作为在 mailer 中为 sendmail 定义的"/bin/sh"的替代
shell。smrsh 是一种受限 shell 工具,它通过"/
etc/smrsh"目录来明确指定的列表。简而言之 smrsh 限制了攻击者可以执
行的程序集。当它与 sendmail 程序一起使用的时候,smrsh 有效的将 sendmail
可以执行的程序的范围限制在 smrsh 目录之下。
第一步:
决定 smrsh 可以允许 sendmail 运行的命令列表。缺省情况下应当包含以
下命令,但不局限于这些命令:
"/bin/mail"(如果在你的系统中安装了的话)
"/usr/bin/procmail"(如果在你的系统中安装了的话)
注意:不可在命令列表里包括命令解释程序,例如 sh(1),csh(1),
perl(1),uudecode(1)及流 sed(1)。
第二步:
在"/etc/smrsh"目录中创建允许 sendmail 运行的程序的符号连接。
使用以下命令允许 mail 程序"/bin/mail"运行:
[root@deep]#cd/etc/smrsh
[root@deep]#ln-s/bin/mailmail
用以下命令允许 procmail 程序"/usr/bin/procmail"运行:
[root@deep]#cd/etc/smrsh
[root@deep]#ln-s/usr/bin/procmailprocmail
这将允许位于".forward"和"aliases"中的用户采用"|program"语法来运行
mail 及 procmail 程序。
第三步
配置 sendmail 使之使用受限 shell。mailer 程序在 sendmail 的配置文件
"/etc/sendmail .cf"中仅有一行。必须修改"sendmail. cf"文件中"Mprog"定义的
那一行。将"/bin/sh"替换为"/usr/sbin/smrsh"。
编辑"sendmail .cf"文件(vi/etc/sendmail. cf)并改动下面这一行:
例如:
Mprog,P=/bin/sh,F=lsDFMoqeu9,S=10/30,R=20/40,D=$z:/,T=X-Unix,A=sh-c$u
应该被改为:
Mprog,P=/usr/sbin/smrsh,F=lsDFMoqeu9,S=10/30,R=20/40,D=$z:/,T=X-Unix,A
=sh-c$u
现在用以下命令手工重起 sendmail 进程:
[root@deep]#/etc/
2、"/etc/aliases"文件
如果没有加以正确和严格的管理的话,别名文件被用来获取特权。例如,
很多发行版本在别名文件中带有"decode"别名。现在这种情况越来越少了。
这样做的目的是为用户提供一个通过 mail 传输二进制文件的方便的方
式。在邮件的发送地,用户把二进制文件用"uuencode"转换成 ASCII 格式,
并把结果邮递给接收地"decode"别名。那个别名通过管道把邮件消息发送到
"/usr/bin/uuencode"程序,由这个程序来完成从 ASCII 转回到原始的二进制文
件的工作。
删除"decode"别名。类似的,对于所有用于执行没有被放在 smrsh 目录下
的程序的别名,你都要仔细的检查,可能它们都值得怀疑并应当删除它们。
要想使你的改变生效,需要运行:
[root@deep]#/usr/bin/newaliases
编辑别名文件(vi/etc/aliases)并删除以下各行:
#Basicsystemaliases--theseMUSTbepresent.
MAILER-DAEMON:postmaster
postmaster:root
#Generalredirectionsforpseudoaccounts.
bin:root
daemon:root
games:root??删除这一行
ingres:root??删除这一行
nobody:root
system:root??删除这一行
toor:root??删除这一行
uucp:root??删除这一行
#Well-knownaliases.
manager:root??删除这一行
dumper:root??删除这一行
operator:root??删除这一行
#trapdecodetocatchsecurityattacks
decode:root??删除这一行
#Personwhoshouldgetroot'smail
#root:marc
最后应该运行"/usr/bin/newaliases"程序使改动生效
3、避免你的 Sendmail 被未授权的用户滥用
最新版本的 Sendmail()加入了很强的防止欺骗的特性。它们可以防
止你的邮件服务器被未授权的用户滥用。编辑你的"/etc/ f"文件,修
改一下这个配置文件,使你的邮件服务器能够挡住欺骗邮件。
编辑" f"文件(vi/etc/sendmail. cf)并更改下面一行:
OPrivacyOptions=authwarnings
改为:
OPrivacyOptions=authwarnings,noexpn,novrfy
设置"noexpn"使 sendmail 禁止所有 SMTP 的"EXPN"命令,它也使
sendmail 拒绝所有 SMTP 的"VERB"命令。设置"novrfy"使 sendmail 禁止所有
SMTP 的"VRFY"命令。这种更改可以防止欺骗者使用"EXPN"和"VRFY"命令,
而这些命令恰恰被那些不守规矩的人所滥用。
4、SMTP 的问候信息
当 sendmail 接受一个 SMTP 连接的时候,它会向那台机器发送一个问候
信息,这些信息作为本台主机的标识,而且它所做的第一件事就是告诉对方
它已经准备好了。
编辑"sendmail. cf"文件(vi/etc/sendmail. cf)并更改下面一行:
OSmtpGreetingMessage=$jSendmail$v/$Z;$b
改为:
OSmtpGreetingMessage=$jSendmail$v/$Z;$bNOUCEC=xxL=xx
现在手工重起一下 sendmail 进程,使刚才所做的更改生效:
[root@deep]#/etc/
以上的更改将影响到 Sendmail 在接收一个连接时所显示的标志信息。你
应该把"`C=xxL=xx"条目中的"xx"换成你所在的国家和地区代码。后面的更改
其实不会影响任何东西。但这是""新闻组的伙伴们
推荐的合法做法。
5、限制可以审核邮件队列内容的人员
通常情况下,任何人都可以使用"mailq"命令来查看邮件队列的内容。为
了限制可以审核邮件队列内容的人员,只需要在"/etc/sendmail .cf"文件中指定
"restrictmailq"选项即可。在这种情况下,sendmail 只允许与这个队列所在目
录的组属主相同的用户可以查看它的内容。这将允许权限为 0700 的邮件队列
目录被完全保护起来,而我们限定的合法用户仍然可以看到它的内容。
编辑"sendmail. cf"文件(vi/etc/sendmail. cf)并更改下面一行:
OPrivacyOptions=authwarnings,noexpn,novrfy
改为:
OPrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq
现在我们更改邮件队列目录的权限使它被完全保护起来:
[root@deep]#chmod0700/var/spool/mqueue
注意:我们已经在 f 中的"PrivacyOptions="行中添加了
"noexpn"和"novrfy"选项,现在在这一行中我们接着添加"restrictmailq"选项。
任何一个没有特权的用户如果试图查看邮件队列的内容会收到下面的信
息:
[user@deep]$/usr/bin/mailq
Youarenotpermittedtoseethequeue
SMTP
6、限制处理邮件队列的权限为"root"
通常,任何人都可以使用"-q"开关来处理邮件队列,为限制只允许 root
处理邮件队列,需要在"/etc/sendma il. cf"文件中指定"restrictqrun"。
编辑"sendmail. cf"文件(vi/etc/sendmail. cf)并更改下面一行:
OPrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq
改为:
OPrivacyOptions=authwarnings,noexpn,novrfy,restrictmailq,restrictqrun
任何一个没有特权的用户如果试图处理邮件队列的内容会收到下面的信
息:
[user@deep]$/usr/sbin/sendmail-q
Youdonothavepermissiontoprocessthequeue
7、在重要的 sendmail 文件上设置不可更改位
可以通过使用"chattr"命令而使重要的 Sendmail 文件不会被擅自更改,可
以提高系统的安全性。具有"+i"属性的文件不能被修改:它不能被删除和改名,
不能创建到这个文件的链接,不能向这个文件写入数据。只有超级用户才能
设置和清除这个属性。
为"sendmail. cf"文件设置不可更改位:
[root@deep]#chattr+i/etc/sendmail. cf
为""文件设置不可更改位:
[root@deep]#chattr+i/etc/
为"sendmail. mc"文件设置不可更改位:
[root@deep]#chattr+i/etc/sendmail. mc
为"null. mc"文件设置不可更改位:
[root@deep]#chattr+i/etc/null. mc
为"aliases"文件设置不可更改位:
[root@deep]#chattr+i/etc/aliases
为"access"文件设置不可更改位:
[root@deep]#chattr+i/etc/mail/access
qmail 安全
qmail 有一个名为 rcpthosts(该文件名源于 RCPTTO 命令)的配置文件,其
决定了是否接受一个邮件。只有当一个 RCPTTO 命令中的接收者地址的域名
存在于 rcpthosts 文件中时,才接受该邮件,否则就拒绝该邮件。若该文件不存
在,则所有的邮件将被接受。当一个邮件服务器不管邮件接收者和邮件接收
者是谁,而是对所有邮件进行转发(relay),则该邮件服务器就被称为开放转发
(openrelay)的。当 qmail 服务器没有 rcpthosts 时,其是开放转发的。
设置自己服务器为非 openrelay 的最简单的办法就是将你的邮件服务器
的所有域名(若 DNS 的 MX 记录指向该机器,也应该包括该域名。但是这将
导致你的本地客户也被拒绝使用你的服务器转发邮件,而要支持客户使用
MUA 来发送邮件,必须允许客户使用服务器转发邮件。qmail-smtpd 支持一
种有选择性的忽略 rcpthosts 文件的方法:若 qmail-smtpd 的环境变量
RELAYCLIENT 被设置,则 rcpthost 文件将被忽略,relay 将被允许。但是如
何识别一个邮件发送者是否是自己的客户呢?qmail 并没有采用密码认证的
方法,而是判断发送邮件者的源 IP 地址,若该 IP 地址属于本地网络,则认
为该发送者为自己的客户。
这里就要使用 ucspi-tcp。在这里我们要使用该软件包的 tcpserver 程序。
该程序的功能类似于 inetd-监听进入的连接请求,为要启动的服务设置各种环
境变量,然后启动指定的服务。
tcpserver 的配置文件是/etc/,该文件定义了是否对某个网络设置
RELAYCLIENT 环境变量。例如,本地网络是地址为 的 C 类
地址,则 的内容应该设置如下:
:allow,RELAYCLIENT=""
.:allow,RELAYCLIENT=""
:allow
这几个规则的含义是指若连接来自 和 则允许,并且
为其设置环境变量 RELAYCLIENT,否则允许其他连接,但是不设置
RELAYCLIENT 环境变量。这样当从其他地方到本地的 25 号连接将会被允许,
但是由于没有被设置环境变量,所以其连接将会被 qmail-smptd 所拒绝。
但是 tcopserver 并不直接使用/etc/ 文件,而是需要先将该文件转
化为 cbd 文件:
[lix@mail/etc]$#<
然后再回头看在/service/qmail-smtpd 目录下的 run 文件中有
/usr/local/bin/tcpserver-v-p-x/etc/
可以看到,tcpserver 利用了/etc/ 文件。若本地有多个网络,则需
要这些网络都出现在/etc/ 文件中。
这样就实现了允许本地客户 relay 邮件,而防止 relay 被滥用。
参考资料
1
详解个人 SMTP 服务器的配置方法
2
轻松架设自己的 SMTP 服务器