batfish/batfish
GitHub: batfish/batfish
Batfish是一款通过分析设备配置构建网络行为模型、在部署前发现错误并保证网络安全性与可靠性的网络配置验证工具。
Stars: 1363 | Forks: 266
**有疑问、反馈或功能需求?欢迎加入我们的 [Slack!](https://join.slack.com/t/batfish-org/shared_invite/enQtMzA0Nzg2OTAzNzQ1LTcyYzY3M2Q0NWUyYTRhYjdlM2IzYzRhZGU1NWFlNGU2MzlhNDY3OTJmMDIyMjQzYmRlNjhkMTRjNWIwNTUwNTQ) 社区**
[](https://codecov.io/gh/batfish/batfish)
## 什么是 Batfish?
Batfish 是一款网络验证工具,通过分析网络设备的配置,为安全性、可靠性和合规性提供正确性保证。它从设备配置中构建完整的网络行为模型,并查找违反网络策略的情况(包括内置策略、用户定义的策略和最佳实践策略)。
Batfish 的一个主要用例是在部署*之前*验证配置更改(尽管它也可用于验证已部署的配置)。预部署验证是现有网络自动化工作流中的一个关键缺口。通过将 Batfish 纳入自动化工作流,网络工程师可以填补这一空白,并确保仅部署正确的更改。
**Batfish 不需要直接访问网络设备。** 核心分析仅需网络设备的配置。可以使用来自网络的以下附加信息来增强此分析:
* 从外部对等节点接收的 BGP 路由
* 由 LLDP/CDP 表示的拓扑信息
有关其工作原理的技术信息,请参阅 [www.batfish.org](http://www.batfish.org)。
## Batfish 支持哪些类型的正确性检查?
[
](https://www.youtube.com/channel/UCA-OUW_3IOt9U_s60KvmJYA/videos)
[
](https://github.com/batfish/pybatfish/tree/master/jupyter_notebooks)
[Batfish YouTube 频道](https://www.youtube.com/channel/UCA-OUW_3IOt9U_s60KvmJYA/videos)(欢迎订阅!)和 [Python notebooks](https://github.com/batfish/pybatfish/tree/master/jupyter_notebooks) 演示了许多检查。Batfish 的检查涵盖了一系列网络行为。
#### 配置合规性
* 标记未定义但被引用,或已定义但未被引用的结构(例如,ACL、路由映射)
* MTU、AAA、NTP、日志记录等的配置设置与模板匹配
* 设备只能使用 SSHv2 访问且密码不为空
#### 可靠性
* 在任何单链路或单设备故障后,任何流量的端到端可达性都不受影响
* 某些服务(例如 DNS)全局可达
#### 安全性
* 敏感服务只能从特定的子网或设备访问
* 端点之间的路径符合预期(例如,穿越防火墙,具有至少 2 条等价多路径 (ECMP) 等...)
#### 变更分析
* 当前配置和计划配置之间的端到端可达性完全一致
* 计划的 ACL 或防火墙更改被证明是正确的,并且不会对其他流量造成附带影响
* 两个可能来自不同厂商的配置在功能上是等效的
## 如何开始使用?
#### 1. 运行 Batfish 服务
开始使用 Batfish 非常简单。只需拉取并运行最新的 `allinone` Docker 容器,该容器包含 Batfish 以及示例 Jupyter notebooks。
```
docker pull batfish/allinone
docker run --name batfish -v batfish-data:/data -p 8888:8888 -p 9997:9997 -p 9996:9996 batfish/allinone
```
第二条命令启动 Batfish 服务并映射必要的 TCP 端口。
##### 高级 Docker 配置:
Batfish 可用的内存量由 Docker 配置决定。您可能希望提供 [`--memory` 命令行参数](https://docs.docker.com/config/containers/resource_constraints/#limit-a-containers-access-to-memory)来显式设置此值。
在运行 OOM Killer 的 Linux 系统上,您可能还希望提供 `--oom-kill-disable` 参数,该参数与 `--memory` 参数结合使用,以防止 Linux 在系统内存紧张时终止 Batfish。
#### 2. 浏览示例 notebooks(可选)
如果您是 Batfish 新手,建议浏览我们的 notebooks,它们重点介绍了 Batfish 的不同功能和用例。在浏览器中访问 [http://localhost:8888](http://localhost:8888),并在 `Password or token:` 提示符下,输入运行容器时 Jupyter 显示的令牌(例如 **token=abcdef123456...**)。
Jupyter 将向您显示可用 notebooks 的列表。“Getting Started with Batfish”是一个很好的起点。此 [README](https://github.com/batfish/pybatfish/tree/master/jupyter_notebooks) 解释了每个 notebook 的作用。
#### 3. 安装 Pybatfish
要分析您的网络配置,您还需要 [Pybatfish](https://www.github.com/batfish/pybatfish),这是一个用于与 Batfish 服务交互的 Python 3 SDK。虽然不是绝对必要,但我们建议您在[虚拟环境](https://docs.python.org/3/library/venv.html)中安装 Pybatfish。
要安装 Pybatfish,请运行以下命令(如果适用,请在虚拟环境中运行):
```
python3 -m pip install --upgrade pybatfish
```
#### 4. 开发您的分析
安装 Pybatfish 后,使用您选择的 Python 环境(例如,PyCharm、交互式 Python shell、Jupyter 等)与 Batfish 交互。[notebooks](https://github.com/batfish/pybatfish/tree/master/jupyter_notebooks) 提供了此类脚本的示例。
请在 [readthedocs](https://pybatfish.readthedocs.io/en/latest/) 上查看 Pybatfish 的完整文档。
## 运行 Batfish 的系统要求
Batfish 可以在任何支持 Docker 的操作系统上运行。这些容器已在 Mac OS X 和 Ubuntu 16.04 LTS 上经过主动测试。
要开始使用示例 Jupyter notebooks,您只需要一台性能尚可的笔记本电脑:
* 双核 CPU
* 8 GB RAM
* 256 GB 硬盘
当您转向在自己的网络上运行 Batfish 时,我们建议使用至少具有以下配置的服务器:
* 四核 CPU,每个 CPU 2 个线程
* 32 GB RAM
* 256 GB 硬盘
## 支持的网络设备和操作系统列表
Batfish 支持大量且不断增长的(物理和虚拟)设备的配置,包括:
* A10 Networks
* Arista
* AWS(VPC、Network ACL、VPN GW、NAT GW、Internet GW、Security Groups 等...)
* Azure(VirtualNetworks、Standard workflows、Public IPs / Nat Gateways、NSGs 等)
* Cisco(所有 Cisco NX-OS、IOS、IOS-XE、IOS-XR 和 ASA 设备)
* Check Point
* [Cumulus](https://github.com/batfish/batfish/wiki/Packaging-snapshots-for-analysis#format-for-cumulus-configuration-files)
* [F5 BIG-IP](https://github.com/batfish/batfish/wiki/Packaging-snapshots-for-analysis#format-for-f5-big-ip-configuration-files)
* Fortinet
* Free-Range Routing (FRR)
* [iptables(在主机上)](https://github.com/batfish/batfish/wiki/Packaging-snapshots-for-analysis#format-for-host-json-files)
* Juniper(所有 JunOS 平台:MX、EX、QFX、SRX、T-series、PTX)
* Palo Alto Networks
* SONiC
Batfish 对以下平台提供有限的支持:
* Aruba
* Dell Force10
* Foundry
如果您需要额外厂商的支持,或者有当前不支持的配置功能,请通过 [Slack](https://join.slack.com/t/batfish-org/shared_invite/enQtMzA0Nzg2OTAzNzQ1LTcyYzY3M2Q0NWUyYTRhYjdlM2IzYzRhZGU1NWFlNGU2MzlhNDY3OTJmMDIyMjQzYmRlNjhkMTRjNWIwNTUwNTQ) 或 [GitHub](https://github.com/batfish/batfish/issues/new) 告知我们。我们会尽量添加支持。或者,您也可以自己动手 — 我们欢迎提交 Pull Request! :)
## 许可证和依赖项
Batfish 根据 The Apache Software License, Version 2.0 发布。所有第三方依赖项均与此许可证兼容。
](https://www.youtube.com/channel/UCA-OUW_3IOt9U_s60KvmJYA/videos)
[
](https://github.com/batfish/pybatfish/tree/master/jupyter_notebooks)
[Batfish YouTube 频道](https://www.youtube.com/channel/UCA-OUW_3IOt9U_s60KvmJYA/videos)(欢迎订阅!)和 [Python notebooks](https://github.com/batfish/pybatfish/tree/master/jupyter_notebooks) 演示了许多检查。Batfish 的检查涵盖了一系列网络行为。
#### 配置合规性
* 标记未定义但被引用,或已定义但未被引用的结构(例如,ACL、路由映射)
* MTU、AAA、NTP、日志记录等的配置设置与模板匹配
* 设备只能使用 SSHv2 访问且密码不为空
#### 可靠性
* 在任何单链路或单设备故障后,任何流量的端到端可达性都不受影响
* 某些服务(例如 DNS)全局可达
#### 安全性
* 敏感服务只能从特定的子网或设备访问
* 端点之间的路径符合预期(例如,穿越防火墙,具有至少 2 条等价多路径 (ECMP) 等...)
#### 变更分析
* 当前配置和计划配置之间的端到端可达性完全一致
* 计划的 ACL 或防火墙更改被证明是正确的,并且不会对其他流量造成附带影响
* 两个可能来自不同厂商的配置在功能上是等效的
## 如何开始使用?
#### 1. 运行 Batfish 服务
开始使用 Batfish 非常简单。只需拉取并运行最新的 `allinone` Docker 容器,该容器包含 Batfish 以及示例 Jupyter notebooks。
```
docker pull batfish/allinone
docker run --name batfish -v batfish-data:/data -p 8888:8888 -p 9997:9997 -p 9996:9996 batfish/allinone
```
第二条命令启动 Batfish 服务并映射必要的 TCP 端口。
##### 高级 Docker 配置:
Batfish 可用的内存量由 Docker 配置决定。您可能希望提供 [`--memory` 命令行参数](https://docs.docker.com/config/containers/resource_constraints/#limit-a-containers-access-to-memory)来显式设置此值。
在运行 OOM Killer 的 Linux 系统上,您可能还希望提供 `--oom-kill-disable` 参数,该参数与 `--memory` 参数结合使用,以防止 Linux 在系统内存紧张时终止 Batfish。
#### 2. 浏览示例 notebooks(可选)
如果您是 Batfish 新手,建议浏览我们的 notebooks,它们重点介绍了 Batfish 的不同功能和用例。在浏览器中访问 [http://localhost:8888](http://localhost:8888),并在 `Password or token:` 提示符下,输入运行容器时 Jupyter 显示的令牌(例如 **token=abcdef123456...**)。
Jupyter 将向您显示可用 notebooks 的列表。“Getting Started with Batfish”是一个很好的起点。此 [README](https://github.com/batfish/pybatfish/tree/master/jupyter_notebooks) 解释了每个 notebook 的作用。
#### 3. 安装 Pybatfish
要分析您的网络配置,您还需要 [Pybatfish](https://www.github.com/batfish/pybatfish),这是一个用于与 Batfish 服务交互的 Python 3 SDK。虽然不是绝对必要,但我们建议您在[虚拟环境](https://docs.python.org/3/library/venv.html)中安装 Pybatfish。
要安装 Pybatfish,请运行以下命令(如果适用,请在虚拟环境中运行):
```
python3 -m pip install --upgrade pybatfish
```
#### 4. 开发您的分析
安装 Pybatfish 后,使用您选择的 Python 环境(例如,PyCharm、交互式 Python shell、Jupyter 等)与 Batfish 交互。[notebooks](https://github.com/batfish/pybatfish/tree/master/jupyter_notebooks) 提供了此类脚本的示例。
请在 [readthedocs](https://pybatfish.readthedocs.io/en/latest/) 上查看 Pybatfish 的完整文档。
## 运行 Batfish 的系统要求
Batfish 可以在任何支持 Docker 的操作系统上运行。这些容器已在 Mac OS X 和 Ubuntu 16.04 LTS 上经过主动测试。
要开始使用示例 Jupyter notebooks,您只需要一台性能尚可的笔记本电脑:
* 双核 CPU
* 8 GB RAM
* 256 GB 硬盘
当您转向在自己的网络上运行 Batfish 时,我们建议使用至少具有以下配置的服务器:
* 四核 CPU,每个 CPU 2 个线程
* 32 GB RAM
* 256 GB 硬盘
## 支持的网络设备和操作系统列表
Batfish 支持大量且不断增长的(物理和虚拟)设备的配置,包括:
* A10 Networks
* Arista
* AWS(VPC、Network ACL、VPN GW、NAT GW、Internet GW、Security Groups 等...)
* Azure(VirtualNetworks、Standard workflows、Public IPs / Nat Gateways、NSGs 等)
* Cisco(所有 Cisco NX-OS、IOS、IOS-XE、IOS-XR 和 ASA 设备)
* Check Point
* [Cumulus](https://github.com/batfish/batfish/wiki/Packaging-snapshots-for-analysis#format-for-cumulus-configuration-files)
* [F5 BIG-IP](https://github.com/batfish/batfish/wiki/Packaging-snapshots-for-analysis#format-for-f5-big-ip-configuration-files)
* Fortinet
* Free-Range Routing (FRR)
* [iptables(在主机上)](https://github.com/batfish/batfish/wiki/Packaging-snapshots-for-analysis#format-for-host-json-files)
* Juniper(所有 JunOS 平台:MX、EX、QFX、SRX、T-series、PTX)
* Palo Alto Networks
* SONiC
Batfish 对以下平台提供有限的支持:
* Aruba
* Dell Force10
* Foundry
如果您需要额外厂商的支持,或者有当前不支持的配置功能,请通过 [Slack](https://join.slack.com/t/batfish-org/shared_invite/enQtMzA0Nzg2OTAzNzQ1LTcyYzY3M2Q0NWUyYTRhYjdlM2IzYzRhZGU1NWFlNGU2MzlhNDY3OTJmMDIyMjQzYmRlNjhkMTRjNWIwNTUwNTQ) 或 [GitHub](https://github.com/batfish/batfish/issues/new) 告知我们。我们会尽量添加支持。或者,您也可以自己动手 — 我们欢迎提交 Pull Request! :)
## 许可证和依赖项
Batfish 根据 The Apache Software License, Version 2.0 发布。所有第三方依赖项均与此许可证兼容。标签:Batfish, BGP, CDP, JS文件枚举, LLDP, NoSQL, PyBatfish, Python, 域名枚举, 无后门, 流量捕获, 网络保障, 网络可靠性, 网络安全, 网络工程, 网络拓扑, 网络策略合规, 网络自动化, 网络设备建模, 网络配置分析, 网络防御验证, 请求拦截, 逆向工具, 隐私保护, 预部署验证