Wie kann man Online-Userzahl beschränken?

Begonnen von aman, 21 November 2004, 19:30:42

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

aman

Wie die Überschrift sagt:
Wie kann ich Online-Benutzeranzahl begrenzen?
Ab und zu wird man Opfer von Ddos-Attacken und die Angreifer benutzen öfters mehrere tausend Proxies so man nicht alle Ip's sperren kann aber man könnte zumindest den Schaden vermindern in dem durch eine Kontrolle der Session-Tabelle gleichzeitige Online-Anzahl auf einen vorgegebenen Wert beschränkt und wenn diese Anzahl überschritten wird,bekommt man eine einfache Seite oder eine Fehlermeldung zu sehen die keine grossen SQL-Abfragen ausführt!
Im Normalfall würde ein Angreifer tausende Anfragen senden und die Datenbank lahmlegen aber wenn man mit so einem Schutz-Mechanismus die Seite vorher schützt könnte man wie ich oben beschrieben hab, Datenbankabfragen mit einer einfachen Seite vereinfachen und so entstehen keine grossen Schaden!

Sowas gibt es schon für phpbb-Foren aber für vkpMx ist es auch ein Muss (meine Meinung)

Hier der Code-Ausschnitt

// Start add - Max sessions MOD
$sql = "SELECT user_id FROM ".USERS_TABLE." u, ".SESSIONS_TABLE." s
WHERE s.session_time >= ".( time() - 90 ) . "
AND u.user_id = s.session_user_id
GROUP BY s.session_ip, u.username";
if( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_MESSAGE, 'Could not obtain user/online information', '', __LINE__, __FILE__, $sql);
}
$total_users = $db->sql_numrows($result);
if ( $total_users >= $board_config['max_sessions'] )
{
message_die(CRITICAL_MESSAGE, sprintf('Max connections reatched, (%d) please try again later',$board_config['max_sessions']), '', __LINE__, __FILE__, $sql);
}

$sql = "SELECT session_user_id FROM ".SESSIONS_TABLE."
WHERE session_time >= ".( time() - 90 ) . "
AND session_ip='".$user_ip."'". (($user_id == ANONYMOUS) ? "" :" AND session_user_id='".$user_id."'" ) ;
if( !($result = $db->sql_query($sql)) )
{
message_die(CRITICAL_MESSAGE, 'Could not obtain users online information'.$sql, '', __LINE__, __FILE__, $sql);
}
$total_users = $db->sql_numrows($result);
if ( $total_users >= $board_config['max_sessions_ip'] )
{
message_die(CRITICAL_MESSAGE, sprintf('Max connections per IP reatched, (%d) please use fewer open windows',$board_config['max_sessions_ip']), '', __LINE__, __FILE__, $sql);
}
// End add - Max sessions MOD


den Code bekommt man hier: http://mods.db9.dk/download.php?id=57

jubilee

Hallo !
Meiner Meinung nach kein Problem das auch in das MX einzubauen.
Nur, bei einer richtigen DenialofService-Attacke, ist mitunter nicht das CMS der Schwachpunkt.
Schon eher wird hier der Webserver aufgrund seiner Konfiguration die Klappen schließen.
Denn wenn der User über verschiedene "Proxies" geht, dann bekommt er auch für die verschiedenen Wege verschiedene IP.Das bedeutet abr auch, das der Apache für jede IP einen eigenen Child-Prozess aufmacht. Die sind in der Standard-Konfiguration eh auf 150 eingestellt. Da macht der Apache dann schon dicht .....
MfG
jubilee

aman

Hallo Jubilee,
danke erst mal für deine Antwort.
Sicher ist es eher ein Problem das Serverseitig gelöst werden sollte aber leider ist ein Angriff für Seiten ohne eigenen Server etwas schlechtes!
Wenn eine Seite öfters ein Ziel der Ddos -Attacken ist wird diese Seite von Serverbetreiber , die keine Lust haben sich damit zu beschäftigen, gekündigt!
Bei mir ist es nicht der Fall aber ich weiss das sowas vorkommt!

Man könnte wenigstens somit die Seite ein bisschen mehr schützen die keine commerzielle Communities betreiben!
Auch wenn der Apache-Server ab 150 Ips selber abschaltet sind 150 Benutzer zuviel, wenn sie gleichzeitig pro Sekunde durchschnittlich 20 Datenbankabfragen verursachen.150 Benutzer ca. 20 Abfragen sind in einer Minute 180.000 Abfragen und ich kenne Programme die pro Sekunde über tausende Proxies solchen Angriff verüben könnten!