はじめに
MariaDB Server のログはデフォルト設定では,code>@@datadir ディレクトリのファイルに記録されます。
例:
/var/lib/mysql/hostname.err
/var/lib/mysql/server_audit.log
今回は syslog (rsyslog) 経由で監査ログ(audit log)を記録する手順について解説いたします。
テスト環境
- OS: CentOS 7.6.1810
- MariaDB Server: 10.4.7 (Community Server)
- rsyslog: 8.24.0-34
auditプラグインの設定
MariaDB の設定ファイルを以下のように変更します。
/etc/my.cnf.d/server.cnf
1 2 3 4 5 6 |
[mariadb] plugin_load_add = server_audit server_audit_logging = on server_audit_output_type = SYSLOG server_audit_events = 'CONNECT' server_audit_syslog_ident = 'mariadb-audit' |
mariadb service の再起動
mariadb service を再起動します。
1 |
systemctl restart mariadb |
MariaDB monitor で MariaDB Server に接続してみます。
1 2 3 4 5 6 7 8 9 10 |
# mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.4.7-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> |
/var/log/messages に監査ログが mariadb-audit という ident で記録されていることが確認できます。
1 2 |
Aug 22 14:12:56 mdb104 mysql-server_auditing: mdb104,root,localhost,8,0,CONNECT,,,0 Aug 22 14:13:02 mdb104 mysql-server_auditing: mdb104,root,localhost,8,0,DISCONNECT,,,0 |
rsyslog ommysql モジュールによる MariaDB へのログ保存
rsyslog には様々なモジュールがあり,ommysql モジュールは MariaDB/MySQL へのログ保存を行うことができます。
ommysql モジュールを利用するには,まず rsyslog-mysql パッケージをインストールします。
1 |
sudo yum -y install rsyslog-mysql |
MariaDB Server 上でログ保存用のデータベース/テーブルを作成します。
1 2 3 |
git clone https://github.com/rsyslog/rsyslog.git cd plugins/ommysql sudo mariadb < createDB.sql |
/etc/rsyslog.conf に以下の設定を追加します。
1 2 3 4 5 6 7 8 9 10 |
$ModLoad ommysql *.* :ommysql:127.0.0.1,Syslog,ommysql,password # Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 |
ここで,localhost 上の Syslog
データベースに ommysql
ユーザ,password
というパスワードで接続します。
rsyslog service を再起動します。
1 |
sudo systemcrl restart rsyslog |
Syslog データベースの SystemEvents テーブルを確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# mariadb Syslog Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.4.7-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [Syslog]> SELECT ReceivedAt, Message FROM SystemEvents WHERE SysLogTag LIKE 'mariadb-audit:'; +---------------------+--------------------------------------------------+ | ReceivedAt | Message | +---------------------+--------------------------------------------------+ | 2019-08-22 19:16:09 | mdb104,root,localhost,8,0,DISCONNECT,Syslog,,0 | | 2019-08-22 19:16:09 | mdb104,ommysql,localhost,9,0,CONNECT,Syslog,,0 | | 2019-08-22 19:16:10 | mdb104,root,localhost,10,0,CONNECT,Syslog,,0 | | 2019-08-22 19:35:33 | mdb104,root,localhost,10,0,DISCONNECT,Syslog,,0 | | 2019-08-22 19:41:37 | mdb104,ommysql,localhost,8,0,CONNECT,Syslog,,0 | | 2019-08-22 19:42:39 | mdb104,root,localhost,9,0,CONNECT,Syslog,,0 | +---------------------+--------------------------------------------------+ |
接続ログが Syslog.SystemEvents テーブルに記録されていることが確認できます。
前回のブログ投稿にて Data-at-Rest Encryption によるテーブルの暗号化を解説しておりますので,暗号化を有効にすることで最終的に監査ログの暗号化を行うことが可能となります。
https://mariadb.com/ja/resources/blog/encryption-with-aws-kms-plugin/
まとめ
今回は監査ログを syslog 経由でOSのログファイル,もしくは MariaDB テーブルに保存する手順について解説させて頂きました。Data-at-Rest Encryption を有効にすれば監査ログを暗号化することも可能ですので,高いセキュリティ要件が求められている場合は参考にして頂ければと存じます。