一.概述:
今天QQ收到一位朋友的求助,如下环境,查看了ASA的配置,策略是全通,居然无法访问,也感到困惑。
如是用GNS3搭建环境测试,在防火墙两侧进行抓包,发现TCP三次握手正常,但是位于防火墙内侧客户端发出的http get包却被防火墙丢弃了,用google 输入关键字:ASA tcp 2000搜到如下链接:
http://blog.csdn.net/yangcage/article/details/1787558
http://www.petenetlive.com/KB/Article/0000027.htm
终于明白:是因为ASA把访问外部http tcp 2000端口的流量当成了skinny协议的流量,而实际是http流量,因为两种协议流量的数据结构肯定不相同,所有当TCP三次握手完成后,后面的http应用的包被丢弃。如是进一步测试,测试分三种情况:
第一种是外部web应用的端口不在默认审查之列,比如TCP 8080;
第二种是外部web应用的端口在审查之列,但是实际应用却没有这种流量,比如TCP 2000;
第三种是外部web应用的端口在审查之列,而默认审查的协议又需要开启的情况。
二:外部web应用的端口不在默认审查之列
这种情况不需要防火墙做额外配置,按照防火墙的访问规则,inside就可以直通通过http://202.100.1.10:8080访问outside的web服务器。
三:外部web应用的端口在默认审查之列,但是实际应用却没有这种流量
比如外部web端口为2000,只需将默认的TCP 2000的skinny协议审查取消即可
policy-map global_policy
class inspection_default
no inspect skinny
四:外部web应用的端口在默认审查之列,实际应用也有这种流量
比如外部web端口为TCP 2000,而实际情况TCP 2000 skinny协议流量也可能会有的,因此不能简单把默认的FTP审查简单的干掉完事,
如下方法不可行:
access-list tcp2000web permit tcp any host 202.100.1.10 eq 2000
class-map tcp2000web_traffic
match access-list tcp2000web
class-map skinny_traffic
match port tcp eq 2000
policy-map tcp2000web_skinny_traffic_policy
class tcp2000web_traffic
inspect http
class skinny_traffic
inspect skinny
service-policy tcp2000web_skinny_traffic_policy interface inside
如下方法可以:(至少是内网访问http://202.100.1.10:2000是正常的,skinny没有环境进行测试)
policy-map global_policy
classinspection_default
no inspect skinny
access-list tcp2000web permit tcpany host 202.100.1.10 eq 2000
access-list skinny extended deny tcp anyhost 202.100.1.10 eq 2000
access-list skinny extended permit tcp anyany eq 20000
class-map tcp2000web_traffic
matchaccess-list tcp2000web
class-map skinny_traffic
match access-list skinny
policy-map tcp2000web_skinny_traffic_policy
class tcp2000web_traffic
inspect http
class skinny_traffic
inspect skinny
service-policy tcp2000web_skinny_traffic_policyinterface inside
但是出现个问题,我将外部202.100.1.10地址修改为202.100.1.11后,仍然能正常访问,想不明白到底是为什么,后期再研究一下policy-map。
本文来自:网络安全技术:http://www.sybell.com.cn/about/