comparison mod_c2s_auth_throttle/mod_c2s_auth_throttle.lua @ 604:17e879822700

mod_c2s_auth_throttle: first commit
author Marco Cirillo <maranda@lightwitch.org>
date Thu, 09 Feb 2012 00:56:47 +0000
parents
children
comparison
equal deleted inserted replaced
603:efc9d88b70ab 604:17e879822700
1 -- Clients Connection Throttler.
2 -- Usage:
3 -- Add the module into modules loaded into the virtual host section
4 --
5 -- cthrottler_logins_count = 3 -> number of logins attempt allowed
6 -- cthrottler_time = 120 -> in x seconds
7
8 local time = os.time
9 local in_count = {}
10 local logins_count = module:get_option_number("cthrottler_logins_count", 3)
11 local throttle_time = module:get_option_number("cthrottler_time", 60)
12
13 local function handle_sessions(event)
14 local session = event.origin
15
16 if not in_count[session.ip] and session.type == "c2s_unauthed" then
17 in_count[session.ip] = { t = time(), c = 1 }
18 elseif in_count[session.ip] and session.type == "c2s_unauthed" then
19 in_count[session.ip].c = in_count[session.ip].c + 1
20
21 if in_count[session.ip].c > logins_count and time() - in_count[session.ip].t < throttle_time then
22 module:log("error", "Exceeded login count for %s, closing connection", session.ip)
23 session:close{ condition = "policy-violation", text = "You exceeded the number of connections/logins allowed in "..throttle_time.." seconds, good bye." }
24 return true
25 elseif time() - in_count[session.ip].t > throttle_time then
26 in_count[session.ip] = nil ; return
27 end
28 end
29 end
30
31 module:hook("stanza/urn:ietf:params:xml:ns:xmpp-sasl:auth", handle_sessions, 100)
32 module:hook("stanza/iq/jabber:iq:auth:query", handle_sessions, 100) -- Legacy?