mcpbeat Sign in

Acl Rule Analysis Agent Skill

>- Vendor-agnostic ACL and firewall rule analysis with shadowed rule detection, overly permissive rule identification, unused rule discovery, redundant rule flagging, and rule ordering optimization. Covers ACLs (Cisco/JunOS/EOS) and firewall policies (PAN-OS/FortiGate/CheckPoint).

4.4k tokens
context cost
SKILL.md, read when the skill is used
4
files
plus reference files
0
copies elsewhere
how many repositories repackaged it
2 168
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/LeoYeAI/agent-master-skills --skill acl-rule-analysis

What comes with it

20 516 bytes besides the instruction
_meta.json
references/cli-reference.md
references/rule-patterns.md

The instruction itself

24 sections, as written by the author

ACL and Firewall Rule Analysis

Vendor-agnostic rule analysis for access control lists and firewall policies.

Unlike vendor-specific firewall audit skills that evaluate platform features

(App-ID, Security Profile Groups, zone protection), this skill focuses on

universal rule patterns that apply across all platforms: shadowed rules,

redundant rules, overly permissive rules, and unused rules.

Covers ACL-based platforms (Cisco IOS/IOS-XE/ASA, Juniper JunOS, Arista EOS)

and policy-based firewalls (Palo Alto PAN-OS, Fortinet FortiGate, Check Point).

The analysis algorithms are vendor-agnostic — only the rule retrieval commands

differ by platform.

Commands use inline labels [Cisco], [JunOS], [EOS], [PAN-OS],

[FortiGate], [CheckPoint] where syntax diverges. Unlabeled statements

apply universally. See references/cli-reference.md for full command tables

and references/rule-patterns.md for detection algorithm details.

When to Use

  • Post-migration rule cleanup after converting from one platform to another
  • Periodic rulebase hygiene to remove accumulated technical debt
  • Compliance preparation requiring rule-level justification and minimal privilege
  • Incident investigation — determining whether a rule permitted malicious traffic
  • Change validation after rulebase modifications to confirm no shadowed rules
  • Capacity optimization — reducing rule count to improve lookup performance
  • Merger/acquisition integration — consolidating overlapping rulebases

Prerequisites

  • Read-only access to the target device via SSH, console, or API
  • Rulebase with hit counters enabled (most platforms enable by default)
  • For unused rule detection: hit count data accumulated over an extended period

(30+ days minimum, 90 days recommended for seasonal traffic patterns)

  • Knowledge of intended security policy — which traffic should be permitted

and which should be denied between network segments

  • Understanding of implicit deny behavior for the platform (varies — see

Troubleshooting)

Procedure

Follow this analysis flow sequentially. Each step builds on prior findings.

The procedure moves from data collection through pattern detection to

consolidated recommendations.

Step 1: Collect Rulebase

Retrieve the full ACL or firewall policy from the target device.

[Cisco] IOS/IOS-XE:

show ip access-lists
show access-lists

[Cisco] ASA:

show access-list
show running-config access-list

[JunOS]

show configuration firewall family inet filter
show firewall filter

[EOS]

show ip access-lists
show access-lists counters

[PAN-OS]

show running security-policy

[FortiGate]

get firewall policy

[CheckPoint] SmartConsole CLI or Expert mode:

fw stat -l

Record each rule: sequence number/name, match criteria (source, destination,

protocol, port/service), action (permit/deny/drop/reject), and hit count.

Normalize the data into a common format for analysis.

Step 2: Identify Shadowed Rules

A rule is shadowed when a preceding rule matches all traffic that the

shadowed rule would match. The shadowed rule never triggers because the

earlier rule always matches first.

Detection algorithm:

  • For each rule R at position N, examine all rules at positions 1 through N-1.
  • If any preceding rule P has match criteria that is a superset of R's

criteria and the same or broader action scope, then R is shadowed by P.

  • A superset means P's source contains R's source, P's destination contains

R's destination, and P's service/port contains R's service/port.

Critical case: A permit rule shadowing a deny rule means traffic intended

to be blocked is actually permitted. This is a security gap — flag as Critical.

Benign case: A deny rule shadowing another deny rule is a redundancy issue,

not a security gap — flag as Medium.

Verify suspected shadows by checking hit counts: a truly shadowed rule has

zero hits despite the traffic pattern existing in the network.

Step 3: Detect Overly Permissive Rules

Identify rules with excessively broad match criteria that violate least

privilege. Risky patterns by platform:

ACL platforms (Cisco, JunOS, EOS):

  • permit ip any any — allows all IPv4 traffic, bypasses all filtering
  • permit ip any <broad-subnet> where subnet is /8 or larger
  • permit tcp any any eq <high-risk-port> — unrestricted source to

sensitive service (e.g., SSH, RDP, SQL)

Policy platforms (PAN-OS, FortiGate, CheckPoint):

  • Source any + Destination any + Action allow
  • Application/service set to any or all
  • Broad service groups containing dozens of ports

For each overly permissive rule found, check its hit count and traffic logs

to determine actual usage patterns. Many "any/any" rules exist as legacy

migration artifacts that can be narrowed to observed traffic.

Step 4: Find Unused Rules

Unused rules are those with zero hit count over an extended observation

period.

[Cisco] Check hit counts inline with show access-lists output.

[JunOS] show firewall filter <name> counter — per-term counters.

[EOS] show access-lists counters — per-entry match counts.

[PAN-OS] show rule-hit-count vsys vsys1 security rules all

[FortiGate] diagnose firewall iprope list — per-policy packet/byte counts.

[CheckPoint] SmartConsole → Policy → hit count column, or cpstat fw -f policy

Caveats for unused rule detection:

  • Hit counters reset on device reboot — verify uptime before concluding

a rule is unused

  • Seasonal traffic (quarterly reports, annual processes) may not appear in

30-day windows — extend observation to 90+ days when possible

  • Backup/failover paths only activate during outages — low hit count does

not mean the rule is unnecessary

  • Unused deny rules are low-risk findings; unused permit rules waste rulebase

space and may indicate abandoned access that should be revoked

Step 5: Identify Redundant Rules

Redundant rules have overlapping match criteria and the same action. They

increase rulebase complexity without adding security value.

Detection approach:

  • Group rules by action (permit/deny).
  • Within each group, compare pairs for overlapping source, destination, and

service criteria.

  • If rule A's match criteria is a subset of rule B's and both have the same

action, rule A is redundant (B already covers it).

  • If two rules have identical match criteria and the same action, one is a

direct duplicate.

Merge candidates: rules with adjacent or overlapping source/destination

ranges and the same action can often be consolidated into a single rule with

a summarized address range.

Step 6: Rule Ordering Optimization

Rule ordering affects both security and performance.

Performance optimization: Place highest-hit-count rules near the top.

ACL platforms evaluate rules sequentially — a rule matching 80% of traffic at

position 50 forces 49 unnecessary comparisons per packet.

Security optimization: Place most-specific deny rules before broader

permit rules to ensure explicit blocks take precedence.

Conflict analysis: When a permit rule and a deny rule match the same

traffic, the first-match rule determines the outcome. Identify all

permit/deny conflicts and verify the intended rule wins by position.

Review current ordering:

  • Sort rules by hit count (descending).
  • Compare current position against hit-count-optimal position.
  • Identify rules where reordering would improve performance without

changing security posture.

  • Flag any reordering that would change effective policy (a permit moving

above a deny or vice versa) — these require explicit approval.

Step 7: Generate Consolidated Recommendations

Compile findings from Steps 2–6 into a prioritized remediation list.

Prioritization order:

  • Critical: Shadowed deny rules (security gap) and any/any permits
  • High: Overly permissive rules with active traffic, unused permit rules
  • Medium: Redundant rules, suboptimal ordering, unused deny rules
  • Low: Cosmetic issues (naming, comments, organization)

For each finding, document: the rule identifier, the finding category, the

specific risk, and the recommended action (remove, narrow, reorder, merge).

Threshold Tables

Rule Risk Severity Classification

| Finding | Severity | Rationale |

|---------|----------|-----------|

| Permit rule shadowing a deny rule | Critical | Traffic intended to be blocked is permitted |

| permit ip any any / any-any-allow | Critical | No filtering — all traffic passes |

| Broad subnet permit (source or dest ≥/8) | High | Overly wide scope; likely exceeds intent |

| Unused permit rule (0 hits, 30+ days) | High | Abandoned access — potential unauthorized path |

| Permit with any source to sensitive service | High | Unrestricted access to high-risk ports |

| Redundant rules (same action, overlapping match) | Medium | Complexity without security value |

| Suboptimal rule ordering (high-hit rule low in list) | Medium | Performance impact on sequential evaluation |

| Shadowed deny by another deny | Medium | Redundancy, not a security gap |

| Unused deny rule (0 hits, 30+ days) | Low | Minimal risk; cleanup recommended |

| Missing rule comments/descriptions | Low | Maintainability concern |

Hit Count Staleness Thresholds

| Observation Period | Confidence | Action |

|-------------------|------------|--------|

| < 7 days | Very Low | Insufficient data — do not remove rules based on hit count |

| 7–29 days | Low | Flag for review; extend observation period |

| 30–89 days | Moderate | Reasonable basis for unused rule identification |

| 90+ days | High | Strong evidence for rule removal or narrowing |

| 180+ days | Very High | Recommend removal with change control documentation |

Decision Trees

Remediation Priority

Found a flagged rule
├── Is the rule overly permissive (any/any)?
│   ├── Yes
│   │   ├── Is it actively used (hit count > 0)?
│   │   │   ├── Yes → Analyze traffic logs to narrow match criteria
│   │   │   │   ├── Can it be narrowed to specific IPs/services?
│   │   │   │   │   ├── Yes → Create replacement rules, test, then remove original
│   │   │   │   │   └── No → Document business justification, add compensating controls
│   │   │   │   └── Is there a Security Profile/IPS covering this rule?
│   │   │   │       ├── Yes → Lower priority, but still narrow when feasible
│   │   │   │       └── No → High priority — no inspection on broad permit
│   │   │   └── No (zero hits) → Schedule removal with change control
│   │   └── Severity: Critical
│   └── No
│       ├── Is the rule shadowed?
│       │   ├── Shadowed deny (by a permit) → Critical — security gap
│       │   ├── Shadowed permit (by another permit) → Medium — remove redundancy
│       │   └── Shadowed deny (by another deny) → Low — remove redundancy
│       ├── Is the rule unused?
│       │   ├── Unused permit → High — revoke abandoned access
│       │   └── Unused deny → Low — cleanup at convenience
│       └── Is the rule redundant?
│           └── Merge with covering rule → Medium

Rule Reordering Safety Check

Proposed rule reorder
├── Does the reorder change which rule matches any traffic flow?
│   ├── Yes → STOP — this is a policy change, not just optimization
│   │   ├── Would a deny move below a permit for the same traffic?
│   │   │   ├── Yes → REJECT — security degradation
│   │   │   └── No → Evaluate as an intentional policy change
│   │   └── Submit for change control review
│   └── No → Safe to reorder for performance
│       ├── Validate with test traffic or policy simulation
│       └── Implement during maintenance window

Report Template

# ACL / Firewall Rule Analysis Report

## Executive Summary
- **Device:** [hostname]
- **Platform:** [Cisco IOS / ASA / JunOS / EOS / PAN-OS / FortiGate / CheckPoint]
- **Rulebase Size:** [total rules]
- **Analysis Date:** [timestamp]
- **Performed By:** [operator/agent]
- **Observation Period for Hit Counts:** [start date] to [end date] ([N] days)

**Summary:** [N] findings across [rules examined] rules. [critical count]
Critical, [high count] High, [medium count] Medium, [low count] Low.

## Shadowed Rules
| Rule # | Rule Name | Shadowed By | Match Overlap | Severity | Action |
|--------|-----------|-------------|---------------|----------|--------|
| [seq]  | [name]    | Rule [seq]  | [description] | [sev]   | Remove / Reorder |

## Overly Permissive Rules
| Rule # | Rule Name | Source | Destination | Service | Hit Count | Severity |
|--------|-----------|--------|-------------|---------|-----------|----------|
| [seq]  | [name]    | [src]  | [dst]       | [svc]   | [count]   | [sev]    |

**Recommendation:** [Narrow to observed traffic / Add compensating controls]

## Unused Rules
| Rule # | Rule Name | Action | Last Hit | Days Observed | Severity |
|--------|-----------|--------|----------|---------------|----------|
| [seq]  | [name]    | [act]  | [date]   | [days]        | [sev]    |

**Recommendation:** [Remove with change control / Extend observation period]

## Redundant Rules
| Rule # | Rule Name | Redundant With | Overlap Type | Recommendation |
|--------|-----------|----------------|--------------|----------------|
| [seq]  | [name]    | Rule [seq]     | [type]       | Merge / Remove |

## Ordering Recommendations
| Current Position | Rule # | Hit Count | Optimal Position | Impact |
|-----------------|--------|-----------|------------------|--------|
| [pos]           | [seq]  | [count]   | [new pos]        | [desc] |

## Prioritized Remediation Plan
1. [Critical] [Finding description] — [Specific action]
2. [High] [Finding description] — [Specific action]
3. [Medium] [Finding description] — [Specific action]

## Next Review
- **Critical findings present:** Re-audit in 30 days after remediation
- **High findings only:** Re-audit in 90 days
- **Medium/Low only:** Re-audit in 180 days

Troubleshooting

Hit Counters Reset After Reboot

Most platforms reset ACL/policy hit counters on reboot. Before concluding

a rule is unused, verify device uptime:

[Cisco] show version | include uptime,

[JunOS] show system uptime,

[EOS] show uptime,

[PAN-OS] show system info | match uptime,

[FortiGate] get system performance status,

[CheckPoint] cpstat os -f ifconfig.

If uptime is less than the desired observation period, hit count data is

incomplete.

ACL vs Firewall Policy Semantic Differences

ACL-based platforms (Cisco IOS, EOS) evaluate rules top-to-bottom with

first-match semantics. Firewall policy platforms (PAN-OS, FortiGate,

CheckPoint) also use first-match but have additional dimensions (zones,

applications, user identity) that affect matching. Shadowed rule detection

must account for all match dimensions on policy platforms, not just

source/destination/port.

Implicit Deny Handling Varies by Platform

[Cisco] ACLs have an implicit deny ip any any at the end (not shown

in the ACL output). [JunOS] Firewall filters have an implicit discard

at the end of each term list. [EOS] Follows Cisco convention with

implicit deny. [PAN-OS] Has configurable interzone-default and

intrazone-default rules (deny and allow respectively). [FortiGate]

Implicit deny at end of policy list. [CheckPoint] Implicit drop rule

at end of policy (configurable in SmartConsole).

Account for implicit deny when analyzing rule coverage — the absence of an

explicit deny at the bottom is intentional on most platforms.

Large Rulebases (500+ Rules)

Manual analysis of large rulebases is impractical. Export the rulebase

programmatically for automated analysis:

[Cisco] Parse show access-lists output.

[PAN-OS] Use XML API to export the full policy as structured data.

[FortiGate] Use REST API (/api/v2/cmdb/firewall/policy).

[CheckPoint] Use Management API (mgmt_cli show access-rulebase).

Prioritize analysis by hit count — start with the highest-traffic rules

and work down.

False Positives in Shadowed Rule Detection

Object groups, address groups, and nested service groups can create false

positive shadow detections. When rule A uses an address group and rule B

uses individual addresses that are members of that group, automated tools

may report B as shadowed. Expand all groups to their member objects before

running shadow comparisons.

How to use it

Copy the folder

Take leoyeai/acl-rule-analysis from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.