SysAdminDoc/PyWall

GitHub: SysAdminDoc/PyWall

一款单文件 Python 实现的 Windows 防火墙实时管理与网络连接监控工具,集成了威胁检测、规则编辑、历史日志和取证导出功能。

Stars: 1 | Forks: 0

PyWall v4.2.0

PyWall

实时 Windows 防火墙管理器与网络监控工具。
单文件 Python 应用。WFC 风格的规则编辑器。Toast 通知。威胁检测。服务模式。

Python Windows License Lines

## 这是什么 PyWall 是一款位于您与 Windows 防火墙之间的桌面应用程序。它实时监控每一个网络连接,准确显示哪些程序正在连接互联网,并允许您在无需打开 `wf.msc` 的情况下创建或管理防火墙规则。 它是一个单一的 `.py` 文件。无需安装程序。无需构建步骤。将其放在任意位置并运行即可。 ## 快速开始 ``` # 克隆并运行(推荐使用 admin) git clone https://github.com/SysAdminDoc/PyWall.git cd PyWall python -m pip install -r requirements.txt python PyWall.py ``` 依赖项已在 `requirements.txt` 中锁定,必须在启动前安装。PyWall 会自动提升至管理员权限,并自动配置 Windows 防火墙审核日志记录。 ## 功能 ### 实时连接监控 以实时表格显示系统上的每一个 TCP/UDP 连接,包含进程名、PID、svchost 服务名、父进程、可见的 UWP/包标识、签名者信任状态、远程 IP、主机名、端口、协议、国家/地区、流量类别和信誉评分。后台通过 DNS、WHOIS、HTTPS/本地 GeoIP 和签名者 worker 解析连接。流量会被自动分类为流媒体、游戏、社交媒体、广告/追踪等组别。 ### WFC 风格的规则面板 通过带有侧边栏(用于快速操作)的拆分窗格界面,对**所有** Windows 防火墙规则(不仅是 PyWall 创建的规则)进行全面管理: - 按来源、方向、操作、启用状态进行过滤 - 跨规则名称、程序、地址和端口进行实时搜索 - 快捷操作:允许、阻止、启用、禁用、删除、复制、属性 - 显示无效规则(缺少 exe)并检测重复项 - 浏览并允许 / 浏览并阻止快捷方式 - 打开任意规则程序的文件位置 - 带有从实时连接中自动检测并填充下拉列表的规则编辑器 - 破坏性的防火墙重置会首先导出带有时间戳的 `.wfw` 回滚备份,并允许从“工具”标签页进行恢复/导入 - 受管理的 `PW_` 规则和旧版 `HG_` 规则会在刷新时检查是否存在外部创建/删除/启用/禁用的偏移,并记录修改前后的快照,可以在防火墙标签页中还原或确认这些更改 ### Toast 通知 针对被阻止的连接和新应用的桌面通知。每个 Toast 都带有一键阻止/允许/编辑按钮。展开可查看自定义规则选项(方向、操作、类型)。所有操作都会立即保存,没有确认弹窗。 ### 自动阻止 工具栏中的切换开关。自动为标记的连接创建阻止规则。多层去重机制可防止生成重复规则: 1. `FWManager._known_names` —— 内存中所有规则名称的集合,在创建/删除时同步 2. 每个快捷阻止辅助程序上的 `rule_exists()` 验证门 3. `_auto_blocked_ips` —— UI 层面的 IP 集合,在监控启动时从现有规则中填充 4. `_auto_blocked_threats` —— 用于威胁检测器路径的独立去重 ### 威胁检测 - 端口扫描检测(在设定时间窗口内可配置的唯一端口阈值) - 暴力破解检测(重复的阻止连接尝试) - 检测器触发时的 MITRE ATT&CK 映射(`T1046` 网络服务发现和 `T1110` 暴力破解) - 可选的 TLS SNI 摄取,支持 mitmproxy/Lumen 风格的 JSONL、CSV 或文本日志 - DNS-over-HTTPS 端点检测,具有可配置的 `warn`、`block` 或 `ignore` 操作 - 针对低信誉或未归属端点的定期外发信标检测 - 用于连接元数据匹配的 IDS-lite YARA 风格规则文件 - 自定义 IP/域名黑名单强制执行 - 从域上下文菜单提供 VirusTotal 和相关研究链接 ### 黑名单导入 内置的黑名单导入会记录源 URL、获取时间戳、解析的项目数、SHA-256 校验和、最后良好缓存路径以及失败原因。如果订阅源更新失败,PyWall 会保留最后良好的缓存订阅源可用,并在“黑名单”状态行中报告该回退状态。 ### 插件防护机制 插件清单可以暂存在 `%APPDATA%/PyWall/plugins` 下,但默认情况下不执行插件代码。“工具”标签页会扫描 `pywall-plugin.json` 或 `plugin.json` 清单,验证声明的钩子和网络/文件权限,对已签名/未签名/未知的信任状态进行分类,将无效清单的详细信息写入 `plugin_events.log`,并且只有当 `plugins_enabled`、清单的 `enabled` 标志以及 `plugin_enabled_ids` 全部同意时,才会将插件标记为可执行状态。 ### 应用程序控制 实时连接行显示进程名称、路径、PID、服务/包/父进程/签名者身份、远程端点、流量类别、字节增量和上下文操作,以阻止选定的 IP、程序或域名。 ### 学习审查 在启动时,PyWall 可以在定时审查窗口内收集未知的出站应用,而无需在每次连接时都进行提示。“连接”标签页按签名者、可执行文件路径、父进程和进程名称对候选者进行分组,然后允许您批量允许或阻止选定的组;在您选择操作之前,默认行为仅为收集。 ### 签名者信任组 实时连接可以按 Authenticode 签名者系列分组查看。每个组显示信任状态(已签名/未签名/已更改)、成员应用、唯一 IP 计数和总流量。未签名和签名者过期的应用会被高亮显示以供审查。 ### 历史记录与时间线 基于 SQLite 的连接日志,具有全文搜索和 Wireshark 风格的显示过滤器(例如 `proc contains "chrome" and rp in ("443","80") and bytes_sent >= 1000`)。每个进程的发送/接收字节增量和应用标识字段从 `psutil`/Windows 元数据中捕获,并汇总到每个连接的会话中,包含首次/最后出现时间、持续时间、样本数、累计总数、事件源/事件 ID/过滤器元数据(如果有),以及一键生成的每日/每周 CSV + HTML 使用报告。历史记录可以导出为过滤后的 CSV 或 JSON。通过可配置的保留期进行自动修剪。Schema 迁移使用 `PRAGMA user_version` 来确保安全升级。 ### 取证导出 通过“工具”标签页一键生成事件包:生成一个带有时间戳的 ZIP 存档,其中包含过滤后的连接历史记录(CSV + JSON)、已脱敏的配置快照、服务和崩溃日志、防火墙篡改日志以及防火墙规则导出。 ### 通知控制 可配置的通知疲劳控制:严重性阈值过滤(低/中/高)、每个警报的冷却暂停、启动预热抑制,以及可选的被抑制警报的定期摘要。 ### 带宽配额 `config.json` 中可选的应用配额,可按进程名称或可执行路径强制执行每日、每周或终身的字节上限。当应用超过其上限时,PyWall 会记录该事件,在 GUI 模式下显示托盘 Toast,在已知可执行文件路径时创建出站程序阻止,并回退到阻止活动的远程 IP。 ### 主题 七种内置主题: | 深色 | 浅色 | |------|-------| | Midnight | Light | | Charcoal (默认) | Frost | | Slate | | | Nord | | | Graphite | | ### 系统托盘 最小化窗口会将其发送到系统托盘。动态托盘图标会根据状态(空闲/监控中/警告/威胁)更改颜色。在 GUI 模式下会自动隐藏控制台窗口。 ### 崩溃恢复 如果 PyWall 在监控期间被终止,它将在下次启动时自动恢复。 ## 服务模式 PyWall 可以在不打开 GUI 的情况下运行其 DNS、连接、事件日志、历史记录、丰富信息和严重威胁自动阻止监控器。GUI 可以通过本地 pywin32 命名管道 `\\.\pipe\PyWallService` 查询正在运行的服务,该服务会在运行时重新加载受支持的 `config.json` 更改,并在崩溃或重启后恢复服务心跳状态。 ``` python PyWall.py service-run python PyWall.py service-run --no-auto-block python PyWall.py service install --startup auto python PyWall.py service start python PyWall.py service status python PyWall.py service stop python PyWall.py service remove python PyWall.py report ``` 服务日志和 IPC token 将写入 `%ProgramData%/PyWall/`。严重级别的检测器触发会通过 `PW_` 防火墙规则在入站和出站方向被阻止;旧构建中现有的 `HG_` 规则仍将作为 PyWall 管理的规则保持可见。 ## 配置 设置位于 `%APPDATA%/PyWall/config.json`。PyWall 会写入 `schema_version`,在加载时验证已知字段,保留未知的未来字段并附带警告,并在用默认值替换损坏的 JSON 之前,将其备份到 `config.json.corrupt..bak`。 | 设置 | 默认值 | 描述 | |---------|---------|-------------| | `schema_version` | `1` | 运行时配置 Schema 版本 | | `theme` | `Charcoal` | UI 主题 | | `tray` | `true` | 关闭时最小化到托盘 | | `toast` | `true` | 桌面通知 | | `toast_sec` | `10` | 自动消失延迟(秒,0 = 手动) | | `start_monitoring` | `false` | 启动时自动开始监控 | | `learning_mode_enabled` | `true` | 在启动时收集未知的出站应用,以提供非模态审查窗口 | | `learning_mode_window_minutes` | `10.0` | 定时的学习审查收集窗口 | | `history_days` | `30` | 连接历史记录保留期 | | `threat_auto_block` | `false` | 自动阻止检测到的威胁 | | `service_auto_block` | `true` | 无需重启即可覆盖服务模式下的严重威胁自动阻止 | | `service_poll_seconds` | `2` | 无需重启即可覆盖服务模式下的监控器/配置轮询间隔 | | `bandwidth_quotas` | `{}` | 应用配额映射,例如 `{ "chrome.exe": { "limit": "5 GB", "window": "day" } }` | | `tls_sni_enabled` | `false` | 选择开启尾部读取外部 TLS SNI 日志文件 | | `tls_sni_log_path` | `""` | 包含 SNI/host/domain 字段的 mitmproxy/Lumen JSONL、CSV 或文本日志的路径 | | `tls_sni_read_existing` | `false` | 从开头读取 SNI 日志,而不是仅尾部读取新行 | | `detect_doh` | `true` | 在 HTTPS/TLS DNS 端口上检测已知的 DNS-over-HTTPS 端点 | | `doh_action` | `warn` | DoH 响应:`warn`、`block` 或 `ignore` | | `ids_rules_enabled` | `true` | 启用 IDS-lite 连接元数据规则 | | `ids_rules_path` | `%APPDATA%/PyWall/ids_rules.yaral` | YARA 风格规则文件路径 | | `event_correlation_enabled` | `true` | 存储来自安全事件 ID 5157 的 Windows 过滤平台事件证据 | | `sysmon_event_correlation_enabled` | `false` | 安装 Sysmon 后,可选存储 Sysmon 事件 ID 3 的网络观察记录 | | `geoip_provider` | `ipwhois` | GeoIP 源:`ipwhois`、`maxmind` 或 `disabled`;不使用明文提供商 | | `geoip_https_endpoint` | `https://ipwho.is/{ip}` | 默认提供商使用的 HTTPS GeoIP 端点模板 | | `geoip_mmdb_path` | `""` | 可选的本地 MaxMind 兼容 `.mmdb` 数据库路径;在网络查找之前使用,或专门与 `geoip_provider: "maxmind"` 一起使用 | | `plugins_enabled` | `false` | 全局插件执行门;仅扫描清单,除非此项为 true,否则不可执行 | | `plugin_enabled_ids` | `[]` | 允许执行声明钩子的插件 ID 的显式允许列表 | | `plugin_disabled_ids` | `[]` | 覆盖清单和允许列表设置的显式拒绝列表 | | `auto_block_inbound` | `true` | 阻止未经请求的入站连接 | | `detect_portscan` | `true` | 端口扫描检测 | | `detect_bruteforce` | `true` | 暴力破解检测 | | `vt_api_key` | `""` | VirusTotal API 密钥 | | `notif_severity_threshold` | `low` | 显示的最低警报严重性:`low`、`medium` 或 `high` | |notif_snooze_minutes` | `5` | 相同密钥重复警报之间的冷却分钟数 | | `notif_digest_enabled` | `false` | 累积被抑制的警报并显示定期摘要 | | `notif_digest_interval_minutes` | `15` | 摘要通知之间的间隔时间 | IDS-lite 规则示例: ``` rule suspicious_powershell { severity = high action = block mitre_tactic = Command and Control mitre = T1071 Application Layer Protocol condition: proc contains "powershell" and rp in ("443","4444") } ``` ## 要求 | 要求 | 详情 | |-------------|---------| | 操作系统 | Windows 10 或 11 | | Python | 3.10+ | | 权限 | 管理员(启动时自动提升) | ### 依赖项 | 包 | 用途 | |---------|---------| | `PyQt5` | GUI | | `psutil` | 进程和连接枚举 | | `maxminddb` | 可选的本地 MaxMind 兼容 GeoIP 数据库读取器 | | `pywin32` | Windows 服务安装/启动/停止/状态控制 | 如果缺少依赖项,启动程序将退出,并显示需要运行的确切 `pip install -r requirements.txt` 命令。 ## 架构 ``` PyWall.py (~5,400 lines, single file) ``` **运行时文件**(自动创建于 `%APPDATA%/PyWall/`): ``` pywall.db Domain/feed/log SQLite database connections.db Connection history SQLite database config.json Settings, app profiles, blocklists feed_cache/ Last-good raw blocklist downloads with feed provenance in `pywall.db` plugins/ Passive plugin manifests; plugin code is default-denied until explicitly enabled plugin_events.log Manifest validation and plugin guardrail diagnostics firewall_tamper.log Managed-rule drift events with before/after snapshots service.log Background service status and auto-block log (%ProgramData%/PyWall on Windows) service.token ACL-restricted local named-pipe IPC token (%ProgramData%/PyWall on Windows) service_state.json Last service heartbeat, clean-shutdown marker, and restored auto-block dedupe state quota_state.json Persisted app quota counters and enforced-cap records fw_backups/ Timestamped `.wfw` rollback exports before firewall reset reports/ Daily and weekly CSV/HTML app usage reports ``` ### 内部组件 | 组件 | 角色 | |-----------|------| | `FWManager` | 由 PowerShell 提供支持的防火墙 CRUD,带有内存中的规则名称缓存和托管规则篡改检测 | | `ConnWorker` | 轮询 `psutil.net_connections()` 的后台线程 | | `EvtWorker` | Windows 安全事件 ID 5157 和可选的 Sysmon 事件 ID 3 监视器,带有事件证据字段 | | `DNSWorker` / `WhoWorker` / `GeoIPWorker` | 带有 LRU 缓存的异步解析 | | `ThreatDetector` | 端口扫描、暴力破解和定期信标启发式检测 | | `MITRE_MAPPINGS` | 附加到检测器事件的 ATT&CK 战术/技术元数据 | | `TLSLogWorker` | 可选开启的 mitmproxy/Lumen 风格 TLS SNI 日志追踪器,将观察到的域输入到 DNS 反馈中 | | `DoHDetector` | 已知端点检测器,对 DNS-over-HTTPS 和 DNS-over-TLS 连接具有警告/阻止策略 | | `IDSRuleEngine` | 用于实时连接行的 YARA 风格元数据规则加载器/评估器 | | `TrafficCategorizer` | 将主机名/进程分类为不同类别 | | `LearningReviewCollector` | 定时、非模态的收集器,按签名者/路径/父进程对未知出站应用进行分组,以供批量允许/阻止决策 | | `BandwidthQuotaEnforcer` | 配置驱动的应用字节上限,具有持久化计数器、托盘/服务通知和防火墙强制执行 | | `export_usage_reports` | 用于 CSV 和 HTML 的每日和每周应用使用情况报告编写器 | | `PluginRegistry` | 被动清单扫描器,具有钩子/权限验证、信任状态报告和默认拒绝执行门 | | `HeadlessMonitor` | 服务模式下的 DNS、连接、事件、历史记录、配置重载、状态恢复、IPC 和威胁自动阻止循环 | | `ServiceIPCServer` | token 身份验证的 pywin32 命名管道状态服务器 | | `PyWallWindowsService` | pywin32 Windows 服务包装器 | | `FirewallRuleTableModel` | 由 QAbstractTableModel 支持的防火墙规则表,适用于大型规则集 | | `NotificationController` | 集中式托盘通知控制,具有严重性过滤、暂停、预热和摘要功能 | | `DisplayFilter` | 用于历史记录和实时连接视图的 Wireshark 风格的基于字段的过滤解析器 | | `create_forensic_bundle` | 带有时间戳的 ZIP 事件存档,包含历史记录、配置、日志和防火墙规则 | | `MainWindow` | PyQt5 GUI:10 个标签页、Toast、托盘、WFC 风格的规则编辑器 | ## 许可证 [MIT](LICENSE) ## 致谢 - [psutil](https://github.com/giampaolo/psutil) -- 进程和网络实用程序 - [PyQt5](https://www.riverbankcomputing.com/software/pyqt/) -- Qt5 Python 绑定 - [ipwho.is](https://ipwho.is/) -- HTTPS GeoIP 查询 - [MaxMind DB](https://maxmind.github.io/MaxMind-DB/) -- 可选的本地 GeoIP 数据库格式 - [VirusTotal](https://www.virustotal.com) -- 文件信誉 API - 灵感来源于 Malwarebytes 的 [Windows Firewall Control](https://www.binisoft.org/wfc)
标签:PB级数据处理, Python, Windows防火墙, 安全运维, 无后门, 桌面工具, 逆向工具