Как сисадмин, я понимаю важность быстрого и эффективного оповещения в случае возникновения потенциальных угроз безопасности. Платформа Discord, популярная среди многих, может стать отличным инструментом для этих целей. Интеграция Wazuh с Discord позволит мгновенно получать оповещения о важных событиях безопасности.
Еще по теме: Интеграция Wazuh с MISP
Интеграция Wazuh с Discord
Сначала нужно создать webhook в нашем Discord-сервере. Для этого выберите сервер и перейдите в раздел Text Channels (Текстовые каналы). Нажмите на значок шестеренки рядом с каналом, в который будут поступать оповещения.
Перейдите на вкладку Integrations (Интеграции) и выберите New Webhook (Создать Webhook). Скопируйте урл вебхука, он понадобится для дальнейшей настройки.
Теперь можno создать скрипт на Python, который будет обрабатывать оповещения Wazuh и отправлять их в Discord:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
#!/var/ossec/framework/python/bin/python3 import sys import json import time import requests # Функция для логирования сообщений def logger(message): f = open('/var/ossec/logs/integrations.log', 'a') f.write('{0} [Discord]: {1}\n'.format(time.strftime('%Y/%m/%d %H:%M:%S %Z'), message)) f.close() # Функция для получения JSON-данных об оповещении def get_alert(alert_file): f = open(alert_file) alert_json = json.loads(f.read()) f.close() return alert_json # Функция для формирования сообщения в Discord def generate_message(alert_json): level = alert_json['rule']['level'] # Выбор цвета сообщения в зависимости от уровня оповещения if level <= 5: color = 16776960 # желтый else: color = 15158332 # красный embed_data = {} embed_data['title'] = alert_json['rule']['description'] if 'description' in alert_json['rule'] else 'Н/Д' embed_data['description'] = alert_json['full_log'] if 'full_log' in alert_json else '' embed_data['fields'] = [] if 'agent' in alert_json: agent_text = '{0} (ID: {1})'.format(alert_json['agent']['name'], alert_json['agent']['id']) embed_data['fields'].append({ 'name' : 'Агент', 'value' : '{0}'.format(agent_text), 'inline' : True }) embed_data['fields'].append({ 'name' : 'ID Правила', 'value' : '{0} (Уровень: {1})'.format(alert_json['rule']['id'], alert_json['rule']['level']), 'inline' : True }) if 'groups' in alert_json['rule'] and len(alert_json['rule']['groups']) > 0: embed_data['fields'].append({ 'name' : 'Группа(ы)', 'value' : ', '.join(alert_json['rule']['groups']), 'inline' : True }) if 'mitre' in alert_json['rule']: embed_data['fields'].append({ 'name' : 'Mitre Tactic', 'value' : '{0}'.format(alert_json['rule']['mitre']['tactic']), 'inline' : True }) if 'pci_dss' in alert_json['rule']: embed_data['fields'].append({ 'name' : 'PCI DSS', 'value' : '{0}'.format(alert_json['rule']['pci_dss']), 'inline' : True }) if 'gdpr' in alert_json['rule']: embed_data['fields'].append({ 'name' : 'GDPR', 'value' : '{0}'.format(alert_json['rule']['gdpr']), 'inline' : True }) embed_data['fields'].append({ 'name' : 'Расположение', 'value' : alert_json['location'], 'inline' : True }) embed_data['color'] = color embed_data['url'] = '{0}/app/discover'.format(server_url) embed_data['timestamp'] = alert_json['timestamp'] message = {'embeds': [ embed_data ] } return json.dumps(message) # Функция для отправки сообщения в Discord через вебхук def send_message(message): headers = {'content-type': 'application/json', 'accept-charset': 'UTF-8'} response = requests.post(discord_webhook_url, data=message, headers=headers) logger(response) if __name__ == '__main__': try: # Получение аргументов alert_file = sys.argv[1] server_url = sys.argv[2] discord_webhook_url = sys.argv[3] # Получение данных об оповещении и отправка сообщения в Discord alert_json = get_alert(alert_file) message = generate_message(alert_json) send_message(message) sys.exit(0) except Exception as e: logger('ОШИБКА: {0}'.format(str(e))) raise |
Теперь необходимо залить скрипт в папку /var/ossec/integrations на сервер Wazuh и настроить интеграцию:
1 2 3 |
chown :wazuh /var/ossec/integrations/custom-discord.py chmod 750 /var/ossec/integrations/custom-discord cp -p /var/ossec/integrations/slack /var/ossec/integrations/custom-discord |
Добавьте настройки интеграции в файл конфигурации Wazuh:
1 2 3 4 5 6 |
<integration> <name>custom-discord</name> <api_key>Wazuh_Dashboard_URL</api_key> <hook_url>DISCORD_WEBHOOK_URL</hook_url> <alert_format>json</alert_format> </integration> |
Теперь, когда Wazuh будет генерировать новые оповещения, они будут автоматически отправляться в выбранный канал Discord в виде понятных и визуально оформленных сообщений.
Это позволит быстро реагировать на потенциальные угрозы и эффективнее обеспечивать безопасность инфраструктуры.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Мониторинг CPU и памяти Docker-контейнеров с Wazuh
- Использование Rsyslog для передачи событий Windows в Wazuh
- Мониторинг сетевых соединений Linux используя Wazuh и eBPF