From de43d1d6d58f762e595452256174923fdc639568 Mon Sep 17 00:00:00 2001 From: Steven Hiscocks Date: Thu, 13 Mar 2014 22:05:50 +0000 Subject: [PATCH 1/2] ENH: Change badips.py default score to "3" As per recommendation from Amy from badips.com --- config/action.d/badips.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/action.d/badips.py b/config/action.d/badips.py index 41e8a0bf..d4d3586c 100644 --- a/config/action.d/badips.py +++ b/config/action.d/badips.py @@ -49,7 +49,7 @@ class BadIPsAction(ActionBase): category : str Valid badips.com category for reporting failures. score : int, optional - Minimum score for bad IPs. Default 5. + Minimum score for bad IPs. Default 3. age : str, optional Age of last report for bad IPs, per badips.com syntax. Default "24h" (24 hours) @@ -76,7 +76,7 @@ class BadIPsAction(ActionBase): _Request = partial( Request, headers={'User-Agent': "Fail2Ban %s" % f2bVersion}) - def __init__(self, jail, name, category, score=5, age="24h", + def __init__(self, jail, name, category, score=3, age="24h", banaction=None, bancategory=None, updateperiod=900): super(BadIPsAction, self).__init__(jail, name) From 9e374b159ec0c660cd8b9f48a708e7393311f4e6 Mon Sep 17 00:00:00 2001 From: Steven Hiscocks Date: Thu, 13 Mar 2014 22:45:10 +0000 Subject: [PATCH 2/2] ENH: Allow setting of badips.py key for reporting and blacklisting --- config/action.d/badips.py | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/config/action.d/badips.py b/config/action.d/badips.py index d4d3586c..f9f587d8 100644 --- a/config/action.d/badips.py +++ b/config/action.d/badips.py @@ -53,6 +53,9 @@ class BadIPsAction(ActionBase): age : str, optional Age of last report for bad IPs, per badips.com syntax. Default "24h" (24 hours) + key : str, optional + Key issued by badips.com to report bans, for later retrieval + of personalised content. banaction : str, optional Name of banaction to use for blacklisting bad IPs. If `None`, no blacklist of IPs will take place. @@ -62,6 +65,9 @@ class BadIPsAction(ActionBase): from category used for reporting. e.g. may want to report "postfix", but want to use whole "mail" category for blacklist. Default `category`. + bankey : str, optional + Key issued by badips.com to blacklist IPs reported with the + associated key. updateperiod : int, optional Time in seconds between updating bad IPs blacklist. Default 900 (15 minutes) @@ -76,15 +82,17 @@ class BadIPsAction(ActionBase): _Request = partial( Request, headers={'User-Agent': "Fail2Ban %s" % f2bVersion}) - def __init__(self, jail, name, category, score=3, age="24h", - banaction=None, bancategory=None, updateperiod=900): + def __init__(self, jail, name, category, score=3, age="24h", key=None, + banaction=None, bancategory=None, bankey=None, updateperiod=900): super(BadIPsAction, self).__init__(jail, name) self.category = category self.score = score self.age = age + self.key = key self.banaction = banaction self.bancategory = bancategory or category + self.bankey = bankey self.updateperiod = updateperiod self._bannedips = set() @@ -125,7 +133,7 @@ class BadIPsAction(ActionBase): return categories_names @classmethod - def getList(cls, category, score, age): + def getList(cls, category, score, age, key=None): """Get badips.com list of bad IPs. Parameters @@ -136,6 +144,9 @@ class BadIPsAction(ActionBase): Minimum score for bad IPs. age : str Age of last report for bad IPs, per badips.com syntax. + key : str, optional + Key issued by badips.com to fetch IPs reported with the + associated key. Returns ------- @@ -148,9 +159,12 @@ class BadIPsAction(ActionBase): Any issues with badips.com request. """ try: - response = urlopen(cls._Request("?".join([ + url = "?".join([ "/".join([cls._badips, "get", "list", category, str(score)]), - urlencode({'age': age})]))) + urlencode({'age': age})]) + if key: + url = "&".join([url, urlencode({"key", key})]) + response = urlopen(cls._Request(url)) except HTTPError as response: messages = json.loads(response.read().decode('utf-8')) self._logSys.error( @@ -294,7 +308,8 @@ class BadIPsAction(ActionBase): self._timer = None try: - ips = self.getList(self.bancategory, self.score, self.age) + ips = self.getList( + self.bancategory, self.score, self.age, self.bankey) # Remove old IPs no longer listed self._unbanIPs(self._bannedips - ips) # Add new IPs which are now listed @@ -331,8 +346,10 @@ class BadIPsAction(ActionBase): Any issues with badips.com request. """ try: - response = urlopen(self._Request( - "/".join([self._badips, "add", self.category, aInfo['ip']]))) + url = "/".join([self._badips, "add", self.category, aInfo['ip']]) + if self.key: + url = "?".join([url, urlencode({"key", self.key})]) + response = urlopen(self._Request(url)) except HTTPError as response: messages = json.loads(response.read().decode('utf-8')) self._logSys.error(