#author("2023-05-24T23:30:29+09:00","default:nowsky","nowsky")
#author("2023-05-24T23:45:00+09:00","default:nowsky","nowsky")
* logger-exec [#z9e332ec]
#block
apache/audit/PowerDNS等でログをsyslog転送するのは面倒だけど、
ログ監査にはsyslog出力と中央管理が必要になる事が多いです。
しかし、syslogに出力は細工が必要でメンテナンス性が低下してしまい、
本末転倒の状態になります。
 
複数台のサーバを運用するとログ監査と管理が大変になって来るので、
ローカルのテキストログをリアルタイム取得しながらsyslogに変換しつつ、
rsyslogやsyslog-ng経由でログの転送を行うスクリプトを作ってみました。
 
RHEL本家とRockyLinux等のRHELクローン、
Debian本家と派生ディストリビューション、
openSUSE本家で実際に動かしてログ転送出来る事までは確認済です。
#block(next)
#ref(Network/Script/logger/logger_01.png,40%,left,nowrap)
#block(end)
~
* 参考サイト [#zbac4450]
- [[ログメッセージをSyslogサーバーに転送したい:+https://ja.stackoverflow.com/questions/22809/%E3%83%AD%E3%82%B0%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92syslog%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AB%E8%BB%A2%E9%80%81%E3%81%97%E3%81%9F%E3%81%84]]
- [[loggerコマンドでsyslogにエラーを出力する方法:+http://kaworu.jpn.org/kaworu/2008-05-27-1.php]]
~
*注意事項 [#r1217fe5]
+ ファイル利用による損益について、&color(#ff0000){一切の責任を負いません。};
+ 状況に応じて、インストーラ・スクリプトの公開を停止する場合があります。
+ ライセンスについて、筆者が作成したスクリプトは好きに改変して問題ありませんが、
&color(#ff0000){外部ライブラリのライセンスについてはライブラリ配布元に帰属とします。};
+ 宣伝してくれる心優しい方は、是非[[トップページ:+https://www.ns-lab.org/]]へリンクをお願いします。
~
* スクリプト [#u89aa2e8]
|LEFT:80|CENTER:100|LEFT:100|LEFT:200|c
|CENTER:~公開日|~FILE|RIGHT:~SIZE|CENTER:~MD5|CENTER:~更新内容|
|2023/05/24|[[logger_20230524.tar.gz:https://www.ns-lab.org/files/logger/logger_20230524.tar.gz]]|3.1KB|fa800de7ff48221a5d8d191105d8b95d|ディストリビューション判定の処理を最適化|
|2022/10/09|[[logger_20221009.tar.gz:https://www.ns-lab.org/files/logger/logger_20221009.tar.gz]]|3.2KB|3929dea119c0d67f8790ed08b5cbfb27|systemdユニットファイルの同梱とRHEL9新規対応|
|2019/05/12|[[logger_20190512.tar.gz:https://www.ns-lab.org/files/logger/logger_20190512.tar.gz]]|2.9KB|2cd2a0d318c21a4069690bfc99aa398e|restart時に再起動しない場合がある不具合を修正|
|2019/05/10|[[logger_20190510.tar.gz:https://www.ns-lab.org/files/logger/logger_20190510.tar.gz]]|2.9KB|c07f49574cdbecd8b0d1197e5ab98f3a|初公開|
~
* インストール [#l17d6314]
RHEL/Debian/openSUSEのクローンディストリビューションに対応するインストーラを同梱していますので、
&color(#ff0000){SELinuxとAppArmorを無効化};してから下記コマンドの通りインストールして下さい。
 # wget "https://www.ns-lab.org/files/logger/logger_latest.tar.gz"
 # tar zxvf logger_latest.tar.gz
 # cd logger
 # ./install.sh
 
systemdユニットファイルを手動インストールを行う場合、
下記を参考に各ファイルをコピーしつつ、パーミッションを適切に設定して下さい。
 # cp logger/environment/logger.systemd /etc/sysconfig/logger
 # chown root.root /etc/sysconfig/logger
 # chmod 644 /etc/sysconfig/logger
 
 # cp logger/service/logger.systemd /usr/lib/systemd/system/logger.service
 # chown root.root /usr/lib/systemd/system/logger.service 
 # chmod 644 /usr/lib/systemd/system/logger.service 
 
 # cp logger/logger-exec /usr/local/sbin/
 # chown root.root /usr/local/sbin/logger-exec
 # chmod 755 /usr/local/sbin/logger-exec
 
 # mkdir -p /etc/logger
 # cp logger/logger.conf /etc/logger/
 # chown root.root /etc/logger/logger.conf
 # chmod 644 /etc/logger/logger.conf
 
 # systemctl enable logger.service
 # systemctl daemon-reload
 
initをsystemd同等に動かす時は下記手順になります。
互換性維持の為に残しているファイルなので、通常はsystemdユニットファイルを使って下さい。
 # cp logger/environment/logger.init /etc/sysconfig/logger
 # chown root.root /etc/sysconfig/logger
 # chmod 644 /etc/sysconfig/logger
 
 # cp logger/service/logger.redhat /etc/init.d/logger
 # chown root.root /etc/init.d/logger
 # chmod 755 /etc/init.d/logger
 
 # cp logger/logger-exec /usr/local/sbin/
 # chown root.root /usr/local/sbin/logger-exec
 # chmod 755 /usr/local/sbin/logger-exec
 
 # mkdir -p /etc/logger
 # cp logger/logger.conf /etc/logger/
 # chown root.root /etc/logger/logger.conf
 # chmod 644 /etc/logger/logger.conf
 
 # chkconfig --add logger
 # chkconfig logger on
 # systemctl daemon-reload
~
* 設定ファイル [#n967b95f]
スクリプトを実行するには、下記2ファイルの設定が必要となります。
環境変数についてはデフォルト状態で動作しますが、
スクリプトのログ読込み設定については環境に合わせて再設定して下さい。
#region(&color(#ff0000){/etc/sysconfig/logger};)
 # スクリプトの設定ファイルPATH
 CONFIG="/etc/logger/logger.conf"
 
 # スクリプトのプロセスIDを格納するファイル
 # 設定を変更した場合、起動スクリプト内の設定も変更
 PID="/var/run/logger.pid"
 
 # スクリプトの実行オプション
 # 汎用性を持たせる為に用いている為、実際には初期設定から変更しない
 OPTIONS="-c $CONFIG -p $PID"
#endregion
#region(&color(#ff0000){/etc/logger/logger.conf};)
 # ログ読込み設定はカンマ区切りで各パラメータを設定
 # 初期状態では、auditログをlocal0に転送する設定例を記載済
 
 # 1個目:リアルタイムで取得するテキストログ
 # 2個目:変換後のsyslogファシリティ
 # 3個目:変換後のsyslogプライオリティ
 # 4個目:変換後の送信元プログラム名(syslogタグ)を変更する
 #        未設定の場合、スクリプト実行ユーザ名(root)になる
 
 /var/log/audit/audit.log,local0,info,audit
#endregion
 
取得したログをリモートサーバにsyslog転送するには、rsyslog・syslog-ngの設定変更も必要になります。
local1の全ログをIPアドレス10.0.0.1、
local2の全ログをIPアドレス10.0.0.2に転送する場合、rsyslogには下記の様な設定を追加して下さい。
#region(&color(#ff0000){/etc/rsyslog.conf};)
 # RemoteServer01
 local1.*    @10.0.0.1
 & ~
 
 # RemoteServer02
 local2.*    @10.0.0.2
 & ~
#endregion
~
* 実行コマンド [#x6171017]
スクリプトの全設定を行った後、initスクリプトを実行するとloggerが起動します。
起動オプション・停止コマンドは下記の通りとなっています。
- スクリプト起動
 systemctl start logger

- スクリプト停止
 systemctl stop logger

- スクリプト再起動
 systemctl restart logger

 
スクリプトが正常に起動しつつ、rsyslog・syslog-ngのリモート転送も設定している場合、
ログ転送先(図のサーバB)では下記の様なログを取得する事が出来ます。
ログが転送されて来ない場合、何処かの設定が失敗しているので設定・パーミッションを見直して下さい。
 May 10 00:15:00 server audit: type=CRYPTO_KEY_USER msg=audit(1557414900.XXX:415): pid=*** uid=0 ...
 May 10 00:15:00 server audit: type=CRYPTO_KEY_USER msg=audit(1557414900.XXX:416): pid=*** uid=0 ...
 May 10 00:15:00 server audit: type=CRYPTO_KEY_USER msg=audit(1557414900.XXX:417): pid=*** uid=0 ...