[zorp-hu] ismetlodo ssh letiltasa

Balazs Scheidler zorp-hu@lists.balabit.hu
Mon, 16 Aug 2004 19:42:29 +0200


On Wed, 2004-08-11 at 12:44, Gabor E. Tusnady wrote:
> Sziasztok!
> 
> Meg lehet csinalni a zorp-pal, hogy ha valahonnan pasword scannel
> probalkoznak ssh-n, akkor a rovid idon belul ismetlodo tobbszori ssh
> kapcsolodast ne engedelyezze?
> Minden infot elore is koszonok,

mindent lehet :-), de pontosan mit szeretnel elerni? mondjuk ha egy
adott IP 1 percnel rovidebb session-t nyitott az elmult 3 percben
legalabb 3-szor, akkor csapja le a kapcsolatot ugyanarrol az IP-rol a
kovetkezo 10 percben?

Valahogy igy lehet (a short_sessions lockolasa hianyzik):

import time
short_sessions = {}

class MySSHPlugProxy(PlugProxy):
	def config(self):
		global short_sessions

		PlugProxy.config(self)
		ip = self.session.client_address.ip_s
		now = time.time()
		try:
			(last_attempt, count) = short_sessions[ip]
		except KeyError:
			last_attempt = now
			count = 0
		if now > last_attempt + 600:
			# last attempt more than 10 minutes ago, it is allowed again
			last_attempt = now
			count = 0
		count = count + 1
		if count > 3 and now < last_attempt + 180:
			# more than 3 attempts in the last 3 minutes
			raise DACException, "Connections over limit"
		short_sessions[ip] = (now, count)
		self.started_time = now

	def shutDown(self):
		global short_sessions

		PlugProxy.shutDown(self)
		now = time.time()
		if now - self.started_time > 60:
			# this was a session longer than 60 seconds, it was not a 
			# real short session
			ip = self.session.client_address.ip_s
			(last_attempt, count) = short_sessions[ip]
			short_sessions[ip] = (last_attempt, count - 1)


-- 
Bazsi
PGP info: KeyID 9AF8D0A9 Fingerprint CD27 CFB0 802C 0944 9CFD 804E C82C 8EB1