0

我正在尝试创建一个报告,如果 ip 请求在一分钟内攻击服务器超过 1000 次,则它是 dos 攻击。Aws waf 正在 s3 中记录日志并使用 lambda 我们将检查某个 ip 是否超过阈值。

导入 urllib 导入 boto3 导入 gzip

s3=boto3.client('s3')

def lambda_handler(event, context): # 主要配置变量 requests_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')

在这段代码中,我在第 44 行遇到了意图错误,有人可以帮忙吗

4

3 回答 3

1

您可以通过多种方式进行语法检查。我喜欢将 Visual Studio Code 与 python 插件一起使用。

你也可以让 python 编译你的代码而不运行它来检查文件。

Python3 显示您的文件没有错误

$ python3 -m py_compile 61327893.py
$

我假设您没有使用 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/

你能发布你看到的堆栈跟踪吗?错误可能在导入的代码中。

于 2020-04-20T17:16:36.453 回答
0

这可能会适得其反,但您是否研究过 Amazon Athena?它允许您在 SQL 中轻松查询日志。我认为还有适用于 Python 的 Athena SDK。

于 2020-04-30T04:19:01.013 回答
0

您可以使用 AWS WAF 提供的基于速率的规则。

于 2021-11-19T11:02:43.050 回答