一年快過了,回來做年度回顧才發現今年竟然只發了一篇文章,希望之後能高產一點
這一年最主要的就是在弄 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
elasticsearch
thread_pool.search.queue_size
可以根據自己的設備需求做調整,一定要加,不然 request 來太多的時候會塞住
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.htmlredis
這個算是最費我心思的,主要是使用的時間一久之後,他的記憶體使用量會直線上升
透過 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 裡面的內容
大概先這樣,有更新就會更新