Inside the filter

Where Clouduxe Prism runs, why that position matters, and how it decides which packets belong to real players.

DDoS protection5 min read

On this page
  1. Where it runs
  2. Cheapest question first
  3. It knows your game
  4. Trust is earned, not assumed
  5. It learns during the attack
  6. Your server is not sharing a policy
  7. What you tune yourself
  8. Related

Most protection is a rate limit with a nice name. This page is about what Prism actually does with a packet, because the difference shows up on the one night your server is under a real attack.

Where it runs

Prism runs inside the kernel of the machine serving your game, attached at the earliest point a packet can be inspected, before the operating system has allocated a socket buffer, walked its firewall tables, or woken your game server up.

That position is the whole design, and three things follow from it.

Dropping is nearly free. A packet Prism rejects never reaches the network stack. Your server does not spend a context switch on it, your game does not see it, and the cost of refusing a flood stays close to flat as the flood grows. Filtering further up, in the host firewall or in the application, means the packet has already cost you most of what it was going to cost.

The operating system's network stackA packet reaches the machineA player's, or part of a floodPrismInside the kernel, at the earliest point a packet canbe inspectedDropped by PrismNever reaches the network stack.Nothing below is spent.Nearly freeSocket buffer allocatedThe operating system takes the packet inFirewall tables walkedThe host firewall checks its rulesDropped by a host firewallIts socket buffer is already spentYour game server wokenThe application reads the packetDropped by the applicationMost of what it was going to costis spentThe operating system's network stackA packet reaches the machineA player's, or part of a floodPrismInside the kernel, at the earliest point apacket can be inspectedDropped by PrismNever reaches the network stack. Nothingbelow is spent.Socket buffer allocatedThe operating system takes the packet inFirewall tables walkedThe host firewall checks its rulesDropped by a host firewallIts socket buffer is already spentYour game server wokenThe application reads the packetDropped by the applicationMost of what it was going to cost is spent
Prism meets a packet before the operating system has spent anything on it. Dropped there, nothing below is spent; dropped by a host firewall or by the game itself, the packet has already been paid for. Illustration.

There is no scrubbing hop. Prism is not a proxy sitting between the internet and your server. Nothing is re-encapsulated, nothing is relayed through another city, and the filter is not a second place your traffic has to queue. Traffic that passes reaches your game the same way it would with no protection at all.

It sees the truth. Because it runs on the machine that terminates the connection, the filter reads the real source address and the real payload. A scrubbing service that relays traffic often gives your application a proxied source, which is exactly the information you need when a specific player is being flooded or a specific source is misbehaving.

Cheapest question first

Prism evaluates a packet in layers, and each layer only runs if the one before it did not already decide.

A packet arrivesEvery packet starts at the topLayer 3, the addressIs this address allowed here, and is the packetsane?Cheapest questionEnds hereBlocked sources and malformedtrafficNot decidedLayer 4, the transportA real TCP or UDP conversation, or a pretend one?Your rate ceilings apply hereEnds hereSpoofed and stateless floods,and packets over a ceilingNot decidedLayer 7, the protocolIs this the protocol the port claims to serve?Most expensive, asked lastEnds hereTraffic that does not speakthe service's protocolPassed all threeYour gameReceives only what survived the cheaper questions firstA packet arrivesEvery packet starts at the topLayer 3, the addressIs this address allowed here, and isthe packet sane?Cheapest questionEnds hereBlocked sources and malformed trafficNot decidedLayer 4, the transportA real TCP or UDP conversation, or apretend one?Your rate ceilings apply hereEnds hereSpoofed and stateless floods, and packetsover a ceilingNot decidedLayer 7, the protocolIs this the protocol the port claimsto serve?Most expensive, asked lastEnds hereTraffic that does not speak the service'sprotocolPassed all threeYour gameReceives only what survived the cheaperquestions first
The three questions, cheapest first. Each layer ends what it can and passes on only what it could not decide, so the most expensive question is asked of the least traffic. The three layers are the three steps below. Illustration.
  1. Layer 3, the address

    Is this address allowed to talk to this server at all, and is the packet structurally sane? Blocked sources and malformed traffic end here, at the lowest possible cost.

  2. Layer 4, the transport

    Is this a real TCP or UDP conversation, or a packet pretending to be one? This is where spoofed and stateless floods are separated from traffic belonging to a connection that actually exists, and where the rate ceilings on your port rules apply.

  3. Layer 7, the protocol

    Is this actually the protocol the port claims to serve? A packet aimed at a FiveM port is checked against how FiveM really behaves, not against a generic notion of UDP.

Ordering the work this way is why the filter holds up. The expensive question is only ever asked about traffic that already survived the cheap ones.

It knows your game

A rate limit cannot tell a player from a booter, because both send packets. A protocol validator can, because only one of them speaks the protocol correctly.

Prism ships validators written specifically for the services people actually run on it:

FamilyCovers
FiveMThe Cfx.re game and listing traffic
MinecraftJava edition, and Bedrock over RakNet
SourceCS2, CS:GO, TF2, Garry's Mod and the shared query protocol
rAthenaRagnarok Online logins and zone traffic
TeamSpeakVoice, server query and file transfer
RDPRemote Desktop
DNSQuery and response validation
VPNCommon tunnel protocols

Each one understands how a genuine client opens a conversation on that service. That is why protection tuned for a game does not need to be as blunt as a plain packet cap, and why a flood that would sit comfortably under a rate limit still gets dropped when it does not speak the language.

Trust is earned, not assumed

The most useful thing Prism tracks is not how fast a source is sending. It is whether that source has behaved like a real client.

Sources accumulate a judgement over time. Completing a genuine protocol handshake counts in a source's favour. So does answering a challenge, and so does sending with the irregular timing of a human rather than the metronome of a script. Behaviour that only makes sense for an attack counts against it.

Two things follow that matter during an incident:

  • A player who has already proved themselves is not thrown away when the server comes under pressure. The filter has a reason to keep them that a rate limit does not.
  • An unknown source arriving mid-flood starts from nothing. It has to earn its way in at exactly the moment the bar is highest.
The moment the server comes under pressureA player who has proved themselvesHas already behaved like a real clientCompleted a genuine protocol handshakeAnswered a challengeSends with the irregular timing of a humanKept: the filter has a reason to hold onto them that a rate limit does notAn unknown source, mid-floodHas no record with the filter yetNo handshake yetNo challenge answered yetNo timing to judge yetStarts from nothing, and has to earn itsway in while the bar is highestAgainst any source: behaviour that only makes sense for an attack.The moment the server comes under pressureA player who has proved themselvesHas already behaved like a real clientCompleted a genuine protocol handshakeAnswered a challengeSends with the irregular timing of ahumanKept: the filter has a reason to hold onto them that a rate limit does notAn unknown source, mid-floodHas no record with the filter yetNo handshake yetNo challenge answered yetNo timing to judge yetStarts from nothing, and has to earn itsway in while the bar is highestAgainst any source: behaviour that only makessense for an attack.
The same flood, two sources. The player arrives with a record in their favour and is kept; the unknown source has no record yet and meets the filter at its strictest. Illustration.

This is also why pausing protection during an attack is worse than it sounds. The filter's accumulated picture of who is real is part of what is holding your server up.

It learns during the attack

Signatures only catch attacks somebody has already seen. Real attacks against game servers are frequently just novel enough to miss.

Prism carries a zero-day engine that works without signatures. When traffic starts behaving like a coordinated attack, it derives the shape of that specific attack while it is happening and starts refusing traffic matching it, then relaxes when the pattern stops. Nothing has to be written, published, or pushed to you first.

Your server is not sharing a policy

Every server gets its own filtering state and its own rules. Your port rules, your rate ceilings, your allow and deny lists and your accumulated picture of which sources are real belong to your server alone. Another customer being attacked does not tighten anything on yours, and a rule you set does not leak outwards.

What you tune yourself

Everything on this page runs whether or not you touch it. What you set yourself is the shape of the policy: which ports are open, what rates they accept, and which validators run. Those are documented in full, with the real field names, in Port rules, Rate limits and Protocol validation.

To see what the filter actually did with a given source, the Attacks tab shows what was dropped and why.

Need a server, or a hand with one?

Pick a plan to deploy a server, or open a ticket in the panel. Support runs 24/7/365.