Skip to content

26.7.1: Migration Assistant exports 0-byte firewall rules CSV and omits legacy disabled rules #10595

Description

@djBassman

**

download_rules.csv

download_rules.csv.zip

Image Image Image

**
Hi,

Please see issues below.

Important notices

Model used:

ChatGPT (OpenAI GPT-5.5)

Extent of AI involvement:

AI was used to help organize the investigation, summarise the collected evidence, and format this bug report. All testing, command output, screenshots, observations and verification were performed by me.


Describe the bug

After upgrading an existing OPNsense installation that uses legacy firewall rules to OPNsense 26.7.1, the new Firewall Rules migration process does not function correctly.

The Migration Assistant correctly detects my legacy firewall rules, however:

  • Export current rules downloads a 0-byte download_rules.csv.
  • The new Firewall → Rules page does not display all legacy rules. At least one disabled rule present in /conf/config.xml is missing from the Rules page.
  • The legacy firewall itself continues to operate correctly.

Because the exported CSV is empty, it is not safe to continue with the migration.


To Reproduce

  1. Upgrade an existing installation using legacy firewall rules to OPNsense 26.7.1.
  2. Open Firewall → Migration Assistant.
  3. Observe that legacy firewall rules are detected (47 rules in my case).
  4. Click Export current rules.
  5. The browser downloads download_rules.csv.
  6. Inspect the downloaded file.

Result

The downloaded file is:

download_rules.csv

File size:

0 bytes

Contents:

(empty)

Additional observation:

  1. Open Firewall → Rules.
  2. Compare the displayed legacy rules with /conf/config.xml.
  3. Observe that at least one disabled rule is missing from the Rules page despite existing in the configuration.

Expected behaviour

The Migration Assistant should export every detected legacy firewall rule into a valid CSV suitable for import.

The Firewall → Rules page should display every detected legacy firewall rule, including disabled rules.


Actual behaviour

The Migration Assistant reports:

Export current rules (47)

However:

  • download_rules.csv is 0 bytes
  • The CSV contains no header
  • The CSV contains no rules
  • At least one disabled legacy firewall rule is not shown in the new Rules page.

Describe alternatives you considered

Before reporting this issue I performed the following troubleshooting:

  • Upgraded from 26.7.0 to 26.7.1
  • Cleared browser cache
  • Hard refresh (Ctrl + F5)
  • Tested with Firefox
  • Tested with Chromium
  • Verified legacy firewall rules still exist in /conf/config.xml
  • Verified rule count
  • Verified disabled rule count
  • Compared missing rule against XML
  • Checked configd logs during export

The behaviour remained unchanged.


Screenshots

(Attached)

  • Migration Assistant
  • Firewall → Rules page
  • Empty download_rules.csv
  • Missing disabled rule
  • Browser screenshots (if useful)

Relevant log files

No relevant errors were observed during the export.

The configd logs show no migration/export related activity when the CSV export is performed.


Rule count verification

grep -c "<rule uuid=" /conf/config.xml

Output:

47

Disabled rule count

grep -c "<disabled>1</disabled>" /conf/config.xml

Output:

9

Example missing rule

The following disabled rule exists in /conf/config.xml but is not displayed by the new Firewall → Rules page.

UUID:
2c772765-4c1e-4c61-9f34-0b7926bbf8db

Description:
VM_PlexFileServer_Mint_210_212 Internet Full Access Rule

Relevant XML:

<rule uuid="2c772765-4c1e-4c61-9f34-0b7926bbf8db">
    <type>pass</type>
    <interface>opt8</interface>
    <ipprotocol>inet46</ipprotocol>
    <statetype>keep state</statetype>
    <descr>VM_PlexFileServer_Mint_210_212 Internet Full Access Rule</descr>
    <direction>in</direction>
    <quick>1</quick>
    <protocol>tcp/udp</protocol>
    <source>
        <address>VM_PlexFileServer_Mint_210_212</address>
    </source>
    <destination>
        <address>Internet_Only_Invert_Dst</address>
        <not>1</not>
    </destination>
    <log>1</log>
    <disabled>1</disabled>
</rule>

Nothing about this rule appears unusual.


Additional context

The Migration Assistant correctly detects 47 legacy firewall rules.

The legacy firewall configuration appears intact.

The firewall continues operating normally using the legacy rule set.

The downloaded CSV is always 0 bytes, preventing safe migration.

Because of this, I have not attempted to:

  • Import the empty CSV.
  • Remove the legacy firewall rules.

I did not want to risk losing the existing firewall configuration.


Environment

Software

OPNsense 26.7.1-amd64

Hardware

AMD GX-420CA SOC with Radeon™ HD Graphics

Network Interfaces

4 × Broadcom NetXtreme BCM5719 Gigabit Ethernet PCIe (bge0–bge3)

1 × Realtek RTL8111/8168/8211 PCI Express Gigabit Ethernet Controller (re0)

Browsers tested

  • Firefox
  • Chromium

Both browsers produce identical behaviour.


Attachments

  • Migration Assistant screenshots
  • Firewall → Rules screenshots
  • Empty download_rules.csv
  • Relevant /conf/config.xml excerpts
  • Configuration backup (available if required)

Thank you,
Anthony.

Metadata

Metadata

Assignees

No one assigned

    Labels

    supportCommunity support or awaiting triage

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions