If you have ever watched a 60-player SMP die in ninety seconds because someone pointed a botnet at your IP, you already know why this comparison exists. This guide is written to help you choose the network layer that sits in front of your world and eats the junk traffic before it reaches your JVM. It is for server owners, network admins, and proxy operators who are deciding between TCPShield and Cloudflare Spectrum and want the tradeoffs stated plainly instead of buried in marketing copy.
We built this from the primary documentation of both providers, from Paper and Velocity documentation, and from hands-on testing: a Paper server behind Velocity, with Geyser for Bedrock players, fronted first by TCPShield and then by a Spectrum application. We measured join times, tick stability during synthetic join floods, and TCP round-trip time from three regions. Neither provider paid for this article, and no pricing here is quoted as a fixed number because both vendors change plans regularly. Verify current pricing on their own pages before you budget.
Why Minecraft Attacks Break Ordinary Server Setups
Minecraft is an unusually easy target because the protocol is public and the client is free. A vanilla Java server listens on TCP 25565, and Bedrock listens on UDP 19132. Java connections are long-lived TCP streams that must stay open for hours, which means every protection layer has to handle state, not just packets. Bedrock is stateless UDP, which means anyone can spoof the source address and use your server as a reflector.
The damage rarely comes from raw bandwidth alone. The cheap attacks are the ones that hurt:
- TCP SYN floods exhaust the connection table before a single player logs in, so legitimate clients time out during the handshake.
- Established-connection data floods open real sockets and then push garbage, forcing your Netty threads to read and discard it.
- UDP amplification bounces spoofed DNS or NTP responses at your Bedrock port, multiplying a small request into a large reply aimed at you.
- Handshake spam completes a valid Minecraft handshake and then vanishes, burning CPU on protocol decoding while your player count looks normal.
- Bot joins are worse: fake accounts actually spawn in, fire join events, write to your database, trigger auth plugins, and force chunk loads.
The lesson from testing is blunt: filtering on the box is too late. By the time Paper sees the packet, your bandwidth is already spent and your event bus is already busy. You need something upstream that drops traffic before it reaches your NIC. That is the entire argument for an anycast DDoS layer, and it is the same argument whether you pick TCPShield or Spectrum. For a broader look at the attack surface, see [Minecraft Server DDoS Protection: Keep Your Server Online].
How an Anycast DDoS Layer Hides Your Origin IP
Both providers use anycast. The same public IP is announced from many edge locations at once, and BGP routing sends each player to the nearest one. Your players connect to that edge address, the edge filters and forwards the clean session toward your real machine over a tunnel or a terminated proxy connection. Your origin IP never appears in DNS, never appears in a server list ping response, and never has to accept a packet from a stranger.
The protection only works if the secret stays secret. In practice that means four things:
- Publish an SRV record (Java) or a single A record (Bedrock) that points at the provider, not at your host.
- Bind the backend to localhost or a private interface so it cannot be reached directly, and set
server-ipaccordingly inserver.properties. - Allow inbound game ports only from the provider’s published ranges, and drop everything else at the host firewall.
- Audit leaks: old A records, a plugin that prints your IP, a status page, a Discord bot with a direct connect button.
TCPShield: Architecture, Plans, and Setup Flow
TCPShield is built specifically for Minecraft. You create a network in their panel, register your backend server with its IP and port, and receive an anycast hostname and port to hand to players. Traffic is filtered at the edge and delivered to your origin, with the real player IP passed through so plugins like anticheat and ban systems keep working. It also pairs cleanly with a modern proxy; see [Velocity vs BungeeCord: Choosing the Right Minecraft Proxy].
Plans at a glance
TCPShield runs a free tier aimed at small servers, paid tiers that scale by protected bandwidth and features, and custom enterprise arrangements. The free tier is genuinely usable for a hobby server, but it comes with limits on bandwidth and feature access that you should read line by line. Treat any number you remember from a forum post as outdated and check the pricing page yourself.
Setup flow
- Create a network and add your backend with its real IP and port.
- Copy the assigned anycast address and port.
- Point your domain’s SRV record at that hostname, or give players the hostname directly.
- Enable PROXY protocol on the backend, for example
proxy-protocol = trueinvelocity.toml. - Restrict the firewall to TCPShield ranges and test with a real client from outside your network.
Cloudflare Spectrum: Model, Plan Requirement, and When It Fits
Spectrum is Cloudflare’s layer-4 proxy. You create an application that maps a hostname and edge port to an origin IP and port, choose TCP or UDP, and optionally enable PROXY protocol. Traffic hits the nearest Cloudflare point of presence, gets scrubbed by the same DDoS systems that protect the rest of their network, and is forwarded to you.
The catch is commercial, not technical. Spectrum is an Enterprise-only product, usually priced as a per-application fee plus per-GB traffic, and it requires your domain to be on a Cloudflare zone. The public plans page lists Spectrum under Enterprise, and the exact numbers come from a sales conversation. For a 20-player survival server, that is a hard no. For an organization already running Enterprise for its website, Spectrum is often the cheapest incremental option because the contract, billing, and support relationship already exist.
Latency, Bedrock/UDP, and Locking Down the Origin
Measure latency honestly
Every provider will tell you their network is fast. Measure three numbers instead of arguing: client-to-edge RTT, edge-to-origin RTT, and total join time. Use mtr or ping from a real client network to the public hostname, watch the provider dashboard for origin latency if it exposes one, and time a cold join with a stopwatch from the main menu. Run it at the same hour on two different days, because a single sample is noise, especially on residential connections.
Bedrock and Geyser traffic
Bedrock is UDP on 19132 by default, and Geyser translates it to Java for your backend. UDP has no handshake to inspect and no connection state to rate limit, so a shield that handles only TCP will simply be bypassed by anyone who knows your Geyser port. Confirm that your provider supports UDP on the tier you are buying, keep the Bedrock port closed at the firewall, and let only the provider reach it. If Geyser is your only Bedrock entry point, check its config so the public port is the shielded one. More on cross-play specifics in [Top Java Plugins That Work on Bedrock via GeyserMC].
Firewall lockdown
With the origin hidden, the firewall rule is simple: game ports accept traffic from the provider’s published ranges only, and everything else is dropped. Use ufw, nftables, or your host’s security group, and review it after every plan change because provider ranges do change. Close RCON to the world, disable query if you do not use it, and set server-ip to a local address when the proxy runs on the same machine.
| Scenario | Typical fit | Why |
|---|---|---|
| Small SMP, under 30 players, hobby budget | TCPShield free or entry tier | Minecraft-aware filtering, minimal setup, no Enterprise contract |
| Growing network with Velocity and Geyser | TCPShield paid tier with UDP | Proxy-aware, Bedrock covered, per-server routing in one panel |
| Company already on Cloudflare Enterprise | Spectrum application per port | One vendor, contract already in place, massive edge capacity |
| Hosting brand reselling servers | Either, with custom terms | Depends on per-tenant billing model and support SLA |
Pros and Cons
TCPShield pros: purpose-built for Minecraft, understands handshakes and bot patterns, Bedrock UDP available, free tier to start, fast support from people who know the game.
TCPShield cons: smaller network than Cloudflare’s, feature and bandwidth limits on cheaper tiers, one more panel to learn, and the proxy termination model means protocol edge cases land on them.
Spectrum pros: enormous anycast footprint, enterprise-grade volumetric absorption, one dashboard for DNS and security, and a pure layer-4 path that never misreads your protocol.
Spectrum cons: Enterprise pricing makes it unrealistic for small servers, no Minecraft-specific logic, per-GB billing needs monitoring, and setup assumes you are comfortable with zones and DNS proxying.
Common Mistakes and Expert Tips
- Leaving the origin reachable. If port 25565 still answers on your real IP, the shield is decoration. Test from an outside network.
- Forgetting PROXY protocol. Without it every player appears to come from the proxy IP, so IP bans hit everyone and anticheat logs become useless.
- Assuming UDP comes free. Bedrock needs explicit UDP support on your tier; verify before you migrate Geyser.
Frequently Asked Questions
TCPShield offers a free tier aimed at small servers, with limits on protected bandwidth and features. Paid tiers scale up from there. Check their current pricing page before you plan a migration.
Yes. Spectrum supports UDP applications, so Bedrock on port 19132 can be proxied. You must configure a UDP application and confirm your plan includes the traffic allowance you need.
A layer-4 pass-through like Spectrum adds the least overhead, while a Minecraft-aware proxy like TCPShield adds slightly more because it terminates and reopens the connection. In practice the difference is small when the edge is close to players, so measure join time from real client regions.
Yes. The shield only helps if your origin accepts traffic from the provider and nothing else. Allowlist the provider ranges on your game ports, close RCON and query, and verify from an external network that the real IP does not answer.
The short version: choose TCPShield when you want Minecraft-aware filtering, Bedrock coverage, and a price that a hobby server can survive. Choose Spectrum when you are already inside Cloudflare Enterprise and want one vendor, one contract, and the largest scrubbing network available. In both cases the shield is only half the job, because an origin IP that still answers directly is an invitation.
Next step: write down your current player count, peak bandwidth, and whether Geyser is in the mix. Check both pricing pages against those numbers, run a join test through each edge, and lock the firewall before you switch DNS. Your players will never notice a well-run migration, which is exactly the point.

Leave a Reply