DMARCレポートを解析するツール DmarcSrg をインストールする

#### DmarcSrgについて
[DmarcSrg github](https://github.com/liuch/dmarc-srg/)

LAMP環境で動作する比較的シンプルなDMARCレポートの解析ツールです。

- 解析されたレポートの一覧を表示
- 各レポートの DKIM/SPF の詳細を表示
- サマリーレポートの表示
- レポートの取得方法は、IMAP、ローカルフォルダ、S3に対応
- メールボックスのある古いメールデータの削除
- DBに登録されてた古いレポートデータの削除
- メールボックスからDMARCレポートを収集する場合は、メールサーバーがIMAPをサポート

詳しくはDmarcSrgのgithubを確認してください。

#### 動作条件
- MariaDB or MySQL
- PHP 7.3 or higher
- php-mysql, php-xml, php-zip, php-json, php-imap, mbstring
- Apache等のWebサーバー（必須ではない）
CentOS9の場合は、php-imapのパッケージが標準で用意されていないの工夫する必要があります。

#### インストール
今回は、Ubuntu 22.04LTSにインストールしていきます。

### パッケージのインストール
```
sudo apt update
sudo apt install apache2 mysql-server-8.0
sudo apt install php-fpm php-mysql php-xml php-zip php-json php-imap php-mbstring
```

### ユーザーの作成
```
sudo useradd -d /opt/dmarc-srg -s /sbin/nologin -M dmarc-srg
```

### データーベースの作成
```
sudo systemctl enable mysql --now
sudo mysql
mysql> CREATE database dmarc;
mysql> CREATE USER 'dmarc_user'@'localhost' IDENTIFIED BY 'password1';
mysql> GRANT ALL ON dmarc.* TO 'dmarc_user'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> QUIT
```

### DmarcSrgのgit clone
```
cd /opt
git clone https://github.com/liuch/dmarc-srg.git
```
### DmarcSrgの設定
```
cd /opt/dmarc-srg
cp config/conf.sample.php config/conf.php
vi config/conf.php
```

```:config/conf.php
$database = [
    'host'         => 'localhost',
    'type'         => 'mysql',
    'name'         => 'dmarc',
    'user'         => 'dmarc_user',
    'password'     => 'password1',
    'table_prefix' => ''
];

$mailboxes = [
    'name'            => 'Dmarc-Rua',
    'host'            => 'メールサーバーホスト名',
    'encryption'      => 'ssl',
    'novalidate-cert' => false,
    'username'        => 'メールアカウント',
    'password'        => 'パスワード',
    'mailbox'         => 'INBOX',
    'auth_exclude'    => []
];

$admin = [
    // Web UI のユーザー adminのパスワード
    'password' => 'パスワード',
    // 複数ユーザー対応する場合は ture に変更
    // 参照のみユーザーを作成できます
    'user_management' => false
];

$fetcher = [
    // ※未読のメッセージのみ処理を行います。
    'mailboxes' => [
        // 一度にフェッチされるメッセージの最大数
        'messages_maximum' => 10,

        // 正常に処理された後のメールの扱い
        // 'mark_seen'   - メッセージを既読状態にする（削除しない）
        // 'delete'      - メッセージを削除する
        // 'move_to:dir' - dir に指定したメールフォルダに移動
        //  'when_done' => [ 'mark_seen', 'move_to:done' ], で、
        // 既読にして done フォルダに移動もなど複数アクションも可能
        'when_done' => 'mark_seen',

        // 処理に失敗したメールの扱い
        'when_failed' => 'move_to:failed'
    ],

    // この正規表現に一致するドメインは、自動で処理対象となります。
    // ブランク や null が設定されている場合は、自動処理されません。
    // ※ 最初のレポートの最初のドメインは、自動的に追加されます。
    // 複数のドメインやサブドメインも処理対象とする場合に、自動で対象ドメインを登録したい場合に設定します。
    // いくつかの例：
    // '.+\\.example\\.net$' - ドメイン example.net のサブドメインと一致します。
    // '^mymail[0-9]+\\.net$' - mymail01.net、mymail02.net、mymail99999.net などのドメインに一致します。
    'allowed_domains' => ''
];


$cleaner = [
    // It is used in utils/mailbox_cleaner.php
    'mailboxes' => [
        // days_old (日) より古いメッセージを削除
        'days_old'       => 30,

        // 一度に削除されるメッセージの最大件数
        'delete_maximum' => 50,

        // メールボックスに最低何件のメッセージを残すか
        'leave_minimum'  => 100,

        //削除対象とするメールのステータス
　　　　 // none - なにもしない
        // seen - 閲覧されたメッセージのみが削除
        // any  - すべてのメッセージが削除
        'done'           => 'seen',
        'failed'         => 'none'
    ],

    // It is used in utils/reports_cleaner.php
    'reports' => [
        'days_old'       => 30,
        'delete_maximum' => 50,
        'leave_minimum'  => 100
    ],

    // It is used in utils/reportlog_cleaner.php
    'reportlog' => [
        'days_old'       => 30,
        'delete_maximum' => 50,
        'leave_minimum'  => 100
    ]
```

### パーミッション等の設定
```
cd /opt
sudo chown -R damrc-srg.damrc-srg damrc-srg
sudo chmod 400 /opt/damrc-srg/config/conf.php
```

### データーベースの初期化
```
cd /opt/dmarc-srg
php utils/database_admin.php init
```

### 設定ファイルと実行環境のチェック
```
cd /opt/dmarc-srg
sudo -u dmarc-srg php utils/check_config.php
```

実行結果がすべてOKになることを確認します。
```
=== GENERAL INFORMATION ===
  * OS information: Linux 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 x86_64
  * PHP version:    8.1.2-1ubuntu2.14

=== EXTENSIONS ===
  * pdo_mysql...................... Ok
  * xmlreader...................... Ok
  * zip............................ Ok
  * json........................... Ok

=== CONFIG FILE ===
  * Checking if the file exists.... Ok
  * Checking read permission....... Ok
  * Checking write permission...... Ok
  * Checking access by other users. Ok
  * Checking the output buffer..... Ok

=== DATABASE ===
  * Accessibility check............ Ok
  * Checking for integrity......... Ok

=== MAILBOXES ===
  * Checking mailboxes config...... Ok
    Message: 1 mailbox found
  * Imap extension................. Ok
  * Checking mailboxes (1)
    - Dmarc-Rua
      * Accessibility.............. Ok

=== DIRECTORIES ===
  * Checking directories config.... Ok
    Message: No directories found

=== REMOTE FILESYSTEMS ===
  * Getting configuration.......... Skipped
    Message: Configuration not found

===
Success!
```


### Apacheの設定
```
vi /etc/apache2/sites-available/dmarc-srg.conf
```

```:dmarc-srg.conf
<VirtualHost *:80>
    ServerName hostname
    DocumentRoot /opt/dmarc-srg/public
    ErrorLog /var/log/apache2/dmarc-srg.error

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost/"
    </FilesMatch>

    <Directory /opt/dmarc-srg/public >
        DirectoryIndex index.php
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    <DirectoryMatch "^//opt/dmarc-srg/(classes|config|tests|utils)/*">
        Options None
        Require all denied
    </DirectoryMatch>
</VirtualHost>
```

```
sudo a2enconf php8.1-fpm
sudo a2ensite dmarc-srg
sudo a2enmod proxy_fcgi setenvif
sudo systemctl enable apache2 --now
```

### レポート収集の手動実行
```
sudo php utils/fetch_reports.php
```

### レポート収集とクリーンアップをcronに登録
```
sudo vi /etc/crontab
```

```:/etc/crontab
*/5 * * * * dmarc-srg  cd /opt/dmarc-srg && /usr/bin/php utils/fetch_reports.php
1 * * * * dmarc-srg  cd /opt/dmarc-srg && /usr/bin/php utils/mailbox_cleaner.php
```