diff --git a/defs.py b/defs.py new file mode 100644 index 0000000..13dcd64 --- /dev/null +++ b/defs.py @@ -0,0 +1,437 @@ +# definiciones +from io import BytesIO +import xlsxwriter +import settings +from pymisp import PyMISP +import urllib3 +from datetime import datetime +from zoneinfo import ZoneInfo +import os +import logging +from logging.handlers import RotatingFileHandler +import smtplib +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart +from email.mime.application import MIMEApplication +from crontab import CronTab + +urllib3.disable_warnings() + +class MISPAlertManager: + + def __init__(self): + self.dir_actual = os.getcwd() + self.dir_logs = os.path.join(self.dir_actual, 'logs') + self._setup_logging() + self.misp = PyMISP(settings.MISP_CONFIG['URL_MISP'], settings.MISP_CONFIG['AUTHKEY'], False) + + def _setup_logging(self): + os.makedirs(self.dir_logs, exist_ok=True) + log_file = os.path.join(self.dir_logs, f"alertas_{datetime.now().strftime('%Y%m%d')}.log") + rotating_handler = RotatingFileHandler(log_file, maxBytes=262144000, backupCount=10) + logging.basicConfig( + level=logging.INFO, + handlers=[rotating_handler], + format='%(asctime)s - %(levelname)s - %(message)s' + ) + + def enviar_alerta(self): + # realizado (flag) + realizado = False + + # Servidores + servidores = [] + + # Se obtienen datos de conexión de servidores + servidores_temp = self.obtener_servidores() + + if servidores_temp: + # Solo se quiere entregar desconectados, se filtra por los desconcetados + if settings.SERVERS_OFF: + for x in servidores_temp: + if x['connection_status'] != 'Connected': + servidores.append(x) + else: + # Entonces todos los servidores + servidores = servidores_temp + + + # Se verifica que servidores tenga datos + if servidores: + # Se arma estructura de correo + try: + # Version de Servidor de MISP + misp_version = self.misp.misp_instance_version['version'] + + # Configuración de la cuenta de Office 365 y del servidor SMTP + smtp_server = settings.EMAIL_CONFIG['server_smtp_host'] + smtp_port = settings.EMAIL_CONFIG['server_smtp_port'] + from_address = settings.EMAIL_CONFIG['smtp_username'] + to_address = settings.EMAIL_CONFIG['email_recipient'] + password = settings.EMAIL_CONFIG['smtp_password'] + + # Crear el mensaje + msg = MIMEMultipart() + msg["From"] = settings.EMAIL_CONFIG['smtp_username'] # Dirección 'from' + msg["To"] = to_address + msg["Subject"] = settings.EMAIL_CONFIG['email_subject'] + + # Cuerpo del correo en HTML inciala + html_body_start = """ + + +
+ + + + + +
+ + Instance Name + + |
+
+ + Connection Status + + |
+
+ + Error Status + + |
+
+ + Remote Version + + |
+
+ + Remote Org + + |
+
+ + Status Code + + |
+
+ + Last Check + + |
+
+ + """+serv['instance_name']+""" + + |
+
+ + """+serv['connection_status']+""" + + |
+
+ + """+serv['error_status']+""" + + |
+
+ + """+serv['misp_remote_version']+""" + + |
+
+ + """+serv['remote_org']+""" + + |
+
+ + """+str(serv['status_code'])+""" + + |
+
+ + """+serv['last_check']+""" + + |
+
+ + """+serv['instance_name']+""" + + |
+
+ + """+serv['connection_status']+""" + + |
+
+ + """+serv['error_status']+""" + + |
+
+ + """+serv['misp_remote_version']+""" + + |
+
+ + """+serv['remote_org']+""" + + |
+
+ + """+str(serv['status_code'])+""" + + |
+
+ + """+serv['last_check']+""" + + |
+