防火墙未放通DNS导致ssh登录时延问题

发布时间:  2012-11-21 浏览次数:  216 下载次数:  4
问题描述
在XX省移动的项目交付中,遇到如下奇怪的问题,在防火墙监控ip范围内的主机使用ssh登录时,会有25s~30s左右的时延;不在防火墙监控的主机ssh登录正常。

防火墙的清洗规则为:
当从外网访问Host-1、Host-2两台主机时,所有流量从S93策略到防火墙,在防火墙上放开指定端口的报文通过,其余报文丢掉;从外网访问Host-3、Host-4时,S93直接转发报文到主机,不做策略到防火墙。
由于Host-1、Host-2为管理类设备,因此只放通了网元间通信的相关端口,DNS等端口未放通。
告警信息
处理过程
解决办法有两种:
1、 修改ssh配置文件,将UseDNS选项修改为no
2、 防火墙上修改ACL,放通udp port 53的报文,允许DNS响应通过。
根因
从客户测试床远程ssh登录host3和host4两台设备,ssh登录正常,时延均在1s以内;远程登录到host1和host2两台设备,均有30s左右的时延;抓包看每次均在第10个包和第11个包之间有25s左右的时延,如下图所示:

再远程登录到host1上,从host1ssh登录到host2上,同样出现ssh时延的问题,时间也是约30s;至此,推测无论是从系统网内还是网外访问host1和host2两台设备,都触发了某个东西,导致时延;在网上搜索ssh时延的案例,有看到说ssh登录会有反向解析,需要查询DNS,进行验证。登录host1主机,vi /etc/ssh/sshd_config,打开ssh配置文件,DNS选项如下:
UseDNS yes
再检查防火墙的ACL,发现没有放通DNS的host和53端口,导致这两台设备向外发送DNS请求时,DNS的响应报文被防火墙过滤掉,服务器无法获得DNS解析结果。
在目标服务器上有一个文件/etc/nsswitch.conf ,里面有如下一行
hosts: files dns
这行的含义是对于访问的主机进行域名解析的顺序,是先访问file,也就是/etc/hosts文件,如果hosts中没有记录域名,则访问dns,进行域名解析,如果dns也无法访问,就会等待访问超时后返回,因此等待时间比较长。
建议与总结
配置防火墙时可允许常见的端口通过,如DNS、SSH等;

END