Trend Micro Deep Securityの初期構築（Windows+PosgreSQL）

今回はTrend Micro Deep SecurityをWindows Server2019で構築する際の構築手順の備忘録です。実案件でもそれなりの数の構築依頼があるTrend Micro社のサーバセキュリティ製品です。そもそもDeepsecurityってなに？って方はこちらをご参照ください。

[Deep Security メーカ公式ページ](https://businessonline.trendmicro.co.jp/sb/ds/#:~:text=%E7%B7%8F%E5%90%88%E3%82%B5%E3%83%BC%E3%83%90%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3,%E3%81%9F%E3%82%81%E3%81%AB%E3%82%82%E5%BD%B9%E7%AB%8B%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82)

似たような製品でServer Protectというものもありますがこっちはアンチウィルス機能だけの製品らしいです。Deep Securityはアンチウィルス機能＋Webレピュテーション機能が利用できるそうです。
オプションでライセンスを買い足せばIPS/IDS、ファイアーウォールなどの機能も利用できるようです。

# 【前提（＋免責事項）】

- 当方はトレンドマイクロ社とは関係ないので、間違っているところも多々あると思います。設定の際は自己責任でお願いいたします。
- 本記事の設定は評価版ライセンスで構築しており、オプション機能などは顧慮していません。
- 構築環境はWindows Server2019で、DBはPostgreSQL v14.10を利用しています。
- インストール先マシンスペックはCPU＝2coreでメモリ＝16GB搭載しているマシンです。
- マネージャ、リレー、エージェントを同じサーバにインストールします。
- 本記事は初期構築の記事ですので、DeepSecurityの機能設定まではしません。

# 【用語について】

Deep Securityを構成する項目としてよく出てくるものは以下です。

- DSM →Deep security Manager（管理マネージャ）
- DSR →Deep security Relay（最新データを配信サーバへ取りにいく）　※WindowsでいうWSUS的な感じ
- DSA →Deep security Agent（管理対象≒クライアント）

それぞれの役割を図にするとこんなイメージです。
![関係図.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/f9ddc1b1-5e88-db75-1f85-1fab8009b00a.jpeg)

　※違っていたらすみません

# 設定手順

1. Deep securityのインストールデータ入手
1. PostgreSQLのインストール
1. DBのユーザ作成、データテーブル作成、権限設定
1. Deep securityのインストール
1. PostgreSQLのチューニング

# やってみた

## 1. Deep securityのインストールデータ入手
メーカの公式サイトからインストール用データをＤＬします。

https://help.deepsecurity.trendmicro.com/ja-jp/software.html


![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/e08d32a0-3621-2b35-09e4-9ddc7f01af52.png)


## 2. PostgreSQLのインストール

DeepSecurityがサポートしているPostgreSQLのバージョンは以下に記載があります。
今回はサポートしいている最新バージョンの14.10で構築します。

PostgreSQLの対応バージョン


https://help.deepsecurity.trendmicro.com/aws/ja-jp/database-requirements.html

PostgreSQLは以下からDLできます。

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/b4ff48e7-42dc-0693-39d3-d7859f22d8a8.png)

DLが終わったらインストールしていきます。
![スライド5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/f8257e1e-dc46-e2e1-a1ad-34a2612a104d.png)

基本的にはデフォルトのまま「Next」をクリックして、インストールしていきます。
![スライド6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/ddbd9427-b3bd-b78a-20e0-5a3eb5fcd9a0.png)

PostgreSQの管理者PWを設定します。また利用するポートを設定します。


![スライド7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/2a64b5a5-afc8-f467-1226-43bbb43db421.png)

![スライド8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/40b54c0b-fca3-5291-0cda-933600f5748b.png)

不要なツールをインストールしようとするので、チェックは外します。
![スライド9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/08456546-6dd0-e8cb-6bc4-e07678630ca4.png)


## 3. DBのユーザ作成、データテーブル作成、権限設定

無事インストールが完了すると、[スタート画面]の一覧に[PostgreSQL 14]という項目が出てきます。
![スライド10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/dde8a24d-c956-f1f2-7153-626b62cca4a5.png)

[SQL Shell]を起動して、DeepSecurity用のテーブルを作成していきます。
[SQL Shell]が起動すると以下の入力を求められますが、何も記入せず、EnterでOKです。

- Sever[localhost]:
- Database[postgres]:
- port[5432]:
- Username[postgres]:

ただし「ユーザ postgresのパスワード」はインストール時に設定したパスワードを入力してください。
その後以下のコマンドを入力し、ユーザとテーブルを作成し、権限を付与します。

    #データベーステーブル=dsmdbを作成
    postgres=# CREATE DATABASE "dsmdb";
    CREATE DATABASE
    #ロール＝dsmadminを作成し、PWをdsmpasswordに設定
    postgres=# CREATE ROLE "dsmadmin" WITH PASSWORD 'dsmpassword' LOGIN;
    CREATE ROLE
    #データベーステーブル=dsmdbの設定権限をdsmadminに付与
    postgres=# GRANT ALL ON DATABASE "dsmdb" TO "dsmadmin";
    GRANT
    #データベーステーブル=dsmdbへのdsmadminの接続許可
    postgres=# GRANT CONNECT ON DATABASE "dsmdb" TO "dsmadmin";
    GRANT
    postgres=# quit


## 4. Deep securityのインストール

手順1でDLしたDeepSecurityのインストールexeを実行します。これも基本的はデフォルト設定のまま「次へ」で進めていきます。

![スライド11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/61e70edd-fe76-f232-d9bc-dbd6fe5b4d93.png)

利用するデータベースを選択する項目で「PostgreSQL」を選択し、以下設定値を入力します。

- ホスト名：localhost
- データベース名：dsmdb
- ユーザ名：dsmadmin
- パスワード：dsmpassword

DB設定が問題なくできているとチェック結果で緑のチェックが入ります。


![スライド12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/e85382db-7baf-1c32-3aa1-99bb19c87e6d.png)
全てチェックが入ったら「インストール」をクリックします。

![スライド13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/e421bb45-275f-e7da-2678-cd5a8efa0892.png)
ライセンスをお持ちの場合はここで登録もしくは後程登録することもできます。

アドレスと利用ポートについて、他とバッティングしていないことを確認します。

次に管理コンソールにログインするときのユーザ名とパスワードを設定します。　※DBのパスワードとは別ものです
![スライド14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/1d09bf70-dccc-3fc6-671f-5ea3b4c512fc.png)

ここもデフォルトのまま次へでOKです。
![スライド15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/5ec2cc65-e336-3812-c27f-5522bb466c47.png)

インストールが完了すると[スタート画面]一覧に[Deep Security Manager]が表示されます。



![スライド17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/0e061ee9-ba8e-20e7-b506-cf3e06a1036b.png)

[Deep Security Manager]をクリックするとログイン画面が出ていきますので、先ほど設定した管理コンソール用のログインIDとパスワードを入力すると管理コンソールにアクセスできます。

これでDeepSecurityの初期インストール設定は完了です。

![スライド16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/1b81719c-5650-7627-8961-5372215a756c.png)

## 5. PostgreSQLのチューニング
最後にDBのPostgresのチューニングを行います。
設定コンフィグは"C:\Program Files\PostgreSQL\14\data"にありますのでコピーを取ってから修正していきましょう。
![スライド18.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/27adb3e9-e558-8d32-4d08-a8fa977b0b73.png)


設定コンフィグファイルの場所

    C:\Program Files\PostgreSQL\14\data


メーカ推奨の設定値は以下のサイトに記載があります。

https://help.deepsecurity.trendmicro.com/11_0/aws/ja-jp/postgresql-tuning.html

実際に設定する際には実機によっては設定できない値の可能性もあるので、マシンスペックに合わせてチューニングが必要になります。以下チューニングのサンプルです。

#### チューニング項目:ログ設定
>初期設定では、PostgreSQLログファイルはローテーションされないため、ログファイルに大量のディスク容量が使用される可能性があります。Deep SecurityでPostgreSQLを使用する場合、postgresql.confファイルで次の4つのパラメータを使用してログローテーションを設定することをお勧めします。

上記のように記載がありますので設定コンフィグの以下を変更します。

    ---変更箇所(以下のコメントアウトを解除し、設定値を変更)-----
    
    log_filename = 'postgresql-%a.log' (各ログファイルの名前に、曜日の最初の3文字が含まれます)
    log_rotation_age = 1440 (新しいログファイルが毎日作成されます)
    log_rotation_size = 0(設定が無効になり、制限を超えるたびに日次ログファイルが上書きされなくなります)
    log_truncate_on_rotation = on (ログファイルの上書きが有効になります)





### チューニング項目:最大接続数
>postgresql.confファイルのmax_connections設定では、データベースに対するオープン接続の最大数を指定します。
初期設定値は100です。この値を500に増やすことをお勧めします

上記のように記載がありますので設定コンフィグの以下を変更します。

    ---変更箇所(以下を変更・追記)-----
    max_connections = 100　→"500"に変更





### チューニング項目:共有バッファ
>postgresql.confファイルのshared_buffers設定では、PostgreSQLがデータのキャッシュに使用できるメモリ容量を指定します。
1GBのRAMを備えたシステムには、共有バッファ用にメモリの値の1/4が必要です。つまり、共有バッファを256MBに設定する必要があります (初期設定は32MBです)。

上記のように記載がありますので設定コンフィグの以下を変更します。

    ---変更箇所(以下を変更・追記)-----
    shared_buffers = 128MB →"メモリ実装値の1/4"に変更	





### チューニング項目:ワークメモリとメンテナンスワークメモリ

>postgresql.confファイルのwork_mem設定では、一時ディスクファイルに書き込む前に、内部ソート操作とハッシュテーブルで使用できるメモリ容量を指定します。
初期設定値は1MBですが、複雑なクエリを実行する場合は増やす必要があります。maintenance_work_mem設定では
ALTER TABLEなどのメンテナンス操作に使用される最大メモリ容量を決定します。

上記のように記載がありますので設定コンフィグの以下を変更します。

    ---変更箇所(以下を変更・追記)-----
    #maintenance_work_mem = 64MB　→コメントアウトを解除し、"最大値"に変更　※だいたいメモリの1/4程度






### チューニング項目:有効キャッシュサイズ

>postgresql.confファイルのeffective_cache_size設定は、クエリによりキャッシュの効果を推定するために使用されます。この設定はクエリ計画中のコスト見積もりにのみ影響し、
メモリ消費量は増加しません。この設定を大きくすることを検討してください。


上記のように記載がありますので設定コンフィグの以下を変更します。

    ---変更箇所(以下を変更・追記)-----
    #effective_cache_size = 4GB　→コメントアウトを解除し、"最大値"に変更　※だいたいメモリの1/4程度






### チューニング項目:チェックポイント

>通常、チェックポイントはデータファイルへの書き込みの主なソースとなります。最も速いパフォーマンスを実現するには、
大半のチェックポイントを「requested」 (使用可能なすべてのWALセグメントを入力することによるトリガ、または明示的なCHECKPOINTコマンドによるトリガ) ではなく、
「timed」 (checkpoint_timeoutによるトリガ) にする必要があります。チェックポイントの作成頻度は減らすことを強くお勧めします。

上記のように記載がありますので設定コンフィグの以下を変更します。

    ---変更箇所(以下を変更・追記)-----
    #checkpoint_timeout = 5min →コメントアウトを解除し、"15min"に変更
    #checkpoint_completion_target = 0.9→コメントアウトを解除
    max_wal_size = 1GB　→コメントアウトを解除し、"16GB"に変更




### チューニング項目:自動バキューム設定

>PostgreSQLには、「バキューム」と呼ばれる定期的なメンテナンスが必要です。通常、autovacuum_max_workersの初期設定値を変更する必要はありません。
entitys および attribute2s 表で、頻繁な書き込みによって多くの行が頻繁に変更される場合（短時間のクラウドインスタンス), を使用する大規模な配置では、
ディスク領域の使用を最小限に抑えてパフォーマンスを維持するために、自動バッファの実行頻度を増やす必要があります）。
パラメータはデータベース全体と特定のテーブルの両方に設定する必要があります。

上記のように記載がありますので設定コンフィグの以下を変更します。

    ---変更箇所(以下を変更・追記)-----
    #autovacuum = on　→コメントアウトを解除
    #autovacuum_work_mem = -1　→コメントアウトを解除し、"1GB"に変更
    #autovacuum_vacuum_cost_delay = 2ms　→コメントアウトを解除し、"10"に変更
    #autovacuum_vacuum_scale_factor = 0.2　→コメントアウトを解除し、"0.01"に変更
    #autovacuum_analyze_scale_factor = 0.1　→コメントアウトを解除し、"0.005"に変更

チューニングが終わったらPosgreSQLのサービスを再起動しましょう。

# おわりに
DeepSecurityの構築自体はWebで探せばそこそこの数ヒットします。ただなぜがDBのチューニングはしてない記事が多いですね。実際にチューニングしなくても動作するので必須ではないと思いますがどうなんでしょうね？是非ちゃんとレクチャーしてもらいたいものです。~~トレンドマイクロさんお願いします~~

# 参考にしたサイト

https://help.deepsecurity.trendmicro.com/11_0/aws/ja-jp/postgresql-tuning.html

https://www.rootlinks.net/2021/09/06/trend-micro-deep-security-manager%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/