Raid-Shream-Eng/Simple_Scapy_Firewall
GitHub: Raid-Shream-Eng/Simple_Scapy_Firewall
基于 Scapy 的轻量级 Python 防火墙教学工具,通过用户自定义规则实时监控和分类网络数据包,并将流量日志持久化记录。
Stars: 0 | Forks: 0
# 简单的 Scapy 防火墙
一个基于 [Scapy](https://scapy.net/) 构建的轻量级 Python 数据包监控防火墙。该程序实时捕获 IP 数据包,根据用户定义的规则进行检查,并将允许或阻止的流量记录到日志文件中。
本项目仅供学习、测试和基本的本地流量检查使用。它不能替代生产环境的防火墙。
## 功能
- 使用 Scapy 捕获实时网络数据包
- 根据源 IP 地址阻止流量
- 根据目标端口阻止流量
- 根据协议阻止流量,目前支持 TCP 和 UDP
- 将所有分析过的数据包记录到 `firewall_log.txt`
- 将阻止的数据包打印到终端以便快速查看
- 程序启动时进行交互式规则设置
## 项目结构
```
.
|-- firewall.py # Main firewall script
|-- firewall_log.txt # Runtime log file
|-- requirements.txt # Python dependencies
`-- README.md
```
## 环境要求
- Python 3.10 或更高版本
- 需要管理员/root 权限才能进行数据包嗅探
- Scapy
- Windows 上需要 Npcap,或者 Linux/macOS 上需要兼容 libpcap 的数据包捕获支持
使用以下命令安装 Python 依赖项:
```
pip install -r requirements.txt
```
在 Windows 上,从此处安装 Npcap:
```
https://npcap.com/
```
在安装过程中,启用 WinPcap 兼容模式有助于那些依赖它的数据包捕获工具正常运行。
## 使用说明
在项目目录中运行防火墙:
```
python firewall.py
```
在 Windows 上,请在运行命令之前以管理员身份打开 PowerShell 或命令提示符。
在 Linux/macOS 上,如果数据包捕获被拒绝,请使用提升的权限运行:
```
sudo python firewall.py
```
出现提示时,以逗号分隔的形式输入拦截规则:
```
Firewall Rule Setup
-------------------
Enter blocked source IPs separated by comma, or leave empty: 192.168.1.10,10.0.0.5
Enter blocked destination ports separated by comma, or leave empty: 22,80,443
Enter blocked protocols TCP/UDP separated by comma, or leave empty: TCP
```
如果不想根据某个规则类型进行拦截,请将相应字段留空。
设置完成后,程序将开始嗅探数据包:
```
Firewall Started
Press CTRL + C to stop
------------------------
```
使用 `CTRL + C` 停止防火墙。
## 日志输出示例
允许通过的数据包将被写入 `firewall_log.txt`:
```
[2026-06-15 23:25:10] ALLOWED | SRC=192.168.1.20:51514 | DST=142.250.190.14:443 | PROTO=TCP
```
被拦截的数据包将打印到终端并写入日志:
```
[2026-06-15 23:25:18] BLOCKED | SRC=192.168.1.10:49312 | DST=192.168.1.1:80 | PROTO=TCP | REASON=Blocked source IP: 192.168.1.10; Blocked destination port: 80
```
## 规则的工作原理
防火墙会根据三个规则集检查每个捕获的 IP 数据包:
- 源 IP 规则:拦截数据包源 IP 与被拦截 IP 匹配的数据包。
- 目标端口规则:拦截目标端口与被拦截端口匹配的 TCP/UDP 数据包。
- 协议规则:拦截使用被拦截协议(目前为 `TCP` 或 `UDP`)的数据包。
如果数据包符合一个或多个拦截规则,它将被标记为 `BLOCKED`。否则,它将被标记为 `ALLOWED`。
## 重要限制
- 该脚本仅用于监控和分类数据包,不会在操作系统防火墙级别主动丢弃数据包。
- 非 IP 数据包将被忽略。
- 仅检查 TCP 和 UDP 端口。
- 规则在启动时输入,不会在多次运行之间保存。
- 在大多数系统上,捕获数据包需要提升的权限。
要实现真正的数据包拦截,请与系统防火墙工具集成,例如 Windows Defender Firewall、`iptables`、`nftables` 或 `pf`。
## 故障排除
### 权限错误
在 Windows 上以管理员身份运行终端,或在 Linux/macOS 上使用 `sudo`。
### 未捕获到任何数据包
检查是否已安装数据包捕获支持。在 Windows 上,请安装 Npcap。同时验证所选的网络接口是否处于活动状态并有流量传输。
### 无效的端口值将被忽略
端口必须是数值,例如:
```
22,80,443
```
## 教育用途
本项目有助于了解以下内容:
- 数据包嗅探基础
- IP、TCP 和 UDP 数据包字段
- 简单的基于规则的流量分类
- 在 Python 中记录安全事件
请仅在您有权检查流量的网络和系统上使用此工具。
标签:Docker 部署, PKI, Python, Scapy, 无后门, 流量过滤, 网络运维, 逆向工具, 防火墙