opencti_build_note

2024-11-16

一年快過了,回來做年度回顧才發現今年竟然只發了一篇文章,希望之後能高產一點

這一年最主要的就是在弄 opencti,過了一年多有了一些心得,來記錄一下

ref:https://docs.opencti.io/latest/deployment/installation/

使用 docker build 進行構建

這邊可以說幾個小細節

OPENCTI_BASE_URL 可以根據你 build 的方法來決定要不要設定
以我的經驗來說,如果你打算將 https 做在 azure app getway 或是 nginx 上的話,我會建議不要設定,如果設定的話,在 taxii discovery url 那一段會被強制改寫成 base_url 的 domain,除非你在 nginx 上強制改寫,沒設定 base_url 的話會根據你 access 的 domain 動態更改 api_roots 上呈現的 domain

ELASTIC_MEMORY_SIZE 設定 Elasticsearch 能使用的最大 memory size

以上是 env 變數的設定,接下來看 docker-compose.yml 的設定

ref: https://github.com/OpenCTI-Platform/docker

docker-compose 基本上就需要注意兩個地方─ redis 與 elasticsearch

透過 redis-cli --bigkeys 得知是 stream.opencti 用量暴增

因此建議定期清 key redis-cli DEL stream.opencti

剩下的照官方文件 docker compose up 就好

build 起來後,再來就是針對 docker 的日常維運了

除了 redis-cli DEL stream.opencti 之外
我還會定期下
/usr/bin/docker image prune -a -f
/usr/bin/docker volume prune -a -f

還有限制 docker logs 的大小 (這部分我還在研究)
一樣是透過排成定期下以下指令
docker ps --no-trunc --format "table {{.ID}}\t{{.Names}}" | grep opencti | cut -d " " -f 1 | xargs -i sed -i -e :a -e '$q;N;2000,$D;ba' /var/lib/docker/containers/{}/{}-json.log
只不過要用 root 執行,還是頗髒,2000 是可以自己選擇要留最新的幾行

另一種方法是寫 log driver,但沒辦法套用到舊的 container 上,參考:
docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=10 alpine echo hello world
新增 /etc/docker/daemon.json

1
2
3
4
5
6
7
{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "5"
}
}

systemctl daemon-reload
systemctl restart docker

在 feed 的部分,我會透過 pycti 寫 python 跟 opencti 做串接,然後將 error 傳到一個檔案內
透過 inotifywait 監控檔案變動傳訊息給我,或是直接在 except 裡面使用 requests.get 送也行,只是我覺得 monitor 檔案變動這件事我之後應該會用到,先用起來不虧

  • SAML
    如果是企業的話,多半一定想要串 SSO 吧,有關 SAML 的設定可以參考這裡
    https://docs.opencti.io/latest/deployment/authentication/#saml-button
    老實說照著 example 設定還是有出錯的可能
    我這邊是參考 issue 裡面官方的回答
    https://github.com/OpenCTI-Platform/opencti/issues/7662
    把冒號換成等號就可以了,那個是放在 conf file 裡面才需要這樣設定
    然後還多加了
    PROVIDERS__SAML__CONFIG__AUDIENCE=$(the value that that is under <AudienceRestriction><Audience> in the SAML xml file)
    PROVIDERS__SAML__CONFIG__WANT_AUTHN_RESPONSE_SIGNED=false
    PROVIDERS__SAML__CONFIG__WANT_ASSERTIONS_SIGNED=true
    PROVIDERS__SAML__CONFIG__DISABLE_REQUESTED_AUTHN_CONTEXT=true

可以參考 issue 裡面的內容

大概先這樣,有更新就會更新