Why game servers are attacked differently
Every server has limits — bandwidth, connections, CPU, memory — and a denial-of-service attack exists to exhaust one of them. On a website the cheapest limit to exhaust is usually bandwidth or request throughput. On a Minecraft server it is almost never bandwidth. It is the work per connection.
Consider what a vanilla server does when somebody connects. It accepts a TCP connection, reads a handshake, and if the connection asks to log in it generates an encryption request, waits for the client's reply, performs an RSA decryption, and makes an HTTPS round trip to Mojang's session servers to prove the account is real. Only then does it start loading a player into a world. Every one of those steps is real work, and every one of them can be triggered by a connection that has no intention of ever playing.
That asymmetry is the whole attack. Sending a login attempt costs an attacker a few packets. Answering one costs the server a cryptographic operation and a round trip to a third party. Multiply that by a rented botnet and the server does not run out of bandwidth — it runs out of the ability to keep ticking, and the players already in the world watch the tick rate collapse.
The same shape shows up in a much cheaper form: the server-list ping. Every client that shows your server in its list sends one, and answering it is normal behaviour. It is also free to send and slightly expensive to answer, which has made it a standing way to hammer a server that has done nothing wrong. A ping flood does not kick anybody, but it makes your listing go dark exactly when people are trying to find you.
The four things that actually get thrown at a server
Connection floods open TCP connections and do nothing with them, or open and close them as fast as the network allows. The cost is in the accept loop and the per-connection state, not in the data.
Join floods (bot attacks) go further and complete a login, usually with a randomly generated username. This is the expensive one, and it is what most people mean when they say their server got "botted". Read more in Minecraft bot attacks.
Ping floods hammer the server-list status endpoint. Cheap to send, and they take the server's public listing down without ever touching the game.
Volumetric floods are the classic case — raw UDP or amplified traffic aimed at saturating the network link. They are the least Minecraft-specific of the four and the one thing a server operator genuinely cannot fix at the software layer: the link is already full before the packets reach the machine. This is the layer that has to be absorbed upstream, on a network with the capacity to eat it. See What is a DDoS attack? for the general picture.
| Attack | What it costs the attacker | What it costs the server |
|---|---|---|
| Connection flood | A TCP handshake | Accept, socket state, timers |
| Join flood | A handshake plus a login packet | Encryption, a session-server round trip, world load |
| Ping flood | One small packet | A status response, repeatedly |
| Volumetric flood | Rented amplification | The network link itself, before the server sees anything |
Why a plugin cannot save you
Anti-bot plugins are the first thing most operators reach for, and they help against the crudest attacks. But there is a structural ceiling on how much they can do: a plugin runs inside the server process. By the time it gets to make a decision, the server has already accepted the connection, allocated state for it, parsed protocol and, depending on the attack, performed the cryptography. The plugin can prevent the player from joining the world. It cannot prevent the server from having already paid for the attempt.
The same argument applies to firewall rules on the machine itself. They are better — the packets are dropped earlier — but they are still on the machine whose resources the attack is targeting, and they can only make decisions on addresses, not on behaviour. A botnet is thousands of addresses, each behaving normally.
Protection has to sit somewhere the attack has to pass through before the server spends anything at all.
What a protective proxy does instead
A reverse proxy for Minecraft works the same way as one for a website: you point your server's public address at the protection network instead of at your machine, and connections arrive there first. Everything that fails screening is stopped at that point. Everything that passes is relayed to your server.
That relocation is what makes the rest possible:
- Screening is paid for by the network, not by your server. A join flood that would have exhausted your CPU is answered by hardware built to answer it.
- The server-list ping is answered from a cached snapshot rather than by dialling your machine, so a ping flood costs you nothing and your listing keeps showing the right player count and message. See Minecraft ping floods and server queues.
- Bans are enforced before the door. A banned player consumes no slot and opens no connection to your machine.
- Your server's own address stops being the address your community passes around. See How to protect your Minecraft server IP.
Fixed thresholds are the wrong instrument
The most common way to get this wrong is to pick a number. Two hundred joins in a second is an emergency for a small survival server and an ordinary evening for a large network. A fixed threshold has to choose one of those and be wrong about the other: set it low and a popular server is throttled for being popular, set it high and a small server is defenceless.
The alternative is to measure a server against itself. A running baseline of what that specific hostname's traffic normally looks like, and a trip when the current rate departs from that baseline by more than ordinary variance explains. A large server is then never punished for being large, and a small one is never left undefended. Fixed ceilings still exist underneath as a backstop — a rate that is unambiguously an attack for anybody — but they are the floor of the system, not the whole of it.
One detail matters more than it sounds: the baseline has to freeze while a server is being attacked. Otherwise a sustained flood slowly trains itself into the definition of normal, and the detector goes quiet exactly when it is needed.
Challenge, do not block
The instinct under attack is to block. It is also the most expensive mistake available, because the cost of a wrong block is a real member of your community who cannot get in and has no idea why.
A better default is to make an uncertain connection prove something. The proof can be cheap for a person and ruinous for a bot farm: hold a real Minecraft account, or read a short code off the screen and type it back. A genuine player spends a few seconds once. An automated tool running thousands of connections has to pay that cost per account and per join, which is exactly the economics that makes the attack unprofitable.
This is why traffic from VPNs and hosting networks should be challenged rather than blocked. A large share of genuine players connect through one, and blocking the category quietly throws away members. Minecraft CAPTCHA and player verification covers what those proofs look like from both sides.
Cheating is a different problem with the same door
Keeping the server up is one half. The other half is what happens once somebody is legitimately inside, because a player who holds a real account, passed every challenge and behaves like a normal client can still fly, hit through walls or see ore through stone. That is a separate layer, and it is covered in What is a Minecraft anticheat?.
What to look for in a provider
- Screening that happens before your server pays anything for a connection.
- Detection calibrated against your server's own traffic, not a published number.
- Challenges rather than blocks for anything uncertain, and no requirement for your players to install anything.
- Your server keeping its own authentication, so a leaked backend address does not let anybody join as anybody.
- A record of what was allowed and what was stopped, and why — so "were we attacked last night?" is a question with an answer you can point at.
- Volumetric capacity upstream, because that layer genuinely cannot be solved at the game protocol.
Itnetic's game protection does all of the above for Java Edition servers, vanilla or modded, with no plugin and nothing for players to install, and it is included in every plan.