mirror of https://github.com/fail2ban/fail2ban
				
				
				
			ENH: Added use_dns option
							parent
							
								
									11ad2b6125
								
							
						
					
					
						commit
						6d6b734ea5
					
				| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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":
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue