How the filter works, one packet at a time.

A packet aimed at your server meets eight places on its way in. Three of them can end it on the host, and each asks a harder question than the last, so the expensive work is only done for traffic that already passed the cheap checks.

The path in, from the edge of the network to your service. The rail narrows as traffic is removed, and turns blue only once nothing is left to check.

  1. The upstream edge

    On the network, before your server

    Floods large enough to fill the link are absorbed here, with 17 Tbps of mitigation capacity that is the same on every plan. You do not configure it and there is no control for it in the panel.

    Ends here

    • Volumetric floods
    • Amplified reflection
  2. Your server's network card

    The host's 25 Gbit/s card

    What the edge let through arrives at the machine that will serve it. Nothing has been allocated for the packet yet.

    Nothing is decided here

  3. The XDP program at the driver

    Clouduxe Prism attaches here

    Prism is an XDP/eBPF program attached at the network driver, the earliest point a packet can be inspected: before the operating system allocates a socket buffer, walks its firewall tables or wakes your service up. If protection is paused, every packet passes on from here unfiltered.

    Nothing is decided here

  4. Layer 3, the address

    The cheapest question

    Is this source allowed to talk to this server at all, and is the packet structurally sane? Your deny list is applied here, whichever port the sender aims at. It is the cheapest check there is, so it runs first.

    Ends here

    • Blocked addresses
    • Malformed packets
  5. Layer 4, the transport

    Spoofing, state and your ceilings

    Is this a real TCP or UDP conversation, or a packet pretending to be one? SYNs whose TCP stack fingerprint looks forged are dropped, and under load an unknown UDP source has its first packet dropped: a real client retransmits, a forged one never does. The packet-rate and connection ceilings on your port rules apply here.

    Ends here

    • SYN floods
    • Spoofed UDP
    • Connection floods
    • Traffic over your ceilings
  6. Layer 7, the protocol

    Only for traffic that survived the rest

    Is this actually the protocol the port claims to serve? A packet aimed at a DNS port is checked against how DNS behaves, not against a generic idea of UDP. The zero-day engine and behavioural scoring work here too.

    Ends here

    • Protocol impostors
    • Query floods
    • Off-path HTTP
    • Patterns derived during the attack
  7. The kernel network stack

    Where ordinary networking begins

    Only now does the operating system spend memory and a context switch on the packet. Everything that reached this point was judged to belong to a real client.

    Legitimate traffic only from here

  8. Your service

    Whatever you run: a site, an API, a VPN, a remote desktop

    Traffic that passes reaches your service the same way it would with no protection at all: nothing is re-encapsulated and nothing is relayed through another city.

    Legitimate traffic only from here

Stops 3 to 6 are Clouduxe Prism, running on your own server at the network driver. Detail on each attack and the stop that ends it is on Attack types.

Why the driver is the right place to decide. The position is the whole design. Three things follow from it.

  1. 1

    Dropping is nearly free

    A packet Prism rejects never reaches the network stack. Your server does not spend a context switch on it, so the cost of refusing a flood stays close to flat as the flood grows. Filtering in the host firewall or the application means the packet has already cost most of what it was going to cost.

  2. 2

    There is no scrubbing hop

    Prism is not a proxy between the internet and your server. There is no second place for your traffic to queue, and no detour through another city.

  3. 3

    It sees the real source

    Because it runs on the machine that terminates the connection, the filter reads the real source address and the real payload. A relay often hands your application a proxied source, which hides exactly the information you need when one address is flooding you.

Port rules decide what is reachable. One rule per port or range, naming the service, which tells Prism which checks are possible.

  • One port, one protocol, one service

    A port rule opens one port, or one contiguous range, on one protocol, and names the service you run there. The service is what tells Prism which checks are possible: which validator runs, which engines apply and which ceilings make sense.

    A rule is TCP or UDP, never both, so a service that uses the same port on both, such as DNS on 53 or RDP on 3389, needs two rules. A server holds up to 15 rules, and a saved change reaches the server at its next configuration poll, within about 30 seconds.

    Read: Port rules
  • Default for unlisted ports

    A port with no rule falls to this setting. Under Allow it stays reachable and gets the always-on protections only; under Deny all it is dropped. The example here uses Deny all.

Firewall, inbound rules5 rulesExample view
  • TCP 443Web (HTTPS)
    Protocol validation
    Off
    Whole port
    None
    Per connection
    Service default
  • TCP 22SSH
    Protocol validation
    Off
    Whole port
    2,000 pps
    Per connection
    100 pps
  • UDP 53DNS
    Protocol validation
    On
    Whole port
    20,000 pps
    Per connection
    Service default
  • TCP 3389RDP
    Protocol validation
    On
    Whole port
    5,000 pps
    Per connection
    Service default
  • UDP 30120FiveM
    Protocol validation
    On
    Whole port
    50,000 pps
    Per connection
    Service default
  • Any other portNo rule

    Closed

growth-sg / FirewallTry itExample view

growth-sg

203.0.113.40

Inbound rules
5
Trusted sources
1
Blocked sources
1
Protection
Active

Default for unlisted ports

AllowDeny all

Pause protection or change the default to see what it means.

Every port not listed is closed. Nothing reaches the server without a rule. In this example the server's default for unlisted ports is set to Deny all.

Two ceilings, and one only works inside the other. Counted in packets per second, which is what exhausts a server.

Both ceilings live on the rule

The per-connection field stays greyed out until the whole-port ceiling is above zero, and the panel says why right under it. The values shown are the Minecraft (Java) preset's.

growth-sg / Firewall / Edit ruleExample view
RuleTCP 25565 Minecraft (Java)
Whole port, packets/sec (0 = unlimited)10,000
Per connection, packets/sec (0 = service default)250

Needs a whole-port ceiling above. The datapath only consults this inside that limit, so on its own it is not applied.

Why the second ceiling exists

In one incident from our documentation, 2,275 established connections pushed 569,000 packets per second through a port whose whole-port ceiling was 5,000. Each connection looked reasonable.

Packets per second, to scale. Divided across the connections that is about 250 each (569,000 ÷ 2,275), which no single-flow check would call unusual. A per-connection ceiling is what bounds each of them.
Whole port, packets/sec
pps_limit. Counted across every source sending to the port, so this is what bounds a flood from thousands of addresses. 0 means no aggregate limit.
Per connection, packets/sec
estab_flow_pps. Applies to one established flow. 0 means the built-in default for that service, not unlimited.
How they depend
The filter only consults the per-connection ceiling inside the whole-port one. Set on its own, it is never applied, so the panel greys it out until the whole-port ceiling is above zero.
Choosing numbers
Start from your own busy hour and leave headroom. A ceiling below your real peak drops real users, and it looks exactly like an attack.

Read: Rate limits

Protocol validation reads the payload. A rate limit counts packets. A validator checks what they say.

  • Off on a rule you add by hand

    Once a connection is established the ceilings treat it as vouched for, so a flood riding open connections can pass under them. Protocol validation catches it, because it checks that the traffic actually speaks the service's protocol and drops what does not.

    It is off on a rule you add by hand, on purpose: switching it on beneath a running server could cut off an unusual client or an older client build without warning. Most preset rules arrive with it on. Turn it on when someone can test a connection, not in the middle of an attack.

    Read: Protocol validation
growth-sg / Firewall / Edit ruleTry itExample view
RuleUDP 30120 FiveM

Protocol validation (L7)

Checks that traffic actually speaks this service's protocol and drops what doesn't.

Catches a flood hiding inside connections that are already open, which the rate limits above cannot see. Turn off if a real client or mod gets dropped.

Which services have a validator

The service picker marks them. On a service without one the switch has no effect, and the port is covered by the rate limits, layer 3 and layer 4 and the behavioural engines.

ValidatorWhat it understands
DNSQuery and response validation
RDPRemote Desktop
VPNCommon tunnel protocols
TeamSpeakVoice, server query and file transfer
Game protocols4 families: FiveM, Minecraft, Source and rAthena. What each one covers

Three engines you can switch off, one rule at a time. Three switches, for the rare client that looks unusual.

EngineRuns onWhat it doesWhen to switch it off
TCP fingerprintTCP rulesDrops SYNs whose TCP stack fingerprint looks forged.Turn off if a real client behind an unusual NAT, VPN or tunnel is being blocked.
Signature (zero-day)UDP rulesLearns the payload pattern of an in-progress attack and blocks it, without a rule being written first.Turn off for a service whose legitimate payloads are unusual or highly variable.
UDP first-packet challengeUDP rules on game servicesUnder load, drops an unknown source's first packet. Real clients retransmit and get through; single-shot spoofed floods never do.Turn off if real users sharing one address (CGNAT, office or campus NAT) drop out during an attack.

Each switch only applies where it can run

On a UDP game rule, TCP fingerprint renders dim with the reason. Turn off one engine, only after Address lookup has named it, and give the server about 30 seconds to pick up the change.

growth-sg / Firewall / Edit ruleTry itExample view
RuleUDP 30120 FiveM
  • TCP fingerprint

    Applies to TCP rules. No effect on this one.

  • Signature (zero-day)

    Learns the payload pattern of an in-progress attack and blocks it, without a rule being written first.

  • UDP first-packet challenge

    Under load, drops an unknown source's first packet. Real clients retransmit and get through; single-shot spoofed floods never do.

The first-packet challenge, drawn out

Under load, an unknown UDP source has its first packet dropped. A real client does what real clients always do and sends again, and from then on its conversation passes. A spoofed flood sends each forged address once and never retransmits, so none of it gets past the first packet.

Dropped as a first packet Passed

What the filter remembers. Trust is earned per source, patterns are learned per attack, and the state stays on your server.

  • Trust is earned

    Sources build up a judgement over time. Completing a genuine handshake counts in their favour, so does answering a challenge, and so does the irregular timing of a human rather than the metronome of a script. A client that has already proved itself keeps priority when pressure rises. An unknown source arriving mid-flood starts from nothing, at the moment the bar is highest.

  • It learns during the attack

    Signatures only catch attacks someone has already seen. The zero-day engine derives the shape of the attack in progress and refuses traffic matching it, then relaxes when the pattern stops. Nothing has to be written, published or pushed to you first.

  • Your server keeps its own state

    Every server has its own filtering state and its own rules: your ports, ceilings, allow and deny lists and your picture of which sources are real. Another customer being attacked does not tighten anything on yours, and a rule you set never leaks outwards.

  • Pausing costs more than it seems

    Paused lets all traffic through unfiltered. The accumulated picture of who is real is part of what holds a server up during an attack, so pause only to troubleshoot, and switch back as soon as you are done.

Every drop leaves a reason. An ended attack reads as one record of what it was made of and where it stopped.

Each dropped packet is logged with the check that dropped it. The Attacks tab groups those drops into incidents: what the attack was made of, which port it aimed at, and which stop on the path above ended it.

The traffic figures come from exact counters. The breakdowns are built from a sample of the drops, so they show the shape of an attack rather than a count, and the panel marks them with a tilde.

  • One incident, stop by stop

    The upstream share first, then each sampled drop reason on the layer that applies it.

Read: Reading the Attacks tab

Attacks tab, where one incident endedudp/53Example view

Made of Amplification, Protocol impostor and Per-source flood, from 11,420 sources over 6 min 40 s.

  1. Upstream edge94%

    of the attack removed upstream, before it reached the server

  2. What reached Prism was then dropped at these stops. Shares are from a sample of the drops, hence the tilde.

  3. Layer 3, the address~6%
    • Blocked source~6%
  4. Layer 4, the transport~33%
    • Whole-port ceiling~24%
    • Per-source ceiling~9%
  5. Layer 7, the protocol~61%
    • Protocol validation~61%
  6. Passed to the server

    Legitimate traffic held between 55 and 62 thousand packets per second for the whole incident.

Example view. The figures are an illustration, not a reading from a server.

The same path runs on every server we sell.

VPS, VDS or bare metal, in any region: the same 17 Tbps upstream, the same XDP/eBPF filter at the network driver.