banmanager.py
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 __author__ = "Cyril Jaquier"
00022 __version__ = "$Revision: 686 $"
00023 __date__ = "$Date: 2008-04-13 19:48:52 +0200 (Sun, 13 Apr 2008) $"
00024 __copyright__ = "Copyright (c) 2004 Cyril Jaquier"
00025 __license__ = "GPL"
00026
00027 from ticket import BanTicket
00028 from threading import Lock
00029 from mytime import MyTime
00030 import logging
00031
00032
00033 logSys = logging.getLogger("fail2ban.action")
00034
00035
00036
00037
00038
00039
00040
00041 class BanManager:
00042
00043
00044
00045
00046
00047
00048 def __init__(self):
00049
00050 self.__lock = Lock()
00051
00052 self.__banList = list()
00053
00054 self.__banTime = 600
00055
00056 self.__banTotal = 0
00057
00058
00059
00060
00061
00062
00063
00064 def setBanTime(self, value):
00065 try:
00066 self.__lock.acquire()
00067 self.__banTime = int(value)
00068 finally:
00069 self.__lock.release()
00070
00071
00072
00073
00074
00075
00076
00077 def getBanTime(self):
00078 try:
00079 self.__lock.acquire()
00080 return self.__banTime
00081 finally:
00082 self.__lock.release()
00083
00084
00085
00086
00087
00088
00089 def setBanTotal(self, value):
00090 try:
00091 self.__lock.acquire()
00092 self.__banTotal = value
00093 finally:
00094 self.__lock.release()
00095
00096
00097
00098
00099
00100
00101 def getBanTotal(self):
00102 try:
00103 self.__lock.acquire()
00104 return self.__banTotal
00105 finally:
00106 self.__lock.release()
00107
00108
00109
00110
00111
00112
00113 def getBanList(self):
00114 try:
00115 self.__lock.acquire()
00116 return [m.getIP() for m in self.__banList]
00117 finally:
00118 self.__lock.release()
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 def createBanTicket(ticket):
00130 ip = ticket.getIP()
00131
00132 lastTime = MyTime.time()
00133 banTicket = BanTicket(ip, lastTime)
00134 banTicket.setAttempt(ticket.getAttempt())
00135 return banTicket
00136 createBanTicket = staticmethod(createBanTicket)
00137
00138
00139
00140
00141
00142
00143
00144
00145 def addBanTicket(self, ticket):
00146 try:
00147 self.__lock.acquire()
00148 if not self.__inBanList(ticket):
00149 self.__banList.append(ticket)
00150 self.__banTotal += 1
00151 return True
00152 return False
00153 finally:
00154 self.__lock.release()
00155
00156
00157
00158
00159
00160
00161
00162 def size(self):
00163 try:
00164 self.__lock.acquire()
00165 return len(self.__banList)
00166 finally:
00167 self.__lock.release()
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177 def __inBanList(self, ticket):
00178 for i in self.__banList:
00179 if ticket.getIP() == i.getIP():
00180 return True
00181 return False
00182
00183
00184
00185
00186
00187
00188
00189
00190 def unBanList(self, time):
00191 try:
00192 self.__lock.acquire()
00193
00194 if self.__banTime < 0:
00195 return list()
00196
00197
00198 unBanList = [ticket for ticket in self.__banList
00199 if ticket.getTime() < time - self.__banTime]
00200
00201
00202 self.__banList = [ticket for ticket in self.__banList
00203 if ticket not in unBanList]
00204
00205 return unBanList
00206 finally:
00207 self.__lock.release()
00208
00209
00210
00211
00212
00213
00214
00215 def flushBanList(self):
00216 try:
00217 self.__lock.acquire()
00218 uBList = self.__banList
00219 self.__banList = list()
00220 return uBList
00221 finally:
00222 self.__lock.release()