Methodology · Firewall and NGFW benchmarking
RFC 9411: the firewall test with every feature switched on
RFC 9411 replaced RFC 3511 in 2023. It benchmarks a firewall the way you run one: inline, TLS inspection and IPS enabled, real HTTP and HTTPS traffic, and a failure budget of 1 transaction in 100,000. This page walks through the method as we run it in CloudLAB and what the report gives you.
- 9 benchmark tests: 5 over HTTP, 4 over HTTPS with the recommended cipher suites
- 300 s sustain phase per run, KPIs sampled every 2 s or faster
- A result counts only if failed transactions and unexpected RSTs stay under 0.001%
Every RFC 9411 run follows this profile. Measurements happen in the sustain phase only: 300 s minimum, every KPI recorded there and nowhere else.
Which RFC
RFC 9411 is the method. RFC 3511 is history.
RFC 3511 dates from 2003 and measured a firewall as a packet filter: IP throughput, connection rates, a rule set. RFC 9411 obsoleted it in 2023. Everything on this page is RFC 9411; 3511 comes up only when a tender still quotes it.
Inspected throughput
The KPI is bits that were examined, allowed and delivered while the DUT inspects. Layer 2 by default; if you measure at layer 3, the report must say so, because the two are not comparable.
One configuration for all 9 tests
The DUT configuration is frozen before the first test and stays identical to the last one. Every recommended feature that is off goes into the report together with the reason and the performance implication.
Worst case on purpose
Full TLS handshake on every connection, session resumption off, PSH set on all traffic. The method looks for the floor of the device, the number your users will actually get on a bad day.
Free template
RFC 9411 test plan template
The plan we fill in before every firewall and NGFW run, as a PDF: device class and access list, the security features to switch on, the 9 tests with object sizes and cipher suites, the validation gate and a results sheet.
- Ready to attach to a tender or an RFP
- The same parameters and pass criteria for every vendor and every lab
- The mistakes that change the result, listed at the end
PDF in English. We ask only for your email.
Test setup
Two halves of a traffic generator and one box in between
Option 1 in the RFC: emulated clients on one side, emulated servers on the other, the DUT inline. No external switches or routers unless the port count forces them: they add their own latency and shrink the ARP table the DUT has to cope with.
Emulated clients
MSS 1460 (IPv4) and 1440 (IPv6), 65,535-byte windows, initial congestion window up to 10 MSS, 3 retries, source ports 1024 to 65535. The client count follows the target: about 1,400 to 1,700 IPs per 10 Gbit/s for an enterprise perimeter, 50,000 to 100,000 for a subscriber profile.
DUT / SUT
Inline, fail-open off, recommended features on, flow-level logging on, geo filtering where the box supports it. The ACL set is sized by class: from 5 application rules and 50 IP and port blocks on an XS device to 50 and 500 on a Large one. Block rules first, allow rules last, none of them touching the test traffic.
Emulated servers
HTTP/1.1 and HTTP/2 on ports 80 and 443, HTTP/3 on UDP. TLS 1.2 or newer, 16 KB record limit, no session tickets and no session cache, one IP per server FQDN per test port. The IPv4 to IPv6 split mirrors the client side.
Before the DUT goes in: the reference pre-test
We run the smallest-object HTTP profile through a patch cable (or the DUT in fast-forward mode), record the loss and latency of the bed itself and confirm the generator clears the DUT's claimed performance with headroom. If the bed cannot beat the datasheet, the DUT result is meaningless. Virtual beds get an extra watch for noisy neighbours, VM moves and thermal throttling during the 300 s.
DUT/SUT configuration
What has to be on before the first packet
Section 4.2 of the RFC. The list below is the NGFW one; an NGIPS gets a shorter list (no anti-virus, no ACLs) with DPI and anti-malware added. Machine-learning and behavioural engines are switched off: the method cannot reproduce them.
Recommended: on for every test
- TLS Inspection
- IDS / IPS
- Anti-Virus
- Anti-Spyware
- Anti-Botnet
- Anti-Evasion
- Application Identification
Switching one of these off is allowed when the deployment does not need it. The report then states which, why, and that the result would be lower with it on. Application identification must be configured to recognise the applications in the traffic mix.
Optional: by deployment
- Web Filtering
- Data Loss Protection
- DDoS Protection
- Certificate Validation
On if your policy runs them in production. We usually test both ways when one of them is a buying criterion, DDoS protection in particular.
Access list by device class (Table 4 of the RFC)
Class comes from the throughput on the vendor datasheet. The rules go in this order, specific denies on top, and none of them may match the test traffic.
| Rule | XS ≤ 1 Gbit/s |
S 1–5 Gbit/s |
M 5–10 Gbit/s |
L > 10 Gbit/s |
|---|---|---|---|---|
| Block by application (applications absent from the traffic mix) | 5 | 10 | 20 | 50 |
| Block by source IP and destination port (ports not used in the test) | 25 | 50 | 100 | 250 |
| Block by source and destination subnet (subnets not used in the test) | 25 | 50 | 100 | 250 |
| Allow by application (half of the applications in the mix) | 10 | 10 | 10 | 10 |
| Allow by client subnet and port, then by client subnet | at least 1 rule per client subnet, in both rule types | |||
Classes: XS up to 1 Gbit/s, S 1 to 5 Gbit/s, M 5 to 10 Gbit/s, L above 10 Gbit/s (Appendix B). Your own rule count can be higher; the RFC sets the floor. If the box is built without ACLs (most NGIPS), we test without them and say so in the report.
Section 7 of the RFC
9 tests, each with its own target and its own gate
5 run over cleartext HTTP, 4 repeat the pattern over HTTPS with the recommended cipher suites. Every test starts at 10% of the target, then runs at the target, then iterates to the highest load that still passes the validation criteria.
-
7.1Application mix
Throughput with application traffic mix
Inspected throughput and transactions per second under a realistic mix, for example the NetSecOPEN enterprise perimeter profile or a capture of your own perimeter. The closest thing to a production day in a single number.
Target: line rate of the DUT ports or your deployment figure · TTLB reported with the object sizes of the mix -
7.2HTTP
TCP connections per second
One GET per connection, FIN straight after. Shows how fast the session table, the policy lookup and the logging pipeline can take new flows. Small objects stress the control path, 64 KB starts pulling throughput into the picture.
Objects: 1, 2, 4, 16 and 64 KB, one size per iteration · target: datasheet CPS or your own -
7.3HTTP
HTTP throughput
Sustainable inspected throughput while the object size varies. Small objects show what the inspection engines cost per request; 256 KB shows what the data path can push when the engines have little to do.
Objects: 1, 16, 64, 256 KB plus a mixed set from 0.2 KB up · throughput and transactions/s per size -
7.4HTTP
HTTP transaction latency
Time to first byte and time to last byte while the box runs at half of what tests 7.2 and 7.3 found. Latency at 50% load is the figure your users feel; latency at idle is the one on the datasheet.
TTFB and TTLB min / avg / max · 1 and 10 transactions per connection · objects 1, 16 and 64 KB -
7.5HTTP
Concurrent TCP connection capacity
How many sessions the DUT keeps open at once without dropping or resetting any of them. The ramp-up is paced by the CPS result from 7.2 so the count itself is what breaks, not the setup rate.
Ramp-up time = target connections ÷ max CPS · sustain checks the count stays within 10% -
7.6HTTPS · TLS inspected
TCP or QUIC connections per second, HTTPS
Test 7.2 with a full TLS handshake on every connection and the DUT decrypting in the middle. Run per cipher suite and key strength; RSA 4096 with P-384 is where proxy-mode inspection hurts most.
Objects: 1, 2, 4, 16 and 64 KB · TLS handshake rate measured on the 1 KB object -
7.7HTTPS · TLS inspected
HTTPS throughput
Test 7.3 over TLS. This is the number to put next to the datasheet: decrypt, inspect, re-encrypt at 64 KB objects with IPS and application identification on.
Iterations cover ECDHE with AES-128-GCM and AES-256-GCM, RSA 2048 and 4096, P-256 and P-384 -
7.8HTTPS · TLS inspected
HTTPS transaction latency
TTFB and TTLB with the TLS proxy doing its work at 50% load. Expect the TTFB to move the most: the handshake now happens twice, once to the DUT and once from it.
Same scenarios as 7.4 · min / avg / max per object size and cipher suite -
7.9HTTPS · TLS inspected
Concurrent TCP or QUIC connection capacity, HTTPS
Open TLS sessions held at once. With TLS 1.3 the DUT works as a middlebox that holds the certificates and keys, so the session table and the key material both count against the limit.
Ramp-up paced by the HTTPS CPS from 7.6 · deviation under 10% during sustain
Procedure
Every test is a search for the ceiling, with a gate at each step
The RFC does not let you report a number that broke something along the way. 4 moves, in this order, for each of the 9 tests and each object size.
-
00
Reference pre-test
Bed without the DUT. Loss, latency and generator headroom recorded. Repeated if anything in the bed changes during the project.
-
01
Qualification at 10%
Initial objective is 10% of the target. All KPIs must pass the criteria at this light load, or the test stops here and we go debugging the configuration.
-
02
Run at target
Full load profile at the target objective: datasheet value, line rate or your own requirement. Passed within the criteria? That is the result.
-
03
Iterate to the maximum
Missed the target or broke a criterion? Step down and repeat until the highest load that passes is found. The final iteration runs the full 300 s sustain.
The validation gate, monitored through the whole sustain phase
- 0.001%
Maximum share of failed transactions: anything other than 200 OK, counted against all attempts. 1 in 100,000.
- 0.001%
Maximum share of connections torn down by an unexpected RST from the DUT. A firewall that resets under load fails the run.
- 5%
Maximum deviation of the forwarding rate during sustain. The traffic has to flow flat, not in sawtooth bursts.
- 10%
Maximum deviation of concurrent connections in steady state. Confirms the DUT opens and closes sessions at the same pace.
The load profile behind every run
- Init, 5 s or moreARP/ND and MAC learning. Clients stay silent, servers are ready. No measurement.
- Ramp upFrom 0 to the target objective, slow enough that the generator never exceeds the DUT's own CPS or throughput limits. No measurement.
- Sustain, 300 s or moreConstant load, constant client count. The only phase that is measured: every KPI recorded continuously, sampling interval under 2 s.
- Ramp down and collectionTraffic back to 0, then the generator merges counters and statistics into the report data. No measurement.
Deliverable
What lands on your desk
Section 6 of the RFC defines the report. Ours follows it and adds the raw material, so an auditor, a vendor engineer or your own team can re-check every number without calling us.
Benchmarks per test
- Inspected throughput in Gbit/s to 2 decimals, with kbit/s in brackets
- TCP or QUIC connections per second, per object size
- Application transactions per second (200 OK only)
- TLS handshake rate per cipher suite and key strength
- Concurrent TCP or QUIC connections held
- TTFB and TTLB: minimum, average, maximum, per object size
Context that makes the numbers comparable
- DUT make, model, firmware, port speeds; for a VNF: cores, RAM, DPDK or SR-IOV, pinning, NUMA, hypervisor
- Every enabled feature, and the reason for every recommended feature that is off
- Generator model, software version, TCP and TLS parameters, cipher suites
- Traffic mix, IPv4 to IPv6 ratio, client and server address ranges, sweep method
- Reference pre-test results: loss and latency of the bed itself
- Time and date of every run, phase by phase
From us, on top of the RFC
- Raw counters and pcaps from every iteration, so the numbers can be re-derived
- The DUT configuration export as tested, with the ACL set
- A 1-page recommendation: which box, at what load, with what switched on
From practice
40 Gbit/s on the datasheet. Which method produced it?
The headline number of most NGFWs comes from an RFC 3511-style run: large IP packets, a handful of sessions, inspection off. Put the same box through RFC 9411 with TLS inspection, IPS and application identification on, 64 KB HTTPS objects and a full handshake per connection, and the inspected throughput lands at 6 Gbit/s. The box measured 40 with one ruler and 6 with the other.
Buy for the 40 and the perimeter is sized 6 to 7 times too small. We have seen what happens next: the first outage, and an engineer quietly switching inspection off to make it go away. The purchase order is signed, the protection is half gone, and nobody wrote that down anywhere.
Test with the ruler you will live with.
How we run it
RFC 9411 as a service: in CloudLAB or at your site
You bring the DUT or the shortlist; we bring the generator, the method and the report. Scope is agreed before the first packet: which of the 9 tests, which object sizes, which device class, the IPv4 to IPv6 ratio, your traffic mix or the NetSecOPEN one.
Load & Performance Testing
The 9 benchmarks on a generator that fits your setup: Keysight, Spirent or Xena, 1G to 100G. A physical box cabled in Armenia or your virtual NGFW on our hosts, with counters live in your browser.
Request a test planSecurity & Resilience Testing
Appendix A before Section 7: 500 or more CVEs with CVSS 7 to 10, in cleartext and inside TLS, evasions included, with background load running at the same time. Blocked, bypassed, and what the DUT itself reported.
Discuss the CVE setTest Plan & Methodology Design
A test programme your tender, auditor or vendor can sign: device class, ACL set, traffic mix, cipher suites, pass criteria, report format. Handy when the vendor offers to run the test on their own kit and you want to keep them honest.
Order a test planHosted DUT Testing & Lab Rental
Ship the box or upload the VM, watch the run from a browser, keep the suites. Or rent the bed with the RFC 9411 method already configured and run it with your own engineers.
Log in to CloudLAB- Independent: we sell the test, the vendor sells the box
- Same method and same bed for every candidate on the shortlist
- Raw results and test suites stay with you
Related reading
FAQ
Questions we get before the first run
The tender still says RFC 3511. Can you test to it?
Yes. RFC 3511 is obsolete, but a procurement document is a procurement document. We run the 3511 set for the paperwork and the 9411 set for the decision, and the report explains why the two numbers differ.
Our NGFW is virtual. Does the method change?
The tests are the same; the report gets longer. Host CPU and RAM, pinned cores, NUMA node, DPDK or SR-IOV, hypervisor version all go in, because a vNGFW result without them cannot be reproduced. We also watch the host for noisy neighbours during sustain.
Do we have to enable TLS inspection?
The RFC recommends it and allows exceptions. If your deployment runs without it, we test without it, state that in the report and add a run with it on, so you see the price of switching it on later.
What if the generator is slower than the DUT?
Then there is no test. The reference pre-test exists for exactly this: the bed has to exceed the DUT's claimed performance before the DUT is connected. We pick the generator and the port count to clear that bar, and the pre-test result is in the report.
Can we bring our own traffic mix?
Yes, and we prefer it. A day of flow data from your perimeter beats any generic mix. We turn it into a profile with the same application shares and object sizes, and test 7.1 runs on it next to the standard one.
Test. Compare. Decide.
Send us the model or the shortlist and the class you are sizing for. You get back a scoped RFC 9411 test plan: tests, object sizes, cipher suites, lab days and price. Then the box goes on the bed, and the datasheet goes in the drawer.
Send the shortlist
You have the method. Now get the numbers.
Send the shortlist and the KPIs that matter. An engineer replies within one business day with a test plan draft and a quote.
Prefer to chat? Message an engineer on WhatsApp
We use what you send only to answer you. See our Privacy Policy.