jasonish/docker-suricata

GitHub: jasonish/docker-suricata

将 Suricata 入侵检测/防御引擎容器化,提供多版本、多架构支持的生产级 Docker 镜像,简化网络流量监控部署。

Stars: 315 | Forks: 79

# Suricata Docker 镜像 ## Docker 标签 (Suricata 版本) - main:git master 分支的最新代码 - latest:最新发布版本 (目前为 8.0) - 8.0:最新的 8.0 补丁发布版本 - 7.0:最新的 7.0 补丁发布版本 版本 4.1.5 及更新版本也存在特定的版本标签。 示例: ``` docker pull jasonish/suricata:latest docker pull jasonish/suricata:7.0.11 ``` 不带架构(如 `amd64` 或 `arm64v8`)的标签是多架构 镜像 manifests。大多数情况下 Docker 会做正确的事,但如果 您需要拉取特定架构的镜像,可以通过 选择名称中带有架构的标签来实现,例如: ``` docker pull jasonish/suricata:latest-amd64 docker pull jasonish/suricata:6.0.4-arm64v8 ``` ## 备用镜像仓库 除了 Docker Hub,这些容器也被推送到 quay.io 和 ghcr.io,可以像这样拉取: ``` docker pull quay.io/jasonish/suricata:latest ``` ``` docker pull ghcr.io/jasonish/suricata:latest ``` ## 使用说明 您很可能希望 Suricata 运行在 您主机的一个网络接口上,而不是容器内部 通常提供的网络接口: ``` docker run --rm -it --net=host \ --cap-add=net_admin --cap-add=net_raw --cap-add=sys_nice \ jasonish/suricata:latest -i ``` 但您可能想查看 Suricata 的日志,所以您可能想 这样启动它: ``` docker run --rm -it --net=host \ --cap-add=net_admin --cap-add=net_raw --cap-add=sys_nice \ -v $(pwd)/logs:/var/log/suricata \ jasonish/suricata:latest -i ``` 这将把日志目录(在您当前目录中)映射到 容器中的 Suricata 日志目录,以便您可以从 容器外部查看 Suricata 日志。 ## Capabilities (能力) 如果容器具备相应的权限,此容器将尝试以非 root 用户运行 Suricata。为了监控网络 接口并放弃 root 权限,容器必须具有 `sys_nice`、 `net_admin` 和 `net_raw` capabilities。如果容器检测到它 没有这些 capabilities,Suricata 将以 root 身份运行。 Docker 示例: ``` docker run --rm -it --net=host \ --cap-add=net_admin --cap-add=net_raw --cap-add=sys_nice \ jasonish/suricata:latest -i eth0 ``` Podman 示例: ``` sudo podman run --rm -it --net=host \ --cap-add=net_admin,net_raw,sys_nice \ jasonish/suricata:latest -i eth0 ``` 请注意,使用 `podman` 时,添加 capabilities 是强制性的。 ## 日志 目录 `/var/log/suricata` 作为卷 (volume) 暴露。另一个 容器可以使用 `--volumes-from` Docker 选项来挂载它。 例如: - 启动 Suricata 容器并命名: docker run -it --net=host --name=suricata jasonish/suricata -i enp3s0 - 启动第二个容器并使用 `--volumes-from`: docker run -it --net=host --volumes-from=suricata logstash /bin/bash 这会将 Suricata 容器中的 `/var/log/suricata` 作为 Logstash 容器中的 `/var/log/suricata` 暴露出来。 ## 日志轮转 在 Suricata 容器内运行 `logrotate` 会正确执行,例如: ``` docker exec CONTAINER_ID logrotate /etc/logrotate.d/suricata ``` 要进行测试,logrotate 可以在强制和详细模式下运行: ``` docker exec CONTAINER_ID logrotate -vf /etc/logrotate.d/suricata ``` 要自动运行 logrotate,请设置 `ENABLE_CRON=yes` 环境 变量,并在 `/etc/cron.*` 目录之一中创建具有可执行 权限的 `suricata` bash 脚本 (例如 `/etc/cron.hourly/suricata`): ``` #! /bin/bash logrotate /etc/logrotate.d/suricata ``` 此脚本可以在以此镜像为 基础的 `Dockerfile` 中创建,或者作为卷绑定挂载进去。 ## 卷 (Volumes) Suricata 容器暴露了以下卷: - `/var/log/suricata` - Suricata 日志目录。 - `/var/lib/suricata` - 规则、Suricata-Update 缓存和其他在运行之间 可能需要保留的运行时数据。 - `/etc/suricata` - 配置目录。 如果进行绑定挂载,您可能希望容器内的 Suricata 用户 与主机系统上用户的 UID 和 GID 匹配。这可以 通过设置 PUID 和 PGID 环境变量来完成。例如: ``` docker run -e PUID=$(id -u) -e PGID=$(id -g) ``` 这将导致绑定挂载的 所有者是启动 Docker 容器的用户。 ## 配置 为 Suricata 提供自定义配置的最简单方法是 为配置目录 `/etc/suricata` 使用主机绑定挂载。在 容器的第一次运行时它会被填充。例如: ``` mkdir ./etc docker run --rm -it -v $(pwd)/etc:/etc/suricata jasonish/suricata:latest -V ``` 当容器退出时,`./etc` 将被填充通常在 `/etc/suricata` 中 找到的默认配置文件。 在这个目录中,可以修改 Suricata 配置, 并且可以放置 Suricata-Update 文件。只需在后续 运行 Suricata 时将其作为卷提供即可。例如: ``` docker run --rm -it --net=host \ -v $(pwd)/etc:/etc/suricata \ --cap-add=net_admin --cap-add=net_raw --cap-add=sys_nice \ jasonish/suricata:latest -i eth0 ``` ## 环境变量 ### SURICATA_OPTIONS `SURICATA_OPTIONS` 环境变量可用于将命令行 选项传递给 Suricata。例如: ``` docker run --net=host -e SURICATA_OPTIONS="-i eno1 -vvv" jasonish/suricata:latest ``` ## Suricata-Update 运行 Suricata-Update 最简单的方法是在 容器运行时运行它。例如: 在一个终端中,启动 Suricata: ``` docker run --name=suricata --rm -it --net=host \ --cap-add=net_admin --cap-add=net_raw --cap-add=sys_nice \ jasonish/suricata:latest -i eth0 ``` 然后在另一个终端中: ``` docker exec -it --user suricata suricata suricata-update -f ``` 这将执行 `suricata-update` 在同一个正在 运行 Suricata 的容器中(注意 `--name=suricata`),然后使用 `suricatasc -c reload-rules` 信号通知 Suricata 重新加载其规则。 ## Raspberry Pi 此镜像可在 Raspberry Pi OS 上使用,但是由于 Raspberry Pi OS 和 Docker 之间的不兼容性,日志中的 时间戳将是错误的。针对此问题有 2 种可能的修复方法: - 使用 Docker 的 `--privileged` 选项 - 将 Raspberry Pi OS 上的 libseccomp2 包升级到 backports 仓库中的较新版本。 ## 操作指南 (HOWTOs) ### 初始化配置 在 `/etc/suricata/suricata.yaml` 处使用空卷运行将生成 默认配置文件。示例: ``` docker run --rm -it -v $(pwd)/etc:/etc/suricata jasonish/suricata:latest -V ``` 这将为您留下一个包含来自容器的默认配置文件的目录。 ## 构建 此仓库中的 Dockerfiles 和脚本设计为以某种自动化的 方式构建多架构容器 manifests。因此, Dockerfiles 不能按原样使用。 如果您只想构建 x86_64 镜像,以下命令 应该有效: ``` cd 7.0 docker build --build-arg=$(cat VERSION) -f Dockerfile.amd64 . ``` 对于 Arm64 镜像: ``` cd 7.0 docker build --build-arg=$(cat VERSION) -f Dockerfile.arm64 . ``` 计划将 Dockerfiles 保持在无需任何包装脚本即可 直接使用的状态。 ### 准备在 x86_64 上构建 ARM 镜像 ``` docker run --rm --privileged multiarch/qemu-user-static --reset -p yes ``` #### 在 Arch 上 - 安装 extra/qemu-user-static-binfmt ## 许可证 此仓库中的构建脚本、Dockerfiles 和任何其他文件均采用 MIT 许可。
标签:AMSI绕过, AWS, DevSecOps, Docker, DPI, Hakrawler, IPS, JA3, Metaprompt, PB级数据处理, pcap, Suricata, 上游代理, 入侵检测系统, 入侵防御系统, 多架构支持, 威胁检测, 威胁检测与响应, 威胁猎捕, 安全数据湖, 安全运维, 安全防御评估, 容器化安全, 开源安全工具, 构建工具, 深度包检测, 现代安全运营, 网络安全, 网络安全分析, 请求拦截, 逆向工程平台, 防御绕过, 隐私保护