• 150606

    文章

  • 1200

    评论

  • 13

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

开始使用开源的大型多人防火墙CrowdSec v.1.0.X


前言

CrowdSec v.1.0.x的正式发布版本对之前的版本做了几处改进,其中包括引入本地REST API重大架构变化。

本地API使所有组件能够更有效地彼此通信,更复杂的体系结构提供了支持,而同时针对单机用户保持了其简单易用的特性此外该版本简化了保镖组件(修复组件)的创建使它们对今后的变化更具弹性限制维护时间。

在新的1.0版本中CrowdSec架构经历深度改造

CrowdSec所有组件(代理读取日志、人类cscli和阻止坏人的保镖组件)现在都可以通过REST API进行通信,而不是直接在数据库中读取或写入。新版本只有本地API服务与数据库进行交互(例如SQLitePostgreSQLMySQL)

CrowdSec是一个安全自动化引擎通过服务器端代理保护暴露在互联网上的服务器、服务、容器或虚拟机。本应用是受到Fail2Ban的启发其目标是成为入侵防御工具的现代化协作版本。

CrowdSec使用行为分析系统根据你的日志来判断是否有人试图入侵。如果你的代理检测到这种攻击行为违规的IP将被处理并进行甄别。如果这个信号通过了甄别IP将被重新分配给所有共享类似技术档案的用户让他们对这个IP免疫

目标是利用集体力量建立某种形式的互联网邻里监督守望对于对机器发动攻击的IP你可以选择以任何你认为合适的方式来解决其威胁。总之CrowdSec通过利用集体的力量创建极其准确的IP信誉系统使所有用户受益。

CrowdSec免费开源(MIT许可之下)源代码可以在GitHub上获得。CrowdSec目前Linux版本今后还会移植到macOSWindows

本教程将介绍如何在Linux服务器上安装和运行CrowdSec

  • CrowdSec设置
  • 测试检测能力
  • 保镖组件设置
  • 可观测性

设置环境

次测试使用的机器是Debian 10 Buster t2.medium EC2为了突出其相关性,让我们从安装nginx开始:

$ sudo apt-get update

$ sudo apt-get install nginx

配置安全组,以便可以从外部访问安全外壳(SSH) (tcp/22)HTTP (tcp/80)。这对以后模拟攻击很有用。

安装CrowdSec

获取最新版本的CrowdSec

$ curl -s https://api.github.com/repos/crowdsecurity/crowdsec/releases/latest | grep browser_download_url| cut -d '"' -f 4  | wget -i -

也可以从我们的GitHub页面下载。

以下是安装过程:

$ tar xvzf crowdsec-release.tgz

$ cd crowdsec-v1.0.0/

$ sudo ./wizard.sh -i

可使用该向导完成安装和配置。

首先,向导识别机器上已存在的服务

它允许选择要监控的服务。本教程使用默认选项监控NginxSSHDLinux系统所有三服务。

对于每服务,向导会识别相关的日志文件并要求用户确认(仍然使用默认值)

正确识别了服务和相关的日志文件后(CrowdSec通过该步骤获取信息,非常重要),向导会提示建议的集合。

集合是一组配置,其目标是创建一个连贯的整体来保护技术堆栈。例如,crowdsecurity/SSH这一集合包含一个SSHD日志解析器和一个用于检测SSH暴力破解SSH用户枚举的场景

向导给出的集合建议是基于你选择保护的服务。

向导的最后一步是部署用于防止禁止私有IP地址通用白名单。它还提醒用户CrowdSec检测恶意IP地址,但不会对其进行屏蔽。你需要下载一个保镖组件来阻止攻击。

请务必记住:CrowdSec负责检测攻击;保镖组件负责阻止攻击

初始设置完成CrowdSec启动并运行。

使用CrowdSec阻止攻击

安装CrowdSec用户应该已经覆盖了常见的互联网攻击让我们来看一看吧

使用wapiti攻击web服务器

使用Wapiti这个网络应用漏洞扫描组件模拟对Nginx服务进行网络应用漏洞扫描。用户需要通过外部IP进行此操作请记住私有IP默认列入白名单

ATTACKER$ wapiti   -u http://34.248.33.108/

[*] Saving scan state, please wait...

 Note

========

This scan has been saved in the file

/home/admin/.wapiti/scans/34.248.33.108_folder_b753f4f6.db

...

新安装了本应用的机器上,我们可以在日志中看到攻击:

我的IP触发了不同的场景:

  • crowdsecurity/httppath-traversal-probing检测URI GET参数中的路径遍历探测尝试模式
  • crowdsecurity/http-sqli-probbing-detection检测URI GET参数中明显的SQL注入尝试模式

记住,你攻击的网站是一个Nginx服务器。如果是一个真实的网站扫描组件会执行许多其他动作从而导致更多的检测。

使用cscli检查结果

Cscli是与CrowdSec服务交互的主要工具之一其功能之一是活动决策可视化过往警报。

Cscli decisions list命令随时显示活动决策,而cscli alert lists显示过往警报(即使决策已过期或警报没有导致决策)

也可以通过cscli警报检查-d <ID>来检查特定警报,以获取更多详细信息(使用警报列表左侧栏中显示的ID)

cscli其他功能,但是现在要看的是找出默认设置中安装了哪些解析器和场景。

可观测性

观测(尤其是对于可能采取防御对策的软件)始终是安全解决方案的关键点。除了“跟踪日志文件”的功能之外,CrowdSec还提供了两种方式来实现可观测性元数据库仪表板(Metabase dashboards)普罗米修斯指标(Prometheus metrics)

元数据库仪表板

用户可使用cscli部署新的元数据库和Docker。首先使用Docker的官方文档安装Docker

如果使用的是AWS EC2实例,请确保公开tcp/3000来访问仪表板。

用户可使用cscli dashboard setup部署新使随机密码元数据库仪表板Docker上运行。

普罗米修斯指标

有些人喜欢可视化仪表板,而有些人更喜欢不同类型的指标。这就是CrowdSec集成普罗米修斯发挥作用的地方。

使这些指标可视化方法之一是使用cscli metrics

cscli metrics命令只显示对系统管理员很重要的普罗米修斯指标度量的个子集。你可以在文档中找到指标的详细描述。这些指标分为不同的部分:

  • 桶:自守护进程启动以来,创建、倾倒或溢出每种类型的多少?
  • 获取:从每个指定的源中读取了多少行或多少事件,以及它们是否被解析和/或之后被注入
  • 解析器:每个解析器传递了多少行/事件,解析器是否成功处理了提到的事件?
  • 本地API每条路线被击中多少次等等?

通过cscli metrics查看Crowdsec的普罗米修斯指标更方便,但对普罗米修斯不公平。深入探讨普罗米修斯已经超出了本文的讨论范围但是通过下面的截图可以快速浏览CrowdSec的普罗米修斯指标Grafana中的样子。

使用保镖组件防御攻击

CrowdSec的检测能力提供了可观测的当下情况。然而,用户如果要自我保护需要阻止攻击者,这是保镖组件发挥重要作用的地方。请牢记CrowdSec负责检测攻击保镖组件负责阻止攻击

保镖组件的工作原理是通过查询CrowdSec的应用编程接口来获知是否应该屏蔽某个IP。你可以直接CrowdSec Hub下载保镖组件

这个例子使用cs-firewall-bouncer。它可以在防火墙层面使用iptablesnftables直接屏蔽任何恶意IP

注意:如果使用自己IP来模拟攻击,请先取消对该IP的屏蔽,然后再继续:

sudo cscli decisions delete -i X.X.X.X)

安装保镖组件

首先,下载保镖组件:

$ wget https://github.com/crowdsecurity/cs-firewall-bouncer/releases/download/v0.0.5/cs-firewall-bouncer.tgz

$ tar xvzf cs-firewall-bouncer.tgz

$ cd cs-firewall-bouncer-v0.0.5/

保镖组件可以用简单的安装脚本安装:

安装脚本首先检查是否安装了iptablesnftables,如果没有,将提示安装。

由于保镖组件通过REST APICrowdSec通信,所以需要检查保镖组件是否在API上注册。

最后一个命令(sudo cscli bouncers list)显示我们新安装保镖组件。

测试保镖组件

警告:在继续之前,请确保另一个可用的IP来访问机器,并且不会自己踢出去。可以使用智能手机的互联网连接。

有了保镖组件保护可以再次进行测试。

在扫描结束时访问服务器:

ATTACKER$ curl --connect-timeout 1 http://34.248.33.108/

curl: (28) Connection timed out after 1001 milliseconds

让我们防御者的角度看结果。

如果你对技术好奇,cs-防火墙-保镖组件使用了nftablesiptables。使用nftables(Debian 10上默认使用nftables)创建并维护两个名为crowdseccrowdsec6的表(分别用于IPv4IPv6)

$ sudo nft list ruleset

table ip crowdsec {

            set crowdsec_blocklist {

                        type ipv4_addr

                        elements = { 3.22.63.25, 3.214.184.223,

                                        3.235.62.151, 3.236.112.98,

                                        13.66.209.11, 17.58.98.156, …

                        }

            }

 

            chain crowdsec_chain {

                        type filter hook input priority 0; policy accept;

                        ip saddr @crowdsec_blocklist drop

            }

}

table ip6 crowdsec6 {

            set crowdsec6_blocklist {

                        type ipv6_addr

            }

            chain crowdsec6_chain {

                        type filter hook input priority 0; policy accept;

                        ip6 saddr @crowdsec6_blocklist drop

            }

}

你如果要更改保镖组件使用的防火墙后端可以在/etc/crowd sec/cs-firewall-bounger/cs-firewall-bounger.YAML中将模式从nftables更改为iptables(iptables模式需要使用ipset)

欢迎参与

我们希望听到大家对最新版本的反馈。如果你对测试软件感兴趣或希望与团队取得联系,请查看以下链接:

  • 下载CrowdSec v.1.0.x
  • 我们的网站
  • GitHub存储库
  • Gitter

695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客