Hi friends,
"and now to something completely different: the larch"... ;-)
Some of you might know:
http://www.zdziarski.com/projects/mod_evasive/
I'm just interested in some theoretical thoughts, if there would be a
ns_evasive module... how to set up the "storage":
Background (Remember: this is an Apache module):
"Detection is performed by creating an internal dynamic hash table of IP
Addresses and URIs, and denying any single IP address from any of the
following:
* Requesting the same page more than a few times per second
* Making more than 50 concurrent requests on the same child per second"
(It then answers with a HTTP status code of 403 for a specified time)
And (from the Apache-view):
"This module instantiates for each listener individually [...] Because of this
per-child design, legitimate requests are never compromised (even from
proxies and NAT addresses) but only scripted attacks. Even a user repeatedly
clicking on 'reload' should not be affected unless they do it maliciously."
In our Naviserver-world, when storing requests of clients (IP) to objects on
the server (whatever you consider a "page", say HTML/ADP; and all the other
page elements on the other side), what could a possible plan look like:
* do the key/value lookup via NSV arrays?
* or thread-locally?
Or everything in the first/the latter?
If I want to guarantee, say, client X request a page Y only 2 times within 5
seconds, this leads to NSV ("guarantee"). But when I think of e.g. the 70
images referenced in Y... and some of them also referenced from page Y'2 with
a browser not caching anything... hm. Is the " legitimate requests are never
compromised" promise gained by a "server-wide-blindness" approach, a
distribution of storage to the available processes?
And would turning on / off keepalive introduce some subtle differences?
cu
Bernd.
|