如何使用 Python 编写简单的入侵检测系统?

2023-04-17 00:00:00 如何使用 入侵 检测系统

一个简单的入侵检测系统可以通过监控系统日志、网络连接等方式来检测异常行为,以下是一个基于系统日志监控的示例代码:

import os
import re
import time

log_file = "/var/log/auth.log"  # 监控的日志文件
threshold = 3  # 设定阈值,表示在多长时间内出现多少次异常行为视为入侵

# 定义正则表达式匹配关键字
keywords = ["Failed password", "Failed to authenticate", "Invalid user", "illegal user", "Bad protocol version"]

# 定义记录异常行为的字典,以 IP 地址为键,异常次数及最近一次出现时间为值
abnormal_dict = {}

# 监控循环
while True:
    # 每次读取最后 100 行日志
    lines = os.popen(f"tail -n 100 {log_file}").readlines()

    # 开始监控
    for line in lines:
        for keyword in keywords:
            if re.search(keyword, line):
                ip_address = re.findall(r'\d+.\d+.\d+.\d+', line)[0]  # 提取 IP 地址
                if ip_address in abnormal_dict:
                    if time.time() - abnormal_dict[ip_address]["last_time"] < threshold*60:
                        abnormal_dict[ip_address]["count"] += 1
                        abnormal_dict[ip_address]["last_time"] = time.time()
                        print(f"Intrusion detected! IP: {ip_address}, count: {abnormal_dict[ip_address]['count']}")
                    else:
                        del abnormal_dict[ip_address]
                else:
                    abnormal_dict[ip_address] = {"count": 1, "last_time": time.time()}
    time.sleep(10)  # 每 10 秒检测一次

以上代码会不断读取指定的系统日志文件的最后 100 行,并通过正则表达式匹配关键字来判断是否有异常行为出现。如果匹配到异常行为,则记录该行为对应的 IP 地址及异常次数及最近一次出现时间,并判断该 IP 地址是否已经超过了阈值。如果超过了阈值,则输出入侵检测结果并清除该 IP 地址的记录。

需要注意的是,以上代码仅仅是一个简单的入侵检测示例,实际情况中可能需要根据具体情况调整关键字、阈值等参数。另外,入侵检测系统只是安全防护的一个方面,还需要配合其他安全措施来提高系统安全性。

相关文章