I'm fairly sure that the real cause of the metaserver DOS is not some
random attacker but the crossfire server itself: you just need to set up
a (new) crossfire server and change the "metaserver_notification off"
config option to "on" to make your server flood the metaserver.


The patch

    cvs diff -r 1.9 -r 1.10 lib/settings

changed the default value for the "fastclock" config option from 0 to 1.
That probably means that many new servers will run in fastclock mode.


Furthermore, socket/loop.c contains a logic error if fastclock is
enabled:

(excerpt from socket/loop.c; I stripped code not related to the problem)
| /** Waits for new connection */
| static void block_until_new_connection() {
|     do {
|         /* Every minutes is a bit often for updates - especially if
|          * nothing is going on. This slows it down to every 6 minutes.
|          */
|         cycles++;
|         if (cycles == 7) {
|             metaserver_update();
|             cycles=1;
|         }
|         if (settings.fastclock > 0) {
|             Timeout.tv_sec=0;
|             Timeout.tv_usec=50;
|         } else {
|             Timeout.tv_sec=60;
|             Timeout.tv_usec=0;
|         }
|     }
|     while (select([...], &Timeout)==0);
[...]

This function is called whenever a server has no active connections.
Basically, with fastclock=0, the metaserver update will be sent once per
6 minutes but with fastclock=1 it will be sent once per 6*50 usec (which
could be more than 3000 packets per second on a fast machine).

_______________________________________________
crossfire mailing list
[email protected]
http://mailman.metalforge.org/mailman/listinfo/crossfire

Reply via email to