CloudFlare — Отправка уведемлений в Slack

 

Данный Python скрипт позволяет отправлять уведомления о событиях CloudFlare Firewall в Slack канал:

import os
import requests
import json
import datetime

### CloudFlare ###
token = "XXXXXXXXXXXXXXXX"
zoneId = "XXXXXXXXXXXXXXXX"
timeRange = 5 # Minutes
source = "waf"
action = "drop" # drop|simulate|challenge More info: https://api.cloudflare.com/#firewall-events-list-events
urlCloudFlare = "https://api.cloudflare.com/client/v4/zones/" + zoneId + "/security/events"
### END OF BLOCK ###

### Slack ###
webHook = "https://hooks.slack.com/services/AAAAAAAA/BBBBBBBB/CCCCCCCCCCCCCCCC"
channelId = "XXXXXXXX"
### END OF BLOCK ###

### Functions ###
def slackNotify(ip, country, time, ruleMessage):
    headers = {
        'Content-type': 'application/json',
    }

    data = '{"channel":"' + channelId + '","text":"IP address: `' + ip + '` from: `' + country + '` was blocked by `' + source + '` at ' + time + ' UTC' + '\nReason: ' + ruleMessage + '\n\n"}'

    response = requests.post(webHook, headers=headers, data=data)
### END OF BLOCK ###

sinceTime = (datetime.datetime.utcnow() - datetime.timedelta(minutes=timeRange))
sinceTime = sinceTime.strftime("%Y-%m-%dT%H:%M:%SZ")

headers = {
    'Authorization': 'Bearer ' + token,
}

params = (
    ('kind', 'firewall'),
    ('since', sinceTime),
    ('action', action),
    ('source', source),
)

response = requests.get(urlCloudFlare, headers=headers, params=params).json()

count = len(response['result'])

for x in range(count):
    ip = response['result'][x]['ip']
    country = response['result'][x]['country']
    time = response['result'][x]['occurred_at']
    ruleMessage = response['result'][x]['matches'][0]['metadata']['rule_message']
    time = datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%SZ')
    slackNotify(ip, country, str(time), ruleMessage)

### Print for debugging ###
# response = json.dumps(response, indent=4)
# print(response)
### END OF BLOCK ###

 

Данный скрипт проверяет события за последние 5 минут, соответственно ставим его в cron с частотой каждые 5 минут.

 

 

Для того, чтобы можно было обращаться к CloudFlare по API, нужно в настройках аккаунта создать токен. Дадим ему только право чтения фаервола.

 

 

 

Метки: Метки

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии