OXL Firewall Testing Framework
Project description
Firewall Testing-Framework
A framework for testing and troubleshooting firewall Layer 3-4 rulesets.
WARNING: This project is still in the conception-phase.
Goal / Why?
When having to administer IT infrastructure and networks - we will often have multiple firewalls in place.
Maintaining these might be time-consuming. You might also face some challenges:
-
Troubleshooting & Analysis:
Even for senior network engineers it can be a challenge to find the source of an unexpected block/accept in large rulesets that are distributed across multiple systems and firewall vendors.
Infrastructure-as-Code does help to keep the rulesets in a consistent state - but it does not solve the issue of having to manually analyze/troubleshoot existing rulesets.
This project wants to provide one interface for simulating traffic over multiple firewall systems.
-
Automated Regression-Tests:
Why would you want to do ruleset-regression-tests?
- If you utilize Infrastructure-as-Code and change-reviews for updating your ruleset you might want to
- You may want/need to periodically verify that the currently active rulesets actually allow/deny the traffic you expect This can be a tedious task - you might overlook some edge-case.
- Especially when a ruleset is administered by teams of engineers over a long time period - it can be a challenge to:
- detect configuration errors/mistakes before they can be exploited
- make sure the design-choices for the ruleset are adhered to
How do regression-tests work?
- You define test-cases that simulate traffic over one or multiple firewalls
- You assert that the traffic was allowed/denied/rejected
- You might even want to assert that the traffic took a specific outbound route or was NATed to a specific IP
This way you can continuously extend these test-cases and easily verify that the currently active rulesets comply with them.
Idea
Take a look at this topology:
The flow is planned to be:
- Either:
- manually pull the current config from the existing firewalls
- or utilize existing
pull-pluginsto do so (p.e. via API)
-
The vendor-specific configuration gets parsed by
translation-pluginswhich output a standardized firewall config-schema. -
The user provides a high-level
topology-config -
If automated tests should be run: The user needs to provide a
test-traffic config
Else the user has the option to enter an interactive shell where traffic can be sent manually
- The
firewall/network simulator
- parses the provided config
- generates the network-topology
- finds where the packet originates from (or notifies the user if more information is required)
- finds the route the packet should take
- tests the traffic against the rulesets of firewalls that are hops of that route
Thanks already go to @MikPisula, the creator of the MikPisula/packet-simulator for creating a simulator for netfilter (IPTables/NFTables) firewalls.
Also thanks to the go-ftw (Web Application Firewall Testing Framework) project that inspired us to support regression-tests.
Principles
-
Strict separation of vendor-specific plugins from the core traffic-simulator.
Plugins CAN be used to pull the current configuration (rulesets, interfaces, routes) from a firewall system, but admins should always be able to manually provide this information.
Some might not want to trust some 'nice-to-have' tool with access to their firewalls.
-
The user should be able to choose the output verbosity.
We want to provide full transparency (show every rule the traffic interacts with) but if not required (p.e in automated/CI-mode) it should be brief.
Contribute
Contributions are welcome (:
What would be helpful for now:
-
Feel free to discuss the ideas and roadmap for this project with us: GitHub discussions or contact us directly
-
Open issues if you think you have found a problem with the existing code (be aware that it might not yet be in a usable state)
-
Please do not post any generic AI-slop.. thanks.
-
Be friendly and respectful
Roadmap
2025
Core Simulator:
- Generating Layer 3 Topology
- Generating multiple Firewalls
- Detect Firewall-chaining (one firewall routes to another one - p.e. over VPN)
- Run modes:
- Basic interactive shell
- Automated/CI mode
- Defining basic config-schema (Topology, Rulesets, Tests)
- Run multiple Test-cases from config (CLI pytest-like?)
- Option to Output results to JSON
- Security Features to protect users:
- Warn before executing non-verified (code review) plugin
Development:
- Create Plugin Templates
- Create Guide on how to develop Plugins
Firewall Support:
- Netfilter (NFTables/IPTables)
- OPNsense (Plugin that parses Config-Backup-File)
What will be out-of-scope for now
Why? Because we initially need to focus on building the core simulator!
- Transparent firewalls (layer 2 interception)
- Application-Level Protocols
- Connection-Tracking helpers (rules that use these CT-states)
- Non-static routing (dynamic routing, rule-based routing via fwmark and routing-table lookup)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file firewall_testing_framework-0.0.1.tar.gz.
File metadata
- Download URL: firewall_testing_framework-0.0.1.tar.gz
- Upload date:
- Size: 68.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a91abe01741b81240a11e469982f68190ab543d18e76e3fe2f1d3e368060b47
|
|
| MD5 |
e5c5311aa50eb51e16a31a02cb571acb
|
|
| BLAKE2b-256 |
4e85f07293bdf55fda9c13081206ba59e1700752cfc0d295eef9f610d5e8b493
|
File details
Details for the file firewall_testing_framework-0.0.1-py3-none-any.whl.
File metadata
- Download URL: firewall_testing_framework-0.0.1-py3-none-any.whl
- Upload date:
- Size: 70.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
092d7342931544aa0697a02f29585e75a229ceb3dd06b185439099ff49c3d5ac
|
|
| MD5 |
0239c0b4059e86a56c3176e001520609
|
|
| BLAKE2b-256 |
78e9767da5c6712e400a7bdbc22c5952dbc6d4f9a9cdbd90747d8b81635db692
|