pull/1015/head
Daniel Black 11 years ago
commit 7611096162

@ -49,10 +49,13 @@ 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)
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=5, 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(

Loading…
Cancel
Save