From 9538553bc5a71faf23b5b810b83d7acb133c8d56 Mon Sep 17 00:00:00 2001 From: Lee Clemens Date: Mon, 9 Jan 2012 20:01:34 -0500 Subject: [PATCH] ENH: Added use_dns option --- server/filter.py | 58 ++++++++++++++++++++++++++++++++----------- server/server.py | 6 +++++ server/transmitter.py | 6 +++++ 3 files changed, 55 insertions(+), 15 deletions(-) diff --git a/server/filter.py b/server/filter.py index e18f5b7d..e4c5e86b 100644 --- a/server/filter.py +++ b/server/filter.py @@ -64,6 +64,8 @@ class Filter(JailThread): self.__failRegex = list() ## The regular expression list with expressions to ignore. self.__ignoreRegex = list() + ## Use DNS setting + self.__useDns = "warn" ## The amount of time to look back. self.__findTime = 6000 ## The ignore IP list. @@ -139,6 +141,21 @@ class Filter(JailThread): ignoreRegex.append(regex.getRegex()) 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. # @@ -325,7 +342,7 @@ class Filter(JailThread): else: try: host = failRegex.getHost() - ipMatch = DNSUtils.textToIp(host) + ipMatch = DNSUtils.textToIp(host, self.__useDns) if ipMatch: for ip in ipMatch: failList.append([ip, date]) @@ -564,22 +581,33 @@ class DNSUtils: isValidIP = staticmethod(isValidIP) #@staticmethod - def textToIp(text): + def textToIp(text, useDns): """ Return the IP of DNS found in a given text. """ - ipList = list() - # Search for plain IP - plainIP = DNSUtils.searchIP(text) - if not plainIP == None: - plainIPStr = plainIP.group(0) - 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) - return ipList + logSys.debug("Checking rDNS: %s" % text) + logSys.debug("DNS use_dns == %s" % useDns) + if useDns == "no": + logSys.debug("use_dns == no") + return None + else: + logSys.debug("use_dns != no") + ipList = list() + # Search for plain IP + plainIP = DNSUtils.searchIP(text) + if not plainIP is None: + plainIPStr = plainIP.group(0) + 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) #@staticmethod diff --git a/server/server.py b/server/server.py index 950cf82b..b734f82a 100644 --- a/server/server.py +++ b/server/server.py @@ -204,6 +204,12 @@ class Server: def getIgnoreRegex(self, name): 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): self.__jails.getFilter(name).setMaxRetry(value) diff --git a/server/transmitter.py b/server/transmitter.py index bebba12b..305fde15 100644 --- a/server/transmitter.py +++ b/server/transmitter.py @@ -154,6 +154,10 @@ class Transmitter: value = int(command[2]) self.__server.delIgnoreRegex(name, value) 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": value = command[2] self.__server.setFindTime(name, int(value)) @@ -231,6 +235,8 @@ class Transmitter: return self.__server.getFailRegex(name) elif command[1] == "ignoreregex": return self.__server.getIgnoreRegex(name) + elif command[1] == "use_dns": + return self.__server.getUseDns(name) elif command[1] == "findtime": return self.__server.getFindTime(name) elif command[1] == "maxretry":