def __init__(self, jail): JailThread.__init__(self) ## The jail which contains this action. self.jail = jail self.__actions = list() ## The ban manager. self.__banManager = BanManager()
def __init__(self, jail): JailThread.__init__(self) self.jail = jail self.__actions = list() self.__banManager = BanManager()
def __checkBan(self): ticket = self.jail.getFailTicket() if ticket != False: aInfo = dict() bTicket = BanManager.createBanTicket(ticket) aInfo["ip"] = bTicket.getIP() aInfo["failures"] = bTicket.getAttempt() aInfo["time"] = bTicket.getTime() if self.__banManager.addBanTicket(bTicket): logSys.warn("[%s] Ban %s" % (self.jail.getName(), aInfo["ip"])) for action in self.__actions: action.execActionBan(aInfo) return True else: logSys.warn("[%s] %s already banned" % (self.jail.getName(), aInfo["ip"])) return False
class Actions(JailThread): def __init__(self, jail): JailThread.__init__(self) self.jail = jail self.__actions = list() self.__banManager = BanManager() def addAction(self, name): action = Action(name) self.__actions.append(action) def delAction(self, name): for action in self.__actions: if action.getName() == name: self.__actions.remove(action) break def getAction(self, name): for action in self.__actions: if action.getName() == name: return action raise KeyError def getLastAction(self): action = self.__actions.pop() self.__actions.append(action) return action def setBanTime(self, value): self.__banManager.setBanTime(value) logSys.info("Set banTime = %s" % value) def getBanTime(self): return self.__banManager.getBanTime() def run(self): self.setActive(True) for action in self.__actions: action.execActionStart() while self._isActive(): if not self.getIdle(): ret = self.__checkBan() if not ret: self.__checkUnBan() time.sleep(self.getSleepTime()) else: time.sleep(self.getSleepTime()) self.__flushBan() for action in self.__actions: action.execActionStop() logSys.debug(self.jail.getName() + ": action terminated") return True def __checkBan(self): ticket = self.jail.getFailTicket() if ticket != False: aInfo = dict() bTicket = BanManager.createBanTicket(ticket) aInfo["ip"] = bTicket.getIP() aInfo["failures"] = bTicket.getAttempt() aInfo["time"] = bTicket.getTime() if self.__banManager.addBanTicket(bTicket): logSys.warn("[%s] Ban %s" % (self.jail.getName(), aInfo["ip"])) for action in self.__actions: action.execActionBan(aInfo) return True else: logSys.warn("[%s] %s already banned" % (self.jail.getName(), aInfo["ip"])) return False def __checkUnBan(self): for ticket in self.__banManager.unBanList(MyTime.time()): self.__unBan(ticket) def __flushBan(self): logSys.debug("Flush ban list") for ticket in self.__banManager.flushBanList(): self.__unBan(ticket) def __unBan(self, ticket): aInfo = dict() aInfo["ip"] = ticket.getIP() aInfo["failures"] = ticket.getAttempt() aInfo["time"] = ticket.getTime() logSys.warn("[%s] Unban %s" % (self.jail.getName(), aInfo["ip"])) for action in self.__actions: action.execActionUnban(aInfo) def status(self): ret = [("Currently banned", self.__banManager.size()), ("Total banned", self.__banManager.getBanTotal()), ("IP list", self.__banManager.getBanList())] return ret
class Actions(JailThread): ## # Constructor. # # Initialize the filter object with default values. # @param jail the jail object def __init__(self, jail): JailThread.__init__(self) ## The jail which contains this action. self.jail = jail self.__actions = list() ## The ban manager. self.__banManager = BanManager() ## # Adds an action. # # @param name The action name def addAction(self, name): action = Action(name) self.__actions.append(action) ## # Removes an action. # # @param name The action name def delAction(self, name): for action in self.__actions: if action.getName() == name: self.__actions.remove(action) break ## # Returns an action. # # Raises a KeyError exception if the action does not exist. # # @param name the action name # @return the action def getAction(self, name): for action in self.__actions: if action.getName() == name: return action raise KeyError ## # Returns the last defined action. # # @return The last defined action. def getLastAction(self): action = self.__actions.pop() self.__actions.append(action) return action ## # Set the ban time. # # @param value the time def setBanTime(self, value): self.__banManager.setBanTime(value) logSys.info("Set banTime = %s" % value) ## # Get the ban time. # # @return the time def getBanTime(self): return self.__banManager.getBanTime() ## # Main loop. # # This function is the main loop of the thread. It checks the Jail # queue and executes commands when an IP address is banned. # @return True when the thread exits nicely def run(self): self.setActive(True) for action in self.__actions: action.execActionStart() while self._isActive(): if not self.getIdle(): #logSys.debug(self.jail.getName() + ": action") ret = self.__checkBan() if not ret: self.__checkUnBan() time.sleep(self.getSleepTime()) else: time.sleep(self.getSleepTime()) self.__flushBan() for action in self.__actions: action.execActionStop() logSys.debug(self.jail.getName() + ": action terminated") return True ## # Check for IP address to ban. # # Look in the Jail queue for FailTicket. If a ticket is available, # it executes the "ban" command and add a ticket to the BanManager. # @return True if an IP address get banned def __checkBan(self): ticket = self.jail.getFailTicket() if ticket != False: aInfo = dict() bTicket = BanManager.createBanTicket(ticket) aInfo["ip"] = bTicket.getIP() aInfo["failures"] = bTicket.getAttempt() aInfo["time"] = bTicket.getTime() if self.__banManager.addBanTicket(bTicket): logSys.warn("[%s] Ban %s" % (self.jail.getName(), aInfo["ip"])) for action in self.__actions: action.execActionBan(aInfo) return True else: logSys.warn("[%s] %s already banned" % (self.jail.getName(), aInfo["ip"])) return False ## # Check for IP address to unban. # # Unban IP address which are outdated. def __checkUnBan(self): for ticket in self.__banManager.unBanList(MyTime.time()): self.__unBan(ticket) ## # Flush the ban list. # # Unban all IP address which are still in the banning list. def __flushBan(self): logSys.debug("Flush ban list") for ticket in self.__banManager.flushBanList(): self.__unBan(ticket) ## # Unbans host corresponding to the ticket. # # Executes the actions in order to unban the host given in the # ticket. def __unBan(self, ticket): aInfo = dict() aInfo["ip"] = ticket.getIP() aInfo["failures"] = ticket.getAttempt() aInfo["time"] = ticket.getTime() logSys.warn("[%s] Unban %s" % (self.jail.getName(), aInfo["ip"])) for action in self.__actions: action.execActionUnban(aInfo) ## # Get the status of the filter. # # Get some informations about the filter state such as the total # number of failures. # @return a list with tuple def status(self): ret = [("Currently banned", self.__banManager.size()), ("Total banned", self.__banManager.getBanTotal()), ("IP list", self.__banManager.getBanList())] return ret
class Actions(JailThread): ## # Constructor. # # Initialize the filter object with default values. # @param jail the jail object def __init__(self, jail): JailThread.__init__(self) ## The jail which contains this action. self.jail = jail self.__actions = list() ## The ban manager. self.__banManager = BanManager() ## # Adds an action. # # @param name The action name def addAction(self, name): action = Action(name) self.__actions.append(action) ## # Removes an action. # # @param name The action name def delAction(self, name): for action in self.__actions: if action.getName() == name: self.__actions.remove(action) break ## # Returns an action. # # Raises a KeyError exception if the action does not exist. # # @param name the action name # @return the action def getAction(self, name): for action in self.__actions: if action.getName() == name: return action raise KeyError ## # Returns the last defined action. # # @return The last defined action. def getLastAction(self): action = self.__actions.pop() self.__actions.append(action) return action ## # Set the ban time. # # @param value the time def setBanTime(self, value): self.__banManager.setBanTime(value) logSys.info("Set banTime = %s" % value) ## # Get the ban time. # # @return the time def getBanTime(self): return self.__banManager.getBanTime() ## # Main loop. # # This function is the main loop of the thread. It checks the Jail # queue and executes commands when an IP address is banned. # @return True when the thread exits nicely def run(self): self.setActive(True) for action in self.__actions: action.execActionStart() while self._isActive(): if not self.getIdle(): #logSys.debug(self.jail.getName() + ": action") ret = self.__checkBan() if not ret: self.__checkUnBan() time.sleep(self.getSleepTime()) else: time.sleep(self.getSleepTime()) self.__flushBan() for action in self.__actions: action.execActionStop() logSys.debug(self.jail.getName() + ": action terminated") return True ## # Check for IP address to ban. # # Look in the Jail queue for FailTicket. If a ticket is available, # it executes the "ban" command and add a ticket to the BanManager. # @return True if an IP address get banned def __checkBan(self): ticket = self.jail.getFailTicket() if ticket != False: aInfo = dict() bTicket = BanManager.createBanTicket(ticket) aInfo["ip"] = bTicket.getIP() aInfo["failures"] = bTicket.getAttempt() aInfo["time"] = bTicket.getTime() aInfo["matches"] = "".join(bTicket.getMatches()) if self.__banManager.addBanTicket(bTicket): logSys.warn("[%s] Ban %s" % (self.jail.getName(), aInfo["ip"])) for action in self.__actions: action.execActionBan(aInfo) return True else: logSys.warn("[%s] %s already banned" % (self.jail.getName(), aInfo["ip"])) return False ## # Check for IP address to unban. # # Unban IP address which are outdated. def __checkUnBan(self): for ticket in self.__banManager.unBanList(MyTime.time()): self.__unBan(ticket) ## # Flush the ban list. # # Unban all IP address which are still in the banning list. def __flushBan(self): logSys.debug("Flush ban list") for ticket in self.__banManager.flushBanList(): self.__unBan(ticket) ## # Unbans host corresponding to the ticket. # # Executes the actions in order to unban the host given in the # ticket. def __unBan(self, ticket): aInfo = dict() aInfo["ip"] = ticket.getIP() aInfo["failures"] = ticket.getAttempt() aInfo["time"] = ticket.getTime() aInfo["matches"] = "".join(ticket.getMatches()) logSys.warn("[%s] Unban %s" % (self.jail.getName(), aInfo["ip"])) for action in self.__actions: action.execActionUnban(aInfo) ## # Get the status of the filter. # # Get some informations about the filter state such as the total # number of failures. # @return a list with tuple def status(self): ret = [("Currently banned", self.__banManager.size()), ("Total banned", self.__banManager.getBanTotal()), ("IP list", self.__banManager.getBanList())] return ret