Добавить docs/services/lxc208-manage/alert/crowdsec.py
This commit is contained in:
parent
5f183df7a8
commit
828c8b2e51
49
docs/services/lxc208-manage/alert/crowdsec.py
Normal file
49
docs/services/lxc208-manage/alert/crowdsec.py
Normal file
@ -0,0 +1,49 @@
|
||||
import logging
|
||||
from typing import Dict, Optional
|
||||
|
||||
from alerts.alerts import ALERTS_CONFIG
|
||||
from alerts.utils import escape_html
|
||||
from alerts.formatters import get_formatter
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
SECURITY_CHANNEL = "security"
|
||||
|
||||
|
||||
def process_crowdsec_alert(obj: Dict) -> None:
|
||||
alerts = obj.get("crowdsec_alerts", [])
|
||||
if not alerts:
|
||||
logger.warning("No crowdsec_alerts in payload")
|
||||
return
|
||||
|
||||
from alerts.matrix import send_matrix
|
||||
|
||||
for alert in alerts:
|
||||
scenario = alert.get("scenario", "Unknown")
|
||||
|
||||
config = ALERTS_CONFIG.get(scenario)
|
||||
if not config:
|
||||
logger.warning("Unknown CrowdSec scenario: %s", scenario)
|
||||
continue
|
||||
|
||||
room = config.get("room", SECURITY_CHANNEL)
|
||||
title = config.get("title", f"CrowdSec Alert: {scenario}")
|
||||
|
||||
formatter_name = config.get("formatter")
|
||||
formatter = get_formatter(formatter_name) if formatter_name else None
|
||||
|
||||
lines = [f"<b>{title}</b>", ""]
|
||||
|
||||
if formatter:
|
||||
lines.append(formatter(alert))
|
||||
else:
|
||||
lines.append(f"\U0001F5A5 Host: {escape_html(alert.get('host', 'unknown'))}")
|
||||
lines.append(f"\U0001F4CD Target: {escape_html(alert.get('scope', ''))}:{escape_html(alert.get('value', ''))}")
|
||||
|
||||
if "summary" in config:
|
||||
lines.append("")
|
||||
lines.append(config["summary"])
|
||||
if "info" in config:
|
||||
lines.append(config["info"])
|
||||
|
||||
send_matrix("\n".join(lines), room)
|
||||
Loading…
Reference in New Issue
Block a user