Hosting game servers, and having to write the protection ourselves
We began as a host for game servers - Counter-Strike and Half-Life
among them. They were attacked constantly, and a game server is an unforgiving thing to
defend: a few seconds of packet loss ends the round, and the customer does not wait for
an explanation before moving somewhere else.
So we went looking for something to put in front of them, and found that nothing
available in 2009 actually fit. The appliances of the day were built for web and mail.
They thought in connections per second and bytes per second, and neither the traffic of
a game server nor an attack on one looks anything like that. What existed was either
priced for carriers, or simply blind to what we were being hit with. So we started
writing our own.
The first filter we wrote understood exactly one thing: the Source engine
query protocol.
That narrowness was the point. A generic firewall of the day counted packets and
could tell you a port was busy. It could not tell a real player's join from an A2S
query flood, because it had no idea what either looked like. Ours could, because it
was written against the protocol rather than against the port number - a principle
that survived every rewrite since and is still how the filter decides today.
What forced the next step
Protecting one protocol well is a product. Protecting a network means protecting
protocols you have not seen yet, and the filter had nowhere to put them.
ProtectedGame servers
Data planeUserspace
DirectionInbound only