思科的ASA防火墙是一个状态化防火墙,维护一个关于用户信息的连接表(conn),默认情况下ASA对TCP和UDP的流量提供状态化连接,对ICMP协议是非状态化的。
思科ASA的报文穿越过程如下:
一个新来的TCP报文视图建立连接
1、ASA检查ACL是否允许连接
2、ASA执行路由查询如果有路由则ASA创建一个conn条目
3、ASA在检测引擎中检测预定义的一套规则,根据检测引擎检测结果确定是否转发
4、ASA接收到返回报文进行conn表比对是否有条目有就允许没有就丢弃
如果从安全级别低的端口要访问安全级别高的端口,数据包到达防火墙会检查ACL和conn表匹配其中一个条目都可以转发!
ASA访问规则
安全级别高的端口允许访问安全级别低的端口
安全级别低的端口不允许访问安全级别高的端口
两个端口安全级别相同也不可以互相访问
下面通过实验来对ASA进行一些基本的配置
实验拓扑
软件版本GNS3 0.8.6 ASA镜像为 ASA8.0(2)
实验需求
允许R1的环回口能和R2通信
允许R1和R2可以互相telnet
允许R1 telnet 到ASA
允许R2能够对ASA进行SSH远程管理
地址规划
R1 loopback 0 IP:192.168.10.1/24 (模拟内网网段)
R1 f0/0 IP:11.0.0.2/24
R2 loopback 0 IP:12.0.0.2/24
R2 loopback 0 IP:202.106.1.1/24
ASA1 e0/0 IP:11.0.0.1/24
ASA1 e0/1 IP:12.0.0.1/24
R1配置:
一些简单的配置这里就不做解释了
R1#conf t
R1(config)#int f0/0
R1(config-if)#ip add 11.0.0.2 255.255.255.0
R1(config-if)#no shut
R1(config-if)#int loo 0
R1(config-if)#ip add 192.168.10.1 255.255.255.0
R1(config-if)#no shut
R1(config-if)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 11.0.0.1
R1(config)#line vty 0 4
R1(config-line)#password abc123
R1(config-line)#login
R1(config-line)#exit
R1(config)#enable password abc123
R2配置:
R2#conf t
R2(config)#int f0/0
R2(config-if)#ip add 12.0.0.2 255.255.255.0
R2(config-if)#no shut
R2(config-if)#int loo 0
R2(config-if)#ip add 202.106.1.1 255.255.255.0
R2(config-if)#no shut
R2(config)#ip route 0.0.0.0 0.0.0.0 12.0.0.1
R2(config)#line vty 0 4
R2(config-line)#pas
R2(config-line)#password abc123
R2(config-line)#login
R2(config-line)#exit
R2(config)#enable password abc123
ASA1配置:
在思科模拟器中使用“/mnt/disk0/lina_monitor”命令将linux模式转换成思科命令行
ciscoasa> enable
Password: //没有密码直接回车就行
ciscoasa# conf t
ciscoasa(config)# hostname ASA1 //改设备名
ASA1(config)# int e0/0
ASA1(config-if)# nameif inside //在思科设备上接口要起一个逻辑名称(名称可以随意定义)否则IP地址不生效,默认outside口安全级别为100,其它所有接口都为0。可以通过“security-level”来定义安全级别
INFO: Security level for "inside" set to 100 by default.
ASA1(config-if)# ip add 11.0.0.1 255.255.255.0
ASA1(config-if)# no shut
ASA1(config-if)# int e0/1
ASA1(config-if)# nameif outside
INFO: Security level for "outside" set to 0 by default.
ASA1(config-if)# ip add 12.0.0.1 255.255.255.0
ASA1(config-if)# no shut
使用“show interface ip brief”查看接口信息
使用“show route”查看ASA的路由表
防火墙目前只有直连的两个网段路由并没有R1和R2环回口的路由信息
添加静态路由
ASA1(config)# route outside 202.106.1.0 255.255.255.0 12.0.0.2
ASA1(config)# route inside 192.168.10.0 255.255.255.0 11.0.0.2
用R1去telnet R2能否成功呢?
显然是成功了。
使用"show conn detail"来查看ASA的conn表
从图上可以看到有一条TCP连接,是inside的11.0.0.2访问outside的202.106.1.1的23端口的连接
用R1去ping R2 可以ping通吗?
显然并没有ping通
因为思科的ASA防火墙只对TCP和UDP协议记录连接,对ICMP是不记录连接的所以数据包回报的时候查看ACL和conn表都没有查到对应的条目则直接丢弃。
使用ACL允许icmp协议
ASA1(config)# access-list 110 permit icmp 202.106.1.0 255.255.255.0 192.168.10.0 255.255.255.0
//上面说过端口安全级别高的可以访问端口安全级别低,所以只有回报回不来。则定义一个允许202.106.1.0网段icmp流量访问192.168.10.0网段
ASA1(config)# access-group 110 in interface outside //将列表应用到outside接口的in方向
测试
下面大家思考一个问题,现在R2 telnet R1能否成功呢?
显然是被拒绝的
根据刚才的经验,很明显是因为ASA的conn表和ACL中没有条目匹配这一请求
定义ACL
ASA1(config)# access-list 110 permit tcp 202.106.1.0 255.255.255.0 192.168.10.0 255.255.255.0 eq 23
//允许202.106.1.0网段访问 192.168.10.0网段的23端口,因为之前110列表已经应用到接口了这里就不再次应用了
测试
配置ASA的telnet功能
ASA1(config)# enable password abc123 //配置特权模式密码
ASA1(config)# passwd abc123 //配置远程登录密码
ASA1(config)# telnet 192.168.10.0 255.255.255.0 inside //配置允许192.168.10.0网段telnet,在思科防火墙上不允许安全级别最低的端口使用telnet访问。
测试
配置使用用户名和密码telnet登录
ASA1(config)# username test password abc123 //创建一个用户
ASA1(config)# aaa authentication telnet console LOCAL //配置telnet登录为本地验证,这里的LOCAL区分大小写
测试
使用SSH原创管理设备
思科防火墙只允许端口安全级别最低的使用SSH原创管理设备
SSH配置如下:
ASA1(config)# crypto key generate rsa modulus 1024 //生成一个rsa密钥,密钥长度1024bit
ASA1(config)# ssh version 2 //使用版本2
ASA1(config)# ssh 12.0.0.2 255.255.255.255 outside //允许12.0.0.2这个地址从outside口使用SSH进行远程访问
测试
-l :登录的用户名
思科防火墙默认ssh登录用户名为pix,密码为远程登录密码。使用pix是不安全的,可以使用本地用户名验证来登录这样pix就无法登录了。
使用本地用户名进行SSH登录
ASA1(config)# aaa authentication ssh console LOCAL
测试
登录成功
补充命令:
write memory //保存配置
clear configure all //清空当前所有配置
clear configure access-list //清除所有访问控制列表
write erase //删除startup-config配置文件