DTP 自协商成 trunk
Cisco 口默认可能是 dynamic auto/desirable。对端发 DTP,接入口变成 trunk,攻击者打任意 VLAN 标签进网。华为 / H3C 没有 DTP(Cisco 私有)。缓解:口显式 access 或 trunk,并 switchport nonegotiate。
全书第 13 章讲攻击原理。这一页补防御侧:二层护栏怎么卡死、ACL 与状态墙差在哪、AAA 为什么两套协议、证书链在 TLS 里实际验什么。写法按 CCIE R&S / EI 的深度——机理、权衡、排障链,命令只是证据。
下列 CLI 为自写教学片段,不是某厂商文档整段摘录。接口名按各家习惯:Cisco Gi0/1、华为 GigabitEthernet0/0/1、H3C GigabitEthernet1/0/1。安全特性语法随平台/版本漂移,拿不准处已标「以设备版本为准」。查看配置:Cisco show running-config;华为 / H3C 都是 display current-configuration(不是 show)。保存:Cisco end + write;华为 / H3C quit + save。
接入交换机是攻击者离你最近的设备。CAM 表、ARP 缓存、DHCP 租约、VLAN 标签、STP 根桥——每一张「默认信任邻居」的表,都对应一种经典攻击和一套必须先开的护栏。
| 威胁 | 被打的状态 | 机制 | 护栏 |
|---|---|---|---|
| MAC 洪泛 | CAM / MAC 表溢出后未知单播泛洪 | 伪造源 MAC 灌满 ASIC 表 | 端口安全(限 MAC 数) |
| ARP 欺骗 / 毒化 | 主机与网关 ARP 缓存 | 无认证应答,冒充网关或主机 | DAI(依赖 DHCP Snooping 绑定表) |
| DHCP 欺骗 / 饿死 | 租约与默认网关/DNS | 假服务器抢 Offer;耗尽地址池 | DHCP Snooping + 信任上行 |
| VLAN 跳跃 | 802.1Q 标签 / DTP 状态 | DTP 自协商成 trunk;双标签借 native VLAN | 关 DTP、改并标记 native VLAN |
| STP 抢根 / 单向环路 | 根桥、端口角色、MAC 老化 | 更优 BPDU;单向光纤让备口转指定 | BPDU Guard / Root Guard / Loop Guard / UDLD |
需求。交换机按源 MAC 学习、按目的 MAC 转发。CAM 是有限硬件表(老盒几千到几万条)。攻击者从接入口喷随机源 MAC,表满之后目的未知的单播被泛洪到 VLAN 内所有口——二层变成集线器,顺带为嗅探铺路。
机理。端口安全把「这个口允许出现的源 MAC」做成硬上限。超过上限按 violation 处理。Cisco 三种动作必须分清:
protect: silently 丢超限帧,不计数、不告警——排障时像没发生。restrict:丢帧 + 计数 / syslog / SNMP。口仍 up。shutdown(Cisco 默认):口进 err-disable,要 errdisable recovery 或手工 shutdown / no shutdown。默认 maximum 1。PC + IP 电话是两个 MAC,必须至少 2,或用 multi-domain 把语音 VLAN 拆开。sticky 把学到的 MAC 写回运行配置,重载前要 write 才持久。
! access 口,最多 2 个 MAC,超限只丢+记日志 interface GigabitEthernet0/1 switchport mode access switchport access vlan 10 switchport port-security switchport port-security maximum 2 switchport port-security mac-address sticky switchport port-security violation restrict spanning-tree portfast spanning-tree bpduguard enable ! 验证 show port-security interface Gi0/1 show port-security address show interfaces status err-disabled
# VRP:protect-action = restrict | protect | shutdown interface GigabitEthernet0/0/1 port link-type access port default vlan 10 port-security enable port-security max-mac-num 2 port-security protect-action restrict port-security mac-address sticky stp edged-port enable # 验证 display port-security interface GigabitEthernet0/0/1 display current-configuration interface GigabitEthernet0/0/1
# Comware:port-security enable 在系统视图;接口下再设 port-mode。以设备版本为准 port-security enable interface GigabitEthernet1/0/1 port link-type access port access vlan 10 port-security max-mac-count 2 port-security port-mode autolearn port-security intrusion-mode blockmac stp edged-port enable # disableport ≈ Cisco shutdown;blockmac ≈ protect/restrict display port-security interface GigabitEthernet1/0/1 display current-configuration interface GigabitEthernet1/0/1
端口安全便宜、ASIC 就能做,但管不住 ARP 内容(合法 MAC 仍可发假 ARP)。无线、虚拟机热迁移、桌面虚拟化会让 MAC 飘口。今日园区更常把 802.1X 当主控、端口安全当「认证失败仍要限 MAC」的托底。不要在 trunk / EtherChannel 成员口上随手开端口安全。
需求。DHCP 无普遍认证(见 图谱 · DHCP、全书 6.4)。假服务器用更快的 Offer 把网关/DNS 指到攻击者;饿死则是耗尽合法地址池。
机理。交换机把口分成 trusted / untrusted。untrusted 口丢弃来自服务器的报文(Offer / ACK / NAK,以及 Leasequery 的应答 LeaseActive / LeaseUnassigned / LeaseUnknown),只允许 Discover / Request / Decline / Release / Inform。DHCP Leasequery 本身是查询请求,不是「来自服务器」。从合法交互里抽出绑定:MAC、IP、VLAN、接口、租期。这张表是 DAI 和 IPSG 的真源——没有绑定表就开 DAI,等于把全 VLAN 的 ARP 掐死。
Option-82(Relay Agent Information)是另一只坑:Cisco 开 snooping 后默认往 Discover 里插 option 82;若 DHCP 服务器或中继不认,客户端永远拿不到地址。对策是关插入,或让服务器按策略接受。
ip dhcp snooping
ip dhcp snooping vlan 10,20
! 服务器不认 option 82 时先关插入
no ip dhcp snooping information option
interface GigabitEthernet0/24
description UPLINK-to-dist
ip dhcp snooping trust
interface GigabitEthernet0/1
ip dhcp snooping limit rate 15
show ip dhcp snooping binding
show ip dhcp snooping statistics
# 以设备版本为准:有的写在 VLAN 下,有的写 dhcp snooping enable vlan
dhcp enable
dhcp snooping enable
vlan 10
dhcp snooping enable
interface GigabitEthernet0/0/24
dhcp snooping trusted
interface GigabitEthernet0/0/1
dhcp snooping check dhcp-rate enable
dhcp snooping check dhcp-rate 15
display dhcp snooping user-bind all
display dhcp snooping
dhcp snooping enable vlan 10 dhcp snooping enable interface GigabitEthernet1/0/24 dhcp snooping trust interface GigabitEthernet1/0/1 dhcp snooping rate-limit 15 display dhcp snooping binding display dhcp snooping
需求。ARP 无认证(RFC 826、全书 4.5)。攻击者单播/广播假应答,把网关 IP 指到自己 MAC,流量被劫持。
机理。Dynamic ARP Inspection 在 untrusted 口截获 ARP Request/Reply,用 DHCP Snooping 绑定(或静态 ARP ACL)核对「发送方 IP ↔ 发送方 MAC ↔ 口 ↔ VLAN」。对不上就丢,可再开 src-mac / dst-mac / ip 一致性检查。trusted 口(上行、互联)不检查——否则会把合法网关的免费 ARP 也丢掉。
静态地址、打印机、集群 VIP 必须先做静态绑定,再开 DAI。速率限制要给:ARP 扫描或 Windows 开机风暴会把口打进 err-disable。
ip arp inspection vlan 10 ip arp inspection validate src-mac dst-mac ip interface GigabitEthernet0/24 ip arp inspection trust ! 静态打印机:ARP ACL。混合静态+DHCP 不要加 static arp access-list STATIC-PRINT permit ip host 10.10.10.50 mac host 0000.5e00.5350 ! static 把 ACL 隐式 deny 当显式 deny,不再回退查 DHCP Snooping 绑定,其余 DHCP 主机 ARP 会被黑洞。ACL 穷举全部静态映射时才可加 static ip arp inspection filter STATIC-PRINT vlan 10 show ip arp inspection statistics show ip arp inspection vlan 10
# VRP 常用 user-bind + arp anti-attack check user-bind user-bind static ip-address 10.10.10.50 mac-address 0000-5e00-5350 interface GigabitEthernet0/0/1 vlan 10 interface GigabitEthernet0/0/1 arp anti-attack check user-bind enable # 上行 Gi0/0/24 不做检查,避免把合法网关的免费 ARP 丢掉 display user-bind all display arp anti-attack check user-bind interface GigabitEthernet0/0/1
vlan 10 arp detection enable interface GigabitEthernet1/0/24 arp detection trust user-bind static ip-address 10.10.10.50 mac-address 0000-5e00-5350 vlan 10 interface GigabitEthernet1/0/2 display arp detection display arp detection statistics
两条独立路径,别混成一种「VLAN 攻击」。
Cisco 口默认可能是 dynamic auto/desirable。对端发 DTP,接入口变成 trunk,攻击者打任意 VLAN 标签进网。华为 / H3C 没有 DTP(Cisco 私有)。缓解:口显式 access 或 trunk,并 switchport nonegotiate。
攻击者在 access 口发出「外层 = 干道 native VLAN、内层 = 目标 VLAN」。交换机当 untagged 剥掉外层,内层标签被带上 trunk。前提是攻击者所在 VLAN 恰好等于 trunk 的 native。缓解:native 不用 1、不承载用户、最好 vlan dot1q tag native。
vlan 99 name UNUSED-NATIVE interface GigabitEthernet0/1 switchport mode access switchport access vlan 10 switchport nonegotiate interface GigabitEthernet0/24 switchport mode trunk switchport trunk native vlan 99 switchport trunk allowed vlan 10,20,30 switchport nonegotiate vlan dot1q tag native show interfaces trunk show dtp interface Gi0/1
# 无 DTP。access 用 port default vlan,不是 access vlan
vlan batch 10 20 30 99
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
interface GigabitEthernet0/0/24
port link-type trunk
port trunk pvid vlan 99
port trunk allow-pass vlan 10 20 30
display port vlan
display current-configuration interface GigabitEthernet0/0/24
vlan 10 vlan 99 interface GigabitEthernet1/0/1 port link-type access port access vlan 10 interface GigabitEthernet1/0/24 port link-type trunk port trunk pvid vlan 99 port trunk permit vlan 10 20 30 display port trunk display current-configuration interface GigabitEthernet1/0/24
威胁。接入口收到更优 BPDU,本交换机会认贼作父,整网拓扑被拽歪,流量经攻击者桥接。更隐蔽的是单向光纤:备口收不到 BPDU,Max Age 后转 Designated,环路形成。
默认 Hello 2 s、Max Age 20 s、Forward Delay 15 s。非边缘口从 Blocking 到 Forwarding 要听 15 + 学 15 ≈ 30 s。拓扑变化时,下游发 TCN 向根走;根在后续配置 BPDU 里置 TC。各桥把 MAC 老化从 300 s 临时改成 Forward Delay(15 s),用泛洪换收敛——大 VLAN 里这就是广播风暴的温床。
点到点指定口不再傻等 30 s,而是握手:
指定口以 Discarding 发出 proposal(BPDU 里 Proposal 位置位),声称自己是该段指定。
对端把所有非边缘指定口立刻打成 Discarding(切断旧转发),保证本桥不会在握手中途成环。
对端回 agreement。本端指定口立即 Forwarding。边缘口(PortFast / edged-port)不参与 sync。
RSTP 角色:Root / Designated / Alternate(通向根的备份,Discarding)/ Backup(同一网段的备份指定)。状态只剩 Discarding / Learning / Forwarding。TC 不再绕根走一圈:发起桥立即冲刷非边缘口 MAC,并在 2×Hello(TC While)内持续通告 TC。收敛按秒计而不是 30–50 s。
Cisco 园区常用 rapid-pvst(每 VLAN 一棵 RSTP)。华为默认 MSTP(多实例映射 VLAN),H3C 同样以 MSTP/RSTP 为主——不要假设对端是 PVST。
spanning-tree mode rapid-pvst spanning-tree vlan 10 root primary spanning-tree vlan 20 root secondary spanning-tree portfast default spanning-tree portfast bpduguard default interface GigabitEthernet0/24 spanning-tree guard root interface GigabitEthernet1/0/25 spanning-tree guard loop udld enable show spanning-tree vlan 10 show spanning-tree inconsistentports
# 华为默认 MSTP;bpdu-protection 是全局开关,配合 edged-port
stp mode rstp
stp root primary
stp bpdu-protection
interface GigabitEthernet0/0/1
stp edged-port enable
interface GigabitEthernet0/0/24
stp root-protection
interface GigabitEthernet0/0/25
stp loop-protection
display stp
display stp abnormal-interface
# Comware:bpdu-protection 常见为系统视图、无 enable;平台语法有别,以设备文档为准
stp mode rstp
stp root primary
stp bpdu-protection
interface GigabitEthernet1/0/1
stp edged-port enable
interface GigabitEthernet1/0/24
stp root-protection
interface GigabitEthernet1/0/25
stp loop-protection
display stp
display stp abnormal-port
| 护栏 | 钉在哪 | 触发后怎样 | 别钉错 |
|---|---|---|---|
| BPDU Guard | 边缘 / PortFast 接入口 | 收到任何 BPDU → err-disable | 钉到上行会把自己拆掉 |
| Root Guard | 「根不该从这里来」的口(面向接入的汇聚下行) | 收到更优 BPDU → root-inconsistent | 钉到真正通向根的口会拒收合法根 |
| Loop Guard | 根口 / Alternate 的光纤或聚合 | BPDU 停了不转 Designated,进 loop-inconsistent | 与 Root Guard 同口互斥于多数平台 |
| UDLD | 光纤互联 | 侦测单向;aggressive 模式下失联 err-disable | 与 Loop Guard 互补,不是替代 STP |
LACP 是 IEEE 标准(802.1AX / 原 802.3ad);PAgP 是 Cisco 私有。成员口必须同速、同双工、同 VLAN 集、同 native、同 STP 代价。哈希键选错会出现「聚合 up 但一条链路被打爆」——这叫极化:每跳都用同一套 src-dst-ip 哈希,流永远走同一成员。
interface range GigabitEthernet0/1-2 channel-group 1 mode active interface Port-channel1 switchport mode trunk switchport trunk allowed vlan 10,20,30 show etherchannel summary show etherchannel load-balance
interface Eth-Trunk1 port link-type trunk port trunk allow-pass vlan 10 20 30 mode lacp-static interface GigabitEthernet0/0/1 eth-trunk 1 interface GigabitEthernet0/0/2 eth-trunk 1 display eth-trunk 1
interface Bridge-Aggregation1 port link-type trunk port trunk permit vlan 10 20 30 link-aggregation mode dynamic interface GigabitEthernet1/0/1 port link-aggregation group 1 interface GigabitEthernet1/0/2 port link-aggregation group 1 display link-aggregation verbose Bridge-Aggregation 1
Cisco 私有 HSRP(UDP 1985;v1 组播 224.0.0.2,虚 MAC 0000.0c07.acXX;v2 组播 224.0.0.102,虚 MAC 0000.0c9f.fXXX)。默认 Hello 3 s / Hold 10 s,优先级 100,默认不抢占。华为 / H3C 没有 HSRP,一律用标准 VRRP(IP 协议号 112,组播 224.0.0.18,虚 MAC 0000.5e00.01XX,通告默认 1 s,默认抢占)。Cisco 盒子两种都能跑,跨厂商必须 VRRP。
和 STP 对齐。HSRP/VRRP 主与该 VLAN 的 STP 根若不是同一台,流量先二层绕到根,再三层绕回来——次优路径,排障时像「网关活着但慢」。要么把优先级和 STP root primary 配在同一台,要么把接入做成 routed access,把 STP 从用户 VLAN 里拿掉。
! Cisco SVI;跨厂商改 vrrp 1 ip ... interface Vlan10 ip address 10.10.10.2 255.255.255.0 standby version 2 standby 10 ip 10.10.10.1 standby 10 priority 110 standby 10 preempt ! 教学用 0=明文(running-config 可见,有风险);7=后面已是 Type-7 密文,勿把明文塞进 key-string 7 standby 10 authentication md5 key-string 0 <local-secret> show standby brief
# 华为 SVI 叫 Vlanif,无 HSRP
interface Vlanif10
ip address 10.10.10.2 255.255.255.0
vrrp vrid 10 virtual-ip 10.10.10.1
vrrp vrid 10 priority 110
display vrrp verbose
# H3C SVI 叫 Vlan-interface
interface Vlan-interface10
ip address 10.10.10.2 255.255.255.0
vrrp vrid 10 virtual-ip 10.10.10.1
vrrp vrid 10 priority 110
display vrrp verbose
CPU 升高、MAC 表疯狂翻动、同一 VLAN 内间歇性通断;show spanning-tree 里本该 Alternate 的口变成 Designated Forwarding。
先看接口光功率 / CRC / 单通计数,再看该口最后一次收到 BPDU 的时间。对端仍在转发,本端已听不到 BPDU。打开 Loop Guard 后口会进 loop-inconsistent 而不是成环;UDLD aggressive 会直接 err-disable。
光纤单芯坏或收发接反,BPDU 只向一个方向走。STP 把「听不到更优 BPDU」理解成「我应该当指定」,环路形成。护栏是 Loop Guard + UDLD,不是再调 Hello 定时器。
一端 Port-channel / Eth-Trunk up,对端成员单独成口;或协议显示 suspended / unselected。
对两端的 mode(active/active 或一边 passive)、速率双工、allowed VLAN、native VLAN、STP 模式逐项 diff。Cisco on 与 active 不能组;华为 lacp-static 对 H3C 必须是 dynamic(都是 LACP)。
LACP 要求两端都跑协议且参数一致。PAgP 是 Cisco 私有,对华为 / H3C 无效。
端口安全管「几个 MAC」,802.1X 管「这台机器/这个用户是谁」。身份不在交换机上,交换机只做认证器。
终端上的 802.1X 客户端。与交换机之间走 EAPoL,EtherType 0x888E,不出 VLAN、不经 IP。
未授权时只放 EAPoL(以及通常的 STP / LLDP / EAPOL-Start)。把 EAP 载荷重新封装进 RADIUS Access-Request 送给服务器。
几乎总是 RADIUS(UDP 1812)。EAP 在 RADIUS 里用 EAP-Message 属性(RFC 3579)来回挑战,直到 Accept / Reject。
EAP 本身是 RFC 3748 定义的框架:Request / Response / Success / Failure,具体算法是 Type 号插进去的方法。站内没有 RFC 3748 精读页,方法选型直接看下面;证书侧走 TLS 1.3 与 PKI。
| EAP 方法 | 外层 | 内层 | 互认证 | 什么时候选 |
|---|---|---|---|---|
| EAP-TLS | TLS | 无(证书就是凭证) | 是(双方证书) | 有 PKI、机器证书;最干净也最重 |
| PEAP | TLS(验服务器证) | 常 EAP-MSCHAPv2 | 视内层;用户侧多是口令 | 有 AD 口令、不想给每台终端发证 |
| EAP-TTLS | TLS | PAP / CHAP / MSCHAPv2 / EAP | 视内层 | 要在隧道里跑非 EAP 口令协议 |
| EAP-FAST | TLS(PAC) | 多种 | 视部署 | Cisco 历史方案;新网优先 TLS/PEAP |
| EAP-MD5 | 无隧道 | 挑战哈希 | 否 | 不要用于接入 |
交换机还常叠:MAB(用 MAC 当用户名骗过 RADIUS,给打印机)、Guest VLAN、Critical VLAN(RADIUS 全死时的逃生阀)、多域(数据 + 语音)。authentication order 是先试谁,authentication priority 是两者都成功时谁赢——先 MAB 再 802.1X 会让会说话的终端永远停在 MAB,除非 priority 把 dot1x 抬上去。
aaa new-model
aaa authentication dot1x default group radius
aaa authorization network default group radius
dot1x system-auth-control
radius server ISE
address ipv4 10.255.1.10 auth-port 1812 acct-port 1813
! 教学用 0=明文(配置可见,有风险);7=后面已是 Type-7 密文,勿塞明文
key 0 <shared>
interface GigabitEthernet0/1
switchport mode access
authentication port-control auto
authentication host-mode multi-domain
authentication order dot1x mab
authentication priority dot1x mab
mab
dot1x pae authenticator
show authentication sessions interface Gi0/1 details
show aaa servers
# 语法随 VRP / 云管版本差很大,以设备为准
dot1x enable
dot1x authentication-method eap
radius-server template ISE
radius-server shared-key cipher <shared>
radius-server authentication 10.255.1.10 1812
radius-server accounting 10.255.1.10 1813
aaa
authentication-scheme DOT1X
authentication-mode radius
authorization-scheme DOT1X
authorization-mode radius
accounting-scheme DOT1X
accounting-mode radius
domain default
authentication-scheme DOT1X
authorization-scheme DOT1X
accounting-scheme DOT1X
radius-server ISE
interface GigabitEthernet0/0/1
dot1x enable
dot1x port-method mac
display dot1x interface GigabitEthernet0/0/1
display radius-server configuration
# 语法随 Comware 版本差,以设备为准
dot1x
dot1x authentication-method eap
radius scheme ISE
primary authentication 10.255.1.10 1812
primary accounting 10.255.1.10 1813
key authentication cipher <shared>
key accounting cipher <shared>
domain system
authentication lan-access radius-scheme ISE
authorization lan-access radius-scheme ISE
accounting lan-access radius-scheme ISE
interface GigabitEthernet1/0/1
dot1x
dot1x port-method macbased
display dot1x interface GigabitEthernet1/0/1
display radius scheme ISE
802.1X 的代价是终端生态:打印机、摄像头、哑交换机下挂的 PC。MAB 把身份退化成 MAC,等于弱口令,必须配合 DHCP Snooping / DAI / 下载 ACL 收口。Critical VLAN 要假设「认证基础设施挂了业务也不能全黑」,但也不能大到变成旁路。
超管口能学到 MAC,但 EAPoL 有 Start 无 Success;用户说「网线插了没网」。
① 口上抓 ether proto 0x888e,确认 supplicant 是否在说话。② show aaa servers 看 RADIUS 是否 dead / RTT 爆炸。③ 服务器日志看 EAP 方法是否被拒(客户端 PEAP、策略只要 TLS)。④ 证书:PEAP 外层要验服务器证,系统时间错、中间 CA 没下到终端,会在 TLS 握手死掉——这已经不是二层问题。
最常见是 RADIUS 不可达(UDP 1812 被管线 ACL 丢掉)或 EAP 方法/证书链不一致。交换机只是翻译器,它 Accept 不了它看不懂的 EAP。
ACL 是无状态的有序列表:从上往下第一次命中就停。Cisco 表尾有一条写不出来的 deny any;华为 traffic-filter / H3C packet-filter 未命中默认放行,末尾规则要自己写。它不是防火墙,但几乎所有防火墙策略、QoS 分类、NAT 兴趣流、路由过滤,底层都还是这张表。
| Cisco IOS | 华为 VRP / H3C | |
|---|---|---|
| 只匹配源 | 标准:1–99、1300–1999 | 基本:2000–2999 |
| 五元组 | 扩展:100–199、2000–2699 | 高级:3000–3999 |
| 命名 | ip access-list standard|extended NAME | 命名 ACL / 仍用 rule 号插入 |
| 下发到口 | ip access-group NAME in|out | 华为 traffic-filter;H3C packet-filter |
表示连续前缀时,通配符是子网掩码按位取反:0 = 这一位必须相等,1 = 无所谓。不是「再写一遍掩码」。算法:wildcard = 255.255.255.255 − subnet_mask(等价于按位 XOR)。非连续 wildcard(如 0.0.0.254)没有对应的合法子网掩码,不能用「掩码取反」反推。
| 要匹配的前缀 | 子网掩码 | 通配符 | 写法 |
|---|---|---|---|
| 单主机 203.0.113.10 | 255.255.255.255 | 0.0.0.0 | host 203.0.113.10 |
| 192.168.10.0/24 | 255.255.255.0 | 0.0.0.255 | 192.168.10.0 0.0.0.255 |
| 10.0.0.0/8 | 255.0.0.0 | 0.255.255.255 | 10.0.0.0 0.255.255.255 |
| 172.16.32.0/20 | 255.255.240.0 | 0.0.15.255 | 240 的反码是 15 |
| 192.168.1.0/27 | 255.255.255.224 | 0.0.0.31 | 192.168.1.0 0.0.0.31 |
| 任意 | 0.0.0.0 | 255.255.255.255 | any |
匹配 172.16.16.0–172.16.31.255:这是 /20,掩码 255.255.240.0,通配符 0.0.15.255,ACE 写 172.16.16.0 0.0.15.255。写成 0.0.31.255 会把 172.16.0.0/19 整块放进来。匹配奇数主机用 192.168.1.1 0.0.0.254(最低有效位为 1、其余 7 bit 通配)——能写不代表该写,排障极痛。
deny any;华为 traffic-filter / H3C packet-filter 缺省放行未命中报文(H3C 可在系统视图用 packet-filter default deny 改全局缺省动作,不是单接口开关,且受平台/版本支持限制),所以末尾必须自己写规则——示例里的 rule 20 deny ip 不是装饰。排障时先 show ip access-lists 看命中计数。! 标准:禁止 192.168.10.0/24 访问本路由器的这条出接口网段 access-list 10 deny 192.168.10.0 0.0.0.255 access-list 10 permit any interface GigabitEthernet0/0 ip access-group 10 out ! 扩展:在靠近源的入向丢掉去 203.0.113.10 以外的流量 ip access-list extended WAN-IN permit tcp any host 203.0.113.10 eq 443 permit tcp any host 203.0.113.10 eq 80 permit icmp any host 203.0.113.10 echo-reply deny ip any any log interface GigabitEthernet0/0 ip access-group WAN-IN in show ip access-lists WAN-IN show ip interface Gi0/0 | include access
acl number 2000 rule 5 deny source 192.168.10.0 0.0.0.255 rule 10 permit interface GigabitEthernet0/0/1 traffic-filter outbound acl 2000 acl number 3000 rule 5 permit tcp destination 203.0.113.10 0 destination-port eq 443 rule 10 permit tcp destination 203.0.113.10 0 destination-port eq 80 rule 15 permit icmp destination 203.0.113.10 0 icmp-type echo-reply rule 20 deny ip interface GigabitEthernet0/0/0 traffic-filter inbound acl 3000 display acl 3000 display traffic-filter applied-record
acl number 2000 rule 0 deny source 192.168.10.0 0.0.0.255 rule 5 permit interface GigabitEthernet1/0/1 packet-filter 2000 outbound acl number 3000 rule 0 permit tcp destination 203.0.113.10 0 destination-port eq 443 rule 5 permit tcp destination 203.0.113.10 0 destination-port eq 80 rule 10 deny ip interface GigabitEthernet1/0/1 packet-filter 3000 inbound display acl 3000 display packet-filter interface
ACL 不跟踪连接:放行入向 TCP 80 不等于回程 ACK 自动合法,回程要另写或改用状态墙 / established(只看 ACK/RST 位,不是真状态机)。ACE 顺序错会「看起来配了没生效」。不要用 ACL 冒充 IPS——它不看载荷。
ACL 回答「这张包像不像允许的形状」。状态墙回答「这张包是不是我见过的那次对话的续集」。NGFW 再问「这是不是 Slack,是不是财务部的人」。
五元组 + 方向。快、可硬件化、无会话表。代价:必须成对写回程,对分片、动态端口(FTP 数据、SIP)无能为力。Cisco ACL、华为 traffic-filter 属于这一层。
看到合法的前向包(TCP SYN、UDP 首包)就在状态表里开一条流,回程自动放。TCP 按状态机(SYN-SENT → ESTABLISHED → FIN/RST);UDP/ICMP 用空闲计时器模拟虚连接。家用 NAT 路由器默认就是「内出回程放、外入默认拒」。
在状态之上叠 App-ID(TLS 里看 SNI / 解密后再看)、User-ID、IPS 签名、文件类型。解密是性能与隐私的双重税,不是默认打开就赢。
Zone-based 把接口编进安全域,策略写在 zone-pair(源域 → 目的域)上,而不是散落在每条口的 ACL。Cisco ZBFW 用 class-map / policy-map;ASA 用 security-level 0–100(高 → 低默认放,低 → 高要显式)。华为 USG / H3C SecPath 同样是域间策略,不是 IOS 那种接口 ACL。
DMZ 是「互联网可以碰到、但不能直接进内网」的隔离区。经典三腿:untrust / dmz / trust。Web 在 DMZ,数据库在 trust,只放 DMZ→trust 的数据库端口,不放 untrust→trust。双防火墙(外墙 + 内墙)比单箱三腿多一个独立故障域,代价是多一跳状态与更多不对称风险。
ACL 不在乎包从哪条口回来。状态墙在乎:回程必须打中建状态的那台箱的那张表。ECMP、双出口、策略路由把去程和回程拆开,表现是「SYN 出去了、SYN-ACK 在墙上看不到、客户端重传」。这不是 ACL 写错。对策:防火墙集群做状态同步、把对称路径设计进去、或把该流改成无状态旁路(等于放弃检查)。
内网访问分支偶尔建连失败;抓包在服务器网卡上看得到 SYN-ACK,客户端看不到;防火墙命中计数只涨「首包」。
去程 traceroute 走 FW-A,回程走 FW-B。FW-B 没有这条半连接,丢 SYN-ACK。查两边会话表、下一跳、是否开了不对称绕过或集群 sync。
状态与路径绑定。先修对称(或 HA sync),再谈策略细不细。
全书 6.3 已讲地址复用。这里只补一句安全结论:NAT 改写的是地址,不是权限。
隐藏 RFC 1918 拓扑能降低被直接扫描的概率,但:UPnP / PCP / 应用层 ALG 会自己打洞;恶意代码从内往外连,NAT 会老老实实建映射;IPv6 双栈主机根本不走你的 NAT44。把 NAT 当安全边界,是把「地址不够用时的权宜」误认成策略引擎。
IPv6 侧的 NAT64 是协议翻译(IPv6 过渡),目的不是藏前缀。不要把 NAT44 的「安全感」搬到 NAT64 上。
谁能登录、登录后能敲哪条命令、事后能否还原操作——三件事可以拆开,也可以糊在一起。RADIUS 和 TACACS+ 的本质差别就在这里,不在「哪个更新」。
你是谁。口令、证书、令牌。失败就不该进入授权。
你能做什么。exec 级别、命令集、VLAN、ACL 名。802.1X 下发 VLAN 也是授权。
你做了什么。起止时间、命令记录、流量字节。出了事靠它,不靠回忆。
| RADIUS | TACACS+ | |
|---|---|---|
| 传输 | UDP 1812 认证 / 1813 计费 (历史 1645 / 1646 仍能见到) | TCP 49 |
| 加密范围 | 经典 UDP RADIUS(非 RadSec)只保护口令字段;用户名、AV 对其余明文 | 共享密钥混淆/保护整个报文 body(头仍可见;不是现代 AEAD) |
| AAA 模型 | 认证与授权耦合在同一次 Access-Accept;计费另包 | 认证 / 授权 / 审计三次会话,可拆开 |
| 属性 | IETF AV 对(RFC 2865/2866),厂商 VSA | TACACS+ AV 对;按命令授权是长项 |
| 出身 | IETF 标准,接入 / 802.1X / VPN 用户身份的默认选择 | Cisco 起源,现多厂商可对接;设备管理面常用 |
| 丢包行为 | UDP,要靠重传与超时;链路差时服务器容易被标 dead | TCP,会话清晰,防火墙要放长连接 |
选型。终端入网、无线、802.1X、VPN 用户 → RADIUS(ISE / FreeRADIUS / 华为 Agile Controller)。网络设备管理员敲 CLI → TACACS+(或华为 HWTACACS),因为可以按命令授权:有人只能 display,有人才能 save。RADIUS 不是做不好设备登录,是做不好「每一条命令再问一次服务器」。
本地 vs 集中。本地用户是服务器全死时的逃生舱,应极少、极强、只从 OOB 进来。日常账号全部进 AAA;否则离职回收会变成「全世界都有 enable secret」。
aaa new-model tacacs server HQ address ipv4 10.255.1.20 ! 教学用 0=明文(配置可见,有风险);7=后面已是 Type-7 密文,勿塞明文 key 0 <shared> aaa group server tacacs+ TAC server name HQ aaa authentication login VTY group TAC local aaa authorization exec VTY group TAC local aaa authorization commands 15 VTY group TAC local aaa accounting commands 15 VTY start-stop group TAC ip tacacs source-interface Loopback0 ! exec 授权 ≠ 逐命令授权;commands / accounting 必须在 line 下再绑一次 line vty 0 4 login authentication VTY authorization exec VTY authorization commands 15 VTY accounting commands 15 VTY transport input ssh
# 华为叫 HWTACACS,协议仍是 TACACS+ 语义。语法随 VRP 版本差,以设备为准
hwtacacs-server template TAC
hwtacacs-server authentication 10.255.1.20
hwtacacs-server authorization 10.255.1.20
hwtacacs-server accounting 10.255.1.20
hwtacacs-server shared-key cipher <shared>
aaa
authentication-scheme VTY
authentication-mode hwtacacs local
authorization-scheme VTY
authorization-mode hwtacacs local
authorization cmd
accounting-scheme VTY
accounting-mode hwtacacs
domain default_admin
authentication-scheme VTY
authorization-scheme VTY
accounting-scheme VTY
hwtacacs-server TAC
user-interface vty 0 4
authentication-mode aaa
protocol inbound ssh
display hwtacacs-server template
# 语法随 Comware 版本差,以设备为准
hwtacacs scheme TAC
primary authentication 10.255.1.20
primary authorization 10.255.1.20
primary accounting 10.255.1.20
key authentication cipher <shared>
key authorization cipher <shared>
key accounting cipher <shared>
domain system
authentication login hwtacacs-scheme TAC local
authorization login hwtacacs-scheme TAC local
authorization command hwtacacs-scheme TAC local
accounting login hwtacacs-scheme TAC
user-interface vty 0 4
authentication-mode scheme
protocol inbound ssh
display hwtacacs scheme
Cisco:show aaa servers、test aaa group TAC admin <pass> legacy、debug tacacs(生产慎用)。华为 / H3C:display hwtacacs-server / display hwtacacs scheme,看状态与时延。UDP 1812 被中间 ACL 丢掉时,RADIUS 表现为超时后回落到 local——如果你没写 local,整箱拒登。
站点之间要的是稳定的三层邻接;人在酒店要的是能穿过只放 443 的防火墙。两者都叫 VPN,封装、认证和排障点完全不同。
| 类型 | 数据面 | 控制面 / 端口 | 典型用途 |
|---|---|---|---|
| 站点到站点 IPsec | ESP(IP 协议 50);少用 AH(51) | IKEv2 UDP 500;NAT-T 时 UDP 4500 | 分支 ↔ 总部,隧道模式装整包 |
| 远程接入 SSL VPN | TLS 里再装 IP / 应用代理 | 常见 TCP 443 | 员工、承包商;易穿防火墙 |
| DMVPN | mGRE + IPsec | NHRP 解析 spoke 公网地址 | 一句话:中心挂 mGRE,分支动态建 spoke-spoke,不必全互联配静态加密图 |
| WireGuard | UDP 上 AEAD | 常用 UDP 51820,可改 | 现代轻量;算法不可协商 |
| OpenVPN | 自定义记录 + TLS 控信道 | 常用 UDP 1194;迫不得已 TCP 443 | tun 三层 / tap 二层;TCP 套 TCP 会放大重传 |
IPsec 排障先分清两层 SA:IKE SA 是控制通道,Child / IPsec SA 才是 ESP。抓物理口只能看见 SPI 与密文;明文在隧道虚口(Cisco VTI / 主机 utun)。AH 认证外层地址,过 NAT 必挂,现实中几乎绝迹。
分支多、要动态 spoke-spoke:DMVPN 或厂商等价(华为 DSVPN)。只要人、不要路由协议:SSL VPN 或 WireGuard。要合规算法套件可审计:IKEv2 + ESP。OpenVPN 的价值是生态与 tap;新部署若没有历史包袱,WG 或 IPsec 更干净。
证书不是「加密用的文件」,是「某把公钥属于某个名字」的签名陈述。TLS(RFC 8446)和 EAP-TLS 验的是这条陈述能不能连到你已信任的根。
预置在系统 / 浏览器 / 超管信任锚。私钥离线。自签自己。
根签中间,中间签业务。吊销中间比吊销根现实。TLS 服务器必须把中间证书一起送出,客户端信任库通常只有根。
叶子。SAN 里的 DNS / IP 必须对得上你要连的名字。KU / EKU 还得允许 serverAuth 或 clientAuth。
验证链:签名有效 → 当前时间在 notBefore / notAfter 内 → 名字匹配 → 用途匹配 → 一路到信任锚 → 没有被吊销。缺任何一环,客户端应拒绝,而不是「能握手就算了」。
CRL 是签发者定期发布的序列号黑名单,客户端要能拉到 CDP,有滞后。OCSP 是在线问「这张还活着吗」;OCSP stapling 让服务器代问并在握手里带上,避免客户端再打一枪隐私泄露。吊销基础设施不可达时,各实现的 soft-fail / hard-fail 策略不同——这是内网 MITM 设备最爱钻的空子。
自签证书只在「两端都手工信任这张」时有意义。浏览器报错点继续,等于把信任锚临时改成攻击者。内网设备管理 HTTPS、IKE 证书、EAP-TLS 机器证,应走企业中间 CA,而不是每台设备一张互不认识的自签。
边界墙挡外网,挡不住已经坐在会议室的笔记本。最小权限的意思是:每张口、每个进程、每个路由邻接,默认不应比完成任务所需的更大。
| 层 | 对象 | 本页对应手段 |
|---|---|---|
| 边界 | Internet / 专线 / 远程接入 | 状态墙、DMZ、IPsec、uRPF、边缘 ACL |
| 网络 | VLAN、路由域、网关 | 二层护栏、ACL、控制面认证、CoPP |
| 主机 | 超管、服务器、PC | 802.1X、补丁、本地防火墙 |
| 应用 | TLS、API、身份 | 证书链、AAA、最小授权 |
| 数据 | 备份、密钥、日志 | 加密静态数据、审计独立存放 |
数据面转发;控制面跑 STP / OSPF / BGP / ARP;管理面是 SSH、SNMP、NETCONF。打垮控制面,数据面的表会腐烂。Telnet(TCP 23)明文,应用 SSH(TCP 22) 替换;HTTP 管理面换成 HTTPS;SNMPv2c 团体字等于口令,换 SNMPv3 或至少接口 ACL。CoPP(Control Plane Policing)一句话:给打到 CPU 的包做 QoS——让 SSH / 路由协议有带宽,把异常扫描和伪造 BGP 挤到 policer 里丢掉。
OSPF 直接封装在 IP,协议号 89。组播 224.0.0.5(所有 OSPF 路由器)、224.0.0.6(DR/BDR)。管理距离 / 优先级:Cisco OSPF AD 统一 110(内部/外部不分)。华为 / H3C 的 OSPF preference 默认 10 只覆盖内部路由(intra / inter-area);ASE / NSSA 外部路由默认约 150。「OSPF 压过静态 60」只对内部路由成立;外部路由通常静态 60 胜。这是跨厂商最容易踩的坑。
Down → Init → 2-Way → ExStart → Exchange → Loading → Full。2-Way 时在广播网上选 DR/BDR:优先级高者胜,并列比 Router-ID;优先级 0 永不参选;DR 不抢占。Hello / Dead 必须一致:广播与点到点默认 Hello 10 s / Dead 40 s;NBMA 与点到多点默认 Hello 30 s / Dead 120 s。网络类型一边 Broadcast、一边 P2P,会一个等 DR、一个不等,邻接建不稳。
卡在 ExStart / Exchange:优先查 MTU。DBD 带头声明接口 MTU,对不上就反复选主。Cisco 可用 ip ospf mtu-ignore 做权宜,正道是改接口 MTU。
| Type | 名称 | 起源 | 范围 |
|---|---|---|---|
| 1 | Router | 每台路由器 | 本区域 |
| 2 | Network | DR | 本区域 |
| 3 | Summary | ABR | 区域间 |
| 4 | ASBR Summary | ABR | 告诉外区域怎么去 ASBR |
| 5 | AS-External | ASBR | 除 stub/NSSA 外全 AS |
| 6 | MOSPF Group | — | 已废弃,见到当噪声 |
| 7 | NSSA External | NSSA 内 ASBR | NSSA 内;ABR 译成 Type 5 再送出 |
LSA 刷新 1800 s,MaxAge 3600 s。Type 1/2 变了才在本区域跑 SPF;Type 3/5 变了是距离向量式的区内计算,不重算整棵拓扑树。
stub no-summary):再挡 Type 3,只留一条默认。虚链路:两个 ABR 之间经非 stub 传输区域搭一条逻辑点到点,用来缝 Area 0 分区或把「没贴到骨干」的区域救回来。传输区域不能是 stub/NSSA。能汇总、能改物理连接就不要用虚链路。
明文口令几乎无用;至少 MD5,新平台用 HMAC-SHA。被动接口关掉用户 VLAN 上的 Hello,既减攻击面也减 CPU。BFD 把检测从 40 s 量级压到 50 ms × 3 这类数量级(具体收发间隔以平台为准)。Graceful Restart / NSF 让转发面在控制面重启时留住 FIB,帮手路由器继续当邻接。
router ospf 1
router-id 1.1.1.1
passive-interface default
no passive-interface GigabitEthernet0/0
network 10.0.0.0 0.0.0.255 area 0
area 10 stub no-summary
area 20 nssa
! ip ospf authentication message-digest 是接口命令;也可在进程视图写 area 0 authentication message-digest
interface GigabitEthernet0/0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 <local-secret>
ip ospf network point-to-point
show ip ospf neighbor
show ip ospf database
ospf 1 router-id 1.1.1.1 silent-interface all undo silent-interface GigabitEthernet0/0/1 area 0.0.0.0 network 10.0.0.0 0.0.0.255 authentication-mode md5 1 cipher <local-secret> area 0.0.0.10 stub no-summary interface GigabitEthernet0/0/1 ospf enable 1 area 0.0.0.0 ospf network-type p2p display ospf peer display ospf lsdb
# Comware:区域开认证类型,密钥写在接口;个别版本把 key 写进 area,以设备为准
ospf 1 router-id 1.1.1.1
silent-interface all
undo silent-interface GigabitEthernet1/0/1
area 0
network 10.0.0.0 0.0.0.255
authentication-mode md5
area 10
stub no-summary
interface GigabitEthernet1/0/1
ospf 1 area 0
ospf network-type p2p
ospf authentication-mode md5 1 cipher <local-secret>
display ospf peer
display ospf lsdb
BGP-4 跑在 TCP 179。Cisco AD:eBGP 20、iBGP 200。华为 / H3C 的 BGP preference 默认往往是 255(e/i 不分 20/200)——又一个跨厂商陷阱。Keepalive 默认 60 s,Hold 180 s,协商取双方 Hold 的较小值。
iBGP 学来的前缀默认不再转给另一个 iBGP 邻居——防环。于是要全互联、或 Route Reflector、或联邦。RR 不是免费的:cluster-list、Originator-ID、反射哪些客户,配错会出现「会话 Established 但前缀到不了边叶」。
TTL security(GTSM,RFC 5082):neighbor x ttl-security hops 1 只收 TTL 接近 255 的包,直接邻居伪造从远端打进来的包(TTL 已经被减过)进不了 BGP。这比 ebgp-multihop 只放行、不检查接收 TTL 更严。TCP-AO / MD5 防篡改;前缀侧再用前缀列表、最大前缀数、RPKI(安全域另一门课)。
先证明护栏在不在、表里有没有绑定、AAA 活着没有,再猜策略。计数看增量。
| 要问的问题 | Cisco | 华为 / H3C |
|---|---|---|
| 口为什么 err-disable? | show interfaces status err-disabledshow errdisable recovery | display error-down / display interface brief(名称随版本) |
| 端口安全学到谁? | show port-security address | display port-security |
| DHCP 绑定表在吗? | show ip dhcp snooping binding | display dhcp snooping user-bind all / display dhcp snooping binding |
| DAI 丢了多少? | show ip arp inspection statistics | display arp detection statistics / display arp anti-attack |
| 802.1X 会话 | show authentication sessions | display dot1x |
| AAA 服务器死活 | show aaa servers | display radius-server / display hwtacacs-server |
| ACL 命中 | show ip access-lists | display acl + 应用记录 |
| STP 异常口 | show spanning-tree inconsistentports | display stp abnormal-interface |
| OSPF 邻接 | show ip ospf neighbor | display ospf peer |
| NAT 会话 | show ip nat translations | display nat session(防火墙/出口箱) |
| IPsec SA | show crypto ikev2 sashow crypto ipsec sa | display ike sa / display ipsec sa |
假设三层园区:接入交换机、双汇聚、双核心、出口状态墙、DMZ 里一台 Web、分支走 IPsec。目标不是「命令最多」,是每张表只信任该信任的人。
口显式 access,nonegotiate。VLAN 10 数据 / 20 语音 / 99 空 native。边缘口 BPDU Guard。DHCP Snooping 只信任上行走汇聚的聚合口。DAI 与 IPSG 吃同一张绑定表。能上 802.1X 的上 802.1X,哑巴设备 MAB + 静态绑定。端口安全 maximum 2 当托底,violation restrict 以免电话先说话把口打死。
SVI 做网关。VRRP(跨厂商)或 HSRP(纯 Cisco),主网关 = 该 VLAN 的 STP 根。更干净的做法:routed access,用户 VLAN 终止在接入,汇聚只跑三层,STP 从用户网消失。OSPF 用户网段放 stub / totally stubby,汇聚当 ABR,核心只看汇总。
Area 0,点到点,MD5/SHA,passive 掉所有非互联口。CoPP 保证 SSH 与 OSPF/BFD 不被扫描挤死。管理走独立 VRF / OOB,VTY 只收管理网段。
状态墙分 untrust / dmz / trust。Web 放 DMZ,只放 443 进来、只放去数据库的那一个端口进去。分支 IPsec(ESP + IKEv2),兴趣流不要 overlapping 到导致回流不对称。管理员 TACACS+,802.1X 用户 RADIUS——两套服务器,别省成一台兼所有。
若必须保留跨汇聚的二层:聚合用 LACP,哈希用 src-dst-ip 并在两跳换键避免极化;Loop Guard + UDLD 钉在光纤上。FHRP 与 STP 不对齐时,先改优先级,不要先加策略路由掩盖。
0.0.0.254 这类非连续 wildcard 没有对应合法掩码。/20 是 0.0.15.255 不是 0.0.20.255。Cisco 标准 1–99 / 1300–1999,华为基本 2000–2999。