mirror of https://github.com/fail2ban/fail2ban
ENH: Added use_dns option
parent
ae1e857e53
commit
9538553bc5
|
@ -64,6 +64,8 @@ class Filter(JailThread):
|
||||||
self.__failRegex = list()
|
self.__failRegex = list()
|
||||||
## The regular expression list with expressions to ignore.
|
## The regular expression list with expressions to ignore.
|
||||||
self.__ignoreRegex = list()
|
self.__ignoreRegex = list()
|
||||||
|
## Use DNS setting
|
||||||
|
self.__useDns = "warn"
|
||||||
## The amount of time to look back.
|
## The amount of time to look back.
|
||||||
self.__findTime = 6000
|
self.__findTime = 6000
|
||||||
## The ignore IP list.
|
## The ignore IP list.
|
||||||
|
@ -139,6 +141,21 @@ class Filter(JailThread):
|
||||||
ignoreRegex.append(regex.getRegex())
|
ignoreRegex.append(regex.getRegex())
|
||||||
return ignoreRegex
|
return ignoreRegex
|
||||||
|
|
||||||
|
##
|
||||||
|
# Set the Use DNS mode
|
||||||
|
# @param value the use_dns mode
|
||||||
|
|
||||||
|
def setUseDns(self, value):
|
||||||
|
self.__useDns = value
|
||||||
|
logSys.info("Set use_dns = %s" % value)
|
||||||
|
|
||||||
|
##
|
||||||
|
# Get the use_dns mode
|
||||||
|
# @return the use_dns mode
|
||||||
|
|
||||||
|
def getUseDns(self):
|
||||||
|
return self.__useDns
|
||||||
|
|
||||||
##
|
##
|
||||||
# Set the time needed to find a failure.
|
# Set the time needed to find a failure.
|
||||||
#
|
#
|
||||||
|
@ -325,7 +342,7 @@ class Filter(JailThread):
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
host = failRegex.getHost()
|
host = failRegex.getHost()
|
||||||
ipMatch = DNSUtils.textToIp(host)
|
ipMatch = DNSUtils.textToIp(host, self.__useDns)
|
||||||
if ipMatch:
|
if ipMatch:
|
||||||
for ip in ipMatch:
|
for ip in ipMatch:
|
||||||
failList.append([ip, date])
|
failList.append([ip, date])
|
||||||
|
@ -564,22 +581,33 @@ class DNSUtils:
|
||||||
isValidIP = staticmethod(isValidIP)
|
isValidIP = staticmethod(isValidIP)
|
||||||
|
|
||||||
#@staticmethod
|
#@staticmethod
|
||||||
def textToIp(text):
|
def textToIp(text, useDns):
|
||||||
""" Return the IP of DNS found in a given text.
|
""" Return the IP of DNS found in a given text.
|
||||||
"""
|
"""
|
||||||
ipList = list()
|
logSys.debug("Checking rDNS: %s" % text)
|
||||||
# Search for plain IP
|
logSys.debug("DNS use_dns == %s" % useDns)
|
||||||
plainIP = DNSUtils.searchIP(text)
|
if useDns == "no":
|
||||||
if not plainIP == None:
|
logSys.debug("use_dns == no")
|
||||||
plainIPStr = plainIP.group(0)
|
return None
|
||||||
if DNSUtils.isValidIP(plainIPStr):
|
else:
|
||||||
ipList.append(plainIPStr)
|
logSys.debug("use_dns != no")
|
||||||
if not ipList:
|
ipList = list()
|
||||||
# Try to get IP from possible DNS
|
# Search for plain IP
|
||||||
ip = DNSUtils.dnsToIp(text)
|
plainIP = DNSUtils.searchIP(text)
|
||||||
for e in ip:
|
if not plainIP is None:
|
||||||
ipList.append(e)
|
plainIPStr = plainIP.group(0)
|
||||||
return ipList
|
if DNSUtils.isValidIP(plainIPStr):
|
||||||
|
ipList.append(plainIPStr)
|
||||||
|
if not ipList:
|
||||||
|
# Try to get IP from possible DNS
|
||||||
|
ip = DNSUtils.dnsToIp(text)
|
||||||
|
for e in ip:
|
||||||
|
ipList.append(e)
|
||||||
|
logSys.debug("At bottom of textToIp, ipList == %s" % ipList)
|
||||||
|
if useDns == "warn":
|
||||||
|
logSys.warning("IP Banned after DNS Reverse Lookup: %s = %s",
|
||||||
|
text, ipList)
|
||||||
|
return ipList
|
||||||
textToIp = staticmethod(textToIp)
|
textToIp = staticmethod(textToIp)
|
||||||
|
|
||||||
#@staticmethod
|
#@staticmethod
|
||||||
|
|
|
@ -204,6 +204,12 @@ class Server:
|
||||||
def getIgnoreRegex(self, name):
|
def getIgnoreRegex(self, name):
|
||||||
return self.__jails.getFilter(name).getIgnoreRegex()
|
return self.__jails.getFilter(name).getIgnoreRegex()
|
||||||
|
|
||||||
|
def setUseDns(self, name, value):
|
||||||
|
self.__jails.getFilter(name).setUseDns(value)
|
||||||
|
|
||||||
|
def getUseDns(self, name):
|
||||||
|
return self.__jails.getFilter(name).getUseDns()
|
||||||
|
|
||||||
def setMaxRetry(self, name, value):
|
def setMaxRetry(self, name, value):
|
||||||
self.__jails.getFilter(name).setMaxRetry(value)
|
self.__jails.getFilter(name).setMaxRetry(value)
|
||||||
|
|
||||||
|
|
|
@ -154,6 +154,10 @@ class Transmitter:
|
||||||
value = int(command[2])
|
value = int(command[2])
|
||||||
self.__server.delIgnoreRegex(name, value)
|
self.__server.delIgnoreRegex(name, value)
|
||||||
return self.__server.getIgnoreRegex(name)
|
return self.__server.getIgnoreRegex(name)
|
||||||
|
elif command[1] == "use_dns":
|
||||||
|
value = command[2]
|
||||||
|
self.__server.setUseDns(name, value)
|
||||||
|
return self.__server.getUseDns(name)
|
||||||
elif command[1] == "findtime":
|
elif command[1] == "findtime":
|
||||||
value = command[2]
|
value = command[2]
|
||||||
self.__server.setFindTime(name, int(value))
|
self.__server.setFindTime(name, int(value))
|
||||||
|
@ -231,6 +235,8 @@ class Transmitter:
|
||||||
return self.__server.getFailRegex(name)
|
return self.__server.getFailRegex(name)
|
||||||
elif command[1] == "ignoreregex":
|
elif command[1] == "ignoreregex":
|
||||||
return self.__server.getIgnoreRegex(name)
|
return self.__server.getIgnoreRegex(name)
|
||||||
|
elif command[1] == "use_dns":
|
||||||
|
return self.__server.getUseDns(name)
|
||||||
elif command[1] == "findtime":
|
elif command[1] == "findtime":
|
||||||
return self.__server.getFindTime(name)
|
return self.__server.getFindTime(name)
|
||||||
elif command[1] == "maxretry":
|
elif command[1] == "maxretry":
|
||||||
|
|
Loading…
Reference in New Issue