はじめに

cdsl-vm-2では外部からのアクセスをNginxで受け取るたびにアクセスログが生成される.アクセスログを卒業課題や創成課題で利用できるようにNASへ保存する.

概要

コピー元のcdsl-vm-2

  • rsyncを使いNASからcdsl-vm-2へインターネット経由で接続し,ログを取得する.
  • ログの取得ではrsyncの増分バックアップを利用する.
  • ログバックアップのための専用ユーザ log-backup をcdsl-vm-2に追加する. -不正アクセスされた場合の影響を抑えるため, log-backupのシェルをrbashにする.
  • rbashではrsyncコマンドのみを許可する.
  • バックアップ対象のファイルは, /var/www/nginx/ に配置されたアクセスログのうち access.*.log.1 に一致するファイルである.
    • これはログローテーションにより作成されたファイルである.
    • このファイルをバックアップ対象とすることで,ログローテーションのタイミングとバックアップのタイミングがずれても確実に重複のないバックアップが実現できる.
    • バックアップファイルの例は,access.log.1 や access.rudder.log.1である.

コピー先のNAS(natadecoco)

  • コマンドのスケジュール実行はタスクスケジューラ を使う.
  • コピー元(cdsl-vm-2)からコピー先(natadecoco)へファイルをrsyncでコピーする.
  • バックアップ作業(コピー元→コピー先)はDaily(1日あたり1回)とする.
  • バックアップ作業は00:00(JST)に開始する.
  • バックアップ方式は,増分バックアップとする.
  • バックアップの配置先のディレクトリ名は, log-backup-YYYYmmDDHHMMSS である.
    • 例)2022年1月30日02:01:02の場合は, log-backup-20220130020102 になる.
  • バックアップデータの保存先のパスは /volume1/cdsl-vm-2-nginx-log-backup とする.
    • 例)2022年1月30日02:01:02の場合

手順

cdsl-vm-2での作業

(1) バックアップ用のユーザ log-backup を追加する.

koyama@cdsl-vm-2:~$ sudo useradd -m -s /bin/rbash log-backup
koyama@cdsl-vm-2:~$ cd /home/log-backup/
koyama@cdsl-vm-2:/home/log-backup$ ls

(2) log-backupユーザのbashrcを変更する.

koyama@cdsl-vm-2:~$ sudo -i
root@cdsl-vm-2:~# cd /home/log-backup/
root@cdsl-vm-2:/home/log-backup# ls
root@cdsl-vm-2:/home/log-backup# ls -al
total 20
drwxr-xr-x 2 log-backup log-backup 4096 Apr  2 21:30 .
drwxr-xr-x 8 root       root       4096 Apr  2 21:30 ..
-rw-r--r-- 1 log-backup log-backup  220 Feb 25  2020 .bash_logout
-rw-r--r-- 1 log-backup log-backup 3771 Feb 25  2020 .bashrc
-rw-r--r-- 1 log-backup log-backup  807 Feb 25  2020 .profile
root@cdsl-vm-2:/home/log-backup# mv .bashrc .old.bashrc
root@cdsl-vm-2:/home/log-backup# echo 'export PATH=$HOME/.bin' > .bashrc

(3) rbash環境でrsyncコマンドを使えるようにする.

root@cdsl-vm-2:/home/log-backup# mkdir .bin
root@cdsl-vm-2:/home/log-backup# cd .bin/
root@cdsl-vm-2:/home/log-backup/.bin# ln -s $(which rsync) .
root@cdsl-vm-2:/home/log-backup/.bin# ll
total 8
drwxr-xr-x 2 root       root       4096 Apr  2 21:31 ./
drwxr-xr-x 3 log-backup log-backup 4096 Apr  2 21:31 ../
lrwxrwxrwx 1 root       root         14 Apr  2 21:31 rsync -> /usr/bin/rsync*

(4) SSH用の公開鍵と秘密鍵のペアを作る.

root@cdsl-vm-2:/home/log-backup/.ssh# ssh-keygen -t ed25519 -f $PWD/id_ed25519
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/log-backup/.ssh/id_ed25519
Your public key has been saved in /home/log-backup/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:xmdROuPrFs6PwyZ4rp8Ox5sKFgr7yhcCep6YNu07Xfs root@cdsl-vm-2
The key's randomart image is:
+--[ED25519 256]--+
|            .    |
|           o     |
|          =      |
|.      . . +     |
|+   .   S +      |
|.+.o . + o..     |
|.=+.= o.++..     |
|++o= o.+o=B.     |
|oo=oo oBOEoo.    |
+----[SHA256]-----+
root@cdsl-vm-2:/home/log-backup/.ssh# ls
id_ed25519  id_ed25519.pub

(5) 公開鍵をSSHの認証に使うために認証用鍵の一覧へコピーする.

root@cdsl-vm-2:/home/log-backup/.ssh# cp id_ed25519.pub authorized_keys

(6) 公開鍵と秘密鍵の権限,所有者を変更する.

root@cdsl-vm-2:/home/log-backup/.ssh# ls -la
total 20
drwxr-xr-x 2 root       root       4096 Apr  2 21:39 .
drwxr-xr-x 4 log-backup log-backup 4096 Apr  2 21:38 ..
-rw-r--r-- 1 root       root         96 Apr  2 21:39 authorized_keys
-rw------- 1 root       root        411 Apr  2 21:39 id_ed25519
-rw-r--r-- 1 root       root         96 Apr  2 21:39 id_ed25519.pub
root@cdsl-vm-2:/home/log-backup/.ssh# chown log-backup: *
root@cdsl-vm-2:/home/log-backup/.ssh# ll
total 20
drwxr-xr-x 2 root       root       4096 Apr  2 21:39 ./
drwxr-xr-x 4 log-backup log-backup 4096 Apr  2 21:38 ../
-rw-r--r-- 1 log-backup log-backup   96 Apr  2 21:39 authorized_keys
-rw------- 1 log-backup log-backup  411 Apr  2 21:39 id_ed25519
-rw-r--r-- 1 log-backup log-backup   96 Apr  2 21:39 id_ed25519.pub

自分のPCで作業

作成した秘密鍵でSSHできるかを確かめる.ここでは id_ed25519 が秘密鍵ファイルである.なお,秘密鍵の権限は600にしておく.

$ ssh -i ./id_ed25519 log-backup@34.84.68.226

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

log-backup@cdsl-vm-2:~$
log-backup@cdsl-vm-2:~$ ls
-rbash: /usr/lib/command-not-found: restricted: cannot specify `/' in command names
log-backup@cdsl-vm-2:~$

(1) バックアップスクリプトを作成する.

以下のスクリプトを nginx-log-backup.sh として保存する.なお,id_ed25519とnginx-log-backup.shは同一のディレクトリに配置される.

#!/bin/bash -eux

cd $(dirname $0)
MYDATE=$(date +%Y%m%d%H%M%S)

LATEST_BACKUP_DIR=$(ls -dr log-backup-* | head -n 1)

rsync -azvvP -e 'ssh -i ./id_ed25519' \
    --compare-dest="../$LATEST_BACKUP_DIR" \
    'log-backup@34.84.68.226:/var/log/nginx/access.*.log.1' $PWD/log-backup-$MYDATE ;

(2) スクリプトの実行権限を付与する.

chmod +x nginx-log-backup.sh

(3) 初回バックアップを作成する.次回のバックアップはこのバックアップと最新のファイルを比較する.

rsync -azvvP -e 'ssh -i ./id_ed25519' \
    'log-backup@34.84.68.226:/var/log/nginx/access.*.log.1' $PWD/log-backup-$(date +%Y%m%d%H%M%S) ;

以下のようなディレクトリが作成できていればよい.

$ ls log-backup-20230402141041/
access.doktor.log.1 access.rudder.log.1 access.wp.log.1

NASでの作業

(1) タスクスケジューラーの設定を追加する.

  • 全般
    • タスク名:cdsl-vm-2 nginx log backup
    • ユーザ: cdsl
    • 有効:チェックを付ける
  • スケジュール
    • 実行日数: 毎日
    • 初回実行時刻: 00:00
    • スケジュールサイクル:毎日
    • 最終実行時刻:00:00
  • タスク設定
    • ユーザ指定のスクリプト
      • /volume1/cdsl-vm-2-nginx-log-backup/nginx-log-backup.sh

以下はタスクスケジューラーに登録したあとの様子である.

Screenshot 2023-04-03 at 7.26.24.png (130.1 kB)

(2) 共有フォルダを作成する.

  • 共有ドライブ名:cdsl-vm-2-nginx-log-backup
  • 説明:cdsl-vm-2のnginxのログをバックアップ

Screenshot 2023-04-03 at 7.19.51.png (889.6 kB)

(3) File Stationからcdsl-vm-2-nginx-log-backupにアクセスし,バックアップスクリプトとSSH用の秘密鍵をアップロードする.アップロードするファイルの一覧は以下である.

  • id_ed25519
  • nginx-log-backup.sh

アップロードしたあとの様子が以下である.

Screenshot 2023-04-03 at 7.21.27.png (4.3 MB)

(4) NASにSSHで接続する.バックアップ用ディレクトリへ移動する.

cdsl@natadecoco:~$ cd /volume1/cdsl-vm-2-nginx-log-backup/
cdsl@natadecoco:~$ ls
 @eaDir   id_ed25519   nginx-log-backup.sh  '#recycle'

(5) SSH用の秘密鍵の権限を600にする.

cdsl@natadecoco:/volume1/cdsl-vm-2-nginx-log-backup$ chmod 600 id_ed25519

(6) SSHのためにフィンガープリントを追加する.また鍵でのログインができるか確かめる.

cdsl@natadecoco:/volume1/cdsl-vm-2-nginx-log-backup$ ssh -i ./id_ed25519 log-backup@34.84.68.226
Last login: Sun Apr  2 21:42:21 2023 from 163.215.6.1
log-backup@cdsl-vm-2:~$ logout
-rbash: /usr/bin/clear_console: restricted: cannot specify `/' in command names
Connection to 34.84.68.226 closed.

(7) rsyncで初回バックアップを作成する.

cdsl@natadecoco:/volume1/cdsl-vm-2-nginx-log-backup$ rsync -azvvP -e 'ssh -i ./id_ed25519' 'log-backup@34.84.68.226:/var/log/nginx/access.*.log.1' $PWD/log-backup-$(date +%Y%m%d%H%M%S)

opening connection using: ssh -i ./id_ed25519 -l log-backup 34.84.68.226 rsync --server --sender -vvlogDtprze.iLsfxC . "/var/log/nginx/access.*.log.1"  (12 args)
receiving incremental file list
created directory /volume1/cdsl-vm-2-nginx-log-backup/log-backup-20230403072346
delta-transmission enabled
access.doktor.log.1
         10,071 100%    9.60MB/s    0:00:00 (total: 0%) (xfr#1, to-chk=2/3)
access.rudder.log.1
            349 100%  340.82kB/s    0:00:00 (total: 0%) (xfr#2, to-chk=1/3)
access.wp.log.1
      1,424,854 100%   90.59MB/s    0:00:00 (total: 100%) (xfr#3, to-chk=0/3)
total: matches=0  hash_hits=0  false_alarms=0 data=1435274

sent 81 bytes  received 117,495 bytes  235,152.00 bytes/sec
total size is 1,435,274  speedup is 12.21

(8) NASのWeb管理画面からタスクスケジューラーの実行結果を確認する.

Screenshot 2023-04-03 at 7.26.13.png (181.3 kB)

以下は正常に動作した場合の実行結果の例である.

++ dirname /volume1/cdsl-vm-2-nginx-log-backup/nginx-log-backup.sh
+ cd /volume1/cdsl-vm-2-nginx-log-backup
++ date +%Y%m%d%H%M%S
+ MYDATE=20230403072528
++ ls -dr log-backup-20230403072346 log-backup-20230403072415
++ head -n 1
+ LATEST_BACKUP_DIR=log-backup-20230403072415
+ rsync -azvvP -e 'ssh -i ./id_ed25519' --compare-dest=../log-backup-20230403072415 'log-backup@34.84.68.226:/var/log/nginx/access.*.log.1' /volume1/cdsl-vm-2-nginx-log-backup/log-backup-20230403072528
opening connection using: ssh -i ./id_ed25519 -l log-backup 34.84.68.226 rsync --server --sender -vvlogDtprze.iLsfxC . "/var/log/nginx/access.*.log.1"  (12 args)
receiving incremental file list
created directory /volume1/cdsl-vm-2-nginx-log-backup/log-backup-20230403072528
delta-transmission enabled
access.doktor.log.1

              0   0%    0.00kB/s    0:00:00 (total: 0%)  
         10,071 100%    9.60MB/s    0:00:00 (total: 0%) (xfr#1, to-chk=2/3)
access.rudder.log.1

              0   0%    0.00kB/s    0:00:00 (total: 0%)  
            349 100%  340.82kB/s    0:00:00 (total: 0%) (xfr#2, to-chk=1/3)
access.wp.log.1

              0   0%    0.00kB/s    0:00:00 (total: 0%)  
      1,424,854 100%  123.53MB/s    0:00:00 (total: 100%) (xfr#3, to-chk=0/3)
total: matches=0  hash_hits=0  false_alarms=0 data=1435274

sent 81 bytes  received 117,495 bytes  78,384.00 bytes/sec
total size is 1,435,274  speedup is 12.21

(9) バックアップができているか File Station で確認する.

image.png (506.3 kB)

バックアップできていた.

Screenshot 2023-11-23 at 11-51-14 natadecoco - Synology NAS.png (273.7 kB)