
Nessusなどで取得したセキュリティスキャンのデータ管理方法について調べていたところ、運用中のセキュリティインシデント情報の管理ツール『FIR』というものを見かけたので、Ubuntu Server 16.04 LTSに入れてみることにする。 動作にはMySQLやNginxといったパッケージが必要になるので、それら含めインストールを行う。 また、今回は検証のため一般ユーザ(blacknon)、作業ディレクトリはホームディレクトリ(/home/blacknon/)で行っている。 ちゃんと運用するなら、専用のユーザを作成して/opt配下をホームディレクトリにするなどが必要だろう。
インストール手順は、こちらの公式手順を元に進めていく。
1. 前提となるパッケージのインストール
まず、以下のコマンドで前提となるパッケージの導入をする。 インストール中にMySQLのパスワード設定画面が表示されるので対応する。
bashsudo 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用のテーブルを作成する。
bash
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でのソースの取得を行う。
bash
sudo pip install virtualenv
virtualenv env-FIR
source env-FIR/bin/activate
git clone https://github.com/certsocietegenerale/FIR.git
次に、以下のコマンドで必要になるPythonのパッケージを導入する。
bash
cd FIR
pip install -r requirements.txt
pip install mysql-python
Pythonで必要となるパッケージのインストールが完了したら、以下のコマンドで設定ファイルのサンプルをコピーしてくる。 プラグインを有効にする場合は、2行目のコマンドも実行する。
bash
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」を編集する。 以下、編集箇所だけ抜粋。
python
ALLOWED_HOSTS = ['ドメイン名']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'fir',
'USER': 'fir',
'PASSWORD': 'パスワード',
'HOST': '',
'PORT': '',
}
}
設定ファイル編集後、以下のコマンドでテーブル、スーパーユーザを作成する。
bash./manage.py migrate --settings fir.config.production ./manage.py createsuperuser --settings fir.config.production
以下のコマンドで、初期データのインポートを行う。
bash./manage.py loaddata incidents/fixtures/seed_data.json --settings fir.config.production ./manage.py collectstatic --settings fir.config.production
ディレクトリの所有者やパーミッションについて変更する。
bashsudo chown www-data logs/errors.log uploads sudo chmod 750 logs/errors.log uploads
3. uWSGIのインストール・設定
『FIR』ではuWSGIが必要になるため、これのインストール・設定を行う。
bashsudo pip install uwsgi sudo chsh www-data -s /bin/sh
ソケット用のディレクトリを作成する。
bashmkdir run sudo chown www-data run
設定ファイル「/etc/init/fir.conf」および「/etc/systemd/system/fir_uwsgi.service」を作成する。
/etc/init/fir.conf
properties
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
properties
[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
設定ファイルの作成・配置ができたら、サービスを起動する。
bashsudo service fir_uwsgi start
4. Nginxの設定
次に、NginxでuWSGIを利用するための設定を行う。 まずパラメータファイルのダウンロードをする。
bashwget https://raw.githubusercontent.com/nginx/nginx/master/conf/uwsgi_params -P run
Nginxのデフォルトの設定ファイルを削除して、新しく「/etc/nginx/sites-available/fir」というファイルを作成する。
bashsudo rm /etc/nginx/sites-enabled/default
/etc/nginx/sites-available/fir
properties
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/;
}
}
設定ファイル作成後、サービスの再起動をする。
bashsudo 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で管理するのもいいけど、こういったツールで別途管理してやるのもいいかもしれない。