beatboxes/irongate

GitHub: beatboxes/irongate

Irongate 是一款基于软件的多层网络隔离系统,无需托管交换机或 VLAN 即可在标准网络基础设施上实现严格的设备分段与访问控制。

Stars: 0 | Forks: 0

# Irongate **企业级多层网络隔离系统** Irongate 是一款复杂的网络安全工具,可在标准网络基础设施上实施严格的设备隔离——无需托管交换机或 VLAN。它实现了八层纵深防御隔离,以防止网络上未经授权的设备通信。 ## 概述 许多组织需要隔离关键设备(服务器、医疗设备、IoT 设备等),但缺乏具备 VLAN 功能的托管交换机。Irongate 通过成为基于软件的网络中介来解决这个问题,该中介通过多个重叠的安全层控制所有流量。 ### 主要特性 - **8 层保护** - 纵深防御方法确保即使一层被绕过也能保持隔离 - **无需特殊硬件** - 可在标准的非托管网络基础设施上运行 - **两种隔离模式** - 单网卡(基于软件)或双网卡(硬件强制)隔离 - **基于 Web 的管理** - Web 仪表板,用于实时监控和设备管理 - **基于区域的安全** - 将设备分类为隔离区、服务器区或信任区,以及自定义设备组 - **主动威胁检测** - 实时监控绕过尝试并自动响应 ## 工作原理 Irongate 实现了八个互补的网络隔离层: ### 第 1 层:DHCP 微分段 - 为隔离设备分配 /30 子网,强制所有流量通过 Irongate - 使用 DHCP Option 121(无类别静态路由)来捕获所有流量 - 较短的租约时间确保对设备网络配置的持续控制 - 为受管设备提供独立的隔离 DHCP 池(10.55.0.0/16) ### 第 2 层:ARP 防御 - 持续的 ARP 缓存管理以接管设备网关 MAC - 对 ARP 请求的即时响应可防止欺骗 - 检测使用静态 ARP 条目的绕过尝试 - 检测到绕过时进行激进的重投毒(500毫秒间隔) ### 第 3 层:IPv6 路由通告控制 - 在双栈网络中控制 IPv6 路由通告 - 推送自定义 IPv6 前缀 (fd00:iron:gate::/64) - 利用现代系统中对 IPv6 的偏好,将流量路由通过 Irongate ### 第 4 层:nftables 状态防火墙 - 具有连接跟踪的内核级数据包过滤 - 具有可自定义策略的按设备区域分类 - 新连接的速率限制 - 全面的丢包日志记录 ### 第 5 层:主动绕过检测与响应 - 实时监控未经授权的连接尝试 - TCP RST 注入以终止绕过连接 - 针对 UDP 绕过尝试的 ICMP 不可达响应 - 用于审计的安全事件日志记录 ### 第 6 层:网关接管 - 双向 ARP 管理(网关看到的所有设备 MAC 均为 Irongate 的 MAC) - CAM 表管理以控制交换机转发行为 - 网关 MAC 协调以赢得 Layer 2 仲裁 - 混杂模式数据包拦截,用于状态验证 ### 第 7 层:ARP 回复拦截 - 实时监控网络上的所有 ARP 流量 - 拦截受保护设备通告其真实 MAC 地址的 ARP 回复 - 立即使用伪造的回复进行反制,以维持隔离 - 防止不受信任设备的 Layer 2 绕过尝试 - 选择性强制执行:允许受信任设备、网关和服务器正常通信 ### 第 8 层:Algorand 区块链验证(可选) - 通过加密设备认证提供 100% 等效于 VLAN 的保护 - 将授权设备存储在 Algorand 区块链上不可变的链上注册表中 - 在允许访问之前通过加密签名验证设备身份 - 设备必须在链上注册才能访问受保护的资源 - 与第 1-7 层集成以实现纵深防御(如果区块链不可用,则回退到标准保护) - 可配置的缓存以进行性能优化 - 用于合规性和安全取证的可选审计日志 - 需要部署智能合约并在配置中设置 app_id ## 系统要求 | 要求 | 规格 | |-------------|--------------| | 操作系统 | Linux (Debian/Ubuntu, Fedora/CentOS/RHEL) | | 内核版本 | 4.18+(用于 nftables 和网桥端口隔离) | | 内存 | 最低 512MB RAM | | 权限 | 需要 Root/sudo 访问权限 | | 网络 | 至少有一个网络接口(双网卡模式需要两个) | ## 安装 ### 快速安装 ``` # Clone 仓库 git clone https://github.com/beatboxes/irongate.git cd irongate # 使 installer 可执行 chmod +x irongate_installer.sh # 运行 installation(需要 root) sudo ./irongate_installer.sh ``` ### 安装后 安装后,Irongate 会创建: - 配置:`/etc/irongate/config.yaml`(从设备数据库生成) - 日志:systemd 日志(`journalctl -u irongate`) - 设备数据库:`/var/www/irongate/dhcp.db` (SQLite) - Web 界面:`http://localhost` ## 配置 引擎读取 `/etc/irongate/config.yaml`。它由 Web API 从设备数据库生成, 因此请通过仪表板编辑设备而不是手动编辑——手动编辑的内容将在 下次应用时被覆盖。 ``` network: interface: eth0 # Primary network interface gateway_ip: 192.168.1.1 # Network gateway IP isolated_network: 10.55.0.0/16 devices: - mac: "aa:bb:cc:dd:ee:ff" ip: "10.0.0.50" zone: "isolated" # isolated | servers | trusted ``` ### 隔离模式 **单网卡模式(默认)** - 基于软件的多向量隔离 - 约 95% 有效(受时序竞争条件影响) - 适用于大多数用例 **双网卡模式** - 通过 Linux 网桥端口隔离实现等效于硬件 VLAN 的隔离 - 100% 内核强制的隔离 - 需要额外的 USB 以太网适配器 ### 第 8 层区块链(可选) 要启用第 8 层 Algorand 区块链验证以获得 100% 等效于 VLAN 的保护: 1. 安装 Algorand SDK:`pip install py-algorand-sdk` 2. 部署智能合约:`python3 /opt/irongate/smart_contract.py` 3. 在 `/etc/irongate/irongate.yaml` 中配置区块链: ``` blockchain: enabled: true network: "mainnet" # mainnet, testnet, or betanet app_id: YOUR_APP_ID # From smart contract deployment cache_ttl: 60 # Cache duration in seconds fallback_allow: true # Allow access if blockchain unavailable audit_logging: false # Enable for compliance logging ``` 4. 使用 CLI 注册设备:`irongate-blockchain register` ## 用法 ### 启动/停止服务 ``` # 启动 Irongate sudo systemctl start irongate-engine sudo systemctl start irongate-web # 停止 Irongate sudo systemctl stop irongate-engine sudo systemctl stop irongate-web # 检查状态 sudo systemctl status irongate-engine ``` ### Web 界面 访问 `http://localhost` 上的管理仪表板 特性: - 实时系统状态监控 - 设备清单和区域管理 - 实时安全事件日志 - 网络配置面板 - 区域策略管理 ### 日志 ``` # 主要操作 log tail -f /var/log/irongate/irongate.log # 安全事件和检测到的 bypass tail -f /var/log/irongate/security.log # Web interface 访问 log tail -f /var/log/irongate/web.log ``` ## 架构 ``` /opt/irongate/ ├── core/ │ ├── engine.py # Main orchestrator │ ├── dhcp_server.py # Layer 1: DHCP Microsegmentation │ ├── arp_defender.py # Layer 2: ARP Defense │ ├── ipv6_ra.py # Layer 3: IPv6 RA Control │ ├── firewall.py # Layer 4: nftables Firewall │ ├── monitor.py # Layer 5: Bypass Detection │ ├── gateway_takeover.py # Layer 6: Gateway Takeover │ ├── arp_interceptor.py # Layer 7: ARP Reply Interception │ ├── blockchain.py # Layer 8: Algorand Blockchain (optional) │ └── bridge_manager.py # Dual-NIC bridge management ├── templates/ # Flask HTML templates └── static/ # CSS/JS assets /etc/irongate/ ├── irongate.yaml # Main configuration ├── certs/ # TLS certificates └── rules/ # nftables rules ``` ## 依赖项 | 包 | 版本 | 用途 | |---------|---------|---------| | Python | 3.8+ | 核心运行时 | | Flask | 3.0.0 | Web 框架 | | Scapy | 2.5.0 | 数据包操作 | | nftables | - | 内核防火墙 | | gunicorn | 21.2.0 | WSGI 服务器 | | pyroute2 | 0.7.9 | 网络接口管理 | | cryptography | 41.0.0 | TLS/SSL 处理 | | py-algorand-sdk | - | 第 8 层区块链(可选) | ## 安全注意事项 - **需要 Root 访问权限**:Irongate 需要 Root 权限才能进行网络操作 - **网络中断**:配置错误可能会中断网络连接 - **建议测试**:在生产部署之前在实验室环境中进行测试 - **备份配置**:安装前请务必备份网络设置 - **防火墙规则**:Irongate 会修改 nftables 规则;现有规则可能会受到影响 ## 用例 - **医疗设备隔离**:保护敏感医疗设备免受网络威胁 - **IoT 分段**:将 IoT 设备与关键基础设施隔离 - **服务器保护**:为敏感服务器创建隔离区 - **访客网络隔离**:将访客设备与内部资源分开 - **遗留系统保护**:隔离无法修补的遗留系统 ## 故障排除 ### 常见问题 **设备未收到 DHCP 租约** - 验证 `/etc/irongate/irongate.yaml` 中的网络接口是否正确 - 检查 Irongate 服务是否正在运行:`systemctl status irongate-engine` **Web 界面无法访问** - 确保端口 8443 未被外部防火墙阻止 - 检查 Web 服务状态:`systemctl status irongate-web` **隔离不起作用** - 查看安全日志:`tail -f /var/log/irongate/security.log` - 验证配置中是否启用了所有层 - 考虑切换到双网卡模式以实现完全隔离 - 启用第 8 层区块链验证以获得 100% 等效于 VLAN 的保护 ## 许可证 本项目提供用于网络安全和隔离目的。请查看许可证文件以了解使用条款。 ## 第 8 层:Midnight 区块链验证(可选) Irongate 可以根据 [Midnight](https://midnight.network) 区块链(一个具有零知识证明和选择性披露的隐私保护链)上的注册表合约来验证设备身份。 **读取路径已实现并经过测试**。它仅使用 Python 标准库通过 HTTPS GraphQL 查询 Midnight 的公共索引器——没有 SDK 依赖项,没有钱包,并且主机上没有存储任何类型的密钥材料。网络由配置驱动,涵盖 `preprod`、`preview`、`mainnet` 和 `undeployed`(本地节点)。 **写入路径尚未实现**。提交 Midnight 交易需要一个注资过的钱包和一个 ZK 证明服务器,并且已发布的 proof-server 镜像没有确认的 `aarch64` 构建,因此它无法在 Raspberry Pi 上运行。`register_device`、`revoke_device` 和 `log_access` 会引发 `NotImplementedError` 并附带解释性消息,而不是静默报告成功。 第 8 层默认**禁用**且完全是可选的——Irongate 的网络隔离无需任何区块链参与即可工作。当启用但无法访问链时,验证将返回“undecided”,并且强制执行将回退到标准层;无法访问的链永远不会被视为设备可信的证明。 ``` blockchain: enabled: false network: "preprod" # preprod | preview | mainnet | undeployed contract_address: null # required when enabled indexer_url: null # null uses the preset for the chosen network fallback_allow: true # true = undecided, defer to the other layers ``` ## 测试 ``` IRONGATE_DIR=/opt/irongate /opt/irongate/venv/bin/python tests/test_blockchain.py ``` ## 许可证 Apache License 2.0 — 见 [LICENSE](LICENSE)。
标签:ARP欺骗, DHCP, 微隔离, 网络安全, 网络隔离, 逆向工具, 隐私保护, 零信任网络