如果在邮件服务器上禁用邮件中继功能的话,则其他客户端主机无法通过Sendmail来发送邮件。但是如果开启邮件中继的话,则会带来一定的安全隐患。其最大的安全隐患之一就是匿名邮件。如果开通邮件中继功能的话,则一些非法攻击者很容易利用企业的邮件服务器来匿名发送垃圾邮件,这跟容易实现。
一、匿名邮件的发送原理。
匿名邮件是指用户在不需要账号的情况下,仍可通过Sendmail服务器来发送邮件。如用户可能会经常收到那些发件人地址是自己的一些邮件,其实这就是匿名邮件的一种形式。通常这类邮件会伪装真实的邮件地址,如用户自己的邮件地址,以躲过客户端的垃圾邮件过滤器。大部分情况下,用户不会过滤自己发给自己的邮件。因为有时候可能由于资料备份等目的确实需要自己给自己发邮件。那么这个匿名邮件到底是怎么实现的呢?是否需要专家级的人物才可以实现呢?其实不然。笔者下面介绍一下匿名邮件的实现过程,其实这并没有大家想象的那么难。
第一步:以Telnet登录到Sendmail服务器中。
攻击者如果想利用企业的邮箱服务器来发送垃圾邮件的话,必须先利用telnet等协议登录到Sendmail邮件服务器。攻击者登录上服务器之后,通常情况下服务器会将自己的主机名、IP地址、现在所使用的通信协议、Sendmail邮件服务器的版本和登录时间等信息高速给攻击者。注意此时Sendmail是把攻击者当成系统管理员。这些信息对于系统管理员来说非常的有用。当然此时把这些信息给了攻击者,那也无形之中帮了他们一个忙。
第二步:伪造发件人地址。
伪造发件人地址主要包括两个细节。首先需要定义邮件地址的后缀名。攻击者可以利用命令helo来进行定义。如helo ABC.COM。然后就是为找发件人的名称。如在输入伪造的发件人电子邮件地址前加上mail from命令即可以成功伪造一个发件人地址。如mail from sales@abc.com。此时攻击者就已经成功伪造一个发件人地址。接下去攻击者就可以利用这个邮件地址来发送垃圾邮件。如果要把地址伪装成收件人的地址,那么只需要编写一个简单的脚本程序即可。大家若感兴趣的话,可以思考一下这个脚本程序该如何编写。为了避免给大家落下一个“怂恿发垃圾邮件的口舌”,这个脚本程序笔者就不共享出来了。只要稍微有点shell编程经验的人,写这个脚本程序是一件信手拿来的事情。
第三步:编写垃圾邮件内容。
在命令行模式下,攻击者可以利用data命令通知邮件服务器,即将开始输入邮件内容。当服务器接收这个命令之后,也会告知攻击者可以输入匿名邮件内容了。如可能邮件服务会提示如下信息“Enter mail”,告知攻击者服务器开始接受邮件内容。同时还可能会提醒攻击者,在命令行中完成邮件后必须利用”.”号来表明邮件已经完成。注意,在完成邮件后,必须用“.”符号来告诉邮件服务器已经完成了邮件内容的书写。只有如此,邮件服务器才会接受匿名邮件的内容。
第四步:断开连接。
邮件内容输入完毕后,利用quit命令结束连接。然后邮件服务器就会把匿名邮件的内容发送给指定的邮件接收者。从以上的分析中可以看出,如果启用了Sendmail服务器邮件中继功能的后,则攻击者利用这台邮件服务器来发送垃匿名的垃圾邮件就变得很轻松了。只要稍微懂一点攻击知识的人就可以利用你的邮件服务器来发送匿名邮件。这或许是企业Linux系统管理员不愿意看到的事情,但是确实切切实实存在的安全隐患。
现在的问题是Sendmail服务器中的中继功能必须开发,否则的企业用户无法通过邮件客户端来发送邮件。为此系统管理所能够做的就是采取一切可能的措施,来保障邮件服务器的安全。杜绝别人利用这台服务器来发送匿名的垃圾邮件。此时Linux系统管理员可以采取哪些措施来达到这个目的呢?下面笔者的一些肺腑之谈,或许能够帮助大家提高邮件中继功能的安全性。
二、匿名邮件的防治措施。
从以上的分析中我们可以看出,中继功能是把双刃剑,其即方便了用户通过邮件客户端来发送邮件;同时也留下了一定的安全隐患。下面笔者以匿名邮件为例,谈谈系统管理员该采取哪些措施来提高邮件中继功能的安全性。
1、禁用Telnet协议。从上面匿名邮件的发送步骤中我们可以看出,要利用邮件服务器来发送匿名邮件有一个前提,即必须先利用telnet等协议登录到邮件服务器。如果我们能够采取一些措施防止攻击者利用Telnet协议登录到邮件服务器的话,那么就可以从根源上防止攻击者发送匿名邮件。我们都知道Telent协议是一个不安全的远程登录协议,虽然其提供了一定的身份安全认证机制。但是不幸的是其用户名、密码、指令等等在网络上是明文传输的。为此通过网络嗅探器,攻击者可以很轻松的得知管理员的用户名、密码等信息。然后他们就可以通过Telnet协议远程登录到Linux邮件服务器上。所以如果在Linux服务器上禁用任何用户使用Telnet协议远程登录服务器的话,就可以避免这种情况发生。如果有时候出于远程维护的需要,确实需要类似协议的话,那么最好选择SSH远程登录协议。这个协议在功能上跟Telnet协议差不多,但是在安全上两者一个天上一个地下。SSH协议在服务器与客户端之间传输的数据都是通过加密的,为此攻击者很难通过嗅探器等攻击来获得用户名与口令。为此也就不能够远程登录到服务器了。另外,如果有必要的话,还可以在服务器上利用访问控制列表或者防火墙指定只有特定的IP地址才可以远程登录到服务器。如此的话,就可以只允许管理员所使用的IP地址才可以进行远程登录。这无疑又提供了一道保障机制。
2、查找幕后黑手。当发现有邮件客户端来发送匿名邮件时,系统管理员应该在最短时间内把这个幕后黑手找出来。其死后在Linux服务器中要找到发送匿名邮件客户端的IP地址并非难事。系统管理员只需要查看/var/spool/mail目录中的邮件列表,并找到那封垃圾邮件。就可以在其属性信息中找到发送匿名邮件的客户端的主机名与IP地址等原始数据。但是,99%的情况下着他客户端也是受害者。有可能其已经被攻击者攻破,被当作肉鸡使用。又或者这个IP地址被人伪造了,可能根本不存在这个IP地址的客户端等等。不过即使如此,系统管理员掌握这个客户端的主机名与IP地址信息仍然非常有用。因为凭借这个信息,至少可以发现发送匿名邮件的客户端。如果这台客户端已经被人攻破了,当作肉鸡了。那么或许在这台客户端上还可以发现攻击者的一些信息。即使攻击者是高手,临走时把该清除的信息都清除干净了,不留下一点痕迹。那么系统管理员至少可以对这台客户端动动手术,修补其漏洞。因为根据笔者的经验,攻击者往往会在肉鸡中留下后门,以备下次使用。为此,通过找到这些做肉鸡的客户端,并采取一定的安全措施,就可以防止下次攻击者再利用这些肉鸡来做坏事。
以上两个方法,以禁用Telnet等不安全的远程登录协议为主,以查找肉鸡为辅,就可以在最大程度上保障邮件中继的安全隐患,防止攻击者利用这个安全漏洞来发送匿名邮件。
另外笔者需要说明的是,Telnet远程登录协议是一个很不安全的协议。即使是在Linux操作系统上部署其他应用服务的话,也最好能够把这个协议禁用掉。如果一定要使用远程协议的话,那么最好使用更加安全的SSH协议。并利用防火墙等工具限制只有特定的IP地址才可以使用SSH协议登录到服务器。这有利于在操作系统层面提高应用服务的安全性。