ban IP rate limit

This commit is contained in:
Benny
2023-03-21 18:02:24 +01:00
parent 20cc0b838b
commit b0f0ee9249
3 changed files with 7 additions and 8 deletions

View File

@@ -99,6 +99,7 @@ def check_spam(ip, ua, author, content) -> int:
class Cloudflare(Redis): class Cloudflare(Redis):
key = "cf-blacklist-ip" key = "cf-blacklist-ip"
expire = "cf-expire"
def __init__(self): def __init__(self):
self.account_id = "e8d3ba82fe9e9a41cceb0047c2a2ab4f" self.account_id = "e8d3ba82fe9e9a41cceb0047c2a2ab4f"
@@ -135,9 +136,10 @@ class Cloudflare(Redis):
old_ips.append(ip) old_ips.append(ip)
body = [{"ip": i} for i in set(old_ips)] body = [{"ip": i} for i in set(old_ips)]
self.r.set(self.key, json.dumps(body)) self.r.set(self.key, json.dumps(body))
logging.warning("Adding %s to cloudflare managed challenge list", ip) if not self.r.exists(self.expire):
resp = self.session.put(self.endpoint, json=body) resp = self.session.put(self.endpoint, json=body)
logging.info(resp.json()) logging.info(resp.json())
self.r.set(self.expire, 1, ex=60)
def clear_fw(self): def clear_fw(self):
logging.info("Clearing firewall rules") logging.info("Clearing firewall rules")

View File

@@ -36,10 +36,7 @@ class ResourceHandler(BaseHandler):
referer = self.request.headers.get("referer") referer = self.request.headers.get("referer")
ip = self.get_real_ip() ip = self.get_real_ip()
if not referer: if not referer:
try: cf.ban_new_ip(ip)
cf.ban_new_ip(ip)
except Exception as e:
logging.error("Failed to ban %s: %s", ip, e)
if os.getenv("GIFT"): if os.getenv("GIFT"):
self.set_header("Content-Type", "text/html") self.set_header("Content-Type", "text/html")
self.set_header("Content-Encoding", "gzip") self.set_header("Content-Encoding", "gzip")

View File

@@ -160,7 +160,7 @@ if __name__ == "__main__":
scheduler.add_job(sync_douban, trigger=CronTrigger.from_crontab("1 1 1 * *")) scheduler.add_job(sync_douban, trigger=CronTrigger.from_crontab("1 1 1 * *"))
scheduler.add_job(entry_dump, trigger=CronTrigger.from_crontab("2 2 1 * *")) scheduler.add_job(entry_dump, trigger=CronTrigger.from_crontab("2 2 1 * *"))
scheduler.add_job(Other().import_ban_user, "interval", seconds=300) scheduler.add_job(Other().import_ban_user, "interval", seconds=300)
scheduler.add_job(Cloudflare().clear_fw, trigger=CronTrigger.from_crontab("0 0 * * *")) scheduler.add_job(Cloudflare().clear_fw, trigger=CronTrigger.from_crontab("0 0 * * 1"))
scheduler.add_job(YYSub().run, trigger=CronTrigger.from_crontab("0 1 * * *")) scheduler.add_job(YYSub().run, trigger=CronTrigger.from_crontab("0 1 * * *"))
scheduler.start() scheduler.start()