思科的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)

wKioL1ZdUFXwZkkUAAAp6QdKJQk086.png



实验需求


允许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”查看接口信息

wKiom1ZdVLexkfYMAABfsUESYmc890.png

使用“show route”查看ASA的路由表

wKiom1ZdVSKzEJEVAAB1ooyXmoE507.png

防火墙目前只有直连的两个网段路由并没有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


wKioL1ZdVlrTGFRnAACKWHxX6oo270.png


用R1去telnet R2能否成功呢?


显然是成功了。

wKioL1Zdbbey4KijAAAnS5RmOws810.png


使用"show conn detail"来查看ASA的conn表

wKioL1ZdbkuBw5FjAACeO7CjhBE617.png从图上可以看到有一条TCP连接,是inside的11.0.0.2访问outside的202.106.1.1的23端口的连接

用R1去ping R2 可以ping通吗?


显然并没有ping通

wKiom1ZdbsjyNk0TAAA6s4k2GYE082.png

因为思科的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方向


测试


wKioL1ZdcQLx1wdxAABHse2Tf1Q504.png



下面大家思考一个问题,现在R2 telnet R1能否成功呢?




wKioL1ZdcWiScvGxAAAiyk-l7lU705.png

显然是被拒绝的


根据刚才的经验,很明显是因为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列表已经应用到接口了这里就不再次应用了


测试

wKiom1ZdcuPTE8t0AAAomzHYJoQ302.png



配置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访问。


测试

wKioL1ZddGPRSWIrAAAxT6RCHMg764.png



配置使用用户名和密码telnet登录


ASA1(config)# username test password abc123    //创建一个用户

ASA1(config)# aaa authentication telnet console LOCAL    //配置telnet登录为本地验证,这里的LOCAL区分大小写


测试

wKiom1ZddMPxdC7aAAA3PFPojfs216.png



使用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进行远程访问


测试

wKioL1ZddpbDI0b_AAAehca2etM448.png

-l :登录的用户名

思科防火墙默认ssh登录用户名为pix,密码为远程登录密码。使用pix是不安全的,可以使用本地用户名验证来登录这样pix就无法登录了。



使用本地用户名进行SSH登录



ASA1(config)# aaa authentication ssh console LOCAL


测试


wKiom1ZddvXxeHQ5AAAaL821__U555.png


登录成功


补充命令:


write memory      //保存配置


clear configure all    //清空当前所有配置


clear configure access-list  //清除所有访问控制列表


write erase            //删除startup-config配置文件