


























1.下载suricata: git clone https://github.com/OISF/suricata.git git checkout -b suricata-6.0.0 suricata-6.0.0 2. 安装所依赖库 sudo apt-get -y install libpcre3 libpcre3-dbg libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libcap-ng-dev libcap-ng0 make libmagic-dev libjansson-dev libjansson4 pkg-config liblua5.1-dev libnspr4-dev liblz4-dev rustc cargo sudo apt-get -y install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0 2. 利用configure.ac和Makefile.am生成configure aclocal autoconf autoheader libtoolize automake --add-missing 步骤: 1)git clone https://github.com/OISF/libhtp ./autogen.sh 不用(--enable-non-bundled-htp --with-libhtp-includes=/usr/include/htp --with-libhtp-libraries=/usr/lib/x86_64-linux-gnu \) 添加luajit支持 centos等需要源码编译安装luajit:wget https://luajit.org/download/LuaJIT-2.0.5.tar.gz debian可以直接安装。sudo apt install luajit2 编译: --enable-luajit --with-libluajit-includes=/usr/local/include/luajit-2.0/ \ --with-libluajit-libraries=/usr/local/lib/ --enable-pfring --enable-lua 与 --enable-luajit二者择一 开启Debug模式( --enable-debug) ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-dpdk \ --enable-block --enable-rust --enable-rdkafka --enable-nfqueue --enable-luajit --enable-debug --enable-af-packet 2>&1 | grep -i error 执行“./configure ...”后,生成了rust/Cargorust/Cargo.lock 三方库本地化: cargo vendor --respect-source-config --locked 配置rust/.cargo/config[.toml] [source.crates-io] replace-with = "vendored-sources" [source.vendored-sources] directory = "vendor" 离线编译 make CARGO_FLAGS="--offline" -j`nproc` (suricata生成文件路径suricata/src/libs/) 如果rust问题: 清理错误的 Vendor 数据 cd rust rm -rf vendor rm -rf .cargo/config[.toml] rm -f Cargo.lock cargo update -p unicode-ident --precise 1.0.12 cargo update -p libc --precise 0.2.160 cargo update -p ryu --precise 1.0.18 #V8.0.x编译2025-12-26 0.前期环境 1)彻底清除先前编译生成的遗留物 make distclean 也会清除rust下vendor目录的本地化三方库,但是没有清除rust/.cargo/config文件. Q:如何不清除vendor三方库: A:修改rust/Makefile.am 文件,distclean-local配置中,不要留有“rm -rf vendor”类似的命令行。 2)查看当前分支版本 $ git branch * main-8.0.x 3)查看rust版本 $ rustc --version rustc 1.86.0 (05f9846f8 2025-03-31) 4)查看cbindgen版本 $ cbindgen --version cbindgen 0.19.0 cbindgen版本过旧,安装最新版:Suricata 8 建议使用的 cbindgen 版本为 0.26.0。 cargo install --force cbindgen 或者使用 cargo install 的 --root 参数,将特定版本的 cbindgen 安装到 Suricata 源码目录下: 安装特定版本到项目目录: 在 Suricata 源码根目录下执行: # 例如安装 Suricata 8 推荐的 0.26.0 版本 cargo install cbindgen --version 0.26.0 --root ./tools 提示:be sure to add `./tools/bin` to your PATH to be able to run the installed binaries export PATH="$(pwd)/tools/bin:$PATH" 1.生成配置 ./autogen.sh 支持 --enable-pfring (ntop提供,kernel和用户态) 支持 --enable-dpdk sudo apt-get install dpdk-dev --enable-lua与--enable-luajit二者择一 eBPF/XDP 支持:如果你需要处理 10Gbps 以上的流量,建议在编译时同时加上 --enable-ebpf,AF_PACKET 可以配合 eBPF 进行更高效的流量旁路。 2.生成编译支持项 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-dpdk --enable-ebpf \ --enable-block --enable-rust --enable-rdkafka --enable-nfqueue --enable-luajit --enable-debug \ --enable-af-packet 2>&1 | grep -i error 生成了Makefile,和rust目录下Makefile,Cargo.lock,.cargo/config.toml 3.rust三方库本地持久化 在rust目录下执行: cargo vendor --respect-source-config --locked Q:如果出现“failed to load pkg lockfile”,表明已经处于一个通过 make distclean 或其他方式清理过网络缓存、或者处于断网/离线打包的环境中 A:临时移除导致“死循环”的本地源配置文件,让 Cargo 回归外网下载。 mv .cargo/config.toml .cargo/config.toml.bak cargo vendor --respect-source-config --locked mv .cargo/config.toml.bak .cargo/config.toml @20260704 ~/.cargo/config.toml普通源registry网址无法使用了,需要改成sparse打头的。 配置rust/.cargo/config.toml [source.crates-io] replace-with = "vendored-sources" [source.vendored-sources] directory = "vendor" 3.编译 rust离线编译,要不然每次都会从网上拉取更新: make CARGO_FLAGS="--offline" -j`nproc` 或者使用rust最新的三方库,但是会慢一些: make -j`nproc` 4.验证编译选项支持:(suricata生成文件路径suricata/src) suricata --build-info | grep AF_PACKET -D (Daemon 守护进程模式) 时,Suricata 会在后台运行。守护进程往往会改变当前工作目录(通常切换到根目录 /)。 ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -D -vvv 普通用户进程调试权限问题: sudo -E rust-gdb --args ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -vvv #suricata-master-6.0.x@2026-04-21 $ rustc --version rustc 1.44.0 (49cae5576 2020-06-01) 原始,不用了. ##suricata6 + rust-1.63.0 + cbindgen-0.20.0 0.前期环境 1)彻底清除先前编译生成的遗留物 make distclean 也会清除rust下vendor目录的本地化三方库,但是没有清除rust/.cargo/config文件. 2)切换当前分支版本 $ git checkout master-6.0.x 3)安装特定rust版本 rustup install 1.63.0 4)设置suricata6专用rust版本 rustup override set 1.63.0 5)查看当前项目rust版本 rustc --version rustc 1.63.0 (4b91a6ea7 2022-08-08) 6)安装推荐版本cbindgen Suricata 6,官方推荐且最稳定的版本是 cbindgen 0.19.0 或 0.20.0。 cargo install cbindgen --version 0.20.0 --root ./tools 提示:be sure to add `./tools/bin` to your PATH to be able to run the installed binaries export PATH="$(pwd)/tools/bin:$PATH" cbindgen --version cbindgen 0.20.0 1.生成配置 ./autogen.sh 2.生成编译支持项 支持 --enable-pfring (ntop提供,kernel和用户态) 支持 --enable-dpdk sudo apt-get install dpdk-dev --enable-lua与--enable-luajit二者择一 eBPF/XDP 支持:如果你需要处理 10Gbps 以上的流量,建议在编译时同时加上 --enable-ebpf,AF_PACKET 可以配合 eBPF 进行更高效的流量旁路。 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-dpdk --enable-ebpf \ --enable-block --enable-rust --enable-rdkafka --enable-nfqueue --enable-luajit --enable-debug \ --enable-af-packet 2>&1 | grep -i error 生成了Makefile,和rust目录下Makefile,Cargo.lock,.cargo/config 3.rust三方库本地持久化 rust问题: 清理错误的 Vendor 数据 cd rust rm -rf vendor rm -rf .cargo/config rm -f Cargo.lock # 强制将 libc 降级到兼容 1.63 的版本(0.2.160 是安全的) cargo update -p libc --precise 0.2.160 # 如果报错 ryu 也太新,同样降级 cargo update -p ryu --precise 1.0.18 cargo update -p unicode-ident --precise 1.0.12 在rust目录下执行: cargo vendor --respect-source-config --locked 配置rust/.cargo/config [source.crates-io] replace-with = "vendored-sources" [source.vendored-sources] directory = "vendor" 4.编译 rust离线编译,要不然每次都会从网上拉取更新: make CARGO_FLAGS="--offline" -j`nproc` 或者使用rust最新的三方库,但是会慢一些: make -j`nproc` 5.验证编译选项支持:(suricata生成文件路径suricata/src) 该版本./src/.libs/suricata为二进制可执行程序,./src/suricata为脚本 suricata --build-info | grep AF_PACKET -D (Daemon 守护进程模式) 时,Suricata 会在后台运行。守护进程往往会改变当前工作目录(通常切换到根目录 /)。 ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -D -vvv 普通用户进程调试权限问题: sudo -E rust-gdb --args ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -vvv ## suricata6 + rust-1.71.0 + cbindgen-0.20.0 0.前期环境 1)彻底清除先前编译生成的遗留物 make distclean 也会清除rust下vendor目录的本地化三方库,但是没有清除rust/.cargo/config文件. 2)切换当前分支版本 $ git branch * master-6.0.x 3)安装特定rust版本 rustup install 1.71.0 4)设置suricata6专用rust版本 rustup override set 1.71.0 5)查看当前项目rust版本 rustc --version cargo install cbindgen --version 0.24.3 --locked rustc-1.71.0 rustc 1.63.0 (4b91a6ea7 2022-08-08) 6)安装推荐版本cbindgen 推荐版本:cbindgen 0.20.0 ~ 0.24.3 cargo install cbindgen --version 0.20.0 --root ./tools 提示:be sure to add `./tools/bin` to your PATH to be able to run the installed binaries export PATH="$(pwd)/tools/bin:$PATH" cbindgen --version cbindgen 0.20.0 1.生成配置 ./autogen.sh 2.生成编译支持项 支持 --enable-pfring (ntop提供,kernel和用户态) 支持 --enable-dpdk sudo apt-get install dpdk-dev --enable-lua与--enable-luajit二者择一 eBPF/XDP 支持:如果你需要处理 10Gbps 以上的流量,建议在编译时同时加上 --enable-ebpf,AF_PACKET 可以配合 eBPF 进行更高效的流量旁路。 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-dpdk --enable-ebpf \ --enable-block --enable-rust --enable-rdkafka --enable-nfqueue --enable-luajit --enable-debug \ --enable-af-packet 2>&1 | grep -i error 生成了Makefile,和rust目录下Makefile,Cargo.lock,.cargo/config 3.rust三方库本地持久化 rust问题: 清理错误的 Vendor 数据 cd rust rm -rf vendor rm -rf .cargo/config rm -f Cargo.lock # 强制将 libc 降级到兼容 1.63 的版本(0.2.160 是安全的) cargo update -p libc --precise 0.2.160 # 如果报错 ryu 也太新,同样降级 cargo update -p ryu --precise 1.0.18 cargo update -p unicode-ident --precise 1.0.12 在rust目录下执行: cargo vendor --respect-source-config --locked 配置rust/.cargo/config [source.crates-io] replace-with = "vendored-sources" [source.vendored-sources] directory = "vendor" 4.编译 rust离线编译,要不然每次都会从网上拉取更新: make CARGO_FLAGS="--offline" -j`nproc` 或者使用rust最新的三方库,但是会慢一些: make -j`nproc` 5.验证编译选项支持:(suricata生成文件路径suricata/src) 该版本./src/.libs/suricata为二进制可执行程序,./src/suricata为脚本 suricata --build-info | grep AF_PACKET -D (Daemon 守护进程模式) 时,Suricata 会在后台运行。守护进程往往会改变当前工作目录(通常切换到根目录 /)。 ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -D -vvv 普通用户进程调试权限问题: sudo -E rust-gdb --args ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -vvv #suricata7.x@2026-04-22 suricata7.x 配合rustc-1.63.0,最稳定且官方推荐的 cbindgen 版本是 0.24.3 0.前期环境 1)彻底清除先前编译生成的遗留物 make distclean 也会清除rust下vendor目录的本地化三方库,但是没有清除rust/.cargo/config文件. 2)切换当前分支版本 $ git checkout main-7.0.x 3)安装特定rust版本 rustup install 1.63.0 4)设置suricata6专用rust版本 rustup override set 1.63.0 5)查看当前项目rust版本 rustc --version rustc 1.63.0 (4b91a6ea7 2022-08-08) 6)安装推荐版本cbindgen cargo install cbindgen --version 0.24.3 --root ./tools --locked 提示:be sure to add `./tools/bin` to your PATH to be able to run the installed binaries export PATH="$(pwd)/tools/bin:$PATH" cbindgen --version cbindgen 0.24.3 1.生成配置 ./autogen.sh 2.生成编译支持项 支持 --enable-pfring (ntop提供,kernel和用户态) 支持 --enable-dpdk sudo apt-get install dpdk-dev --enable-lua与--enable-luajit二者择一 eBPF/XDP 支持:如果你需要处理 10Gbps 以上的流量,建议在编译时同时加上 --enable-ebpf,AF_PACKET 可以配合 eBPF 进行更高效的流量旁路。 ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-dpdk --enable-ebpf \ --enable-block --enable-rust --enable-rdkafka --enable-nfqueue --enable-luajit --enable-debug \ --enable-af-packet 2>&1 | grep -i error 生成了Makefile,和rust目录下Makefile,Cargo.lock,.cargo/config.toml 3.rust三方库本地持久化 在rust目录下执行: 202606无法更新了,只能使用支持sparse或者离线三方crates库了。 cargo vendor --respect-source-config --locked 配置rust/.cargo/config [source.crates-io] replace-with = "vendored-sources" [source.vendored-sources] directory = "vendor" 4.编译 1)rust离线编译,要不然每次都会从网上拉取更新: make CARGO_FLAGS="--offline" -j`nproc` Q:error: failed to select a version for the requirement `flate2 = "~1.0.19"` (locked to 1.0.28) candidate versions found which didn't match: 1.0.35 A:确保.cargo/config.toml指向本地endor三方库crate版本,然后执行精准的“离线刷新”命令: rust$ cargo update -p flate2 --offline 批量刷新所有不一致的 Crate $cargo update --offline 2)或者rust在线编译使用rust最新的三方库,但是会慢一些: make -j`nproc` 5.验证编译选项支持:(suricata生成文件路径suricata/src) 该版本./src/.libs/suricata为二进制可执行程序,./src/suricata为脚本 suricata --build-info | grep AF_PACKET -D (Daemon 守护进程模式) 时,Suricata 会在后台运行。守护进程往往会改变当前工作目录(通常切换到根目录 /)。 ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -D -vvv 普通用户进程调试权限问题: sudo -E rust-gdb --args ./src/suricata -c suricata.yaml -s signatures.rules -i wlo1 -l $(pwd)/log -vvv 自动生成新增协议代码: suricata$ python3 scripts/setup-app-layer.py Jir Generating src/app-layer-jir.c. Generating src/app-layer-jir.h. Patching src/Makefile.am. Patching src/app-layer-protos.h. Patching src/app-layer-protos.c. Patching src/app-layer-detect-proto.c. Patching src/app-layer-parser.c. Patching suricata.yaml.in. Generating src/output-json-jir.h. Generating src/output-json-jir.c. Patching src/Makefile.am. Patching src/suricata-common.h. Patching src/output.c. Patching suricata.yaml.in. Patching src/util-profiling.c. An application detector and parser for the protocol Jir has now been setup in the files: src/app-layer-jir.h src/app-layer-jir.c A JSON application layer transaction logger for the protocol Jir has now been set in the files: src/output-json-jir.h src/output-json-jir.c Suricata should now build cleanly. Try running "make". 运行(-l 日志路径 -D deamone) ./suricata -c suricata.yaml -s signatures.rules -i eth0 -l /var/log/suricata -D -v 注意: 1)2026-0305已经不支持suricata中rust模块编译了,因为各个源不支持rust1.44版本的三方库了,除非预先本地化了三方库。但有一点,这在2022年还是可以编译的。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。