本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。本稿を利用した行為による問題に関しましては、筆者および株式会社アットマーク・アイティは一切責任を負いかねます。generation)への切り替えについて述べる。syslog-ngへの切り替えsyslogdの設定を引き継ぐ現行のsyslogdから切替える場合は、syslogdの設定内容をそのまま引き継ぐようにする。一からsyslog-ngの設定を書き上げてもよいが、後々の運用管理において混乱が生じないようにするためには、現行syslogdの設定内容を引き継いだ方がよい。syslogdからsyslog-ngへの移行例(設定例)を以下に示す。root上記syslog.confをsyslog-ngに移行した場合、以下のとおりとなる。};syslog-ngの起動オプションを知るsyslog-ngの設定が完了したら、後は現行のsyslogdを停止してからsyslog-ngを起動するだけだが、その前にsyslog-ngの起動オプションを知っておく必要がある。1.6.2には、以下のようなオプションが用意されている。messages(リスト拡大)このうち重要となるのが、構文チェックの-s(--syntax-only)、実行ユーザー/グループを変更する-u(--user)、-g(--group)である。これらについては後述する。syslog-ng起動前に行うべきこと(構文チェック)syslog-ngを実際に起動する前に、syslog-ng.confの構文チェックを必ず行うこと。syslog-ngには、構文チェックを行うための便利なオプション(-s)が提供されているので、syslog-ngの設定変更時は、必ず-sオプションで事前確認するとよい。必要に応じてフルパス(/usr/local/sbin/syslog-ng)を指定する。syslog-ng.confの26行目の構文が間違えていた場合は、以下のように表示される。26)%syslog-ng.confが正しく設定されていれば、何も表示されない。前述の構文チェックをクリアできたら、後は現在稼働中のsyslogdを停止し、syslog-ngを起動するだけだ。以下に各OS別の切り替え手順をまとめる。起動スクリプトは、portsのものを利用する。実行ユーザー名」を追加する。以下の例では、実行ユーザー名をnobodyとしている。syslog-ng'syslog-ngの準備完了。syslogdを停止する。20258syslog-ngを即座に起動する。start次回OS起動時に、syslogdではなくsyslog-ngを起動する場合は、/etc/rc.confに次の一行を追加する。/etc/rc.d/syslogng以下のとおりsyslogdをsyslogngに変更する。一部のパスはsyslog-ngにする。/etc/rc.conf/etc/rc.confに以下を追加する。実行ユーザー名」を追加する。以下の例では、実行ユーザー名をnobodyとしている。/etc/syslog-ng/syslog-ng.conf"これでsyslog-ngの準備は完了。syslogdを停止する。stopsyslog-ngを即座に起動する。syslogng.次回OS起動時に、syslogdを起動しないようにするため、/etc/rc.confに次の一行を追加する。7.3の場合ソースコードからインストールした場合は、syslog-ngのソースコードのcontrib以下にある起動スクリプト(init.d.RedHat-7.3)を利用する。syslog-ng起動スクリプトが有効(ランレベル2、3がon)になったことを確認する。実行ユーザー名」を追加する。以下の例では、実行ユーザー名をnobodyとしている。nobody"syslog-ngの準備完了。syslogdを停止する。stop即座にsyslog-ngを起動する。start次回OS起動時に、syslogdを起動しないようにする。8の場合ソースコードからインストールした場合は、syslog-ngのソースコードのcontrib以下にある起動スクリプト(init.d.solaris)を利用する。実行ユーザー名」を追加する。以下の例では、実行ユーザー名をnobodyとしている。/etc/syslog-ng/syslog-ng.conf"syslog-ngの準備完了。syslogdを停止する。stop即座にsyslog-ngを起動する。start次回OS起動時に、syslogdを起動しないようにする。/var/log/messages)。startingもちろん、syslogdの場合と同じく、loggerコマンド*1を使った確認も忘れずに行うこと。最近のUNIXでは、標準でnewsyslogやlogrotateなどを使用して、ログファイルのローテーションが行われている。syslogdからsyslog-ngへの切り替えを行った場合、それらログ・ローテーションに関する設定も変更する必要がある。ログファイルのローテーションを実施する際に、稼働中のsyslogサーバのプロセスに対して、HUPシグナルを送る必要があるからだ。従来の場合は、syslogdが仮定されているため、それをsyslog-ng用に変更する。●newsyslog(FreeBSD、NetBSDなどで標準)newsyslogの設定ファイル(/etc/newsyslog.conf)にて、syslog-ngのプロセスID(PID)ファイルへのパスを明示的に指定する。Linuxなどで標準)logrotateの設定ファイル(/etc/logrotate.conf)のpostrotate/endscriptにて、syslog-ngプロセスに対してHUPシグナルを送信する。endscriptsyslog-ngそのほかの設定syslog-ngのチューニング通常は、optionsの値はデフォルト値で構わないが、必要に応じて変更するようにしよう。●ホスト名の出力をsyslogdと同じにするsyslog-ngのデフォルトでは、出力されるログのホスト名にsourceのが付加される。0上記では、server1というホスト名にs_localが付加されている。これを、syslogdと同じくserver1だけ出力したい場合は、long_hostnames(off)をセットする。};●ファイルのパーミッションを変更するsyslog-ngのデフォルトでは、ログディレクトリ/ファイルの所有者やパーミッションは以下のとおりとなっている。(-rw-------)この場合、後述のログのローテーション時にパーミッションをセットしていると不都合がおきる。syslog-ngの起動時に、こういった所有者やパーミッションを変更してしまうからだ。従来(ログローテーション)と同じにしたい場合は、optionsやdestinationにて、dir_perm()、perm()、owner()、group()を指定する。};上記では、それぞれ以下のとおり設定している。dir_perm()で、ディレクトリのパーミッションを0755(-rwxr-xr-x)にセットperm()で、ファイルのパーミッションを0644(-rw-r--r--)にセットowner()で、所有者をrootにセットgroup()で、グループをwheelにセットまた、ログファイルごとにパーミッションを変更したい場合は、destination内で指定すればよい。例では、/var/log/authlogファイルのパーミッションを0600(-rw-------)にセットしている。上記のようにログファイルごとに変更したい場合は、destinationで指定する。そのほか、設定されていない場合は、optionsで設定した内容が適用される。●syslog-ngの状態ログの出力間隔を変更するsyslog-ng自身が出力するログを眺めていると、以下のようなログが定期的に出力される。0これは、syslog-ngの状態を定期的にレポートするもので、バッファ出力に失敗したログの数(STATS:dropped失敗した数)が出力される。デフォルト値は、10分(600秒)間隔となっているが、間隔をもっと延ばしたい場合は、optionsのstatsパラメータを調整する。後述のsync(0)でログをバッファに保存しない場合は、stats(0)をセットするとよい。};●sync()パラメータでバッファに保持するメッセージ数を調整sync()パラメータでは、ログをファイルへ出力前に、バッファに保持するメッセージ数(。デフォルトは2048。以下にsync()パラメータの設定例を示す。};sync(0)を指定すると、ログをバッファに出力せず、そのままファイルなどに書き込むようにする。syslogdの挙動と同じにしたい場合に指定する。collector)の機能を持っているが、ガーベジコレクタの実行中は、ログメッセージを受け付けない。その場合、ログの受け渡しにunix-dgram()やudp()といった信頼性のないプロトコル(ソケット)を利用していると、ログを取りこぼす可能性が生じる。syslog-ngでは、そういった取りこぼしを防ぐために、gc_idle_threshold()とgc_busy_threshold()のoptionsパラメータが提供されている。gc_idle_threshold()syslog-ngがアイドル状態(100ミリ秒の間にメッセージが発生しない状態)の場合、かつ割り当てたオブジェクトの数がgc_idle_threshold()で指定した数に到達した場合、ガーベジコレクタを実行する。gc_busy_threshold()syslog-ngがビジー状態(100ミリ秒の間に入出力イベントが発生した状態)、かつ割り当てたオブジェクト数がgc_busy_threshold()で指定した数に到達した場合、ガーベジコレクタを実行する。デフォルトは3000。この値が大きいほど、ガーベジコレクタによるメッセージ受信に帯する割り込みがなくなる。以下にgc_idle_threshold()とgc_busy_threshold()の設定例を示す。};通常はデフォルト値で構わないが、ログが頻発するサーバの場合*2、gc_idle_threshold()を減らし、逆にgc_busy_threshold()の閾(しきい)値を増やす。破棄数が0以外が頻発する場合は調整が必要。syslogによるログの一元管理」で説明したログ転送も同様に行える。syslogdから切り替える場合は、(1)ログ・サーバ、(2)ログ転送元サーバの順に1台ずつ切り替えるとよいだろう。(1)ログ・サーバをsyslog-ngに切り替えるまず、前述のsyslog-ngの基本的な設定までを行い、その後にログ受信に関する設定を以下のとおり行う。●sourceの変更udp()により、ログを受信するポートを514/udpで待機させる。};ネットワークインターフェイス(NIC)が複数あり、ログの受信を特定のIPアドレスを持つNICからのみに制限したい場合は、udp()内でip()を指定する。192.168.0.10と172.16.1.100のNICがあり、ログの受信を192.168.0.10のNICからのみに制限したい場合は、以下のように設定する。};設定を有効にする場合は、稼働中のsyslog-ngプロセスにHUPシグナルを送信するだけだ(syslogdとは違い再起動の必要がない)。●destinationの変更syslogdとは異なり、syslog-ngでは複数のsyslogサーバのログファイルを分けることができる。ログを分けたい場合は、destinationを変更する必要がある。例:ログ転送元サーバserver1、server2の/var/log/authlogを分ける。destination、filter、logを以下のとおり設定する。};$HOSTは、syslog-ngが保持する変数で、ログ送信元のホスト名が保持されている。ディレクトリを自動作成しない設定(create_dirs(n))にしている場合は、あらかじめディレクトリを作成しておく必要がある。/var/log/server2(2)ログ転送元をsyslog-ngに切り替えるログ・サーバと同じく、前述のsyslog-ngの基本的な設定までを行い、その後にログ送信に関する設定を以下のように行う。●destinationの追加ログ転送用のdestinationを定義する。ログ・サーバが192.168.0.10の場合、以下のように設定する。};デフォルトでは、転送元ポート(localport)は任意のポートとなり、転送先ポート(port)は514となる。転送元ポートをsyslogdと同様に514にしたい場合は、以下のとおり設定する。追加したdestinationを各logに追加する。};ログ転送の確認が完了し、ログの格納先を全てログ・サーバに切り替える場合は、以下のようにdestination(d_authlog)を取り除くだけだ。};ログ監査の自動化syslog-ngでは、filter機能のprogram()、host()、match()を利用することで、ログ監査を自動化させることが可能だ。この機能は、従来のsyslogdにはなく、syslogdでそれを実現するには、swatch*3などの専用アプリケーションを別途導入する必要があった。Square)以下にログ監査の例を示す。例:sshdに対するパスワードログイン失敗のログを捕捉した場合、管理者(root@example.com)にメール通知する。sshdのパスワードログインに失敗した場合、以下のようなログメッセージが出力される。ssh2上記の場合、192.168.0.1からユーザーkimuによるパスワードログインに失敗した様子を示している。ル送信をする場合は以下のように定義する。};出力先の/usr/local/bin/syslog-alert.shは、メール通知のためのシェルスクリプトだ。ここで使用するシェルスクリプトの内容を以下に示す。$TOdone上記のsedは、ログの行頭に付加される""の部分を取り除いている。オリジナルのログメッセージと同様にしている。以上の設定が完了したら、syslog-ngに対してHUPシグナルを送信する。上記シェルスクリプトの内容を変更した場合も、HUPシグナルを送信しないと反映されないので注意が必要だ。正常に動作すると、以下のようなメールが管理者(root@example.com)に送られる。ssh2今回は、syslogサーバからセキュアなログ・サーバsyslog-ngへの切り替えに関して説明を行った。ログに関する設定は以上となる。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。