Added BOGAN Handler

This commit is contained in:
ZKWolf 2024-03-28 19:29:31 +01:00
parent e4bda860ab
commit 856ceb9362

View File

@ -1,3 +1,5 @@
import ipaddress
from flask_definitions import *
import time
import uuid
@ -6,19 +8,104 @@ import os
import json
def check_bogon_ip(ip_addr):
bogon_ranges = [
"0.0.0.0/8",
"10.0.0.0/8",
"100.64.0.0/10",
"127.0.0.0/8",
"127.0.53.53",
"169.254.0.0/16",
"172.16.0.0/12",
"192.0.0.0/24",
"192.0.2.0/24",
"192.168.0.0/16",
"198.18.0.0/15",
"198.51.100.0/24",
"203.0.113.0/24",
"224.0.0.0/4",
"240.0.0.0/4",
"255.255.255.255/32",
"::/128",
"::1/128",
"::ffff:0:0/96",
"::/96",
"100::/64",
"2001:10::/28",
"2001:db8::/32",
"fc00::/7",
"fe80::/10",
"fec0::/10",
"ff00::/8",
"2002::/24",
"2002:a00::/24",
"2002:7f00::/24",
"2002:a9fe::/32",
"2002:ac10::/28",
"2002:c000::/40",
"2002:c000:200::/40",
"2002:c0a8::/32",
"2002:c612::/31",
"2002:c633:6400::/40",
"2002:cb00:7100::/40",
"2002:e000::/20",
"2002:f000::/20",
"2002:ffff:ffff::/48",
"2001::/40",
"2001:0:a00::/40",
"2001:0:7f00::/40",
"2001:0:a9fe::/48",
"2001:0:ac10::/44",
"2001:0:c000::/56",
"2001:0:c000:200::/56",
"2001:0:c0a8::/48",
"2001:0:c612::/47",
"2001:0:c633:6400::/56",
"2001:0:cb00:7100::/56",
"2001:0:e000::/36",
"2001:0:f000::/36",
"2001:0:ffff:ffff::/64"
]
for bogon_range in bogon_ranges:
ip_addr_obj = ipaddress.ip_address(ip_addr)
network = ipaddress.ip_network(bogon_range)
if ip_addr_obj in network:
return True
return False
def _get_remote_ip(check_type="strict"):
if check_type == "strict":
if request.environ.get('HTTP_X_FORWARDED_FOR') is None:
ip_addr = request.environ['REMOTE_ADDR']
if ip_addr == "127.0.0.1":
if request.environ.get('HTTP_CF_CONNECTING_IP'):
ip_addr = request.environ['HTTP_CF_CONNECTING_IP']
if ip_addr == "192.168.1.111" or ip_addr == "192.168.1.130":
return None
logger.graylog_logger(level="info", handler="ip_handler", message=f"New Connection from: {ip_addr}")
bogon_check = check_bogon_ip(ip_addr)
if bogon_check:
logger.graylog_logger(level="info", handler="ip_handler", message=f"BOGON IP DETECTED: {ip_addr}")
abort(403)
return ip_addr
else:
elif request.environ.get('HTTP_X_FORWARDED_FOR'):
ip_addr = request.environ['HTTP_X_FORWARDED_FOR']
if ip_addr == "127.0.0.1":
return None
else:
bogon_check = check_bogon_ip(ip_addr)
if bogon_check:
logger.graylog_logger(level="info", handler="ip_handler", message=f"BOGON IP DETECTED: {ip_addr}")
abort(403)
logger.graylog_logger(level="info", handler="ip_handler", message=f"New Connection from: {ip_addr}")
return ip_addr
else:
ip_addr = request.remote_addr
if ip_addr == "127.0.0.1":
return None
else:
bogon_check = check_bogon_ip(ip_addr)
if bogon_check:
logger.graylog_logger(level="info", handler="ip_handler", message=f"BOGON IP DETECTED: {ip_addr}")
abort(403)
logger.graylog_logger(level="info", handler="ip_handler", message=f"New Connection from: {ip_addr}")
return ip_addr
else:
@ -34,6 +121,8 @@ def check_for_game_client(check_type="strict"):
# _get_remote_ip("strict")
elif user_agent.startswith("CrashReportClient/++UE4+Release-4.21"):
_get_remote_ip("strict")
elif user_agent.startswith("TheExit/++UE4+Release-4.20-CL-0"):
_get_remote_ip("strict")
elif user_agent.startswith("CrashReportClient/++UE4+Release-4.20-CL-0"):
_get_remote_ip("strict")
elif user_agent.startswith("CrashReportClient, engine=UE4"):
@ -87,18 +176,23 @@ class Session_Manager:
self.clean_sessions()
if session_id not in self.sessions:
if session_id:
return None
else:
logger.graylog_logger(level="info", handler="session_manager",
message=f"Session ID: {session_id} not found.")
return None
abort(401)
else:
abort(401)
self.extend_session(session_id)
self.save_sessions()
return self.sessions[session_id]["user"]
def extend_session(self, session_id):
self.sessions[session_id]["expires"] = time.time() + 3600
self.save_sessions()
try:
self.sessions[session_id]["expires"] = time.time() + 3600
self.save_sessions()
except KeyError:
logger.graylog_logger(level="info", handler="session_manager",
message=f"Session ID: {session_id} not found.")
abort(403)
def clean_sessions(self):
current_time = time.time()