云“fail2ban” [Crowdsec]

2022-08-16 13:24:29 1点赞 13收藏 1评论

介绍

上篇的fail2ban是在受攻击时才采取行动,如果可以在攻击前就把恶意ip给ban了,岂不是更好。Crowdsec就差不多是这种服务,用户受攻击时上传攻击者的ip到云,然后云再把恶意ip分发给其它用户,理论上该ip就不能再攻击其他使用Crowdsec的用户了,起码是4个小时内。当然在一个ip还没发起攻击前是不会把它当成恶意ip的。

云“fail2ban” [Crowdsec]

Crowdsec行为和配置都非常像fail2ban,都要监听log,但它是SaaS服务,支持ipv4和ipv6,意味着用户需要和提供商合作提供基本的信息,才能ban恶意IP。所以在自己服务器里的Crowdsec只是个客户端,不算自建服务。

从日志来看,它的确在干活:crowdsecurity/community-blocklist: added 11528 entries, deleted 11502 entries。我没有认真看过官网,翻了几次车连耐心都没了,所以不知道怎么看blocklist,要是某天我动态ip变了,然后不幸的变到blocklist里的其中一个,也不知道怎么办,看日志是7天刷新一次,难道要关容器。算了,被ban的话只ban 4小时,等出问题后再解决吧。我发这些翻车文章的目的就是在钓大佬出来写更详细的教程给我抄,我相信只要铒放的够多就能钓出一个。

安装

要建一个叫acquis.yaml的文件,在后面才需要用。这次拿traefik和authelia做示范。

filenames:
!!- /var/log/traefik/access.log
labels:
!!type: traefik
---
filenames:
!!- /var/log/authelia.log
labels:
!!type: authelia

然后就可以用crowdsec的dockercompose了。

version: '3.0'
services:
!!crowdsec:
!!!!image: crowdsecurity/crowdsec:latest
!!!!container_name: crowdsec
!!!!environment:
!!!!!!PGID: "1000"
!!!!!!TZ: Asia/Shanghai
!!!!volumes:
!!!!!!- /home/用户名/docker/crowdsec/crowdsec:/etc/crowdsec/
!!!!!!- /home/用户名/docker/crowdsec/crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
!!!!!!- /home/用户名/docker/crowdsec/data:/var/lib/crowdsec/data/
!!!!!!- /home/用户名/docker/traefik/logs/access.log:/var/log/traefik/access.log:ro
!!!!!!- /home/用户名/docker/authelia/config/authelia.log:/var/log/authelia.log/:ro
!!!!networks:
!!!!!!- traefik_proxy
!!!!restart: unless-stopped

networks:
!!traefik_proxy:
!!!!external: true

建好后用这个在容器里确认crowdsec有好好的在读log。不要理traefik.log,有用的是access.log。

cscli metrics

云“fail2ban” [Crowdsec]

crowdsec只是搜集信息,要执行操作的话还需要bouncer。Traefik的bouncer是贡献者写的,所以是beta版。https://hub.crowdsec.net/

云“fail2ban” [Crowdsec]

首先需要在crowdsec里请求BOUNCER的API_KEY,bouncer的名字随便取,例如bouncer-traefik:

cscli bouncers add bouncer-traefik

妥善保管这个API_KEY,弄丢了就要把crowdsec的相关文件全删了再来一遍了。

docker-compose.yml:

version: '3.0'

services:
!!crowdsec:
!!!!image: crowdsecurity/crowdsec:latest
!!!!container_name: crowdsec
!!!!environment:
!!!!!!PGID: "1000"
!!!!!!COLLECTIONS: "crowdsecurity/linux crowdsecurity/traefik LePresidente/authelia-logs LePresidente/authelia-bf"
!!!!!!TZ: Asia/Shanghai
!!!!volumes:
!!!!!!- /home/用户名/docker/crowdsec/crowdsec:/etc/crowdsec/
!!!!!!- /home/用户名/docker/crowdsec/crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
!!!!!!- /home/用户名/docker/crowdsec/data:/var/lib/crowdsec/data/
!!!!!!- /home/用户名/docker/traefik/logs:/var/log/traefik/:ro
!!!!!!- /home/用户名/docker/authelia/config/authelia.log:/var/log/authelia.log/:ro
!!!!networks:
!!!!!!- traefik_proxy
!!!!restart: unless-stopped

!!bouncer-traefik:
!!!!image: fbonalair/traefik-crowdsec-bouncer:latest
!!!!container_name: bouncer-traefik
!!!!environment:
!!!!!!CROWDSEC_BOUNCER_API_KEY: 刚刚申请的
!!!!!!CROWDSEC_AGENT_HOST: crowdsec:8080
!!!!!!TZ: Asia/Shanghai
!!!!networks:
!!!!!!- traefik_proxy
!!!!depends_on:
!!!!!!- crowdsec
!!!!restart: unless-stopped

networks:
!!traefik_proxy:
!!!!external: true

Crowdsec的自由度比fail2ban高点,可以用middleware监控需要用的,fail2ban就像看门狗一样,不让进就不让进,crowdsec则像门卫,至少可以控制,所以在要保护的服务的动态配置middleware里加crowdsec-bouncer就行了。在traefik/config里创建个mw-crowdsec.yml:

http:
!!middlewares:
!!!!crowdsec-bouncer:
!!!!!!forwardauth:
!!!!!!!!address: http://bouncer-traefik:8080/api/v1/forwardAuth
!!!!!!!!trustForwardHeader: true

现在就能执行关于ip的操作了。如果想banip用这个,例如我要ban 192.168.0.24。

cscli decisions add --ip 192.168.0.24

然后192.168.0.24访问有对应middleware的服务将会得到forbidden,没有的则正常。

查看有没有ban ip的命令是这个。

cscli decisions list

用这个解ban。

cscli decisions delete --ip 192.168.0.24

云“fail2ban” [Crowdsec]

好了,就这样了,关于crowdsec的代码我也看不懂,有问题问gayhub去。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
1评论

  • 精彩
  • 最新
  • 说得很棒,进收藏吃灰吧

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
目录
13
扫一下,分享更方便,购买更轻松