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

间隙填充
正睿科技  发布时间:2008-04-19 09:17:29  浏览数:3007

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

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

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

  • 简单的试验网络环境;
  • 使用Telnet;
  • 使用ISA防火墙的实时日志查看器;
  • 在ISA防火墙和Exchange服务器上使用网络监视器;
  • 解决问题;
  • [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]

    解决问题

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

  • 配置Exchange服务器使用ISA防火墙的内部网络适配器的IP地址作为默认网关;
  • 配置SMTP服务器发布规则使用ISA防火墙的IP地址来作为客户源地址;
  • 服务器发布规则的默认配置要求发布的内部服务器是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地址了。