Existの構築に関する記事。
社内でSOC構築してみた① #EXIST概要編
社内でSOC構築してみた② #MISP構築編
社内でSOC構築してみた③ #EXIST構築編
社内でSOC構築してみた④ #EXIST設定編
構築に際して
EXISTを構築して思ったのが正直に難しいの一言でした。 これまでOSSのWebアプリケーションをインストールした際にはエラーが出ても検索をすれば解決しましたが、EXISTに関してはエラーからコードを調査して問題点を探し当てる必要があります。勿論EXISTのインストール方法を開発者の方が公開してくれていますが、そこまで細かいものではありません。
参考:https://github.com/nict-csl/exist
この記事でもインストール方法について躓きそうなポイントは記載しますが、基本的には調べればわかる点については詳細を割愛させて頂きますが少しでもEXISTに興味のある方のご参考になればと思います。
EXISTの動作環境について
ミドルウェアについては、インストール部分で記載しますが大前提として以下が必須となります。 詳細なバージョンは以前まで記載されていたのですが、ひとまずはいかが必須のようです。 ・Python3 ・Django 1.11 今回はすでにPython3がサーバーにインストールされていることを前提に構築方法を記載します。 なお私は今回以下のOSで構築を行いました。 CentOS Linux release 7.8.2003 またEXISTは/opt/exist配下に設置するものとします。構築手順
1)EXISTのダウンロード
/opt/配下にEXISTのパッケージをダウンロードして/existとして設置します。
cd /opt
wget https://github.com/nict-csl/exist/archive/master.zip
unzip master.zip
mv exist-master exist
2)Pythonモジュールのインストール
ダウンロードしたパッケージ内に必要なモジュールの一覧が記載されたファイルがあるので、そちらを元にインストールしますpip3 install -r /opt/exist/requirements.txt
3)wkhtmltopdfとXvfbのインストール
EXISTで画像を生成する機能があるため、wkhtmltopdfとXvfbをインストールします。#wkhtmltopdfのダウンロードとインストール
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
tar Jxfv wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
cp wkhtmltox/bin/wkhtmltoimage /usr/local/bin/
cp wkhtmltox/bin/wkhtmltopdf /usr/local/bin/
#Xvfbのインストール
yum install xorg-x11-server-Xvfb
#確認※エラーがでたらlddコマンドで以前パッケージが不足していないか確認。
wkhtmltoimage --version
4)MariaDBの構築
MariaDBをインストールして、起動、rootのパスワード設定とEXIST用DBの作成になります。#ダウンロード
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
#インストール
yum install MariaDB-server MariaDB-client
#起動&自動起動有効
systemctl start mariadb
systemctl enable mariadb
#MariaDBにログしてパスワードを設定(ログイン方法は割愛)
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY "xxxxxxxx";
#最後にEXIST用のDBを作成
CREATE DATABASE intelligence_db;
5)RedisのインストールとCeleryの設定
RedisとPythonモジュールのCeleryをインストールして設定します。#redisのインストールと起動、起動設定
yum install -y redis
systemctl start redis
systemctl enable redis
#Celeryのインストール
pip3 install celery
インストールが完了したらCeleryの設定を行います。
/etc/sysconfig/celeryを作成して、以下の内容を記載します。
# Name of nodes to start
# here we have a single node
CELERYD_NODES="w1"
# or we could have three nodes:
#CELERYD_NODES="w1 w2 w3"
# Absolute or relative path to the 'celery' command:
CELERY_BIN="/usr/local/bin/celery"
# App instance to use
# comment out this line if you don't use an app
CELERY_APP="intelligence"
# or fully qualified:
#CELERY_APP="proj.tasks:app"
# How to call manage.py
CELERYD_MULTI="multi"
# Extra command-line arguments to the worker
CELERYD_OPTS="--time-limit=300 --concurrency=8"
# - %n will be replaced with the first part of the nodename.
# - %I will be replaced with the current child process index
# and is important when using the prefork pool to avoid race conditions.
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_LOG_LEVEL="INFO"
次にCeleryの管理スクリプトを作成します。
/etc/systemd/system/celery.serviceを作成して、以下の内容を記載します。
[Unit]
Description=Celery Service
After=network.target
[Service]
Type=forking
User=root
Group=root
EnvironmentFile=/etc/sysconfig/celery
WorkingDirectory=/opt/exist
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \
--pidfile=${CELERYD_PID_FILE}'
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
[Install]
WantedBy=multi-user.target
Celeryのtmpfileの設定をします。
/etc/tmpfiles.d/exist.confを作成して、以下を記載します。
#Type Path Mode UID GID Age Argument
d /var/run/celery 0755 root root -
ログのディレクトリと起動ディレクトリを作成します。
mkdir /var/log/celery; sudo chown root:root /var/log/celery
mkdir /var/run/celery; sudo chown root:root /var/run/celery
最後にCeleryの起動と起動設定を行います。
systemctl start celery.service
systemctl enable celery.service
6)テーブルの作成
MariaDBにEXISTに必要なテーブルを作成します。 ※定義ファイルはEXISTのパッケージファイルに同封済み。#マイグレーションファイルの作成
python3 manage.py makemigrations exploit reputation threat threat_hunter twitter twitter_hunter news
#マイグレーションの実行
python3 manage.py migrate
7)環境ファイルの設定
最後にEXISTの環境ファイルを行います。 まず設定の前にDjangoの秘密鍵を設定します。python3 /opt/exist/keygen.py
xxxxxxxxxxxxxx #生成された秘密鍵
次に環境ファイルを設定します。
#.envファイルの作成
cp -pi /opt/exist/.env.example /opt/exist/.env
ファイルを作成したら以下の項目を自分の設定した環境に合わせて以下の項目を変更してください。
・EXIST_DB_USER:作成したDBユーザー
・EXIST_DB_PASSWORD:設定したDBパスワード
・EXIST_SECRET_KEY:生成した秘密鍵
・EXIST_ALLOWED_HOSTS:EXISTのサーバーのIP
以上で設定は完了になりますが、DjangoのDEBUGモードについてなじみのない方は
/opt/exist/intelligence/settings.pyの以下の箇所を編集してください。
※デフォルトのままでは、Djangoの静的ファイルへのパスが通らないため。もちろん慣れている方は不要です。
DEBUG = os.environ.get('EXIST_DEBUG_MODE', 'False').lower() in ['true', 'yes', '1']
↓
#DEBUG = os.environ.get('EXIST_DEBUG_MODE', 'False').lower() in ['true', 'yes', '1']
DEBUG = True
8)起動
以下のコマンドで起動します。
なおPortは任意のPortになります、自分の環境(特にFW)に合わせて変更。
python3 /opt/exist/manage.py runserver 0.0.0.0:8080