介绍
本作业分为两个部分:A 部分和 B 部分。 ### A 部分:入侵预防(总计 25 分) – 您需要为以下每个任务编写 iptables
规则集。每个任务的每个规则集都需要写在一个单独的 .txt
文件中。.txt
文件中的每一行对应一个单独的 iptables
规则。.txt
文件的名称必须与相应任务的名称匹配(例如 task1.txt
)。如果 .txt
文件的名称不正确或标签错误,则不会给予分数。每个 .txt
文件中的规则应该是可以直接使用的,这意味着其他人可以复制粘贴并在终端中运行规则集中的每个规则,以满足任务的要求。 – 要使用 iptables
,您需要在基于 Linux 的系统中测试您的规则。像 Docker 这样的工具或使用 VirtualBox 或 VMware 等软件的虚拟机将允许您运行一个可以使用 iptables
的 Linux 环境。 任务: – 任务 1(5 分):允许来自特定 IP 地址(192.168.1.100)的入站 SSH 流量(使用端口 22),并拒绝所有其他入站 SSH 连接。 – 任务 2(5 分):允许入站 HTTP(端口 80)和 HTTPS(端口 443)流量,但丢弃所有其他入站流量。 – 任务 3(5 分):将入站 ICMP ping 请求(ICMP echo-request)限制为每秒仅两个。 – 任务 4(5 分):对于入站流量,仅允许已建立的和相关的连接,阻止除 SSH 之外的新入站连接。 – 任务 5(5 分):默认情况下阻止所有入站和出站流量,但允许来自特定 IP(192.168.1.100)的 SSH 访问、HTTP/HTTPS 流量和 DNS 查询。 ### B 部分:入侵检测(总计 75 分) – 在这部分中,您需要编写一个名为 IDS.py
的 Python 程序,该程序模拟入侵检测系统(IDS)的行为。这个程序将读取两个文件:1)一个文件包含入侵检测规则(如 Snort 中使用的规则),2)另一个文件是 .pcap
文件,其中包含您的程序将检查的所有数据包,以查看它们是否违反规则。这两个文件都将通过命令行参数传递到您的 Python 程序(IDS.py)中。IDS.py
的开头将是:
$python3 NIDS.py <.pcap 文件的绝对路径> <IDS 规则的绝对路径>
- Python 3.9 是此部分所需的版本,并且本作业的最终测试也将使用 Python 3.9。我们不允许使用任何其他 Python 版本,如果由于错误的 Python 版本导致意外行为发生,则不会给予分数。Scapy 是此部分允许使用的库,请勿在代码中使用任何其他外部库。
IDS_rules.txt
和.pcap
文件的示例在 BlackBoard 上给出。您需要读取和解析每个规则,并使用该规则来监视和检测.pcap
文件中的数据包。请注意,提供的.pcap
文件只是在最终评分中使用的.pcap
文件的一个子集。- IDS 规则的格式与 Snort 规则的格式类似,但有一些细微的差别。一个简单的 IDS 规则示例如下:
alert tcp 192.168.102.132 any -> any any (msg: "收到一个 TCP 数据包";)
当数据包是来自 IP 地址 192.168.102.132 的任何端口并发送到任何 IP 地址的任何端口的入站 TCP 数据包时,此规则将发出警报。如果找到这样的数据包,IDS.py
将把消息记录到名为 IDS_log.txt
的日志中,格式如下:
2024 - 08 - 18 11:47:53 - Alert: 收到一个 TCP 数据包
2024 - 08 - 18 11:47:53 - Alert: 收到一个 TCP 数据包
...(如果发现更多数据包)
Code Help, Add WeChat: cstutorcs
IDS_log.txt
中的每一行表示 IDS 发现一个至少满足其中一个规则的数据包。每一行以时间戳开头,然后是 Alert: <msg 中的内容>
。IDS_log.txt
必须与上面给出的格式匹配,因为您将根据此进行评分。 – 一个更复杂的示例是:
alert tcp 192.168.102.132 any -> 131.171.127.1 25 (content: "恶意"; msg: "发现多个恶意 TCP syn 数据包"; flags: S; detection_filter: count 10, seconds 2;)
在这个示例中,如果 IDS 在 2 秒内发现从 IP 地址 192.168.102.132 的任何端口发送到 IP 地址 131.171.127.1 的端口 25 的超过 10 个包含字符串“恶意”的 TCP syn 数据包,IDS.py
将发出警报。 – 您的 IDS.py
应该忽略规则集中任何以 #
开头的行。 说明: – IDS.py
在检测到数据包后仅具有 alert
作为动作。 – IDS.py
支持四种不同的协议:ip
、icmp
、tcp
、udp
。 – IDS.py
不支持 IP 范围,所有测试用例将具有一个源 IP 地址和一个目标 IP 地址。 – IDS.py
仅考虑入站流量,“->”符号在所有测试用例中保持不变。 – 规则中括号内的每个规则选项应以 ;
分隔。规则中的最后一个选项应以 ;
结尾,后跟 )
。 – flags
选项支持四种不同的类型:A
、S
、F
、R
– A
:ACK(确认) – S
:SYN(同步序列号) – F
:FIN(结束) – R
:RST(重置连接) – detection_filter
仅且始终具有两个选项:count <数据包数量>
和 seconds <时间窗口(秒)>
。请遵循示例中提供的确切格式。 您的 IDS.py
将在以下场景(任务)中进行测试: – 检测多个 TCP 数据包(5 分)。 – 检测多个 ICMP 数据包(5 分)。 – 检测多个 IP 数据包(5 分)。 – 检测多个 UDP 数据包(5 分)。 – 检测 TCP、ICMP、UDP 和 IP 数据包的混合(5 分)。 – 在所有其他良性数据包中检测一个具有恶意内容的数据包(5 分)。 – 检测跨不同协议的具有恶意内容的数据包(5 分)。 – 检测 TCP syn 数据包、fin 数据包、rst 数据包和 ack 数据包(10 分)。 – 检测 TCP 洪水攻击(10 分)。 – 检测 TCP syn 扫描(10 分)。 – 在短时间内检测多个具有恶意内容的 TCP ack 数据包(10 分)。