mirror of https://github.com/fail2ban/fail2ban
refined it to work nicely with current approach to handle externally modified iptables
parent
da0bb74180
commit
9c639040bc
|
@ -97,6 +97,21 @@ cmdend =
|
|||
#
|
||||
polltime = 1
|
||||
|
||||
# Option: reinittime
|
||||
# Notes.: minimal number of seconds between the re-initialization of
|
||||
# firewalls due to external changes in their rules (see fwcheck)
|
||||
# Values: NUM Default: 100
|
||||
#
|
||||
reinittime = 10
|
||||
|
||||
# Option: maxreinits
|
||||
# Notes.: maximal number of re-initialization of firewalls due to external
|
||||
# changes. -1 stays for infinite, so only reinittime is of importance
|
||||
# Values: NUM Default: -1
|
||||
#
|
||||
maxreinits = -1
|
||||
|
||||
|
||||
[MAIL]
|
||||
# Option: enabled
|
||||
# Notes.: enable mail notification when banning an IP address.
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
fail2ban (0.5.4-5.7) unstable; urgency=low
|
||||
|
||||
* Added a notification regarding the importance of 0.5.4-5 change of
|
||||
failregex in the config file
|
||||
* Adjusted address to FSF
|
||||
failregex in the config file.
|
||||
* Adjusted address to FSF.
|
||||
* Adjusted failregex for SSH so it bans "Illegal user" entries as well, and
|
||||
restricted full failregex more to include ":" at the beginning, because
|
||||
otherwise it might not be sufficient and would revive bug 330827 (closes:
|
||||
#333056)
|
||||
#333056).
|
||||
* Adjusted failregex for SSH to accommodate recent changes in logging of
|
||||
SSH: Illegal -> Invalid. Should match both now
|
||||
SSH: Illegal -> Invalid. Should match both now.
|
||||
* Fixed a problem of raise AttributeError exception reported as a side
|
||||
effect of crash during parsing of the config file
|
||||
effect of crash during parsing of the config file.
|
||||
* Introduced fwcheck option to verify consistency of the
|
||||
chains. Implemented automatic restart of fail2ban main function in
|
||||
case if check of fwban failed. Should close few bugs
|
||||
case if check of fwban or fwban command failed (closes: #329163, #331695).
|
||||
|
||||
-- Yaroslav Halchenko <debian@onerussian.com> Mon, 3 Oct 2005 22:26:28 -1000
|
||||
|
||||
|
|
27
fail2ban.py
27
fail2ban.py
|
@ -216,7 +216,9 @@ def main():
|
|||
["str", "ignoreip", ""],
|
||||
["int", "polltime", 1],
|
||||
["str", "cmdstart", ""],
|
||||
["str", "cmdend", ""])
|
||||
["str", "cmdend", ""],
|
||||
["int", "reinittime", 100],
|
||||
["int", "maxreinits", 100])
|
||||
|
||||
# Gets global configuration options
|
||||
conf.update(confReader.getLogOptions("DEFAULT", optionValues))
|
||||
|
@ -415,13 +417,8 @@ def main():
|
|||
|
||||
initializeFwRules()
|
||||
|
||||
# yoh: I don't think that this parameters need to be configured
|
||||
# and probably maxRestarts should be removed
|
||||
legitRestartTime = 10 # legitimate minimal restart time
|
||||
maxRestarts = 100 # max number of times to perform restart
|
||||
|
||||
lastRestartTime = time.time()
|
||||
restarts = 0
|
||||
lastReinitTime = time.time()-conf["reinittime"]-1 # try to reinit once if it fails immediately
|
||||
reinits = 0
|
||||
# Main loop
|
||||
while True:
|
||||
try:
|
||||
|
@ -484,12 +481,14 @@ def main():
|
|||
except ExternalError, e:
|
||||
# Something wrong while dealing with Iptables.
|
||||
# May be chain got removed?
|
||||
logSys.error("Fail2Ban got a problem: " + e.__str__())
|
||||
if (unixTime - lastRestartTime > legitRestartTime) and (restarts < maxRestarts):
|
||||
logSys.error("Reinitializing firewalls for the %dst time "%restarts)
|
||||
lastRestartTime = time.time()
|
||||
reinits += 1
|
||||
logSys.error(e)
|
||||
if ((unixTime - lastReinitTime > conf["reinittime"]) and
|
||||
((conf["maxreinits"]<0) or (reinits < conf["maxreinits"]))):
|
||||
logSys.warn("#%d reinitialization of firewalls"%reinits)
|
||||
lastReinitTime = unixTime
|
||||
else:
|
||||
logSys.error("Exiting: restarts follow too often, or too many restart attempts")
|
||||
logSys.error("Exiting: reinits follow too often, or too many reinit attempts")
|
||||
killApp()
|
||||
|
||||
# save firewalls to keep a list of IPs for rebanning
|
||||
|
@ -499,7 +498,7 @@ def main():
|
|||
# reinitialize all the chains
|
||||
initializeFwRules()
|
||||
# restore the lists of baned IPs
|
||||
logFwList = logFwListCopy
|
||||
logFwList.__init__(logFwListCopy)
|
||||
# reBan known IPs
|
||||
reBan()
|
||||
except KeyboardInterrupt:
|
||||
|
|
|
@ -49,12 +49,12 @@ class Firewall:
|
|||
""" Bans an IP.
|
||||
"""
|
||||
ip = aInfo["ip"]
|
||||
self.runCheck("pre-fwban", debug)
|
||||
if not self.inBanList(ip):
|
||||
crtTime = time.time()
|
||||
logSys.warn("Ban " + ip)
|
||||
self.banList[ip] = crtTime
|
||||
aInfo["bantime"] = crtTime
|
||||
self.runCheck("pre-fwban", debug)
|
||||
cmd = self.banIP(aInfo)
|
||||
if executeCmd(cmd, debug):
|
||||
raise ExternalError("Firewall: execution of fwban command '%s' failed"%cmd)
|
||||
|
|
Loading…
Reference in New Issue