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, 无后门, 流量过滤, 网络运维, 逆向工具, 防火墙