搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
羊村懒王
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
hyperledger fabric 实战开发——水产品溯源交易平台(一)_hyperledger fabric开发实战
2
基于Java+SpringBoot+Vue的新闻推荐系统的设计与开发(源码+lw+部署文档+讲解等)_springboot集成推荐系统
3
芝浦工业大学利用 NetApp 提供的多层 AI 驱动型安全解决方案抵御网络攻击
4
【错误记录】HarmonyOS 运行报错 ( Failure INSTALL_PARSE_FAILED_USESDK_ERROR )
5
《软件工程导论》考试复习题集锦_软件工程导论 题库csdn
6
分享一个基于gihub大佬制作的桌面宠物软件源码_桌面宠物程序代码
7
SQL标准简介_sql 标准 2011
8
大数据flume日志采集系统详解_实时同步 flume高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统功能截
9
彻底解决git clone速度慢的问题(ubuntu)_ubuntu git clone很慢
10
【SPSS】基于因子分析法对水果茶调查问卷进行分析
当前位置:
article
> 正文
在windows实现和smtp交互发送邮件_windowsserver2016远程smtp服务器允许邮件转发
作者:羊村懒王 | 2024-06-01 13:39:37
赞
踩
windowsserver2016远程smtp服务器允许邮件转发
目录
1
定义
2
协议原理
3
配置方法
4
工作机制
5
工作过程
6
X.25上应用
7
垃圾邮件
8
服务扩展
9
通讯模型
10
通信安全
11
常见问题
定义
SMTP 是一种TCP协议支持的提供可靠且有效
电子邮件
传输的
应用层
协议。SMTP 是
建立
在 TCP上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。[1]
SMTP 独立于特定的传输子系统,且只需要可靠有序的
数据流
信道支持。SMTP 重要特性之一是其能跨越
网络传输
邮件,即“ SMTP 邮件中继”。通常,一个网络可以由公用
互联网
上 TCP 可相互访问的
主机
、防火墙分隔的 TCP/IP 网络上 TCP 可相互访问的主机,及其它 LAN/WAN 中的主机利用非 TCP
传输层
协议组成。使用 SMTP ,可实现相同网络上
处理机
之间的邮件传输,也可通过
中继器
或
网关
实现某处理机与其它网络之间的邮件传输。在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间
中继器
或
网关
主机
。
域名服务
系统(DNS)的邮件交换
服务器
可以用来识别出传输邮件的下一条 IP 地址。[1]
SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange)DNS。[1]
在八十年代早期SMTP开始被广泛地使用。当时,它只是作为UUCP的补充,UUCP更适合于处理在间歇连接的机器间传送邮件。相反,SMTP在发送和接收的机器始终连接在网络的情况下工作得最好。[1]
Sendmail是最早实现SMTP的邮件传输代理之一。到2001年至少有50个程序将SMTP实现为一个客户端(消息的发送者)或一个服务器(消息的接收者)。一些其他的流行的SMTP服务器程序包括了Philip Hazel的exim,IBM的Postfix,D. J. Bernstein的Qmail,以及Microsoft Exchange Server。[1]
由于这个协议开始是基于纯ASCII文本的,它在二进制文件上处理得并不好。诸如MIME的标准被开发来编码二进制文件以使其通过SMTP来传输。今天,大多数SMTP服务器都支持8位MIME扩展,它使二进制文件的传输变得几乎和纯文本一样简单。[1]
SMTP是一个“推”的协议,它不允许根据需要从远程服务器上“拉”来消息。要做到这点,邮件客户端必须使用POP3或IMAP。另一个SMTP服务器可以使用ETRN在SMTP上触发一个发送。[1]
协议原理
SMTP-
简单邮件传输协议
(SimpleMailTransferProtocol),是定义邮件传输最常用的协议,它是基于TCP服务的
应用层
协议,由RFC2821所定义。SMTP协议规定的命令是以明文方式进行的。为了说明SMTP的工作原理,我们以向163发送邮件为实例进行说明。
在linux环境下,使用"telnet smtp.163. com 25"连接smtp.163. com的25号
端口
(SMTP的标准服务端口);在windows下使用
telnet
程序,远程
主机
指定为smtp.163. com,而
端口号
指定为25,然后连接smtp.163. com:
交互
过程如下:
SMTP
[lix@nslix]$telnet smtp.163. com 25
220 163 .com Anti-spam GT for Coremail System (163com[071018])
HELO smtp.163 .com
250 OK
auth login
334 dXNlcm5hbWU6
USER
base64
加密后的用户名
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
HELO是客户向对方
邮件服务器
发出的标识自己的身份的命令,这里假设发送者为ideal;MAILFROM命令用来表示发送者的邮件地址;RCPTTO:标识接收者的邮件地址,这里表示希望发送邮件给XXX@163. COM,如果邮件接收者不是
本地用户
,例如RCPTTO:ideal,则说明希望对方邮件服务器为自己转发(Relay)邮件,若该机器允许转发这样的邮件,则表示该邮件服务器是OPENRELAY的,否则说明该服务器不允许RELAY;DATA表示下面是邮件的数据部分,输入完毕以后,以一个"."开始的行作为数据部分的结束标识;QUIT表示退出这次会话,结束邮件发送。
这就是一个简单的发送邮件的会话过程,其实当使用outlookexpress等客户软件发送时,后台进行的
交互
也是这样的,当然,
SMTP协议
为了处理复杂的邮件发送情况如附件等等,定义了很多的命令及规定,具体可以通过阅读RFC2821来获得。
当你的一个朋友向你发送邮件时,他的
邮件服务器
和你的邮件服务器通过S
SMTP
MTP协议通信,将邮件传递给你邮件地址所指示的邮件服务器上(这里假设你的本地邮件服务器是Linux系统),若你通过
telnet
协议直接登录到邮件服务器上,则可以使用mail等客户软件直接阅读邮件,但是若你希望使用本地的
MUA
(MailUserAgent,如outlookexpress等客户软件)来阅读邮件,则本地客户端通过
POP3
或IMAP协议与邮件服务器
交互
,将邮件信息传递到客户端(如:win98系统)。而如果你向你的朋友回复一封信件时,你所使用的MUA也是通过SMTP协议与邮件服务(一般为发送邮件地址对应的email地址)器通信,指示其希望
邮件服务器
帮助转发一封邮件到你朋友的邮件地址指定的邮件服务器中。若本地
邮件服务器
允许你通过它转发邮件,则服务器通过SMTP协议发送邮件到对方的邮件服务器。这就是接受和发送邮件的全部过程。
配置方法
安装POP3和SMTP
Windows Server 2003
默认情况下是没有安装
POP3
和SMTP服务组件的,因此我们要手工添加。
1.安装
POP3服务
组件
以
系统管理员
身份登录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.创建用户邮箱
选中刚才新建的,在右栏中点击“添加邮箱”,弹出添加邮箱对话框,在“邮箱名”栏中输入邮件用户名,然后设置用户密码,最后点击“确定”按钮,完成邮箱的创建。
完成POP3
服务器
的配置后,就可开始配置SMTP服务器了。点击“开始→程序→管理工具→Internet信息服务(IIS)管理器”,在“IIS管理器”窗口中右键点击“默认SMTP
虚拟服务器
”选项,在弹出的菜单中选中“属性”,进入“默认SM TP虚拟服务器”窗口,切换到“常规”标签页,在“IP地址”下拉列表框中选中
邮件服务器
的IP地址即可。点击“确定”按钮,此时SMTP
服务器
默认的是匿名访问,打开切换到“访问”标签页,点击“
身份验证
”按钮,在对话框中去掉“匿名访问“选项,选中”基本身份验证(Basic authentication)“。这样一个简单的
邮件服务器
就架设完成了。
工作机制
SMTP通常有两种
工作模式
:发送SMTP和接收SMTP。具体工作方式为:发送SMTP在接到用户的邮件请求后,判断此邮件是否为本地邮件,若是直接投送到用户的邮箱,否则向dns查询远端
邮件服务器
的MX纪录,并
建立
与远端接收SMTP之间的一个双向传送通道,此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。一旦传送通道
建立
,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答即可。
工作过程
简单邮件
传输协议
(SMTP)是一种基于
文本
的
电子邮件
传输协议,是在
因特网
中用于在
邮件服务器
之间交换邮件的协议。SMTP是
应用层
的服务,可以适应于各种网络系统。
SMTP的命令和响应都是基于
文本
,以命令行为单位,换行符为CR/LF。响应信息一般只有一行,由一个3位数的
代码
开始,后面可附上很简短的文字说明。
SMTP
SMTP要经过
建立
连接、传送邮件和释放连接3个阶段。具体为:
(1)
建立
TCP连接。
(2)客户端向
服务器
发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令。
(3)
服务器
端以OK作为响应,表示准备接收。
(4)客户端发送RCPT命令。
(5)
服务器
端表示是否愿意为收件人接收邮件。
(6)协商结束,发送邮件,用命令DATA发送输入内容。
(7)结束此次发送,用QUIT命令退出。
SMTP
服务器
基于DNS中的邮件交换(MX)记录
路由
电子邮件
。
电子邮件系统
发邮件时是根据收信人的地址后缀来定位
邮件服务器
的。SMTP通过
用户代理
程序(UA)完成
邮件
的编辑、收取和阅读等功能;通过邮件传输代理程序(MTA)将邮件传送到目的地。
X.25上应用
1.本备忘录的状态
本备忘录讲述了一种基于CCITT的X.25标准提供的虚电路业务的SMTP标准。
本备忘录的发布不受任何限制。
2.简介
在RFC821("SIMPLEMAILTRANSPORTPROTOCOL",SMTP,
简单邮件传输协议
)
的附录D中提到了直接将SMTP置于X.25虚电路(ISO第3层)上的可能性。并建议“利
用一种类似于TCP可靠的端到端协议在X.25的连接上”。在1981年时,考虑到PSDNs的
总体的可靠性,这毫无疑问是可行的。这一业务在1989年已经非常可靠,它允许直
接将其置于虚电路业务上。
在包括22个不同的国家的24个PSDN网的许多产品,证明了这种方法是成功的,结
果证明,即使使用在一些花费比较昂贵的PSDN中,这种方法还是十分经济的,在X.25专
网和X.25局域网中,这种方法也是成功。
每一个SMTP会话必须打开一条X.25虚电路(VirtualCircuit,VC),SMTP会话将
使用由VC提供的全双工通道。通常,VC是由发起呼叫的一方关闭的。
3.协议ID和呼叫用户数据
呼叫用户数据区的前4个字节应该是0xC0F7,0000(十六进制),十进制是19224700。
这个字段通常用来标识一个协议ID,或者PRID。
但是在实际的操作中,应该有能力在基本前缀地址上配置呼叫用户数据,包括协议ID
字段。
4.数据流
在发送端通常把SMTP数据分成许多
数据包
,相应地,在数据包
封装
的时候应该置M
位(表示有后续数据包)。数据包的总长度可以达到2048个字节。
通常我们建议SMTP命令和响应应在一个数据包发送出去,或者只有一个后续数据包。
只要对调试协议方便即可。但这并不要求是必须的。
5.识别数据
Q比特被置位的分组和中断分组是没有用的。如果收到了,应该被忽略掉。
6.电路复位
如果收到了一个3层的电路复位指示,这条VC应该清除,SMTP连接应该重新
建立
。
重新
建立
会带来一些时延,也可能是不同的呼叫业务。
7.呼叫业务
任何被X.25呼叫请求业务选择的协商特征都可以使用。使用时应有能力为每一个被叫
地址指定业务。
8.
字符编码
X.25使用的
字符编码
是完整的8位ASCII码,没有任何遗漏和修改。一行应该以CRLF
(十进制:1310)结尾,也可以仅仅以LF(十进制:10)来标识一行的结束。
9.关闭连接
跟TCP协议不同,在清除请求的过程中,X.25不提供数据的同步传送;当清除虚电
路时,就丢弃所有正在传送的数据包。因此,当收到“服务关闭”消息时,主叫的一边关闭
SMTP会话层(在X.25上),这种消息要么是QUIT命令的响应,或者是因为服务必须中止。
10.超时
SMTP
SMTP通常不提供超时会话,在X.25,以下几项是有效的:
10.1呼叫请求
如果在100秒内没有收到“呼叫接受”信息,或者在120秒(另外)内没有收到“服
务准备好”信息,那么应该清除这次呼叫,然后重试。
10.2已经
建立
的呼叫
当协议会话
建立
之后,在10分钟内如果没有收到任何响应,那么就应该清除这条虚
电路。
10.3关闭
执行QUIT命令后,超时时间缩短为20秒。这可能会导致不经意地退出,但它不会影
响已经完成的SMTP业务。
10.4清除
当X.25“清除请求”发出时,这条虚电路将在X.25协议指定的时间内超时。
11.其他特性
X.25的其他特性,如永久虚电路和D比特的选择,都没有用到。
垃圾邮件
最初的SMTP的局限之一在于它没有对发送方进行
身份验证
的机制。因此,后来定义了SMTP-AUTH扩展。
尽管有了
身份认证
机制,
垃圾邮件
仍然是一个主要的问题。但由于庞大的SMTP安装数量带来的
网络效应
,大刀阔斧地修改或完全替代SMTP被认为是不现实的。Internet Mail 2000就是一个替代SMTP的建议方案。
因此,出现了一些同SMTP工作的辅助协议。IRTF的
反垃圾邮件
研究小组正在研究一些建议方案,以提供简单、灵活、轻量级的、可升级的源端认证。最有可能被接受的建议方案是发送方策略框架协议。
SMTP模型
smtp提供了一种
邮件
传输的机制,当收件方和发件方都在一个网络上时,可以把邮件直传给对方;当双方不在同一个网络上时,需要通过一个或几个中间
服务器
转发。smtp首先由发件方提出申请,要求与接收方smtp
建立
双向的通信渠道,收件方可以是最终收件人也可以是中间转发的
服务器
。收件方
服务器
确认可以
建立
连接后,双发就可以开始通信。
发件方smtp向收件方发处mail命令,告知发件方的身份;如果收件方接受,就会回答ok。发件方再发出rcpt命令,告知收件人的身份,收件方smtp确认是否接收或转发,如果同意就回答ok;接下来就可以进行数据传输了。通信过程中,发件方smtp与收件方smtp 采用对话式的
交互
方式,发件方提出要求,收件方进行确认,确认后才进行下一步的动作。整个过程由发件方控制,有时需要确认几回才可以。
为了保证回复命令的有效,smtp要求发件方必须提供接收方的
服务器
及邮箱。邮件的命令和答复有严格的语法定义,并且回复具有相应的数字
代码
。所有的命令由
ascii码
组成。命令
代码
是大小写无关的,如Mail和MAIL ﹑mail是等效的。
服务扩展
SMTP提供一种可靠的有效的传送机制,它用于传送
电子邮件
。虽然十几年来,它的作用已经有目共睹,可是对它功能的扩充也是必不可少的。对SMTP服务的扩展我们介绍一下:在SMTP转发的邮件中包括信封和内容这两种东西。我们写信也写信封和信皮,我们可以借生活中的信件来帮助理解。
(1)SMTP信封比较容易理解,它被作为一系列的SMTP协议单元传送,它包括发送者地址,传送模式,还有一个或多个接收者地址。如果有不清楚的地方,请参阅《SMTP协议标准》。
SMTP
(2)至于内容,它是由两部分组成的,一部分是信头,一部分是信体,信头是由一个个的域/值对(一个域,一个值)组成的,如果信体有结构的话,它的结构是以MIME构造的。内容从根本上来说是文本的,一般也是由ASCII码构成的,但是由于使用了MIME,所以这个限制应该也是没有了,但信头却不行,一般都应该使用ASCII码表示。虽然SMTP协议是一个不错的协议,可是对它的扩展还是不可避免,本文主要说明了一种扩展方法,使用这种扩展方法,
服务器
和用户之间可以相互知道对方使用了扩展,使用了多少,如果进行通信。
通讯模型
SMTP协议是
TCP/IP协议族
中的一员,主要对如何将
电子邮件
从发送方地址传送到接收方地址,也即是对传输的规则做了规定。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命令说明
HELO<domain><CRLF>;识别发送方到接收SMTP的一个HELLO命令
MAIL FROM:<reverse-path><CRLF>;为发送者地址。此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。此命令开始一个邮件传输处理,最终完成将邮件
数据传送
到一个或多个邮箱中。
RCPT TO:<forward-path><CRLF>;标识各个
邮件
接收者的地址
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= u
应该被改为:
Mprog,P=/usr/sbin/smrsh,F=lsDFMoqeu9,S=10/30,R=20/40,D= u
用以下命令手工重起sendmail进程:
[root@deep]#/etc/rc.d/init.d/sendmailrestart
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(8.9.3)加入了很强的防止欺骗的特性。它们可以防止你的
邮件服务器
被未授权的用户滥用。编辑你的"/etc/sendmail.c f"文件,修改一下这个配置文件,使你的
邮件服务器
能够挡住欺骗邮件。
编辑"sendmail.c 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= v/ b
改为:
OSmtpGreetingMessage= v/ bNOUCEC=xxL=xx
手工重起一下sendmail进程,使刚才所做的更改生效:
[root@deep]#/etc/rc.d/init.d/sendmailrestart
以上的更改将影响到Sendmail在接收一个连接时所显示的标志信息。你应该把"`C=xxL=xx"条目中的"xx"换成你所在的国家和地区
代码
。后面的更改其实不会影响任何东西。但这是"news.admin.net-abuse.email"新闻组的伙伴们推荐的合法做法。
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
注意:我们已经在sendmail.c 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
为"sendmail.cw"文件设置不可更改位:
[root@deep]#chattr+i/etc/sendmail.cw
为"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/tcp.smtp,该文件定义了是否对某个网络设置RELAYCLIENT
环境变量
。例如,本地网络是地址为192.168.10.0/24的C类地址,则tcp.smtp的内容应该设置如下:
127.0.0.1
:allow,RELAYCLIENT=""
192.168.10.:allow,RELAYCLIENT=""
:allow
这几个规则的含义是指若连接来自127.0.0.1和192.168.10则允许,并且为其设置
环境变量
RELAYCLIENT,否则允许其他连接,但是不设置RELAYCLIENT环境变量。这样当从其他地方到本地的25号连接将会被允许,但是由于没有被设置
环境变量
,所以其连接将会被qmail-smptd所拒绝。
但是tcopserver并不直接使用/etc/tcp.smtp文件,而是需要先将该文件转化为cbd文件:
[lix@mail/etc]$#tcprulestcp.smtp.cdbtcp.smtp.temp<tcp.smtp
然后再回头看在/service/qmail-smtpd目录下的run文件中有
/usr/local/bin/tcpserver-v-p-x/etc/tcp.smtp.cdb
可以看到,tcpserver利用了/etc/smtp.cbd文件。若本地有多个网络,则需要这些网络都出现在/etc/tcp.smtp文件中。
这样就实现了允许本地客户relay邮件,而防止relay被滥用。
常见问题
1. SMTP是什么?有什么作用?
SMTP是Simple Mail Transfer Protocol的缩写,即
简单邮件传输协议
,是一种提供有效可靠传送
电子邮件
的协议,用于在两台
邮件服务器
间交换邮件。负责发送邮件的
服务器
称为SMTP客户,负责接收邮件的服务器称为SMTP服务器. 例如本动画中SMTP-1是客户,SMTP-2是服务器. 如果 Alice采用
用户代理
形式,则用户代理是客户,SMTP-1是服务器.
2. 什么是SMTP命令和应答?
SMTP客户使用命令把
邮件
信息传送到
服务器
。共有4个字母组成,例如MAIL命令传送发件人信息,DATA传送邮件内容等.
服务器
使用应答对此回应,由3个数字后面附上简单的文字说明组成,例如"250 OK" 表示同意客户发来的命令。
3. 为什么发送邮件前先发送RCPT 命令而不是直接发送邮件?
先发送RCPT命令的目的是为了弄清
服务器
是否做好接收邮件的准备,然后才发送邮件. 这样避免浪费网络资源,不致于发送了很长的邮件后才发现收件人帐户有问题,例如查无此人、信箱
存储空间
不够.
4.
邮件服务器
间邮件传输使用了TCP协议,为何邮件有时还会丢失?
邮件服务器
之间的SMTP协议使用TCP连接,可以保证邮件准确无误地在邮件服务器之间传输. 但由于邮件服务器本身的故障,例如邮件空间不足等,会导致邮件无法完成传输而导致丢失.
5. 发件人
用户代理
为何不直接将邮件发送给收件人的用户代理,而是通过
邮件服务器
来传输?
因为用户电脑、手机性能有限,无法运行收发邮件的程序,并且无法不间断地运行并连接到
互联网
上. 因此只能将信件暂时存放在
邮件服务器
中,用户需要时就可以去下载信件.
6. 为什么用户收发邮件时感觉不到SMTP过程?
如果用户使用
用户代理
软件,则这个复杂的过程被用户代理屏蔽了,用户只需要进行简单的发送操作就可完成邮件的发送. 如果用户使用Web方式,则所有过程都由
邮件服务器
完成.
词条图册
更多图册
词条图片
(7)
参考资料
1.
(美)特南鲍姆 著,潘爱民 译
.《计算机网络》:清华大学出版社,2004年8月1日
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/羊村懒王/article/detail/657935
推荐阅读
article
Windows
事件
日志
监控分析_审计
windows
日志
,检索出重要
的
事件
id
和发生
的
事件
情况...
Windows
事件
日志
是记录 Microsoft 系统上发生
的
所有活动
的
文件,在
Windows
环境中,将记录系统、...
赞
踩
article
android
手机
使用
finder
抓包--
Windows
...
一、Fiddler抓取环境搭建1、电脑需要安装Fiddler2、测试
手机
需要支持Wifi3、测试
手机
与电脑需要同一网络4...
赞
踩
article
在
Windows
上
安装
TensorFlow
_确保
系统
环境变量
中
添加了
cuda
路径...
本指南将介绍如何在
Windows
上
安装
TensorFlow
。虽然这些说明可能也适用于其他
Windows
版本,但...
赞
踩
article
windows
环境下
anaconda
+
tensorflow
+
pycharm
安装
和配置过程_tensf...
参考博文:1、
windows
环境下
tensorflow
安装
过程详解https://blog.csdn.net/laoba...
赞
踩
article
Windows
+
Anaconda3
+
python
3.7
环境配置+基础操作_
anaconda3
pyt...
首先,打开anaconda官网,选择
Windows
,Python
3.7
version 下载打开安装文件,安装完ana...
赞
踩
article
Windows
安装
mysql
5.7
_
mysql
-
5.7
.
44
-
winx64
...
安装
mysql
5.7
_
mysql
-
5.7
.
44
-
winx64
mysql
-
5.7
.
44
-
winx64
...
赞
踩
article
[
windows
-
rs
]
Rust
调用
Windows
API_
rust
winapi
...
使用
windows
-
rs
调用MessageBoxW_
rust
winapi
rust
winapi
...
赞
踩
article
013
Rust
网络
编程
,
SMTP
介绍_
rust
邮箱
认证...
概念
SMTP
(Simple Mail Transfer Protocol
,
简单邮件传输协议)是用来传输电子邮件的协议
,
主...
赞
踩
article
Windows
10
安装
安卓子系统
WSA
(
Magisk
/KernelSU)使用
WSA
工具箱
安...
1. 在 Microsoft Store 中
安装
Ubuntu LTS。2. 使用
Magisk
On
WSA
Local 打...
赞
踩
article
neo4j
数据库
安装
与使用 -
Windows
_
neo4j
windows
...
当 Neo4j 作为服务
安装
时,Java 选项存储在服务配置文件中。如果要在
安装
服务后更改任何这些选项或环境变量,则必须...
赞
踩
article
Windows
11
安卓
子系统
安装教程_
win
11
安卓
子系统
...
Windows
11
上周开始引入了对安卓
子系统
的支持,不过目前只对 Beta 通道用户开放,而正式版系统和 Dev 通...
赞
踩
article
Windows11
Subsystem
for
Android
运行失败
,
显示“请确保
bios
中
启用
了...
据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**打开任务管理器
,
点击“性...
赞
踩
article
【
WSA
】
无法
打开
适用
于
Android
™ 的
Windows
子系统
,因为它处于脱机状态。可能缺...
之前可以正常使用
适用
于
Android
™ 的
Windows
子系统
(
WSA
),但突然间
无法
启动了。_
适用
于androi...
赞
踩
article
Windows
11
安装
Android
13版本的安卓子系统(带
Google
Play
商店和...
通过下载最新的
Windows
Android
子系统 (WSA) ,绕过Beta用户的限制,而且我提供的版本集成了 M...
赞
踩
article
【
Windows
11】系统安装修改版
Subsystem
for
Android
安卓子系统,并用...
附带资源!修改版 WSA 安卓子系统 +
Magisk
Root
_
windows
subsystem for andro...
赞
踩
article
Windows
11 配置安卓
子系统
(
WSA
)
_
wsa
设置
...
直接在线安装
WSA
的话需要修改国家,反正目前支持的没有中国,另外需要开启预览计划。原来的旧笔记本电脑上我就是把国家改...
赞
踩
article
【记录】在
win11
中部署和
使用
WSA
(
Windows
Subsystem
for
Android
)...
本文记录了安装
WSA
(
win11
安卓子系统)的详细过程和配置adb以及
使用
adb工具连接安卓子系统并安装APK的过程。_...
赞
踩
article
在
Windows
和
Mac
上
恢复
已删除
文件
的 8 种方法_
win
恢复
mac
误删
文件
...
如果您最近才删除该
文件
,通常可以从回收站 (PC) 或垃圾箱 (
Mac
) 快速
恢复
它。只要您备份计算机,您就应该能够从最...
赞
踩
article
编译qt5.15.2(
mac
/
windows
)的
mysql
驱动(附带编译好的文件)_
pri
: can...
链接:https://pan.baidu.com/s/1m15DbFuFTtXfEyqyOS2cew。因为需要连接到my...
赞
踩
article
Windows
+VS
code
配置
与使用
git
,
超详细教程
,
赶紧收藏吧_vs
code
配置
git
...
由于篇幅限制
,
pdf文档的详解资料太全面
,
细节内容实在太多啦
,
所以只把部分知识点截图出来粗略的介绍
,
每个小节点里面都有更...
赞
踩
相关标签
Windows 日志
日志监控
日志分析
tensorflow
Windows安装
深度学习
windows
mysql
rust
开发语言
windows-rs
MessageBox
rust程序设计
rust网络编程
rust编程视频
android
数据库
neo4j
知识图谱
人工智能
java