PCIDSS で必要になる ntpd のログの取得と監視体制の構築

CloudWatch

こんばんは、菅野です。
弊社では PCIDSS の認証を取得しており、最近色々と勉強する機会がありました。
その際に学んだ事の一部ではありますが、ブログエントリーとして残しておきます。

はじめに

PCIDSS とは、加盟店やサービスプロバイダにおいて、クレジットカード会員データを安全に取り扱う事を目的として策定されたクレジットカード業界のセキュリティ基準です。(日本カード情報セキュリティ協議会HPより)

クレジットカードの情報を扱うのですから、当然のようにサーバーではウィルスチェックや改ざんのチェックが必要となります。
そういったセキュリティ関係のプログラムについては、しっかりとログの保存や監視を行うのですが、
普段全く意識していなかった ntp(時刻同期)についてもログの保存・監視が必要だということがわかりました。

今回はその為に必要な設定をご紹介します。 対象は Amazon Linux です。

ログを保存する

Amazon Linux の場合、自動で ntpd がインストールされていて、自動的に起動して時刻同期をしてくれます。
ただし、ログの保存はしてくれません。
ログの保存をするためには、/etc/ntp.conf に以下の2行を追加してください。

logfile /var/log/ntpstats/ntpd.log
logconfig =all

これで ntpd を再起動すれば /var/log/ntpstats/ にログが書き出されます。

$ sudo service ntpd restart
Shutting down ntpd:                                        [  OK  ]
Starting ntpd:                                             [  OK  ]
$ sudo ls -la /var/log/ntpstats/
合計 12
drwxr-xr-x 2 ntp  ntp  4096  2月 26 13:44 .
drwxr-xr-x 7 root root 4096  2月 26 13:15 ..
-rw-r--r-- 1 root root  407  2月 26 13:44 ntpd.log

ログの内容は以下のようになっています。

$ sudo cat /var/log/ntpstats/ntpd.log
26 Feb 13:49:00 ntpd[7533]: ntp_io: estimated max descriptors: 1024, initial socket boundary: 16
26 Feb 13:49:00 ntpd[7533]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
26 Feb 13:49:00 ntpd[7533]: Listen normally on 1 lo 127.0.0.1 UDP 123
26 Feb 13:49:00 ntpd[7533]: Listen normally on 2 eth0 xxx.xxx.xxx.xxx UDP 123
26 Feb 13:49:00 ntpd[7533]: Listening on routing socket on fd #19 for interface updates
26 Feb 13:49:00 ntpd[7533]: 0.0.0.0 c016 06 restart
26 Feb 13:49:00 ntpd[7533]: 0.0.0.0 c012 02 freq_set kernel 25.435 PPM
26 Feb 13:49:01 ntpd[7533]: 0.0.0.0 c615 05 clock_sync

ログをローテーションする

めったにログを出力しない ntpd ですが、念のためローテーションの設定をしておきましょう。
/etc/logrotate.d/ntpd を以下の内容で作成します。

/var/log/ntpstats/ntpd.log {
    missingok
    notifempty
    copytruncate
}

この内容で重要なのが「copytruncate」です。
この行が無い場合にログをローテーションすると、プログラムやデーモンはログを書き込むべきファイルを見失います。
その場合「kill -HUP」でデーモンの再起動や対象ログの inode 変更し、新しく作成されたファイルへログを書き込めるようにするのですが、ntpd に対して「kill -HUP」を実行すると ntpd は停止してしまいます。

ではどうするか、ということで「copytruncate」の出番となるのです。
この1行を入れておくと、まずログファイルのコピーを作成してそれを古いログファイルとします。
その後にログファイルを空にすることで1行目からログが追記されていく、という仕組みになります。

この設定のデメリットとして、ファイルコピーからファイルの内容消去までの間のログが保存されなくなりますので頻繁にログが書き込まれるようなデーモンやプログラムにはおすすめしません。

ログの保管

PCIDSS の要件として、一定期間はログを保存しておく必要があります。
サーバーの中に保存しておいても内容のチェックの為にわざわざ ssh でログインする必要がありますので、使い勝手が悪くなったり運用の手間が増えてしまいます。
web 上で確認できるように「CloudWatch Logs」へログを転送して1年間保管するよう設定しましょう。
まずはエージェントのインストールをします。

$ sudo yum install awslogs

次に、設定ファイル /etc/awslogs/awslogs.conf に以下を追記します。

[ntpd]
file = /var/log/ntpstats/ntpd.log
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = ntpd

設定ファイルの準備ができたら、awslogs を再起動して設定を反映させます。

$ sudo service awslogs restart
Starting awslogs:                                          [  OK  ]

では、マネジメントコンソールでログの状況を確認してみます。
スクリーンショット_2017-02-26_23_45_41
ntpd という文字をクリックし、中にインスタンス ID がありますのでそこもクリックすると保存されている中身が見れます。
スクリーンショット_2017-02-26_23_48_35
最後に保存期間の設定ですが、先ほどのロググループの一覧ページの ntpd の行に「失効しない」というリンクをクリックすることで可能です。
スクリーンショット_2017-02-26_23_52_16

まとめ

ntpd のログは、これらの作業をしておくことで長期保存と手軽な閲覧が可能となります。

最後に

いかがでしたでしょうか。
普段気にしない ntpd のログですが、PCIDSS では長期保存と監視が必要となりますので参考になさってください。
また、CloudWatch Logs の導入の手軽さと便利さも伝わったかと思いますので、是非ご活用ください。

参考ページ

これらのページを参考にさせていただきました。
ありがとうございました。
NTP の構築 (Linux)