おうちKubernetesへ、ぽちぽちとポッドをデプロイして、インターネットからSSLにてアクセスできるように設定しましたが。
何か不正アクセスなどの攻撃を受けていないか、定期的または自動的に確認したほうが良さそうです。
ポッドの各種ログは、kubectlコマンドで確認できるようです。またSSLホスティングのログは、リバースプロキシサーバのジャーナルで確認できそうです。
そのあたりのコマンドコピペ用の覚書、になります。
目次
Kubernetes、リーバスプロキシのログ確認覚書
Kubernetesのログ確認
ログの確認は、コントロール・プレーンにて行いました。
稼働ポッド確認
# 名前空間確認
kubectl get namespace
# ポッド確認
kubectl get pods -n <名前空間>
名前空間を確認後、それぞれの名前空間ごとにポッドを確認しました。
ポッドのログの確認
目的のポッドが見つかりましたら、ログを確認します。
kubectl logs <ポッド名> -n <名前空間名>
こちらはBitwarden互換のパスワード管理システム、Vaultwardenのログになります。
こちらのログファイル、時刻は日本時間ではありませんな。UTCとの違いは、JST-9、9時間遅れた時刻が記録されています。9時間足した時刻、2023年10月15日、3時ではなく12時15分にサービスを起動した記録になります。
Vaultwardenのログ覚書
# リクエスト・レスポンス・APIログ kubectl logs <ポッド名> -n <名前空間名> | grep INFO | more # エラーログ kubectl logs <ポッド名> -n <名前空間名> | grep ERROR
# 接続開始kubectl logs <ポッド名> -n <名前空間名> | grep connection
リバースプロキシとKubernetesを通してアクセスしている都合上、アクセス元のアドレスは仮想ネットワーク上のIPアドレスが記録されています。
リクエスト・レスポンスとエラーログはこちらで確認できますが、インターネット上のアクセス元情報は、リバースプロキシ側のログを見る必要があることがわかりました。
アクセス頻度や時間帯を確認したところ。とりあえず、自分以外の不正なアクセスは行われていない感じでした。
リバースプロキシ Caddy
Kubernetesのサービスや、おうちLAN内のWebサービスのホスティングは、Caddyを使用させて頂いております。
ACMEあくみーにて、SSL証明書が自動更新されるところが選択のポイントです。
こちらのログを確認してみます。いや、ログじゃないジャーナルじゃ。
Caddyのユニット確認
# systemdのユニット確認
systemctl list-unit | grep caddy
# サービスの状態確認
systemctl status caddy.service
昔でしたら、/var/log等のシステムログを参照していると思いますが。
systemdで起動したサービスは、ユニットとごにジャーナルの閲覧が可能です。
まずはユニットを確認してみました。
Caddyに関連するユニットは1つのみ、caddy.serviceのようです。
Caddyのジャーナル確認
# caddy.serviceのジャーナル確認
journalctl -u caddy.service -x
# 最新版、最後尾から
journalctl -u caddy.service -xe
# lessで読む場合 moreと異なり<キーやbキーで戻ることが可能
journalctl -u caddy.service -x | less
# vimで読む場合
journalctl -u caddy.service -x | view -
個人的には、キーボードの右手操作のみで閲覧が可能な、vimと同じviewでログを見る方法が便利かと思います。
「:set nu」にて行番号を付けたり、/キーで文字列検索をしたり、nキーで次の検索候補へ移動したり、100jで100行飛ばしたり、:map @@ 100jで@キーを2回押すと100行飛ばす操作に割り当てたり。
CaddyのジャーナルはJSONで記録されています。
jqのようなJSONパーサーで比較的簡単にジャーナルの加工が可能のようです。
JSONの中の、”level”:”info”を取り出せば情報ログ、”level”:”error”を取り出せばエラーログのように、切り出しも容易かと思います。(ここでは特におこないませんが
アクセス元に関しては、このあたりで抽出できそうです。
# インターネット上のアクセス元情報抽出
journalctl -u caddy.service -x | grep remote_ip
こちらで得られたJSONをパースすれば、インターネットからのアクセスに対して、詳細な情報を取り出すことが可能かと思います。
もしも自動的にジャーナルを確認したい場合ですが。
JSONパーサーを使って、ジャーナルを集計してレポートを作る感じかと思います。アクセス元のIPアドレスや接続時刻などを取り出し、CSV・TSV等に加工したほうが、アクセス件数等の集計もしやすいかと思います。
そちらを毎日か、毎週か、毎月か自動生成して、メールで送ったりなんだり、という感じでしょうか。
いや、その前にCaddyのジャーナルに対応した、GUIビューワ・アプリを探したほうが楽かもしれませんね。
注意が必要なのは、ジャーナルの既定の設定では永遠には残らず、古いジャーナルは自動的に消去されるところでしょうか。
必要があれば、ジャーナルの自動削除設定は変更しておいたほうが良いと思います。消す期間を5年くらい先にするなど。
何か知見が増えましたら、こちらの記事も追記致します。