如何使用 Python 编写简单的入侵检测系统?
一个简单的入侵检测系统可以通过监控系统日志、网络连接等方式来检测异常行为,以下是一个基于系统日志监控的示例代码:
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 地址的记录。
需要注意的是,以上代码仅仅是一个简单的入侵检测示例,实际情况中可能需要根据具体情况调整关键字、阈值等参数。另外,入侵检测系统只是安全防护的一个方面,还需要配合其他安全措施来提高系统安全性。
相关文章