奧推網

選單
科技

home server 篇五:雲“fail2ban” [Crowdsec]

作者:空調救我命

介紹

上篇的fail2ban是在受攻擊時才採取行動,如果可以在攻擊前就把惡意ip給ban了,豈不是更好。Crowdsec就差不多是這種服務,使用者受攻擊時上傳攻擊者的ip到雲,然後雲再把惡意ip分發給其它使用者,理論上該ip就不能再攻擊其他使用Crowdsec的使用者了,起碼是4個小時內。當然在一個ip還沒發起攻擊前是不會把它當成惡意ip的。

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

crowdsec只是蒐集資訊,要執行操作的話還需要bouncer。Traefik的bouncer是貢獻者寫的,所以是beta版。https://hub。crowdsec。net/

首先需要在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

好了,就這樣了,關於crowdsec的程式碼我也看不懂,有問題問gayhub去。