Cloud Boxi

Шифрованный архив на VPS через rclone crypt

Архивы старых проектов почти не меняются, и держать их в репозитории бэкапов необязательно. Для них мне хватает rclone: файлы шифруются на моей стороне, а на сервере лежат под случайными именами.

Диск на арендованном сервере надо считать чужим. Хостер может заменить его, отправить на утилизацию или получить запрос. Поэтому всё, что попадает на VPS, шифруется до отправки, а ключ на сервере не хранится.

Для бэкапов этим занимается restic. Но есть данные, которым бэкап с историей не нужен: архив готовых проектов и старые образы дисков. Их удобнее держать как обычное зеркало папки.

Настройка

В rclone это делается двумя хранилищами, поставленными друг на друга. Первое описывает сервер, второе шифрует всё, что проходит через него. Готовый пример есть в rclone.conf.example.

[vps]
type = sftp
host = backup.example.org
user = box
key_file = /home/box/.ssh/id_ed25519

[vps-crypt]
type = crypt
remote = vps:archive
filename_encryption = standard
directory_name_encryption = true
password = ...
password2 = ...

Строки password и password2 записываются в запутанном виде, который выдаёт rclone obscure. Это не защита: файл настроек надо беречь так же, как и пароль. Второй пароль служит солью, его тоже придётся сохранить.

Отправка

Сначала всегда запускаю с --dry-run: sync приводит получателя к виду источника, а значит удаляет лишнее.

rclone sync /srv/data/archive vps-crypt: --dry-run
rclone sync /srv/data/archive vps-crypt: --transfers 4 --progress

Днём канал нужен для работы, поэтому ограничиваю скорость по расписанию:

rclone sync /srv/data/archive vps-crypt: --bwlimit "08:00,5M 23:00,off"

Как выглядит результат

На сервере нет ни имён, ни структуры, только зашифрованные названия:

$ rclone ls vps:archive | head -3
 18446 3fqe0vh0ls2c8f5kjq1v9g2e4o/h1a4s9r2ctb7pn0d5n3l8ue6mg
524303 3fqe0vh0ls2c8f5kjq1v9g2e4o/q8m2ve5ofg1t6u3ib7ck0jr9sc
 73218 ku5p7d3n1tg8a2f6s0mjlb4rvo/7ha9ec2i0qk3mn6lpg4dt5sr1g

Размер файлов виден, он лишь немного больше исходного. Если это важно, можно упаковывать мелкие файлы в архивы до отправки.

Проверка

Обычный rclone check здесь не сработает, потому что зашифрованные файлы не совпадают с оригиналами побайтно. Для этого есть отдельная команда, она считает контрольные суммы с учётом шифрования:

rclone cryptcheck /srv/data/archive vps-crypt:

И один раз проверьте главное: что файл можно получить обратно на другом компьютере, имея только сохранённый файл настроек.

rclone copy vps-crypt:2019/проект/отчёт.pdf /tmp/проверка/

Паролей от crypt никто не восстановит. Я храню файл настроек в менеджере паролей и на бумаге вместе с паролем от restic.