Ubuntu Server 16.04 LTSに診断したセキュリティインシデントの管理ツール『FIR』をインストールする

Nessusなどで取得したセキュリティスキャンのデータ管理方法について調べていたところ、運用中のセキュリティインシデント情報の管理ツール『FIR』というものを見かけたので、Ubuntu Server 16.04 LTSに入れてみることにする。
動作にはMySQLやNginxといったパッケージが必要になるので、それら含めインストールを行う。また、今回は検証のため一般ユーザ(blacknon)、作業ディレクトリはホームディレクトリ(/home/blacknon/)で行っている。ちゃんと運用するなら、専用のユーザを作成して/opt配下をホームディレクトリにするなどが必要だろう。

インストール手順は、こちらの公式手順を元に進めていく。

1.前提となるパッケージのインストール

まず、以下のコマンドで前提となるパッケージの導入をする。
インストール中にMySQLのパスワード設定画面が表示されるので対応する。

sudo apt update && sudo apt upgrade
sudo apt install mysql-server libmysqlclient-dev gettext python-dev python-pip python-lxml git libxml2-dev libxslt1-dev libz-dev nginx libpq-dev

 

MySQLにFIR用のテーブルを作成する。

mysql -uroot -p -e '
CREATE DATABASE fir;
CREATE USER "fir"@"localhost" IDENTIFIED BY "P@ssw0rd";
GRANT USAGE ON *.* TO "fir"@"localhost";
GRANT ALL PRIVILEGES ON `fir`.* TO "fir"@"localhost";'

 

2.FIRのインストール

次に、FIRのインストールを行う。
まず、以下のコマンドでVirtualEnvとgitでのソースの取得を行う。

sudo pip install virtualenv
virtualenv env-FIR
source env-FIR/bin/activate
git clone https://github.com/certsocietegenerale/FIR.git

 

次に、以下のコマンドで必要になるPythonのパッケージを導入する。

cd FIR
pip install -r requirements.txt
pip install mysql-python

 

Pythonで必要となるパッケージのインストールが完了したら、以下のコマンドで設定ファイルのサンプルをコピーしてくる。
プラグインを有効にする場合は、2行目のコマンドも実行する。

cp fir/config/production.py.sample fir/config/production.py
cp fir/config/installed_apps.txt.sample fir/config/installed_apps.txt # プラグインを有効にする場合

 

設定ファイルのコピーが完了したら、設定ファイル「fir/config/production.py」を編集する。
以下、編集箇所だけ抜粋。

ALLOWED_HOSTS = ['ドメイン名']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'fir',
'USER': 'fir',
'PASSWORD': 'パスワード',
'HOST': '',
'PORT': '',
}
}

 

設定ファイル編集後、以下のコマンドでテーブル、スーパーユーザを作成する。

./manage.py migrate --settings fir.config.production
./manage.py createsuperuser --settings fir.config.production

 

以下のコマンドで、初期データのインポートを行う。

./manage.py loaddata incidents/fixtures/seed_data.json --settings fir.config.production
./manage.py collectstatic --settings fir.config.production
Sponsored Links

ディレクトリの所有者やパーミッションについて変更する。

sudo chown www-data logs/errors.log uploads
sudo chmod 750 logs/errors.log uploads

 

3.uWSGIのインストール・設定

『FIR』ではuWSGIが必要になるため、これのインストール・設定を行う。

sudo pip install uwsgi
sudo chsh www-data -s /bin/sh

 

ソケット用のディレクトリを作成する。

mkdir run
sudo chown www-data run

 

設定ファイル「/etc/init/fir.conf」および「/etc/systemd/system/fir_uwsgi.service」を作成する。

●/etc/init/fir.conf

description "FIR - Django uWSGI"
start on runlevel [2345]
stop on runlevel [!2345]
setuid www-data
setgid www-data
respawn
exec uwsgi --socket /home/ユーザ名/FIR/run/fir.sock --chdir /home/ユーザ名/FIR/ --module fir.wsgi

 

●/etc/systemd/system/fir_uwsgi.service

[Unit]
Description=uWSGI instance for FIR
After=syslog.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/home/ユーザ名/FIR/
ExecStart=/usr/local/bin/uwsgi --socket /home/ユーザ名/FIR/run/fir.sock --chdir /home/ユーザ名/FIR/ --module fir.wsgi
Restart=always
KillSignal=SIGQUIT
Type=Debug
StandardError=syslog
NotifyAccess=All
[Install]
WantedBy=multi-user.target

 

設定ファイルの作成・配置ができたら、サービスを起動する。

sudo service fir_uwsgi start

 

4.Nginxの設定

次に、NginxでuWSGIを利用するための設定を行う。
まずパラメータファイルのダウンロードをする。

wget https://raw.githubusercontent.com/nginx/nginx/master/conf/uwsgi_params -P run

 

Nginxのデフォルトの設定ファイルを削除して、新しく「/etc/nginx/sites-available/fir」というファイルを作成する。

sudo rm /etc/nginx/sites-enabled/default

 

●/etc/nginx/sites-available/fir

upstream fir {
server unix:///home/ユーザ名/FIR/run/fir.sock;
}
server {
server_name ドメイン名;
location / {
uwsgi_pass fir;
include /home/ユーザ名/FIR/run/uwsgi_params;
}
location /static/ {
alias /home/ユーザ名/FIR/static/;
}
}

 

設定ファイル作成後、サービスの再起動をする。

sudo ln -s /etc/nginx/sites-available/fir /etc/nginx/sites-enabled/fir
sudo service nginx reload

 

5.ブラウザから初期設定をする

ここまで終わったら、ブラウザから「http://ドメイン名」へアクセスしてみよう。FIRのログイン画面が表示されるはずだ。
ログインには、「./manage.py createsuperuser –settings fir.config.production 」で作成したユーザでログインできる。
新しくユーザ等を作成する場合は、「http://ドメイン名/admin」にアクセスし、Djangoの管理画面からそれらのデータを作成してやることで、利用できるようになる。

 

 

ログイン後、[New event]から新しいセキュリティインシデントを登録、それを管理してやることでセキュリティインシデントを管理できる。
Redmineで管理するのもいいけど、こういったツールで別途管理してやるのもいいかもしれない。

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*