Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What is going on with this article?
@onionknight

NICTの公開したサイバー脅威情報を自動集約できるEXISTをつくってみた(インストール編)

More than 1 year has passed since last update.

2019年3月15日、国立研究開発法人情報通信研究機構(NICT)のサイバーセキュリティ研究室がサイバー脅威情報(CTI)を自動収集するWebアプリEXIST(EXternal Information aggregation System against cyber Threat)をGitHubに公開しました。そこで早速導入してみたいと思います。
EXISTの機能については、GitHubをご覧ください。
https://github.com/nict-csl/exist

前提条件

 ・CentOS7
 ・python3.7(開発は3.5で行われているようです。)
 ・Django 1.11.20
 ・MariaDB 1.3.13

目次

 ・EXISTソースのクローン
 ・Pythonモジュールの追加
 ・MariaDBのインストール・設定
 ・Djangoの設定
 ・Redisのインストール
 ・Celeryの設定
 ・EXIST起動

EXISTソースのクローン

GithubからEXISTのソースをクローンします。

# git clone https://github.com/nict-csl/exist.git

Pythonモジュールの追加

pipで必要なpythonモジュールを組み込みます。

# cd exist
# pip3 install -r requirements.txt

MariaDBのインストール

MariaDBをインストールするためのリポジトリを追加します。macOSでHomebrewを使う場合は不要です。

# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash

MariaDBのサーバとクライアントをインストールします。

# yum install MariaDB-server MariaDB-client

MabiaDBをサービスとして起動・登録します。

systemctl start mariadb
systemctl enable mariadb

MariaDBのセキュリティ設定を行います。インタラクティブモードで以下の設定変更を促されます。全てYesで設定します。
 ・rootパスワードの変更
 ・匿名ユーザを削除するか
 ・rootユーザのリモートログインを許可しないようにするか
 ・テストデータベースを削除するか
 ・特権テーブルをすぐに再読み込みするか

# mysql_secure_installation
~
Change the root password? [Y/n] Y
~
Remove anonymous users? [Y/n] Y
~
Disallow root login remotely? [Y/n] Y
~
Remove test database and access to it? [Y/n] Y
~
Reload privilege tables now? [Y/n] Y
~
Thanks for using MariaDB!

MariaDBのセキュリティ設定が完了したら、MariaDBを再起動しましょう。

# systemctl restart mariadb

続いて、MariaDBにEXIST用データベース(intelligence_db)とデータベースユーザを作成して、EXIST用データベースにフル権限を与えます。今回は、ローカルホストのexistユーザ(exist@localhost)としていますが、環境に合わせて変更してください。

# mysql -u root -p
> create database intelligence_db;
> create user 'exist'@'localhost' identified by 'password';
> grant ALL on intelligence_db.* to exist;

Djangoの設定

Djangoの設定ファイルを準備します。あらかじめテンプレートが用意してありますので、コピーして利用しましょう。

cp -p intelligence/settings.py.template intelligence/settings.py
vi intelligence/settings.py

DjangoのALLOWED_HOSTSとDATABASESの項目を変更します。
ALLOWED_HOSTSはブラウザからアクセスする際のFQDNを設定します。下記の場合はhttp://localhost:8000以外のIPアドレスなどでアクセスすると拒否されます。
DATABASESは先ほど作成したMariaDBの設定(NAME,USER,PASSWORD,HOST)を記入してください。

ALLOWED_HOSTS = [
    'localhost',
]
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'intelligence_db',
        'USER': 'exist',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
        'OPTIONS': {
            'charset': 'utf8mb4',
            'init_command': 'SET character_set_connection=utf8mb4;'
                            'SET collation_connection=utf8mb4_unicode_ci;'
                            "SET NAMES 'utf8mb4';"
                            "SET CHARACTER SET utf8mb4;"
        },
    }
}

ここまでできたら、Djangoをマイグレーションします。

python3 manage.py makemigrations exploit reputation threat threat_hunter twitter twitter_hunter
python3 manage.py migrate

Redisのインストール

Redisをインストールします。celeryのブローカーに使用している模様。

yum install redis
systemctl start redis
systemctl enable redis

Celeryの設定

非同期でタスクを実行するceleryの設定ファイルを準備します。
モジュールはpip installした際にインストールされています。sysconfig配下に新たに設定ファイルを作成します。GitHubのREADMEに記載されているサンプルのCELERYD_NODESをlocalhostにCELERY_BINを/bin/celeryに書き換えて使用します。celeryの実行ファイルの場所は環境によって違いがありますので、which celeryで確認してください。

vi /etc/sysconfig/celery
CELERYD_NODES="localhost"
CELERY_BIN="/bin/celery"
CELERY_APP="intelligence"
CELERYD_MULTI="multi"
CELERYD_OPTS="--time-limit=300 --concurrency=8"
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_LOG_LEVEL="INFO"

続いて、celeryの起動スクリプトを作成します。こちらもGitHubのREADMEにサンプルファイルをベースに書き換えて利用します。
 ・User - 実行ユーザ
 ・Group - 実行ユーザのグループ
 ・EnviromentFile - 先ほど作成したceleryの設定ファイル
 ・WorkingDirectory - git cloneしたexistのディレクトリ

vi /etc/systemd/system/celery.service
[Unit]
Description=Celery Service
After=network.target

[Service]
Type=forking
User=root
Group=root
EnvironmentFile=/etc/sysconfig/celery
WorkingDirectory=/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

EXIST起動

起動スクリプトの設定に合わせて、ログディレクトリ等を作成し、起動します。設定ファイルの誤りでサービスの起動に失敗する場合は、編集後にsystemctl demon-reloadを行ってください。

mkdir /var/log/celery; chown root:root /var/log/celery
mkdir /var/run/celery; chown root:root /var/run/celery
systemctl start celery.service
systemctl enable celery.service
python manage.py runserver 0.0.0.0:8000

また、CentOSはデフォルトでfirewalldで有効です。外部からのアクセスする場合は忘れずにポート解放しましょう。

firewall-cmd --add-port=8000/tcp --zone=public --permanent

ここまでできたら画面が確認できます。ブラウザでhttp://localhost:8000にアクセスして見ましょう。
データのセットアップや脅威情報取り込み、GioIP2連携、twitterのフォロー手順、dockerでの構築などを順次追加していく予定です。
image.png

9
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
9
Help us understand the problem. What is going on with this article?