安全注意事项 ======================= Suricata 是一款处理不可信网络数据的安全工具,同时需要提升系统权限来获取这些数据。这种特性组合需要额外的安全预防措施,我们将在下文讨论。 此外,供应链攻击(尤其是围绕规则分发的攻击)可能针对 Suricata 的安装实例。 以非 Root 用户身份运行 --------------------------------- .. note:: 如果使用来自 OISF COPR 仓库或 EPEL 仓库的 Suricata RPM 包,以下配置已预先完成。您唯一可能需要做的就是将管理用户加入 ``suricata`` 组。 许多 Suricata 示例和指南会展示以 *root* 用户身份运行 Suricata,尤其是在处理实时流量时。由于 Suricata 通常需要底层读取(在 IPS 模式下还需要写入)网络流量的权限,因此必须以 root 身份启动。但 Suricata 具备启动后降权至非 root 用户的能力,这可以限制 Suricata 自身安全漏洞的影响范围。 .. note:: 目前启动后降权功能仅支持 Linux 系统。 创建用户 ~~~~~~~~~~~ 在以非 root 用户运行前,需选择或创建 Suricata 的运行用户和组。通常这是一个名为 ``suricata`` 的系统用户,可通过以下命令创建:: useradd --no-create-home --system --shell /sbin/nologin suricata 这将创建名为 ``suricata`` 的用户和组。 文件系统权限 ~~~~~~~~~~~~~~~~~~~~~~~ 在以 ``suricata`` 用户运行前,需要更新部分目录权限以保证其读写访问权。 假设您通过源码安装 Suricata 并使用推荐配置:: ./configure --prefix=/usr/ --sysconfdir=/etc/ --localstatedir=/var/ 则需要更新以下目录权限: +------------------+-----------+ |目录 |权限要求 | +==================+===========+ |/etc/suricata |读取 | +------------------+-----------+ |/var/log/suricata |读写 | +------------------+-----------+ |/var/lib/suricata |读写 | +------------------+-----------+ |/var/run/suricata |读写 | +------------------+-----------+ 以下命令可设置正确权限: * ``/etc/suricata``:: chgrp -R suricata /etc/suricata chmod -R g+r /etc/suricata * ``/var/log/suricata``:: chgrp -R suricata /var/log/suricata chmod -R g+rw /var/log/suricata * ``/var/lib/suricata``:: chgrp -R suricata /var/lib/suricata chmod -R g+srw /var/lib/suricata * ``/var/lib/suricata``:: chgrp -R suricata /var/run/suricata chmod -R g+srw /var/run/suricata 配置 Suricata 以 ``suricata`` 用户运行 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 可通过修改配置文件或命令行参数配置 Suricata 以指定用户运行。 * 在配置文件中更新 ``run-as`` 部分:: run-as: user: suricata group: suricata * 或通过命令行参数添加:: --user suricata --group suricata 启动 Suricata ~~~~~~~~~~~~~~~~~ 需特别注意:大多数情况下仍需以 **root** 权限启动 Suricata。以 *root* 启动可使 Suricata 获取网络接口访问权,并在切换至配置用户前设置运行时所需的 *capabilities*。 其他命令:Suricata-Update 与 SuricataSC ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 通过前述权限设置,``suricata-update`` 和 ``suricatasc`` 也可无需 root 或 sudo 执行。要允许用户使用这些命令,将其加入 ``suricata`` 组即可。 容器化部署 ---------- Docker 和 Podman 等容器技术是隔离 Suricata 与宿主机的另一种方法。但我们仍建议即使在容器中也以非 root 用户运行。 Capabilities 配置 ~~~~~~~~~~~~ 对于 Docker 和 Podman,需为运行 Suricata 的容器提供以下 capabilities 以保证正常运作:: --cap-add=net_admin --cap-add=net_raw --cap-add=sys_nice Podman 注意事项 ~~~~~~ Suricata 无法在 *rootless* 模式的 Podman 中运行,这是因为 Suricata 需要 root 权限来获取网络接口访问权。但如果按上述方式配置 capabilities 并以非 root 用户运行,它会在处理网络数据前主动降权。