排除发布的SMTP服务器的故障

内容概述:Tom在这篇文章中,以一个实例来分析了如何排除发布的SMTP服务器的故障。故障的原因是很简单的,不过我们学习的应该是那种系统化的网络故障分析过程及原理。原文有些字句不容易理解,我在翻译时进行了适当的修改,希望通过这篇文章,能够让你理解如何系统化的分析网络故障。

ISA防火墙的Web发布和服务器发布规则通常用于允许外部客户访问位于受ISA防火墙保护的网络的服务器。ISA防火墙保护的网络是在ISA防火墙中定义的网络,其他没有在ISA防火墙的网络中定义的任何IP地址都属于默认的外部网络。

SMTP服务器发布是很常见的,它允许你发布位于ISA防火墙保护后的网络中的SMTP服务器。发布的SMTP服务器可以是指定的SMTP中继或者是邮件传送的端点,例如Exchange服务器。SMTP服务器发布规则允许进入的TCP 25端口的数据通过ISA防火墙来到达ISA防火墙保护网络中的SMTP服务器。

但是,和简单的包过滤硬件防火墙不一样,ISA防火墙对进入的SMTP邮件执行状态过滤和应用层状态识别。ISA防火墙通过以下两个特性来执行应用层状态过滤:

对于SMTP服务器发布规则,SMTP过滤器总是启用的。SMTP邮件筛选器必须在ISA防火墙上、SMTP中继或者Exchange服务器上安装(我不推荐你在Exchange服务器上安装SMTP邮件筛选器)。SMTP邮件筛选器可以通过对每封邮件的内容进行监视,通过关键字、附件、源地址或者目的地址来阻止邮件,保护你的SMTP服务器不受到缓冲区溢出的攻击。

因为常用,所以ISA防火墙的SMTP服务器发布也带来了大量的故障问题。在这篇文章中,我们来讨论如何排除发布的SMTP服务器的故障。

在此文中,我们通过以下方面来进行介绍:

[page_break]

简单的试验网络环境

下图显示我我们使用的简单的网络环境的拓朴结构:一个ISA防火墙(具有两个网络适配器,分别连接到内部和外部网络),一个Exchange服务器(一个网络适配器连接到内部网络),还有一个位于外部网络的客户计算机(用于测试)。ISA防火墙和Exchange服务器的操作系统是Windows Server 2003,外部的客户操作系统是Windows XP,各计算机的TCP/IP设置见下图(注意,请仔细看,或许,你从中可以看出本文所述故障的所在)。

我们建立了一个SMTP发布规则发布内部IP地址为10.0.0.2的SMTP服务器,ISA防火墙上SMTP服务器发布规则侦听IP地址192.168.1.70的25端口。在DNS中已经做好了配置,有A记录指向192.168.1.70,并且域的MX记录解析到此A记录上。这一切看起来都工作正常,但是用户通知我们说当他们从Hotmail账户发送邮件到自己的邮箱中,不能在本地收到邮件,看起来好像邮件没有到达Exchange服务器。

这是一个很常见的网络环境,解决这个问题是很简单的,只需要系统化的进行处理。首先我们使用Telnet来开始研究。

 

 

 

使用Telnet

首先我们需要确认不是DNS的问题。在Web和服务器发布规则出现问题时,很多时候都是因为DNS的故障。我们在外部客户上可以使用Telnet来连接到ISA防火墙SMTP服务器发布规则所指定的外部侦听器上。

在外部客户计算机上打开一个命令提示符,然后输入以下命令:

telnet 192.168.1.70 25

然后敲回车,当你自己使用时,请替换192.168.1.70这个IP地址为你发布规则中侦听的实际IP地址。如果你看到下图,你可以知道这不是DNS引起的问题。这不是说DNS就没有问题,但是在这点我们可以确定问题和DNS无关的(如果只是DNS的问题,那么通过IP应该是可以连接的)。

 

 

 

使用ISA防火墙的实时日志查看器

现在我们想观察连接到ISA防火墙外部接口的Telnet连接,我们可以通过ISA防火墙的实时日志查看器来观察。执行以下步骤来配置实时日志查看器:

  1. 在ISA2004管理控制台,展开服务器名,然后点击监视节点;
  2. 监视节点,点击日志标签,然后在任务面板中点击任务标签,在日志任务列表,点击编辑过滤器链接;
  3. 编辑过滤器对话框,点击过滤由下拉列表,点击协议项,然后在条件栏选择等于,最后在栏选择SMTP服务器,然后点击添加到列表

  1. 点击开始查询按钮;
  2. 再次Telnet到ISA防火墙,在ISA防火墙的实时日志查看器,你可以看到如下图所示的内容。它提示你的发起的Telnet连接到达了ISA防火墙外部接口,但是连接失败。规则栏显示了SMTP服务器发布规则的名字,客户端IP显示的IP地址为192.168.1.90,这是我们用于测试的外部客户计算机的IP地址,目的IP显示了内部网络的SMTP服务器的IP地址。

在这点我们知道外部客户发起的连接到达了ISA防火墙,并且服务器发布规则正确的进行了配置。下一步我们需要使用网络监视器来看连接过程中发生了什么。

[page_break] 

在ISA防火墙和Exchange服务器上使用网络监视器

我们可以在ISA防火墙和Exchange服务器上使用网络监视器来深入研究我们的问题。你同样可以使用网络监视器来解决大部分使用ISA防火墙遇到的问题。

首先我们需要安装网络监视器,,它默认是没有安装的。你可以通过控制面板中的添加/删除程序来安装它。安装好后,在ISA防火墙上执行以下步骤:

  1. 点击开始->所有程序->管理工具->网络监视器
  2. 首先你会看到要求你选择网络监视器侦听的网络的提示,然后点击确定

  1. 选择网络对话框,在左面板展开本地计算机,在本地计算机下你可以看到ISA防火墙上的网络适配器列表,我们已经为每个网络适配器取了一个容易分辨的名字。在此例中我们想让网络监视器侦听LAN接口,因为它连接到Exchange服务器。点击LAN,然后点击确定

  1. 捕获菜单,点击缓冲区设置命令;
  2. 捕获缓冲区设置对话框,在Buffer Size (MB)栏输入100,这样可以保存比较多的数据包,不会丢失我们感兴趣的数据,然后点击确定;

  1. 然后点击按钮栏中部的启动捕获按钮开始进行捕捉;
  2. 回到外部网络中的测试客户机上,然后再次运行Telnet命令;
  3. 回到ISA防火墙上,然后点击停止并查看捕获按钮。
  4. 如果你网络的流量很大,那么你捕获的内容可能会很多。你可以建立一个显示过滤器来帮助观察,在[捕获 2 : (总结)]窗口,点击显示菜单,然后选择筛选器
  5. 显示筛选器对话框,点击Protocol == Any 项,然后点击编辑表达式

  1. 表达式对话框,点击属性标签。在属性标签,找到TCP项,双击TCP然后点击Destination Port 项,在关系列点击==项,选择十进制然后在值(Word)列输入25,点击确定

  1. 显示筛选器对话框点击确定

  1. 在下图中你可以看到过滤后显示的SMTP连接。下图显示了我们外部的客户192.168.1.90尝试连接内部的10.0.0.2主机,这和我们从实时日志查看器中观察到的一致。但是,这些数据包是从ISA防火墙的内部网络接口发出的,而实时日志查看器中看到的是从外部网络接口接收到的。从下图可以看出,ISA防火墙的SMTP服务器发布规则是正常执行的,它转发数据包到内部的SMTP服务器上。

因为ISA防火墙的服务器发布规则是正常工作的,所以下一步我们需要在Exchange服务器上运行网络监视器。在Exchange服务器上安装网络监视器,执行以下步骤:

  1. 点击开始->所有程序->管理工具->网络监视器
  2. 在要求你选择网络监视器侦听的网络的提示对话框上点击确定
  3. 选择网络对话框,在左面板展开本地计算机,然后点击本地网络连接,然后点击确定
  4. 捕获菜单,点击缓冲区设置命令;
  5. 捕获缓冲区设置对话框,在Buffer Size (MB)栏输入100,这样可以保存比较多的数据包,不会丢失我们感兴趣的数据,然后点击确定;
  6. 然后点击按钮栏中部的启动捕获按钮开始进行捕捉;
  7. 回到外部网络中的测试客户机上,然后再次运行Telnet命令;
  8. 回到Exchange服务器上,然后点击停止并查看捕获按钮。
  9. 因为我们不能确定什么是需要查看的,所以我们不需要过滤捕获的数据。你可能会看到如下图所示的一些内容。下图显示了进入的连接到达了Exchange服务器。在这个捕获中我们看到一个ARP的广播,寻找10.0.0.10的MAC地址。ARP请求信息没有得到ARP回复信息,这指出IP为10.0.0.10的主机要么是离线或者不存在。现在我们需要问自己“为什么Exchange服务器试图寻找这个IP地址?

在此例中,为什么没有IP地址为10.0.0.10的主机回复ARP请求信息呢?因为网络中没有主机具有这个IP地址。现在我们需要研究为什么当外部客户连接时Exchange服务器需要寻找这个IP的主机呢?因为外部客户和Exchange服务器不处于同一子网中,Exchange响应外部客户的请求时,会将数据包转发至自己的默认网关,所以转发给了错误的默认网关10.0.0.10。这可能是在配置Exchange网络适配器属性时的输入错误。

[page_break]

解决问题

我们有两个办法来解决这个问题:

服务器发布规则的默认配置要求发布的内部服务器是SNAT客户。不过,在ISA Server 2004防火墙中,你可以在服务器发布规则中选择保留客户源IP地址或者将ISA防火墙的IP地址作为源地址。对于ISA防火墙的IP地址作为源地址的情况,你不需要配置发布的服务器作为SNAT客户。

方式一:修改Exchange服务器的默认网关

我们将Exchange服务器的默认网关修改为ISA防火墙的内部接口的IP地址,现在我们来看看发生了什么。你可以看到外部客户发起了连接,并且Exchange服务器进行了回复。

在外部客户上进行Telnet,你可以看到如下图的提示:

 

方法二:修改SMTP服务器发布规则

另外一个办法是配置服务器发布规则,使用ISA防火墙的IP地址来替换客户的源IP地址。在ISA管理控制台中双击SMTP服务器发布规则,然后点击标签,在标签,选择请求表现为来自ISA Server计算机,点击确定后再点击应用按钮保存修改和更新防火墙策略。

再次在Exchange服务器上运行网络监视器,然后再执行Telnet,你可以看到发起连接的客户端IP为10.0.0.1,这个是ISA防火墙的内部接口的IP地址。Exchange服务器进行了响应。在这种情况下,就不需要配置Exchange服务器为SNAT客户了。但是这样,在Exchange服务器的日志中,记录的就都是10.0.0.1的IP地址了。

分享到