Wie kann ich die serverseitige Rate Limiting für einen Perl-Web-Service implementieren?

StackOverflow https://stackoverflow.com/questions/501405

  •  20-08-2019
  •  | 
  •  

Frage

Ich habe ein-Perl basierten CGI / Fast CGI Web-Service und wollen Kunden von IP-Adresse-Limit bewerten aggressive Kunden zu stoppen zu viel Arbeit verursacht.

Ich habe einige Code sah sich um und fand Algorithmus :: Token-Bucket-Algorithmus in CPAN aber das ist für die Client-Anforderungen; es hat keine Ausdauer und hat keine pro-Benutzerkonfiguration so für die serverseitige Rate Limiting nicht wirklich nützlich ist.

Ich bin der Suche nach Anregungen für etwas, das bereits existiert, sonst werde ich brauche, um meine eigene Rolle basiert auf einigen einfachen Persistenz wie Bindung an DB_File pro-IP-Adresse und einige Batch-Job, der das Token Management der Fall ist.

War es hilfreich?

Lösung

Ich habe verwendet Cache :: FastMmap geschwindigkeitsbestimmend durch Treffer Tracking pro IP-Adresse. Es ist ein Cache so Daten über die Zeit abläuft, aber wenn man die Größe und die Ablaufzeit richtig eingestellt, sollte dies kein Problem sein.

Die IP-Adresse wird der Hash-Schlüssel und der Hash-Wert ist ein Array von Zeitstempel. Ich habe eine zweite Datenstruktur (auch unterstützt durch Cache :: FastMMap ), die a hash verbotener IP-Adressen aktualisiert, gemäß den Daten von der ersten Struktur.

Andere Tipps

Ich weiß, es ist nicht das, was Sie gefragt, aber haben Sie als diese an anderer Stelle in dem Stapel Handhabung, wo es bereits für Sie getan? Klar weiß ich nicht, Ihre Bereitstellung Stack, aber wenn es Apache könnten Sie mod_evasive . Alternativ, wenn Sie auf Linux sind könnten Sie iptables tun lassen, seine Arbeit wie etwas mit:

#Allow only 12 connections per IP
/sbin/iptables -A INPUT -p tcp --dport 80 -m conn-limit --connlimit-above 12 -j REJECT --reject-with tcp-reset

sicherlich komplizierte Regeln sind möglich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top