ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Zeek 从源码构建完全指南:依赖安装、configure/make 流程与交叉编译实战

Zeek 从源码构建完全指南:依赖安装、configure/make 流程与交叉编译实战 网络安全网络IDS【免费下载链接】zeekZeek is a powerful network analysis framework that is much different from the typical IDS you may know.项目地址https://gitcode.com/gh_mirrors/ze/zeek点击查看免费下载本文围绕 doc/building-from-source.rst 展开系统讲解 Zeek网络流量分析与安全监控框架从源码编译安装的完整流程从必需/可选依赖的逐平台安装、源码获取方式到configure/make/make install的典型构建路径与可调参数再到交叉编译与运行时环境配置。读完本文你将能在一台全新机器上从零构建出可用的 Zeek 安装并掌握用--with-*定位非标准路径依赖、用--toolchain面向嵌入式目标交叉编译、以及通过环境变量调优运行行为的完整方法。Zeek 是一套与典型 IDS 截然不同的深度网络分析框架它内置大量协议分析器、提供高层的脚本化分析语言并对网络活动维护丰富的应用层状态。对高级用户而言从源码构建 Zeek 能获得对编译选项、安装布局与依赖组合的最大控制力这也是 Zeek 官方推荐的高级安装方式。Zeek 的构建系统基于 CMake仓库根目录的 configure 脚本是一个薄封装层负责把命令行选项翻译成 CMake 缓存变量后驱动底层构建因此理解configure的选项就相当于理解了整个构建过程。构建前提支持的平台与最低工具链版本Zeek 官方支持广泛的 Linux 发行版、macOS 与 FreeBSD其支持策略以 CI 流水线可运行的范围为依据。构建 Zeek 对工具链有硬性门槛可从源码直接确认CMake ≥ 3.15CMakeLists.txt 中声明了cmake_minimum_required(VERSION 3.15.0 FATAL_ERROR)低于该版本会直接中止配置C/C 编译器需支持 C20GCC 12 或 Clang 10主目标zeek_exe等构建目标显式设置了CXX_EXTENSIONS OFFBison ≥ 3.3、Flex ≥ 2.6Zeek 的解析器parse.y、re-parse.y等位于 src/由 Bison/Flex 生成这两个工具是构建的硬依赖此外还需要 BashZeekControl 与 BTest 依赖、libpcap、OpenSSL、Python ≥ 3.9、SWIG、ZeroMQ ≥ 4.3.0、zlib以及 BIND8 以上版本的解析库若系统libresolv未覆盖。以当前仓库为例VERSION 显示版本为9.1.0-dev.146说明本文所述构建流程适用于 Zeek 9.x 开发分支。必需依赖与各平台安装命令构建 Zeek 需要包括库的开发头文件在内的完整依赖。官方文档为四大类平台给出了开箱即用的安装命令。RPM/RedHat 系 Linuxsudo dnf install bison cmake cppzmq-devel gcc gcc-c flex libpcap-devel make openssl-devel python3 python3-devel swig zlib-devel在 RHEL/CentOS 9 上系统自带的 GCC 版本可能过旧低于 C20 所需的最低版本此时可以通过 devtoolset 获取较新的 GCCsudo dnf install gcc-toolset-12-gcc-c scl enable gcc-toolset-12 bash如果不想每次构建都开启新 shell也可以用alternatives把 GCC 12 设为系统默认sudo alternatives --install /usr/bin/gcc gcc /opt/rh/gcc-toolset-12/root/bin/gcc 10 sudo alternatives --install /usr/bin/g g /opt/rh/gcc-toolset-12/root/bin/g 10DEB/Debian 系 Linuxsudo apt-get install bison cmake cppzmq-dev gcc g flex libfl-dev libpcap-dev libssl-dev make python3 python3-dev swig zlib1g-dev如果发行版没有提供cppzmq-dev可以改用libzmq3-dev——Zeek 的构建在找不到系统 C 绑定时会自动回退到树内的 ZeroMQ C 绑定版本auxil/目录中内置了对应依赖见下文。FreeBSD最小化安装的 FreeBSD 已自带大部分依赖只需补充以下包sudo pkg install -y base64 bash bison cmake cppzmq git python3 swig pyverpython3 -c import sys; print(fpy{sys.version_info[0]}{sys.version_info[1]}) sudo pkg install -y $pyver-sqlite3第二条命令按 Python 版本号如py39动态拼出包名用于安装 Zeek 日志/存储后端所需的 Python sqlite3 绑定。macOS在 macOS 上编译源码首先需要安装Xcode或体积小得多的Command Line Tools。可以用xcode-select -p检查是否已安装若输出错误信息则说明未安装执行xcode-select --install并按提示选择安装方式。macOS 自带除 CMake、SWIG、Bison、Flex 和 OpenSSL 之外的全部依赖。注意macOS 10.11 起系统移除了 OpenSSL 头文件因此 10.11 及更新版本必须手动安装 OpenSSL。可以通过 Homebrew、MacPorts 或 Fink 安装Homebrewbison、cmake、cppzmq、flex、swig、openssl包MacPortsbison、cmake、cppzmq、flex、swig、swig-python、openssl包。Windows实验性Windows 构建仍属实验支持官方定位为开发起点可能存在缺漏步骤。构建环境要点如下开发环境当前支持 Visual Studio 2019可安装完整版或仅命令行工具Build Tools包管理需要先安装 Chocolatey再安装依赖。同时必须开启 WindowsDeveloper Mode——仓库中存在大量符号链接symlink未开启 Developer Mode 时git会忽略这些链接导致构建失败安装依赖choco install -y --no-progress visualstudio2019buildtools --version16.11.11.0 choco install -y --no-progress visualstudio2019-workload-vctools --version1.0.0 --package-parameters --add Microsoft.VisualStudio.Component.VC.ATLMFC choco install -y --no-progress sed choco install -y --no-progress winflexbison3 choco install -y --no-progress msysgit choco install -y --no-progress python随后把 Git 的bin目录默认C:\Program Files\Git\bin加入PATH确保构建期间sh命令可用加载构建环境以 x86_64 主机为例C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat x86_amd64配置并构建mkdir build cd build cmake.exe .. -DCMAKE_BUILD_TYPErelease -DENABLE_ZEEK_UNIT_TESTSyes -DENABLE_CLUSTER_BACKEND_ZEROMQno -DVCPKG_TARGET_TRIPLETx64-windows-static -G Ninja cmake.exe --build .以上步骤与 ci/windows 目录中的 CI 配置一致可作为手工执行的参考。有两处 Windows 特有注意点其一vcpkg 默认提供的 libpcap 不支持 Windows 上的实时抓包如需抓取网卡实时流量必须改链Npcap库个人使用免费、商业使用或再分发需付费授权方法是下载 Npcap SDK 解压后在首次 CMake 调用时传入-DPCAP_ROOT_DIRpath to npcap sdk其二ZeroMQ 集群后端目前尚不支持 Windows因此示例中显式用-DENABLE_CLUSTER_BACKEND_ZEROMQno关闭。上述 vcpkg 相关配置在 CMakeLists.txt 中也有对应实现Windows 下会自动定位auxil/vcpkg/scripts/buildsystems/vcpkg.cmake作为工具链文件并将默认 triplet 设为x64-windows-static叠加的 triplet 目录指向仓库根目录的 vcpkg-triplets。可选依赖按需增强 Zeek 能力Zeek 构建时会自动探测以下可选库/工具找到即启用依赖用途libmaxminddbIP 地址地理定位GeoIPsendmail让 Zeek 与 ZeekControl 发送邮件告警curlZeek 脚本实现主动 HTTP 探测gperftools通过 tcmalloc 改善内存与 CPU 占用jemalloc替代内存分配器PF_RINGLinux 专用高性能抓包详见 doc 集群文档krb5 库与头文件Kerberos 相关协议分析ipsumdump供 trace-summary 工具使用hiredisRedis 存储后端其中地理定位功能最常用可在多数平台上按文档中地址地理定位与 AS 查询章节的指引安装。另外两类可选 Python 组件值得一提ZeekControl 管理 shell可选依赖 Pythonwebsockets包版本 ≥ 11.0用于与 Zeek 节点交互。Ubuntu/Fedora 的发行版包名为python3-websockets。若发行版自带的 websockets 版本过旧部分发行版尚未打包 11.0建议用 pip 安装到 Zeek 前缀下的 Python 目录pip install --target /opt/zeek/lib/zeek/python/ websocketszkg 包管理器随 Zeek 安装依赖两个 Python 模块GitPython与semantic-version可用pip3 install GitPython semantic-version安装部分发行版也提供系统包RedHat 系为python3-GitPython python3-semantic_versionDebian 系为python3-git python3-semantic-version。zkg 本身还要求系统存在git发行版包通常会自动带入pip 安装时需自行确保。获取源码发布包与 Git 仓库两种获取途径发布源码包Zeek 官方将每个版本打包为.tar.gz源码包可从下载页获取并直接解压到目标系统Git 仓库推荐开发者使用若打算参与贡献或尝鲜开发分支特性应从 GitHub 克隆git clone --recurse-submodules https://github.com/zeek/zeek注意Zeek 仓库依赖多个子模块如 Broker、Spicy、zeek-aux、libkqueue 等均在auxil/目录下。如果选择非递归克隆做最小化体验编译时会缺依赖需要先单独构建安装这些子模块。这一点在 configure 脚本中也有体现若缺少cmake/COPYING文件即cmake/子模块未检出脚本会明确提示执行git submodule update --recursive --init补齐内容。配置与构建configure / make / make install典型构建流程./configure make make install如果configure失败原因几乎总是找不到某个必需依赖或依赖版本过旧。在确认依赖都已安装的前提下可用--with-*系列选项帮助脚本定位依赖所有可用选项通过./configure --help查看。configure本质上是 CMake 配置的封装仓库根目录的 configure 脚本把用户选项翻译为-D缓存变量后调用 CMake脚本头部还保留了--show-config选项可打印已有构建目录中最相关的配置参数如CMAKE_BUILD_TYPE、编译器与各ENABLE_*开关。而 CMake 一侧在 CMakeLists.txt 中通过project(Zeek C CXX)定义工程并维护大量option()开关如ENABLE_DEBUG、ENABLE_JEMALLOC、ENABLE_ZEEK_UNIT_TESTS等两者一一对应。安装路径与前缀默认安装前缀为/usr/local/zeek这意味着make install通常需要 root 权限。可通过--prefix指定其他路径。需要特别提醒/usr、/opt/bro/、/opt/zeek是 Zeek 二进制发行包的标准前缀除非你在制作此类发行包否则不要选用这些路径。configure 关键选项速查以下选项均来自 configure 脚本的--help输出可直接复制使用类别选项说明构建--builddirDIR指定构建目录默认build构建--build-typeTYPE设置 CMake 构建类型默认为RelWithDebInfo优化开启 调试符号可选Debug/MinSizeRel/Release/RelWithDebInfo构建--generatorGENERATOR指定 CMake 生成器如 Ninja构建--ccache用 ccache 加速重编译需 ccache 与 CMake 3.10构建--toolchainPATH指定 CMake 工具链文件路径交叉编译关键参数构建--sanitizersLIST启用逗号分隔的 sanitizer 列表构建--localversionversion在标准版本号后追加自定义版本串以-分隔安装目录--prefixPREFIX安装根目录默认/usr/local/zeek安装目录--scriptdir/--localstatedir/--spooldir/--statedir/--logdir分别控制 Zeek 脚本、ZeekControl 日志与运行时数据、进行中日志、状态数据、最终日志目录安装目录--libdir/--plugindir/--conf-files-dir/--mandir/--python-dir等控制库、插件、配置文件、手册页与 Python 模块的安装位置可选功能--enable-coverage/--enable-debug/--enable-fuzzers代码覆盖率、调试模式、模糊测试目标src/fuzzers/下有 DNS、packet、websocket 等 fuzzer可选功能--enable-jemalloc/--enable-perftools链接 jemalloc / 启用 tcmalloc可选功能--enable-werror/--enable-clang-tidy/--enable-iwyu把警告当错误 / 启用 clang-tidy / include-what-you-use 检查可选功能--enable-spicy-ssl构建 Spicy SSL/TLS 分析器与--disable-spicy冲突可选功能--disable-af-packet不编译 Linux 原生 AF_PACKET 支持可选功能--disable-cluster-backend-zeromq不构建 ZeroMQ 集群后端可选功能--disable-zeekctl/--disable-zkg/--disable-zeek-client不安装对应管理组件非标准位置--with-bison/--with-flex/--with-swig指定 bison / flex / SWIG 可执行文件路径非标准位置--with-openssl/--with-pcap/--with-python指定 OpenSSL / libpcap / Python 安装根非标准位置--with-geoip/--with-jemalloc/--with-krb5/--with-perftools/--with-spicy指定可选依赖安装根高级-D PARAM直接把参数透传给 CMake环境变量CC/CXX/CFLAGS/CXXFLAGS编译器与编译选项仅在某个构建目录首次配置时生效auxil/ 辅助工具根据下载的源码包不同auxil/目录下可能带有若干辅助工具与库如 Broker、libkqueue、zeek-aux 等本仓库中均可看到。其中一部分会随 Zeek 自动构建安装可用--disable-*系列选项关闭不需要的组件auxil/zeek-aux下的其他程序则需要显式执行make install-aux安装。另外若需要构建 Zeek 官方文档非必需最新版文档可直接在线查阅可参考源码树中的 doc/README。交叉编译面向嵌入式目标构建 ZeekZeek 支持交叉编译典型场景是面向 ARM 嵌入式平台如树莓派构建。官方文档给出了完整的三个前置条件与操作步骤。前置条件Zeek 源码树位于主机系统上交叉编译工具链例如用 crosstool-NG 生成的工具链目标系统的预构建 Zeek 依赖通常包括 libpcap、zlib、OpenSSL 以及 Python 开发头文件与库。配置与编译步骤第一步先在主机上编译两个构建期工具binpac与bifcl它们会被交叉编译过程调用因此必须是主机原生二进制./configure --builddir../zeek-buildtools ( cd ../zeek-buildtools make binpac bifcl )第二步配置 Zeek 使用交叉编译工具链示例以树莓派为目标系统./configure --toolchain/home/jon/x-tools/RaspberryPi-toolchain.cmake --with-binpac$(pwd)/../zeek-buildtools/auxil/binpac/src/binpac --with-bifcl$(pwd)/../zeek-buildtools/src/bifcl这里--toolchain指向一个 CMake 工具链文件--toolchain会映射为 CMake 的CMAKE_TOOLCHAIN_FILE缓存变量参见 configure。工具链文件中需要把编译器指向交叉工具链并配置查找路径典型内容如下# Operating System on which CMake is targeting. set(CMAKE_SYSTEM_NAME Linux) # The CMAKE_STAGING_PREFIX option may not work. # 部署方式有两种 # (1) make install 后把 --prefix 目录整体从主机拷贝到目标系统 # (2) DESTDIRstaging_dir make install 后拷贝暂存目录内容。 set(toolchain /home/jon/x-tools/arm-rpi-linux-gnueabihf) set(CMAKE_C_COMPILER ${toolchain}/bin/arm-rpi-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER ${toolchain}/bin/arm-rpi-linux-gnueabihf-g) # 交叉编译器/链接器将用这些路径定位依赖。 set(CMAKE_FIND_ROOT_PATH /home/jon/x-tools/zeek-rpi-deps ${toolchain}/arm-rpi-linux-gnueabihf/sysroot ) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)工具链文件的关键在于CMAKE_FIND_ROOT_PATH同时列出目标依赖目录如zeek-rpi-deps与交叉 sysroot并配合三个MODE设置程序查找不经过 root 路径避免误用主机工具、库与头文件仅在 root 路径内查找避免混入主机库。第三步配置成功后即可构建并安装make make install安装完成后把主机上安装前缀目录或DESTDIR暂存目录内的文件整体拷贝/移动到目标系统即可像常规安装一样运行 Zeek。配置运行时环境PATH 设置Zeek 默认不把二进制目录加入PATH无论源码安装/usr/local/zeek/bin/还是二进制包/opt/zeek/bin/都需要手动配置。Bourne Shellbash/zsh语法export PATH/usr/local/zeek/bin:$PATHC Shell 语法setenv PATH /usr/local/zeek/bin:$PATH若从二进制包安装把上面的路径替换为/opt/zeek/bin即可。环境变量调优Zeek 支持多个环境变量调整运行行为可通过zeek --help查看完整列表src/Options.cc 中打印了这些变量及其当前取值。几个常用示例及其底层实现ZEEK_LOG_SUFFIX指定 ASCII 日志文件扩展名。实现位于 src/util.cc取该变量值作为日志后缀默认log即生成*.log文件ZEEK_PLUGIN_PATH插件搜索路径未设置时回退到编译期默认插件目录见 src/util.ccZEEK_PREFIXESZeek 脚本前缀列表多个前缀以路径分隔符串联见 src/util.ccZEEK_PLUGIN_ACTIVATE强制激活的插件名列表ZEEK_DNS_FAKE设置后禁用真实 DNS 查询src/Options.cc 中通过getenv直接读取ZEEK_SEED_VALUES/ZEEK_SEED_FILE注入随机种子用于可复现的随机化行为ZEEK_DNS_RESOLVER指定使用的 DNS 解析器地址IPv4/IPv6ZEEK_DISABLE_ZEEKYGEN禁用 Zeekygen 文档支持。这些变量通常用于测试、调试与集群部署场景按需设置即可无需在常规运行中全部配置。结语与进一步阅读从源码构建 Zeek 的完整路径可以概括为备齐依赖 → 获取源码 →./configure定制 →make编译 →make install部署 → 配置 PATH 与环境变量。对普通服务器部署官方文档推荐的./configure make make install三步即可完成对嵌入式、实验平台或需要深度定制的场景则可通过本文整理的--with-*、--disable-*、--toolchain等选项精确控制。构建完成后可进一步参考本仓库中的相关资源构建与安装说明见 INSTALL 与 README源码结构可浏览 src/核心实现与 auxil/辅助工具与内嵌依赖CI 构建矩阵见 ci/包含各发行版 Dockerfile 与 Windows 的 configure.cmd运行时问题排查可查阅 doc/troubleshooting.rst。赞分享网络安全网络IDS【免费下载链接】zeekZeek is a powerful network analysis framework that is much different from the typical IDS you may know.项目地址https://gitcode.com/gh_mirrors/ze/zeek点击查看免费下载相关推荐iperf3 源码编译安装完全指南从 configure 到 make install 的构建全流程iperf3 源码编译安装完全指南从 configure 到 make install 的构建全流程 本篇指南以 iperf3 官方文档 docs/build网络性能测试Dogecoin Core Unix 系统编译构建完全指南依赖安装、configure 配置与 ARM 交叉编译Dogecoin Core Unix 系统编译构建完全指南依赖安装、configure 配置与 ARM 交叉编译 本文是 Dogecoin Core 在 Un区块链libSQL 内核 Unix 编译实战从源码构建 SQLiteTCL9 依赖、configure 选项与 make 目标全解libSQL 内核 Unix 编译实战从源码构建 SQLiteTCL9 依赖、configure 选项与 make 目标全解 本指南对应 libsql s数据库关系型数据库嵌入式数据库后端数据同步上一篇xdotool终极指南彻底释放Linux桌面自动化潜力下一篇traceback_with_variables终极Python调试工具让异常堆栈显示变量上下文的简单方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表