{{tag>netadmin sysadmin sécurité application logiciel sauvergarde restic serveur}}
====== Installer le serveur REST HTTP du projet restic ======
===== Installation et premier démarrage =====
On peut installer le serveur via le gestionnaire de paquets apt :
apt install -y restic-rest-server
Le service n'est pas immédiatement démarré après l'installation. Il faut faire quelques paramétrages.
Dans le fichier ''/etc/default/restic-rest-server'' définir la variable ''BACKUP_DIR''
...
# Directory to store backups.
# Note: the server will not start unless this variable is defined.
BACKUP_DIR = /srv/restic/backups/
...
Créer le répertoire et donner les droits d'écriture à l'utilisateur exécutant le service :
mkdir -p /srv/restic/backups
chown -R restic-rest-server:restic-rest-server /srv/restic/
chmod -R g-w,o-rwx /srv/restic/
Ajouter un utilisateur. L'authentification auprès du serveur REST est gérée via les entrées dans le fichier .htpasswd ''/etc/restic-rest-server/users.htpasswd''.
Pour ajouter des entrées dans le fichier, utiliser la commande htpasswd du paquet ''apache2-utils'' :
apt install -y apache2-utils
# Créer un nouvel enregistrement dans le fichier
htpasswd -B /etc/restic-rest-server/users.htpasswd myUserName
On peut maintenant démarrer le service :
systemctl enable restic-rest-server.service --now
Si firewalld :
# Autoriser les connexions entrantes sur le port TCP 8000
firewall-cmd --add-port=8000/tcp
===== Test de connexion =====
export RESTIC_REPOSITORY="rest:http://user:pass@host:8000/my-test-repo/"
restic init
===== Chiffrement TLS =====
Les échanges entre le serveur REST HTTP et les clients restic peuvent être chiffrés. Pour cela il faudra générer un certificat TLS pour le serveur puis paramétrer le service pour utiliser la clé privée et le certificat.
# Déplacer la clé privée et le certificat
mv rstore01.kvm.internal.key rstore01.kvm.internal.pem /etc/restic-rest-server/
chown restic-rest-server: /etc/restic-rest-server/rstore01.kvm.internal.*
Modifier le fichier de configuration du service ''/etc/default/restic-rest-server''
# TCP or UNIX listen address.
#LISTEN = unix:/run/restic-rest-server
LISTEN = :8000
# Directory to store backups.
# Note: the server will not start unless this variable is defined.
BACKUP_DIR = /srv/restic/backups/
# Extra arguments to pass to the server. Run `restic-rest-server --help` to see
# available options. By default, basic authentication is enabled.
ARGS = "\
--htpasswd-file /etc/restic-rest-server/users.htpasswd \
--tls --tls-key /etc/restic-rest-server/rstore01.kvm.internal.key \
--tls-cert /etc/restic-rest-server/rstore01.kvm.internal.cert.pem \
"
Redémarrer le service :
systemctl restart restic-rest-server.service
Depuis un poste client, valider la connexion :
export RESTIC_REPOSITORY="rest:https://user:pass@host:8000/my-test-repo/"
export RESTIC_CACERT="/absolute/path/to/ca-chain.cert"
restic init
===== Confidentialité des identifiants =====
Pour éviter que les identifiants apparaissent sur la ligne de commande ou les variables d'environnement, on peut utiliser des fichiers avec accès restreint.
mkdir -p ~/.config/restic
chmod a-rwx,u+rwx ~/.config/restic
echo "rest:https://user:pass@server.fqdn:8000/my-repo/" > ~/.config/restic/repo
echo "my-repo-password" > ~/.config/restic/pass
# Lecture seule pour l' utilisateur propriétaire
chmod a-rwx,u+r ~/.config/restic/repo ~/.config/restic/pass
export RESTIC_REPOSITORY_FILE="/absolute/path/to/.config/restic/repo"
export RESTIC_PASSWORD_FILE="/absolute/path/to/.config/restic/pass"
===== Dépannages =====
==== Écouter sur le port 443 ====
Impossible de démarrer le service en utilisant un port réservé (comme 80 ou 443).
Après modification du fichier de configuration et redémarrage du service on obtient une erreur du type :
Aug 08 12:01:00 rstore01 restic-rest-server[974]: error: unable to listen: listen on :443 failed: listen tcp :443: bind: permission denied
Plusieurs solutions ont été testées :
* utiliser la commande ''%%setcap 'cap_net_bind_service=+ep' /usr/bin/restic-rest-server%%'' pour autoriser le binaire : KO ;
* Modifier la configuration du service systemd : KO ;
* Rediriger le trafic entrer via des règles de filtrage nftables 443 -> 8000 : OK.
Avec firewalld :
# Déterminer les zones actives et par celle par défaut
firewall-cmd --get-active-zones
firewall-cmd --get-default-zone
# Dans cet exemple, l'interface du serveur est dans la zone public
firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=8000
# Une fois la configuration validée
firewall-cmd --runtime-to-permanent
====== Références =====
* [[https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html#rest-server | Utiliser un serveur HTTP REST (restic.readthedocs.io)(en)]]
* [[https://github.com/restic/rest-server|Le serveur REST restic (github.com/restic/rest-server)(en)]]