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, 微隔离, 网络安全, 网络隔离, 逆向工具, 隐私保护, 零信任网络