Парсинг ваф-журнала, чтобы получить IP-адрес хоста для предотвращения DOS-атаки. - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь создать отчет, в котором, если ip-запрос атаковал сервер более 1000 за одну минуту, это DOS-атака. Aws waf регистрирует логи в s3 и с помощью лямбды мы проверим, пересекает ли определенный ip порог.

import urllib import boto3 import gzip

s3 = boto3.client ('s3')

def lambda_handler (событие, контекст): # Главные переменные конфигурации arguments_limit = 100

# Parsing the required information out of the event structure
bucket_name = event['Records'][0]['s3']['bucket']['name']
file_name = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])
response = s3.get_object(Bucket=bucket_name, Key=file_name)
target_bucket='blocketrequest'
FILE='Filtered' + file_name

text = response["Body"].read().decode()
e  = text.split("\n")




# Parsing IPs out of the access log file
suspicious_ips = {}

for each in e:
    try:
        loaded_data = json.loads(each)
        ip = loaded_data['httpRequest']['clientIp']
        if ip in suspicious_ips.keys():
            suspicious_ips[ip] += 1
        else:
            suspicious_ips[ip] = 1
    except Exception as err:
        print(f"Problem with line:{str(err)}")
        break

# Filtering IPs that exceeded the limit and preparing inserts to WAF
updates_list = []
for ip in suspicious_ips.keys():
    if suspicious_ips[ip] < requests_limit:
        continue

updates_list.append({
    'Action': 'INSERT',
    'IPSetDescriptor': {
        'Type': 'IPV4',
        'Value': "%s/32"%ip
    }
})

# Exit if there are no malicious IPs
if updates_list == []:
    return

s3.put_object(Body=updates_list,Bucket=target_bucket,Key=FILE)
print('transferred')

В этом коде я получаю сообщение об ошибке Intendention в строке 44, может какая-то помощь

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Это, вероятно, контрпродуктивно, но вы смотрели на Амазонку Амазонки? Это позволяет легко запрашивать журнал в SQL. Я думаю, что есть Athena SDK для Python.

0 голосов
/ 20 апреля 2020

Вы можете выполнять синтаксические проверки множеством способов. Я люблю использовать Visual Studio Code с плагином python.

Вы также можете попросить python скомпилировать ваш код без его запуска для проверки файла.

Python3 не показывает ошибок с вашим файлом

$ python3 -m py_compile 61327893.py
$

I предположим, что вы не используете 2.7, но здесь та же команда.

$ python2.7 -m py_compile 61327893.py
  File "61327893.py", line 35
    print(f"TotalRecords:{len(e)}")
                                 ^
SyntaxError: invalid syntax

Еще одна замечательная опция не от Microsoft - это онлайн-проверка pep8. http://pep8online.com/

Можете ли вы опубликовать трассировку стека, которую видите? Ошибка может быть в импортированном коде.

...