エックスサーバーに、Open Source Tripwire (以後 Tripwire と書きます) というソフトウェアを導入する手順を紹介します。
Tripwire は、ファイルの改ざんを検知するためのソフトウェアで、サーバー上のファイルに何らかの変更が加えられたかどうかをチェックすることができます。
1. 方針
- サーバー上のユーザー名は、
foobar
とします。 - Tripwire を、
~/local/tripwire
にインストールします。
2. Tripwire を導入する手順
2-1. Automake を導入する
まず、Automake というツールを導入します。
(このあたりは、エックスサーバーのいつのサーバーかによって異なる可能性があります)
/local/src
以下にソースファイルをダウンロードします。
$ cd ~/local/src
$ wget https://ftp.gnu.org/gnu/automake/automake-1.16.5.tar.gz
解凍して、展開されたディレクトリに移動します。
$ tar xzvf automake-1.16.5.tar.gz
$ cd automake-1.16.5
一端、~/local/bin
に 2つのシンボリックリンクを作成しておきます(この後で必要なため)。
$ cd ~/local/bin
$ ln -s aclocal aclocal-1.15
$ ln -s automake automake-1.15
configure
コマンドを実行して、Makefile を生成します。
$ LDFLAGS="-L/home/foobar/local/lib" \
./configure --prefix=/home/foobar/local
コンパイルして、インストールします。
$ make
$ make install
2-2. Tripwire を導入する
ここからが、Tripwire の導入作業です。
~/repositories
ディレクトリに、tripwire の Gitリポジトリをクローンします。
$ cd ~/repositories
$ git clone https://github.com/Tripwire/tripwire-open-source.git
configure
コマンドを実行して、Makefile を生成します。
LDFLAGS="-L/home/foobar/local/lib" \
./configure --prefix=/home/foobar/local/tripwire
コンパイルして、インストールします。
$ make
$ make install
このコマンドを実行すると、いろいろな設定項目について聞かれます。
- ライセンスを受け入れるかどうか。
- site keyfile のパスフレーズ。
- local keyfile のパスフレーズ。
ファイル構成は以下となっています。
$ tree ~/local/tripwire
.
├── doc
│ └── tripwire
│ ├── COMMERCIAL
│ ├── COPYING
│ ├── ChangeLog
│ ├── ReadMe-2.4.3
│ ├── TRADEMARK
│ └── policyguide.txt
├── etc
│ ├── site.key
│ ├── svXXXXX.xserver.jp-local.key
│ ├── tw.cfg
│ ├── twcfg.txt
│ ├── tw.pol
│ └── twpol.txt
├── lib
│ └── tripwire
│ ├── report
│ ├── svXXXXX.xserver.jp.twd
│ └── svXXXXX.xserver.jp.twd.bak
├── man
├── sbin
│ ├── siggen
│ ├── tripwire
│ ├── twadmin
│ └── twprint
└── share
└── man
(省略)
この時点で生成された設定内容を表示します。
$ cd ~/local/tripwire
$ ./sbin/twadmin -m f
ROOT =/home/foobar/local/tripwire/sbin
POLFILE =/home/foobar/local/tripwire/etc/tw.pol
DBFILE =/home/foobar/local/tripwire/lib/tripwire/$(HOSTNAME).twd
REPORTFILE =/home/foobar/local/tripwire/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE =/home/foobar/local/tripwire/etc/site.key
LOCALKEYFILE =/home/foobar/local/tripwire/etc/svXXXXX.xserver.jp-local.key
EDITOR =/usr/bin/vi
LATEPROMPTING =false
LOOSEDIRECTORYCHECKING =false
MAILNOVIOLATIONS =true
EMAILREPORTLEVEL =3
REPORTLEVEL =3
MAILMETHOD =SENDMAIL
SYSLOGREPORTING =false
MAILPROGRAM =/usr/sbin/sendmail -oi -t
3. Tripwire の設定
GitHub – Tripwire/tripwire-open-source: Open Source Tripwire® に従って設定します。
3-1. キーを生成する (Generating Keys)
ここは既に済んでいます。
ローカルキー(local key)とサイトキー(site key)があり、それぞれが1ファイルになっています。
以下の2つのファイルです。
~/local/tripwire/etc/
├─ site.key (site keyfile)
└─ svXXXXX.xserver.jp-local.key (local keyfile)
3-2. 設定ファイルを生成する (Creating a configuration file)
~/local/tripwire/etc/twcfg.txt
ファイルの末尾に以下を追記します。
これは、Tripwire のチェック処理を自動実行したとき、結果が送信される先のメールアドレスです。
GLOBALEMAIL =foobar@example.com
次のコマンドで、テキスト形式の設定ファイルから、バイナリ形式の設定ファイルを生成します。
$ cd ~/local/tripwire
$ ./sbin/twadmin --create-cfgfile -S ./etc/site.key ./etc/twcfg.txt
3-3. ポリシーファイルを生成する (Generating a policy file)
~/local/tripwire/etc/twpol.txt
(テキストファイル)を元に、~/local/tripwire/etc/tw.pol
(バイナリファイル)を生成します。
事前に、~/local/tripwire/etc/twpol.txt
ファイルを編集するとよいのですが、分からなければデフォルトのままでもよいと思います。後で少しずつ変更していけばよいでしょう。
$ cd ~/local/tripwire
$ ./sbin/twadmin --create-polfile -S ./etc/site.key ./etc/twpol.txt
3-4. データベースを構築する (Creating a baseline)
現状のファイルとディレクトリを元にして、データベースを生成します。
$ ./sbin/tripwire --init
3-5. テキスト形式の「設定ファイル」と「ポリシーファイル」を削除する
~/local/tripwire/etc/twcfg.txt
と ~/local/tripwire/etc/twpol.txt
は、残しておくと危険なので削除します。
$ rm ~/local/tripwire/etc/twcfg.txt
$ rm ~/local/tripwire/etc/twpol.txt
4. Tripwire の運用
4-1. チェック処理の実行を定期実行させる
ファイルが改ざんされたかどうかのチェック処理は、以下のコマンドで実行します。
$ ~/local/tripwire/sbin/tripwire --check
~/local/tripwire/lib/report/
以下にレポートファイルが生成されます。
このコマンドを cron で、1日1回実行するようにしておきます。
$ crontab -e
以下の1行を追記します。
00 6 * * * /home/foobar/local/tripwire/sbin/tripwire --check --email-report -t 1
--email-report
オプション:結果をメール送信します。-t 1
オプション:メールする内容の詳細レベルを指定します。
4-2. レポートを表示する (Printing a report)
$ cd ~/local/tripwire
$ ./sbin/twprint -m r -t 2 -r ./lib/tripwire/report/svXXXXX.xserver.jp-20220711-173942.twr | less
-t 2
オプション:内容の詳細レベルを指定します。-r
オプション:表示するレポートのファイルを指定します。
4-3. レポートを元にデータベースを更新する (Updating a database)
レポートに記載されたファイルやディレクトリの変更後の状態を、データベースに反映させます。
$ cd ~/local/tripwire
$ ./sbin/tripwire --update -r ./lib/tripwire/report/svXXXXX.xserver.jp-20220711-173942.twr
-r
オプション:表示するレポートのファイルを指定します。
コマンドを実行すると、エディタでレポートが開きますが、ファイルやディレクトリの先頭に「[x]」というチェックマークがついています。この「x」を消してファイルを保存するとその行のファイルもしくはディレクトリの状態は反映されません。
4-4. ポリシーを更新する (Updating a policy)
レポートを閲覧した際に、「特定のパスについては、チェックを除外したい」「特定のパスについては、チェックする内容[1]を変更するべき」などに気づいた場合は、ポリシーを変更します。
まず、バイナリ形式のポリシーファイルから、テキスト形式のポリシーファイルを生成します。
$ cd ~/local/tripwire
$ ./sbin/twadmin -m p > ./etc/twpol.txt
テキスト形式のポリシーファイルを編集します。
$ vi ~/local/tripwire/etc/twpol.txt
[1] Tripwire では、ファイルやディレクトリに対して、何をチェックするか指定することができます。詳しくは、twpolicy(4): Tripwire policy file reference – Linux man page や Tripwireによるホスト型IDSの構築:ゼロから始めるLinuxセキュリティ(8)(2/3 ページ) – @IT(20年前の記事!) などを参照してください。
テキスト形式のポリシーファイルを使って、バイナリ形式のポリシーファイルを更新します。
$ ./sbin/tripwire --update-policy -Z low ./etc/twpol.txt
- このとき、データベースも更新されます。
- そのため、事前に
--check
してファイルが改ざんされていないかチェックしておくことをお勧めします。
5. 関連