从PIX到ASA:思科防火墙配置手册的命令迁移与实战指南 简介思科ASA和PIX防火墙配置手册借鉴.pdf 是一份面向网络工程师、安全运维人员和防火墙初学者的实用配置参考聚焦思科ASA、PIX及FWSM的日常管理与命令操作。资源为单个PDF文档体积约133KB随取随用适合放在手边对照查阅。内容从CLI用户接口、特权模式进入方式讲起涵盖Console、Telnet、SSH、ASDM等接入手段并梳理了Unrestricted、Restricted、Failover等许可类型及升级命令第二章进一步介绍接口名称、安全等级、IP地址和DHCP/PPPoE配置包含Catalyst 6500 FWSM通过session slot进入的实例能帮助读者快速理解配置基础并减少排错弯路。目前已有173人学习下载适合作为备考或日常运维的速查手册。1. 思科ASA和PIX防火墙配置手册两代防火墙的命令承接与配置思路很多老网工接触思科防火墙都是先从PIX手册开始比如《思科ASA和PIX防火墙配置手册》。PIX早已停产但它提出的安全区域、安全级别、ACL逐条匹配、NAT转换这些框架到今天还是ASA的基础。实际部署时会发现手册里能直接粘到ASA上运行的命令并不多接口命名不一样、NAT语法改了、ACL绑定方式也变了。下面按两代设备之间的承接关系讲清楚以外网、内网、DMZ的常见拓扑为例给出一套能用在模拟器和真实设备上的ASA配置路径。适合正在学思科防火墙、准备迁移旧设备或者刚接手ASA项目的工程师阅读双机、对象组这类内容只挑与日常配置强相关的部分展开。2. 思科ASA和PIX防火墙初始化配置接口命名、安全级别与模拟器准备2.1 PIX手册里的 nameif security 在ASA上怎么对应早期PIX手册里接口配置通常是下面这种写法nameif ethernet0 outside security0 nameif ethernet1 inside security100PIX的物理口位置固定ethernet0天然就是outsideethernet1天然就是inside配置时只需要把名字和安全级别绑定在端口上。到了ASA接口从固定端口变成模块化接口接口编号不再有固定含义必须先进入接口配置模式再给接口起名字。所以上面两行命令不能直接复制到ASA必须拆成以下形式interface GigabitEthernet0/0 nameif outside security-level 0 ip address 203.0.113.1 255.255.255.0 no shutdown这里面的变化不只是命令拆分还牵涉到思科ASA对接口生命周期的管理。PIX里接口只要物理在线就处于可用状态ASA里一个物理接口需要满足三个条件才进入up状态接口没有shutdown、存在nameif、配置了IP地址。三个条件缺一个show interface都会显示administratively down或no nameif。安全级别的继承关系没有变0到1000通常给outside100给inside中间值给DMZ。PIX手册里“security0”这些数字到了ASA就变成了security-level 0含义完全一样。真正容易踩坑的是两个接口用相同安全级别此时ASA默认禁止两个接口互访。很多迁移项目里把inside和dmz都设置成100觉得自己写一条permit ip any any就能通结果ACL没生效原因就是ASA的同级别隔离规则比PIX更严格。为了把两个时代的对应关系留成参考我整理了一张表配置动作PIX 7.x之前常见写法ASA 8.4之后推荐写法给接口起名并定义区域nameif ethernet0 outside security0interface GigabitEthernet0/0 nameif outside security-level 0配置接口地址ip address outside 203.0.113.1 255.255.255.0interface GigabitEthernet0/0 ip address 203.0.113.1 255.255.255.0启用接口默认开启no shutdown绑定ACL到接口access-group OUTSIDE_IN in interface outside相同保留表里的第三行是迁移时最容易漏掉的PIX默认所有接口都是up状态ASA必须显式no shutdown。初始化一台ASA先看这四行是否齐全能省去很多排障时间。2.2 手工创建一个最小可用ASA配置假设防火墙作为边界设备有三个接口outside、inside、dmz。最小配置可以先写成这样configure terminal ! interface GigabitEthernet0/0 nameif outside security-level 0 ip address 203.0.113.1 255.255.255.0 no shutdown ! interface GigabitEthernet0/1 nameif inside security-level 100 ip address 192.168.1.1 255.255.255.0 no shutdown ! interface GigabitEthernet0/2 nameif dmz security-level 50 ip address 10.10.10.1 255.255.255.0 no shutdown ! write memory这段配置的含义是GigabitEthernet0/0是外部接口绑定公网地址203.0.113.1GigabitEthernet0/1是内部接口绑定私网地址192.168.1.1GigabitEthernet0/2是DMZ接口绑定服务器网段地址10.10.10.1。安全级别0、100、50表示三个区域的信任程度从低到高。参数上要强调两点第一security-level只是默认策略的依据不是权限边界。inside和outside之间的流量默认放行是因为inside级别100高于outside的0反过来outside访问inside默认被丢弃。第二dmz安全级别低于inside所以inside可以访问dmz但dmz主动访问inside就需要额外ACL这在后面的DMZ配置会具体展开。配置完后建议用这三个命令验证show interface ip brief show security-level show running-config interfaceshow interface ip brief看接口状态三层地址是否生效show security-level看每个接口的安全级别show running-config interface看配置里是否存在no shutdown。PIX手册里常用write terminal查看配置ASA上更推荐show running-config输出更清晰还能加接口名过滤。2.3 模拟器环境镜像版本和基础命令验证没有真机时思科模拟器是最常见的验证环境。但要注意思科模拟器自带的设备类型很多ASA相关的支持并不完整。如果你用的是思科模拟器8.0或7.3这类版本直接加载ASA镜像可能提示格式错误问题多半不是配置写错而是ASA镜像与平台不兼容。建议用GNS3或EVE-NG加载ASA镜像常见可用的版本有asa9-1-1等启动后进入的是ASA的CLI。模拟器里的接口编号往往和真机不一致需要先用show interface确认物理接口叫什么名字然后再配置nameif。举例来说真机上的GigabitEthernet0/0在模拟器里可能变成Ethernet1/0或GigabitEthernet1/0直接照抄手册反而起不来。在模拟器里验证配置不要只做一次。修改配置后用reload重启一次确认配置已经保存到startup-config。很多老手册第一步就让人write memory这个习惯到今天仍然适用。临时敲进去的配置不保存下一次reload就全部丢失线上事故有一半是这么来的。3. 借鉴手册写ACL对象组、黑白名单与ASA的执行顺序3.1 从PIX的access-list到ASA对象组PIX手册里写ACL习惯把地址和端口直接揉在一条命令里access-list OUTSIDE_IN permit tcp any host 203.0.113.10 eq www access-list OUTSIDE_IN permit tcp any host 203.0.113.10 eq 443这种写法在ASA上仍然能运行语法兼容。但当规则超过30条时维护成本很高。后来思科在ASA上强化了对象组的概念推荐先用object-group建组再在ACL里引用。好处是改地址或端口时不用碰ACL主体因此在实际项目中更常用。一个典型的外网访问web服务器的配置如下object network INSIDE_WEB host 203.0.113.10 ! object-group network BLACKLIST_IP network-object host 198.51.100.20 network-object host 198.51.100.21 network-object 10.0.8.0 255.255.255.0 ! access-list OUTSIDE_IN extended deny ip any object-group BLACKLIST_IP access-list OUTSIDE_IN extended permit tcp any object INSIDE_WEB eq https access-list OUTSIDE_IN extended deny ip any any ! access-group OUTSIDE_IN in interface outside这条ACL的执行顺序是先拒绝来自黑名单IP的流量再允许所有公网地址访问web服务器的443端口最后显式拒绝所有其他流量。前三行是策略最后一行是收敛。如果最后一行不写ASA也有隐式deny all兜底只是排障时看不到命中计数所以建议保留。命令里有两个关键参数需要理解。object-group network后面跟组名组名里可以放多个network-object表示一组地址object INSIDE_WEB则引用单个object network对象。两者的区别是object network更适合描述一个主机object-group network更适合描述一个地址集合。生产环境里建议优先使用object-group因为后续在黑名单里加IP只需在组里新增一条network-objectACL本身不用改。执行顺序也值得单独说。访问控制列表按顺序从上到下匹配一旦命中就停止继续匹配。如果把自己把deny ip any any放在permit前面那后面的permit永远不会命中。调整规则时不要直接删除整条ACL再重新写容易造成瞬时全放通。更安全的做法是用no access-list加规则编号或者先确认当前规则再逐条替换。3.2 黑白名单场景中ACL如何组织防火墙黑白名单这个词经常被误解以为黑名单和白名单是两种特殊功能。其实在ASA上黑白名单只是ACL的两种组织方式黑名单deny列出的目标其余流量默认放行或由其他规则控制白名单permit列出的目标其余流量全部拒绝白名单模式更适合服务器对外暴露场景。假设web服务器只允许访问443和22端口配置如下access-list OUTSIDE_IN extended permit tcp any host 203.0.113.10 eq 443 access-list OUTSIDE_IN extended permit tcp any host 203.0.113.10 eq 22 access-list OUTSIDE_IN extended deny ip any any最后一条deny ip any any看似多余但它在行为上明确表达了白名单策略。如果不写ASA隐式deny同样会拒绝没匹配的流量但隐式规则不会出现在show access-list里排查时容易让人误以为ACL没生效。如果开放端口很多可以把端口也做进对象组object-group service DMZ_ALLOW tcp port-object eq 443 port-object eq 22 port-object range 8000 8100 ! access-list OUTSIDE_IN extended permit tcp any host 203.0.113.10 object-group DMZ_ALLOW access-list OUTSIDE_IN extended deny ip any any这里的service对象组把多个TCP端口聚合在一起ACL只需要引用组名。以后有端口变更改object-group内的一条port-object而不需要重新审核整条ACL。黑名单场景通常用于防火墙对外部恶意IP的快速封禁。可以在第3.1的例子基础上把黑名单组作为第一优先级object-group network BLACKLIST_IP network-object host 198.51.100.20 network-object host 198.51.100.21 ! access-list OUTSIDE_IN extended deny ip any object-group BLACKLIST_IP access-list OUTSIDE_IN extended permit ip any any注意这里的第二行是permit ip any any不是deny ip any any。如果白名单和黑名单混用必须把黑名单放前面否则黑名单被后面的放行规则覆盖。这个顺序问题在PIX时代就存在ASA继承了同样的行为处理方式也没有变化。3.3 老手册移植时容易错的三处命令差异第一处是permit ip any any的使用。手册里的示例拓扑往往简单为了演示ACL结构会写permit ip any any。生产环境照搬这条规则等于关闭了所有过滤。建议先把手册里所有permit ip any any标出来再逐个替换成具体协议和端口。第二处是outbound命令。PIX手册里会写outbound命令控制出站流量ASA在8.4版本之后已经完全移除这个命令。所有出站方向控制都要改成access-list access-group方向选择是in接口方向不是出接口方向。比如控制DMZ访问outsideACL要绑定在dmz接口的in方向。第三处是ACL重复绑定。ASA同一个接口只能绑定一个access-group不能同时绑定两个到同一方向。很多老手册会写两条access-group在ASA上第二条会把第一条顶掉。如果确实需要两组规则只能合并到一个access-list或者把规则拆分到不同接口。这三处问题都可以通过在模拟器里验证发现。配置完后使用show access-list查看每条规则的hitcnt命中次数再配合packet-tracer命令测试源目的流量能快速确认规则是否按预期执行。4. NAT、DMZ区域与双机部署高频差异点4.1 静态NAT和动态PAT的新语法PIX手册里的地址转换主要是static、global、nat三个命令组合。ASA 8.4(2)之后新版的object nat语法成为主流虽然旧语法还能用但新语法在可读性和维护性上都更好。内网主机访问公网的动态PAT可以写成object network INSIDE_NET subnet 192.168.1.0 255.255.255.0 ! nat (inside,outside) source dynamic INSIDE_NET interface这句的含义是从inside接口进来、要出outside接口的源地址192.168.1.0/24在出口处动态转换成外部接口的公网地址。源地址范围由object network定义目的地址没有显式写表示任意目的。使用interface关键字后即使公网接口IP变化NAT规则也不需要调整。服务器需要对外提供服务时使用静态NATobject network WEB_SERVER host 192.168.1.10 ! object network WEB_PUBLIC host 203.0.113.10 ! nat (inside,outside) source static WEB_SERVER destination static WEB_PUBLIC WEB_PUBLIC这里把内网主机的192.168.1.10映射成公网地址203.0.113.10。destination static后面的参数比较复杂第一个WEB_PUBLIC是映射前的目标地址第二个WEB_PUBLIC是映射后的目标地址两个地址相同表示流量从外部访问公网地址时会被转换到内网地址。还有一种常见写法是source static WEB_SERVER interface适合只有一个公网IP的环境但管理性不如显式地址。注意配置静态NAT之后外部流量依然不能直接进入内网。NAT只做地址翻译不决定流量是否允许通过。安全策略由ACL单独控制所以还要在outside接口上配置允许访问公网地址对应端口的ACL。查看NAT是否生效使用show nat pool或show nat detail。如果NAT规则被命中计数会持续增加如果计数一直为零先检查ACL是否放行了对应流量再检查接口方向是否写反。NAT括号里的第一个接口是流量进入接口第二个接口是流量出去接口写反之后规则不会匹配。4.2 DMZ区域防火墙配置DMZ区域在网络里的定位是既能对外提供服务又不让外部流量直接进入内网。ASA上通过安全级别天然形成这种隔离。常见的级别设置为inside 100、dmz 50、outside 0。此时默认行为如下inside可以访问dmz和outsidedmz可以访问outside但不能访问insideoutside不能访问dmz和inside要放行外部对DMZ服务器的访问需要在outside接口的in方向配置ACL目的地址是服务器映射后的公网地址access-list OUTSIDE_IN extended permit tcp any host 203.0.113.10 eq https access-group OUTSIDE_IN in interface outsideDMZ服务器需要主动更新系统或同步时间时控制点改到dmz接口的in方向access-list DMZ_IN extended permit udp host 10.10.10.20 any eq 123 access-list DMZ_IN extended permit tcp host 10.10.10.20 any eq 80 access-group DMZ_IN in interface dmz第一行允许DMZ里的主机访问外部NTP服务第二行允许它访问外部HTTP资源。把ACL绑定在dmz接口的in方向表示对从dmz进入防火墙的流量做限制而不是限制防火墙进入dmz的流量。PIX手册里喜欢在outside接口上做双向控制ASA里建议把出口控制分散到各接口的in方向更符合区域隔离的思路。DMZ配置中最常见的问题是服务器访问内网数据库失败。原因通常不是ACL而是dmz安全级别低于inside默认禁止dmz访问inside。要放行特定端口可以在dmz接口的in方向加一条转发到内部数据库的ACL。流量方向PIX手册常见思路ASA推荐配置inside访问dmz默认放行或写ACL默认放行必要时用ACL收紧dmz访问outsideoutbound命令dmz接口in方向ACLoutside访问dmzstatic conduitobject nat outside接口in方向ACL上表中提到的conduit命令在ASA里已经移除现在统一用access-list和access-group替代。从PIX迁移到ASA时如果配置里出现conduit需要逐条分析方向再转成明确的ACL。4.3 双机部署防火墙做OSPF时的同步点双机部署是防火墙项目里绕不开的部分。ASA双机热备的标准做法是配置Failover。主设备和备用设备之间用专用链路连接系统状态、连接表和运行配置实时同步。以下是一对主备机的最小配置主设备failover failover lan unit primary failover lan interface FAILOVER GigabitEthernet0/2 failover interface ip FAILOVER 10.255.255.1 255.255.255.252 standby 10.255.255.2 failover polltime 1 failover replication http备用设备failover failover lan unit secondary failover lan interface FAILOVER GigabitEthernet0/2 failover interface ip FAILOVER 10.255.255.2 255.255.255.252 standby 10.255.255.1重点在于failover interface ip这一行它给心跳接口配置了一对虚拟地址主设备使用10.255.255.1备用设备使用10.255.255.2双方各自把对方的地址作为standby地址。只有主备配置方向相反Failover状态才能建立起来。双机部署防火墙做OSPF时需要明确一个机制OSPF进程只会在Active设备上运行。主备切换后OSPF状态会跟着转移到新的Active设备因此不需要像路由器那样让两台防火墙同时建立OSPF邻居。OSPF配置写在主设备上通过Failover同步到备用设备。链路检测是双机切换的关键环节。除了心跳链路还要监测业务接口monitor-interface inside monitor-interface outside当主设备的outside接口物理链路中断Failover会触发切换把流量引导到备用设备。如果漏掉monitor-interface配置outside接口断掉后主设备仍认为自己是Active但内外流量已经不通。查看监测状态用show monitoring interface当poll结果异常时故障转移才会真正执行。双机环境下的默认路由建议写静态路由避免OSPFlearned默认路由影响切换判断。配置如下route outside 0.0.0.0 0.0.0.0 203.0.113.254这条路由会随Failover同步到备用设备在Active切换时自动使用。如果同时运行动态路由协议可以通过管理距离调整静态路由优先避免备用设备在切换瞬间出现路由黑洞。5. 借鉴配置手册时值得留下的三个落地技巧5.1 批量抓配置并留档手册里的命令只能作为参考生产环境的实际配置需要及时留存。用Python的netmiko库可以批量登录多台ASA把running-config抓下来保存成文件这是最直接的落地方式from netmiko import ConnectHandler device { device_type: cisco_asa, ip: 192.0.2.10, username: netadmin, password: ChangeMe, } ssh ConnectHandler(**device) cfg ssh.send_command(show running-config) with open(asa-backup.cfg, w) as f: f.write(cfg) ssh.disconnect()这段脚本里device_type指定为cisco_asa让netmiko按ASA的CLI交互方式发送命令send_command执行show running-config并等待完整输出最终把输出写入文件。保存后的配置可以拿来做内容对比也可以作为变更回退的基础。如果环境不允许安装netmiko使用paramiko也能实现只是代码量会多一点。5.2 配置生效前的三个show变更配置之前先执行三个命令确认基线状态show route show access-list show nat detailshow route看默认路由和直连路由是否完整show access-list看ACL命中次数命中次数会提示当前哪些规则在发挥作用show nat detail看翻译计数能及时发现NAT规则是否匹配到流量。这三个命令的输出要在变更前、变更后各保存一份用文本对比差异远比凭记忆判断可靠。5.3 用diff做变更前后的对比抓下来的配置文件不能只躺在目录里。每次变更后把变更前后的配置做一次diff会发现很多不起眼但重要的问题比如ACL顺序被调整、接口nameif被误删、security-level变化。命令如下diff asa-backup-before.cfg asa-backup-after.cfgdiff输出中带符号的是变更前的行带符号的是变更后的行。重点查看与本次目标无关的变化这类变化往往是误操作或模拟器自动写入的默认配置。确认无误后再进入防火墙执行write memory把变更固化到startup-config。备份、对比、保存这三个动作比翻手册更有实际价值也能让旧手册在ASA时代继续发挥排障作用。本文还有配套的精品资源点击获取