设置多服务器安全引擎安装

随着 Security Engine 1.0.x 的发布,我们使 Security Engine 能够作为 HTTP REST API 运行,从而可以从其他 Security Engine 收集信号。
我将引导您完成在多台服务器上设置 CrowdSec Security Engine 的步骤,其中一台服务器将作为父服务器,另外两台机器将向其转发警报。
优势
使用 CrowdSec Security Engine 在机器之间共享网络安全事件是增强集体安全防御的一种非常有效的策略。通过利用 CrowdSec 分发补救措施到连接机器的能力,每台机器都可以从网络中其他地方检测到的新威胁的实时更新中受益。
架构
在上图中,父 Security Engine,指定为 server-1
,将被设置为 HTTP REST API,通常称为 LAPI(本地 API)。此引擎将负责存储和分发收集到的信号。补救措施通过 补救组件 进行管理,这些组件依赖于 server-1
提供的 LAPI。重要的是要理解,缓解可以独立于检测发生。
Server-2
和 server-3
被指定为面向互联网的机器,将托管面向公众的服务,并将被称为子日志处理器。在这些服务器上,我们将安装 CrowdSec Security Engine 和 补救组件,它们将与 server-1
LAPI 交互。
注意: 短语子日志处理器指的是 LAPI 关闭的 CrowdSec Security Engine。有关此内容的更多信息,请参阅我们的 分类更新文章。
我们强烈建议您探索 CrowdSec Hub,以了解 Security Engine 可以保护的广泛服务。此平台展示了 Engine 在保护从 Web 应用程序到数据库等各种内容免受网络威胁方面的多样化功能。
架构决策
我为 server-1
LAPI 选择了 postgresql
后端,以实现数据库读写操作的更高稳定性。然而,根据您的运营规模,您可能会发现启用 WAL(预写式日志)的默认 SQLite 满足您的需求,如果是这样,您可以跳过第 1b
节。
先决条件
要遵循本教程,您将需要以下内容
- 两台面向互联网的 Ubuntu 22.04 机器,托管服务。
- 一台 Ubuntu 22.04 机器。
- 父机器和子机器之间的本地网络连接。
步骤 1:设置和配置父 LAPI server-1
步骤 1a:安装 CrowdSec Security Engine
让我们按照安装指南安装 Security Engine。
bash curl -s https:/packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash sudo apt install crowdsec
步骤 1b(可选):在父 server-1
上使用 postgresql
使用 apt 包管理器安装 PostgreSQL 包。
bash sudo apt install postgresql
接下来,切换到“postgres”Linux 用户,然后通过执行 psql
命令连接。
bash sudo -i -u postgres psql
您可以使用以下命令设置数据库并创建授权用户。将 <PASSWORD>
替换为您选择的密码,您必须将其保留在单引号内。
bash
postgres=# CREATE DATABASE crowdsec;
CREATE DATABASE
postgres=# CREATE USER crowdsec WITH PASSWORD '<PASSWORD>'; CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE crowdsec TO crowdsec;
GRANT
现在,我们将设置 Security Engine 以使用新创建的数据库作为其后端。这需要在 /etc/crowdsec/config.yaml
文件中更新 db_config
部分。
yaml db_config: log_level: info type: postgres user: crowdsec password: "" db_name: crowdsec host: 127.0.0.1 port: 5432
在安装 Security Engine 期间,本地机器被配置为使用 SQLite 数据库。要切换到新设置的 postgres 数据库,您需要重新生成凭据,然后继续重启 Security Engine。
bash sudo cscli machines add -a –force sudo systemctl restart crowdsec
步骤 1c:暴露 LAPI 端口
为了启用 LAPI 和子日志处理器/补救组件之间的通信,有必要调整 LAPI 的设置以接受来自外部源的连接,因为其默认配置将其绑定到机器的回环地址 (127.0.0.1)。可以通过编辑 /etc/crowdsec/config.yaml
配置文件并更改指定的设置来进行此调整。
yaml api: server: listen_uri: 10.0.0.1:8080
在上述设置中,我们将设置调整为在端口 8080 上的 10.0.0.1
接口上侦听。如果您希望在多个接口上侦听,您可以将其更改为 0.0.0.0
并实施防火墙规则以允许特定连接。
步骤 2:设置和配置子日志处理器
步骤 2a:安装 CrowdSec Security Engine
让我们按照安装指南安装 Security Engine。
bash curl -s https:/packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash sudo apt install crowdsec
步骤 2b:配置为使用 LAPI 服务器
首先,让我们使用以下命令将日志处理器注册到 LAPI 服务器
bash sudo cscli lapi register -u http://10.0.0.1:8080
确保调整 -u
标志以适合您的网络。如果 IP 地址是静态的,则使用 IP 地址,或者如果您的网络允许,则选择主机名。
接下来,我们将关闭 Security Engine 上的本地 API,将其转换为日志处理器。采取此操作是因为不会使用 API,这将节省系统资源并避免不必要地占用 TCP 端口。
为了实现这一点,我们可以使用以下方法在配置中禁用 API
yaml api: server: enable: false
步骤 2c:验证 LAPI 上的注册请求
由于我们在子日志处理器上使用了 cscli lapi register
,我们必须通过以下命令在 server-1
上验证请求
bash sudo cscli machines list
名称 版本 | IP 地址 | 上次更新 | 状态 |
dc6f34b3a4994700a2e333df43728701D0iARTSQ6dxiwyMR | 10.0.0.1 | 2021-04-13T12:16:11Z | ✔️ |
v1.0.9-4-debian-pragmatic-a8b16a66b110ebe03bb330cda2600226a3a862d7 | |||
9f3602d1c9244f02b0d6fd2e92933e75zLVg8zSRkyANxHbC | 10.0.0.3 | 2021-04-13T12:24:12Z | 🚫 |
从输出中可以看出,有一台新机器尚未通过状态列中的 🚫
验证。我们需要手动验证这台机器,以确保 LAPI 识别哪些机器被授权传输信号。
注意:如果您在状态列中没有看到标记为 🚫
的新机器,请确保您在 LAPI 服务器上执行命令。
bash sudo cscli machines validate 9f3602d1c9244f02b0d6fd2e92933e75zLVg8zSRkyANxHbC
确保更改“validate”后面的参数以对应于列表输出中显示的新机器名称。
步骤 2d:重启子日志处理器服务
在子日志处理器机器上,您可以运行以下命令来重启服务
bash sudo systemctl restart crowdsec
然后,对于您希望连接的每台机器,重复步骤 2。在我们的例子中,我们将执行此操作两次,每个 Ubuntu 机器一次。
步骤 3:设置补救措施
现在,重要的是为您的面向互联网的服务器配置补救措施,因为仅仅运行日志处理器并不能实施强制措施。在本文中,我们将重点介绍设置 Linux 防火墙补救组件。有关其他补救选项,请务必浏览 CrowdSec 文档 中提供的广泛列表。
步骤 3a:在 LAPI 上生成 API 密钥
首先,我们将通过执行以下命令在 LAPI 服务器上创建 API 令牌
bash sudo cscli bouncers add server-2-firewall Api key for 'server-2-firewall': 02954e85c72cf442a4dee357f0ca5a7c Please keep this key since you will not be able to retrieve it!
我使用了 server-2-firewall
作为密钥的 name
,但您可以选择任何您喜欢的名称。为密钥选择描述性名称至关重要,以便于将来的管理,特别是当您需要由于令牌泄露而吊销密钥时。
步骤 3b:安装补救组件
IPtables 防火墙是 Linux 上最常用的防火墙之一,因此我们将继续安装与其交互的组件,使用 apt 包管理器。
bash sudo apt install cs-firewall-bouncer-iptables
组件安装完成后,我们将编辑 /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
下的配置以指向 LAPI
yaml api_url: http://10.0.0.1:8080/ api_key: 02954e85c72cf442a4dee357f0ca5a7c
确保修改 api_url
以与您的 LAPI 地址对齐,并更新 api_key
为上一个命令生成的密钥。请记住,您可以使用 IP 地址或主机名。更改配置后,让我们重启防火墙补救组件。
bash sudo systemctl restart crowdsec-firewall-bouncer
然后,对于您希望连接的每个补救组件,重复步骤 3。在我们的例子中,我们将执行此操作两次,每个 Ubuntu 机器上的防火墙一次。确保更改 api 密钥的命名方案。
一些结束语
本指南说明了建立多服务器 Security Engine 设置的过程。虽然此示例使用了三台服务器,但该架构允许轻松扩展。server-2
和 server-3
上的资源消耗仍然很小,因为大多数操作都定向到 server-1
,从而方便了系统的直接可扩展性
- 在 LAPI 服务器上注册和验证其他 Security Engine
- 添加任何其他补救组件
如前所述,补救组件和 Security Engine 不需要安装在同一服务器上。这意味着 Security Engine 应安装在生成日志的位置,而补救组件可以部署在任何所需的位置。
重要的是要注意,此配置存在某些限制
- Security Engine 之间的通信通过未加密的 HTTP 进行,这适用于本地网络,但不适用于互联网使用。但是,CrowdSec Security Engine 支持使用 HTTPS 进行这些交互。
- 本文没有深入探讨监控或警报。尽管如此,Security Engine 支持通过 Prometheus 进行全面的监控功能,您可以在本文中找到有关它的更多详细信息。
- 在
server-1
上同时拥有 CrowdSec LAPI 和 PostgreSQL 会创建一个单点故障,如果服务器出现任何问题,可能会导致威胁响应延迟。
现在您可能想知道 - 如何构建高可用的多服务器 CrowdSec 设置?我们将在未来几周内发表一篇专门的文章,敬请期待!