Deep dive

Protocol-aware filtering: why generic DDoS protection fails Minecraft

Every generic mitigation product filters on the same three things: what the packet looks like, how fast it is arriving, and where it came from. A modern Minecraft bot attack is unremarkable on all three — correct packets, human-plausible rate, residential addresses. This is the structural reason a server with "DDoS protection" still dies to a join flood, and the reason the filter has to speak Minecraft.

The three signals generic protection uses

Strip the marketing from any general-purpose DDoS product and it filters on some combination of three things. Packet shape: is this well-formed, is the header sane, does it match a known attack signature. Rate: how much is arriving, from how many sources, how fast. Reputation: is this source known bad, is it a datacenter, has it misbehaved before. These three catch an enormous amount of real attack traffic and they are genuinely valuable.

Now consider what a competent Minecraft bot attack looks like against each one. The packets are valid Minecraft protocol — the bot completes a real TCP handshake and sends a real login sequence, because it has to in order to cost you anything. The rate per source is deliberately low, because the attacker knows about rate limits and has thousands of sources. And the origins are increasingly residential proxies, which are indistinguishable from your actual players because they *are* actual consumer connections.

All three signals read normal. Not marginal — normal. This is not a tuning problem that a better threshold solves; it is a category error. The information needed to make the decision is in the application payload, and generic filtering does not look there.

What the protocol actually tells you

The moment a filter parses the Minecraft protocol, a set of decisions becomes available that simply do not exist at the packet layer:

The part that decides outcomes: what happens to the residue

Even perfect protocol parsing leaves something behind. A bypass bot — one written specifically against a known antibot — paces itself correctly, sends plausible fields, connects from residential addresses and does nothing anomalous, because that is the entire design goal. Scoring cannot catch it. If your defence only ever *scores*, the attacker can query it until they pass.

So the last step stops scoring and starts asking. Suspicious joins are detoured into a limbo server and required to demonstrate they are a real client: movement that obeys the game's physics, correct responses to server state, behaviour a headless bot has to genuinely implement rather than imitate. Passing is nearly free for a player and expensive per-bot for an attacker, which is the whole economic argument. And because those checks are not published, a bot tuned against one of them does not automatically pass the next — the structural advantage an unpublished gauntlet has over an open-source plugin whose checks an attacker can simply read.

Why position matters as much as knowledge

A Minecraft plugin is protocol-aware by definition; it lives inside the server. Its problem is where it sits. By the time a plugin can reject a connection, your kernel has accepted it, your proxy has allocated a session and your CPU has parsed it. During a flood, the resources are spent before the verdict is reached — which is why plugin-based antibot works well against small attacks and collapses against large ones. The full argument is in edge antibot vs plugin antibot.

The same logic applies upward. Protocol-aware filtering does not replace volumetric absorption — if the flood is larger than your uplink, the uplink is full and nothing behind it gets a vote. The two solve different halves: absorption handles the traffic that was never pretending to be anything, and protocol awareness handles the traffic that was. A stack needs both, in that order, which is what the stage-by-stage walkthrough shows end to end.

How to tell whether a provider actually does this

Common questions

What is protocol-aware filtering?+

Filtering that parses the application protocol it is protecting rather than treating traffic as opaque packets. For Minecraft that means reading the handshake, evaluating the hostname the client asked for, distinguishing a status ping from a login attempt, tracking connection state across the join sequence, and judging whether behaviour is consistent with a real client — decisions that are impossible if you only see bytes on port 25565.

Why can't generic DDoS protection stop Minecraft bot attacks?+

Because generic protection filters on packet shape, rate and source reputation, and a well-built join flood is normal on all three. The packets are valid, each source stays under any sane rate limit, and residential proxies make the origins look like ordinary players. There is no anomaly to detect at the network layer, because at the network layer nothing anomalous happened.

Is protocol-aware filtering the same as a firewall rule for port 25565?+

No. A firewall rule decides whether traffic to a port is allowed, based on addresses and packet properties. Protocol-aware filtering decides whether a connection is a player, based on what the connection actually says and does. A firewall cannot read a handshake; it does not know the format exists.

Does protocol-aware filtering add latency?+

Very little, when it runs inline at wire speed rather than queuing traffic for inspection. Parsing a handshake is cheap — it is a few small fields at the very start of a connection. The expensive-sounding part, verification, only engages for connections that were flagged, so a clean join is decided in the first packet and forwarded.

Can a plugin do protocol-aware filtering?+

A plugin is protocol-aware by definition — it runs inside the server and sees everything. Its problem is position, not knowledge: it acts after the connection has already been accepted, allocated and parsed by your hardware. That is fine as a second layer and hopeless as the first, because during a large flood the cost has already been paid by the time the plugin gets a say.

Every layer described here runs on every Arvoris plan, including the free one — paid tiers add capacity and control, not protection. Create a free network and put it in front of your server in about five minutes, or read the glossary if any of the terms above were new.

Related reading

Edge antibot vs pluginMinecraft bypass botsHow Cryo mitigates attacksEdge vs. server-side protection

Your next attack is already scheduled.
Be behind the edge when it lands.

We take care of security so you can branch out. Free plan, no card, one DNS record — if it doesn't hold, you lost five minutes.