Dedibox: notes de root

De fr.discu.org
Aller à : navigation, rechercher
Dedibox: notes de root

Introduction

Dedibox est le nom d'un service de location de machine hébergée proposé par une société du groupe Iliad (propriétaire du FAI Free.fr).

Voici le mode d'administration d'une machine Unix, appliqué à une Dedibox sous Linux Debian. N'importe quel administrateur (même amateur) de système Unix le comprendra et une bonne part n'est pas spécifique à Debian.

Suggestions, commentaires et modifications pertinentes sont bienvenus.

Matériel

hdparm comme sdparm ne fournissent rien de captivant. Le paramétrage du disque dur (un SATA-2) semble optimal.

Disque dur: S.M.A.R.T.

Objectif: détecter certaines pannes du disque dur.

Pré-requis: être connecté en tant que root à la Dedibox.

Moyen: un programme de surveillance.

Actions

Nous emploierons les ressources de SMART.

Installer le paquetage smartmontools. Pour cela invoquer, en tant que root, apt-get update ; apt-get install smartmontools

Ce logiciel sait interroger les programmes embarqués dans le disque dur, qui détectent certaines déficiences du périphérique.

Placer dans le fichier /etc/smartd.conf une ligne:


/dev/sda -a -d ata -H -m VotreAdresseEmail

Cela paramètre une interrogation des programmes embarqués, qui portera sur la santé générale (-H, comme health) du périphérique. En cas de situation alarmante le logiciel expédiera un courriel d'avertissement.

Placer dans le fichier /etc/default/smartmontools:


start_smartd=yes
smartd_opts="--interval=3600"

Afin que l'interrogation requise soit menée une fois par heure (3600 secondes).

Circuits: lm-sensors

Non installé car aucun des paramètres ici utiles mesurés (température) ne nous apporte d'information utile.

Configuration

Installer grâce à l'interface Dedibox.

J'emploie Debian Sarge (paquets issus de stable et de testing) mais le gros du présent est indépendant de la distribution Linux.

Configuration logicielle: gestion d'/etc/

Objectif: se préparer à conserver le contenu du répertoire '/etc/' afin de réinstaller rapidement une nouvelle machine.

Pré-requis: être connecté en tant que root à la Dedibox.

Moyen: création d'un fichier servant de balise temporelle.

Actions

Invoquer, en tant que root, touch /etc/date_fichiers_std

Effet: nous créons ainsi un fichier servant de balise temporelle. Il est vide et la seule information qu'il véhicule est sa date de modification, postérieure à celle de l'installation. Grâce à sa présence la commande find, flanquée des paramètres adéquats et invoquée en tant que root, produira dès lors la liste des fichiers du répertoire '/etc/' créés ou modifiés depuis l'installation, qu'il devient donc facile de sauvegarder. Les fichiers antérieurs (fournis par la distribution et non modifiés) ne seront pas sauvegardés.

Exemple:


# find /etc -type f -newer /etc/date_fichiers_std > /tmp/etc_sauve_listfic
# tar -cvj -T /tmp/etc_sauve_listfic -f ~root/backup_new_etc-`date +%Y%m%d_%H%M%S`.tar.bz

Restauration

Lors d'une restauration on emploiera l'option -p afin de restituer les propriétaires et permissions, ce qui implique ici de l'effectuer en tant que root. Il sera souvent préférable de restaurer dans un répertoire temporaire puis de copier ou adapter les fichiers employés par la machine restaurée:


# id
uid=0(root) gid=0(root) groupes=0(root)
# mkdir -p ~/tmp/etc_restore
# cd ~/tmp/etc_restore
# tar -xpjf ~/backup_new_etc-20060831_131854.tar.bz
 ##Attention: restaurer ainsi toutes les archives, en commençant par la plus ancienne
# diff -r etc/ /etc/

Note: cette méthode peut restaurer des fantômes, fichiers ayant existé et présents dans une ancienne archive mais détruits par la suite, mais cela ne prête guère à conséquence dans le cas d'/etc/.

Connexion à distance: SSH

Objectif: se connecter à la Dedibox grâce à SSH et sans devoir saisir le mot de passe du compte lors de chaque connexion.

Pré-requis: disposer, sur votre machine, d'un client ssh (Debian: paquet nommé 'openssh-client:') et d'une biclé SSH (utiliser pour cela ssh-keygen).

Moyen: sur la Dedibox créer un répertoire '~/.ssh/' et y placer un fichier nommé 'authorized_keys' abritant vos clés publiques SSH.

Actions

Sur votre machine et sous votre compte:


$ cd ~/.ssh
$ cat id_rsa.pub id_dsa.pub > /tmp/mesclessshpub
$ scp /tmp/mesclessshpub sd-Numéro de votre Dedibox.dedibox.fr:

Ajouter à votre fichier '~/.ssh/config':


host d1
hostname Numéro IP de votre Dedibox
user Votre compte utilisateur sur la Dedibox
ForwardAgent no
ForwardX11 no
CompressionLevel 3

Notes:

  • le numéro IP de votre Dedibox est le résultat de la commande host sd-Numéro de votre Dedibox.dedibox.fr (la commande 'host' se trouve dans le paquet Debian éponyme)
  • si vous souhaitez utiliser des clients ("programmes") X Window animés par votre Dedibox remplacez ForwardX11 no par ForwardX11 yes
  • si vous disposez de plusieurs Dedibox la première sera associée à d1, la suivante à d2...

Vous connecter à la Dedibox en invoquant ssh d1. Fournir le mot de passe de votre compte sur la Debibox, vous devez alors y être connecté afin d'y mener les opérations suivantes:


$ mkdir -m chmod g=,o= .ssh
$ mv ../authorized_keys .
$ chmod o= authorized_keys

Afin d'en bénéficier également pour le compte root (il sera dès lors possible de se connecter directement en tant que root) on pourra se connecter à la Dedibox en tant que root puis invoquer:


# cd ~root
# cp -a ~/.ssh .
# chown -Rv root.root .

Test: invoquer, sur votre machine locale, ssh d1 doit sans autre saisie ouvrir une session interactive ("shell", dit "ligne de commande") sur la Dedibox. Invoquer ssh root@d1 doit sans autre saisie y ouvrir une session interactive root. En cas d'embarras diagnostiquer en utilisant le paramètre '-v' de ssh et lisant les logs (en particulier '/var/log/auth') de la Dedibox. Pour obtenir la liste des fichiers de logs modifiés durant les 3 dernières minutes invoquer en tant que root: find /var/log -type f -mmin -3

Effet: les commandes ssh et scp deviennent plus agréables à employer.

Amélioration possible: un client ssh 4.2 offre moyen d'accélérer les connexions multiples, par un multiplexage configuré par son paramètre ControlMaster. Pour cela placer dans la section Host * du fichier '~/.ssh/config' de la machine locale:


ControlMaster auto
ControlPath ~/tmp/ssh/master-%r@%h:%p

Passage en mode root: sudo

Objectif: disposer d'un moyen non contraignant mais sûr d'employer la machine sous compte root.

Pré-requis: être connecté à la Dedibox.

Moyen: nous emploierons le programme sudo, grâce auquel les utilisateurs habilités peuvent invoquer des commandes sous compte root.

Actions


# apt-get update
# apt-get install sudo

Puis éditer le fichier /etc/sudoers et y ajouter (à la fin) une ligne:
Votre compte utilisateur sur la Dedibox ALL=(ALL) NOPASSWD: ALL

Test: connecté sur la Dedibox sous votre compte utilisateur, la commande sudo id doit produire un message commençant par uid=0(root).

Effet: dans un shell utilisateur sur la Dedibox il suffira de préfixer n'importe quelle commande de la mention 'sudo ' pour l'invoquer comme si root l'avait fait. Pour obtenir un shell root: sudo -s.

Shell root via sudo

L'utilisation de 'sudo bash' n'instaure pas les variables d'environnement de login de root. HOME, par exemple, demeure celle de l'utilisateur. Par conséquent nous ouvrons un shell root par sudo -s puis "sourçons" un fichier '~/bin/root_env' contenant ce qui nous semble adéquat:


. /etc/environment
export PS1='\u@\h:\w \$ '
export HOME=~root
umask 027

Utilisation (pour "passer root"):


$ sudo -s
# . bin/root_env

Shell agréable: environnement

Objectif: disposer d'un shell agréable.

Pré-requis:

Moyen: configuration de bash.

Actions

Dans '/etc/bash.bashrc' décommenter les 3 lignes suivant le commentaire enable bash completion in interactive shells, afin d'activer la fonction de complètement de bash.

Remplacer le contenu du fichier '/etc/environment' par:


LANGUAGE="fr_FR:fr:en_GB:en"
LANG=fr_FR@euro

http_proxy=http://proxy.free.fr:3128
ftp_proxy=$http_proxy
HTTP_PROXY=$http_proxy
HTTPS_PROXY=$http_proxy
FTP_PROXY=$http_proxy
ALL_PROXY=$http_proxy
wais_proxy=$http_proxy
no_proxy=localhost
LESSCHARSET=latin1

Ajouter à la fin de '/etc/bash.bashrc' les lignes:


shopt -s cdspell
shopt -s extglob
PS1='\u@\h:\w \$ '
alias ll='ls -NlF --color=auto'
alias md='mkdir'
alias rd='rmdir'
alias hist='history'
alias ls='ls -F --color=auto'
alias j="jobs -l"
alias a="/usr/bin/emacsclient"
alias unsetenv=unset

Ajouter à la fin du fichier '~/.bashrc' de chaque home d'utilisateur une ligne:

[ -f /etc/bash.bashrc ] && . /etc/bash.bashrc

Test: se déloger puis reloger.

Effet: un shell plus ergonomique.

Horloge exacte: NTP

Objectif: s'assurer que l'horloge de la Dedibox abrite toujours une valeur correcte.

Pré-requis:

Moyen: installation et paramètrage d'un serveur NTP.

Actions

Invoquer:


# apt-get install ntpdate ntp-simple
# ntpdate rdate.dedibox.com

La première commande installe les logiciels nécessaires. La deuxième synchronise l'horloge locale avec celle d'un serveur de temps distant. La commande "date" doit dès lors fournir des informations correctes.

Il nous faut à présent paramétrer le logiciel serveur grâce auquel l'horloge sera toujours maintenue aussi exacte que possible. Certains se contentent d'une invocation périodique de ntpdate mais nous préférons employer le démon qui n'effectue pas, à tout le moins dans des conditions normales, de mise-à-l'heure violente produisant un saut dans le temps dangereux car certains logiciels les tolèrent mal, surtout vers le passé. Ce risque est accru par la piètre qualité de l'horloge interne de la Dedibox, qui dérive vite.

Invoquer tout d'abord tzselect afin de spécifier que l'heure locale (fuseau horaire) est Europe/Paris.

Éditer le fichier '/etc/ntp.conf' afin d'y commenter la ligne server pool.ntp.org (placer un caractère dièse en début de ligne) et placer ces lignes juste au-dessous:


server 0.fr.pool.ntp.org iburst
server ntp1.dedibox.fr
server ntp2.dedibox.fr

Vérifier que le fichier /etc/default/ntp contient une ligne "NTPD_OPTS='-g'"

Lancer le service: /etc/init.d/ntp-server start

Test: après quelques minutes la commande ntpq -p doit montrer que la Dedibox est connectée à au moins un serveur de temps.

Effet: la Dedibox est à l'heure et le restera.

Amélioration possible: s'entendre avec d'autres locataires de Dedibox de sorte qu'elles se servent (NTP) réciproquement, afin d'améliorer la précision (machines plus proches, donc moindres variations de la latence réseau) sans grever le réseau (faible distance parcourue par les paquets). Merci de m'écrire si intéressé.

Amélioration de la sûreté par ajout, dans le fichier 'ntp.conf':


#par défaut: rien!
restrict default kod notrap nomodify nopeer noquery notrap ignore notrust

#pour chaque serveur:
restrict IPDuServeur mask 255.255.255.0 nomodify

Puis activation de l'authentification. Note: cela contraint à ne plus employer que des serveurs prédéterminés, donc contraint à supprimer la ligne server 0.fr.pool.ntp.org iburst du fichier de configuration car il s'agit un tourniquet DNS (nom associé à une série de numéros IP, tour-à-tour employé. Pour comprendre invoquer plusieurs fois consécutivement host 0.fr.pool.ntp.org).

Amélioration des performances (au prix des statistiques) possible en écartant, dans le fichier 'ntp.conf', les directives relatives à la collecte de traces d'évènements et à la préservation de statistiques:


#statistics loopstats peerstats clockstats
#filegen loopstats file loopstats type day enable
#filegen peerstats file peerstats type day enable
#filegen clockstats file clockstats type day enable

Sécurité réseau: filtre de paquets

Objectif: interdire tout échange de paquet IP non explicitement autorisé

Pré-requis:

Moyen: iptables, commande Linux de gestion du filtre de paquets (logiciel d'analyse des paquets réseau capable de les gérer)

Actions

En tant que root, sur la Dedibox, créer un script de configuration d'iptables nommé 'fw_d1' et placé dans le répertoire '/etc/' de la Dedibox.

Ci-après la valeur adéquate du paramètre AdressIPLocale est l'adresse IP d'une machine habilitée à échanger des paquets réseau avec la Dedibox. Y placer tout d'abord l'adresse Internet de la machine locale (celle grâce à laquelle vous vous connectez à la Dedibox), que vous obtiendrez par exemple en vous connectant, grâce à un navigateur web, à http://www.whatsmyip.org/more puis en lisant la cellule libellée "Your Internal (LAN) IP".

ATTENTION:

  • ne PAS invoquer ce script avant d'y placer au moins une adresse IP de machine habilitée à se connecter car cela rendrait la Dedibox inaccessible via le réseau, ce qui figera la session SSH et contraindra à un réamorçage (reboot) logiciel effectué grâce au menu "Redémarrage de la dedibox" de la console Dedibox.
  • les lignes précédées d'un caractère dièse (#) sont commentées

#! /bin/bash

#la commande suivante rend le filtrage de paquets IP inopérant (DANGER! Bouclier abaissé!):
# iptables -F;iptables -P INPUT ACCEPT;iptables -P OUTPUT ACCEPT

#les commandes suivantes révèlent (dans logs) les paquets rejetés
#À n'utiliser que durant debug du firewall (afin de vérifier qu'il ne
#filtre pas de trafic justifié) car cela encombre les logs, après restauration
#du firewall et sans utiliser 'iptables' pour -A (append,
#ajouter) aux chaînes concernées.
#Pour l'annuler relancer le présent script
# iptables -A INPUT -j LOG --log-level info --log-prefix "iptables reject "
# iptables -A OUTPUT -j LOG --log-level info --log-prefix "iptables reject "
#Traces: tail -f /var/log/messages|grep 'iptables reject'

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -F

iptables -X

iptables -A INPUT -m state --state INVALID -j DROP

#loopback
iptables -A INPUT -i lo -s 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -o lo -d 127.0.0.0/8 -j ACCEPT
#ICMP
iptables -A INPUT -p icmp -m state --state INVALID -j DROP
iptables -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#"stateful": les sessions TCP établies perdurent
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#SSH entrant
iptables -A INPUT -i eth0 -p tcp --destination-port 22 -j ACCEPT
#Interdit le matraquage de notre serveur SSH
iptables -N sshflood
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW \
-m recent --update --seconds 60 --hitcount 4 --name DEFAULT --rsource -j sshflood
iptables -A sshflood -j LOG --log-prefix "sshflood: "
iptables -A sshflood -j DROP
#traceroute
iptables -A OUTPUT -p udp --sport 32769:65535 --dport 33434:33523 -j ACCEPT
 
#DNS
iptables -I INPUT -i eth0 -p udp -s 88.191.0.0/16 --source-port 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -d 88.191.0.0/16 --destination-port 53 -j ACCEPT
#Notes:
#l'adresse masquée doit correspondre au contenu de /etc/resolv.conf
#seul UDP est ici employé

#NTP
iptables -A INPUT -p udp --dport 123 -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT

#SMTP sortant
#Attention: votre MTA doit être configuré de sorte qu'il livre le courrier
#sortant à smtp.free.fr qui sera donc le relayhost (de Postfix) ou le smarthost
#(de sendmail)
#iptables -A OUTPUT -o eth0 -d 88.191.254.8 -p tcp --destination-port 25 -j ACCEPT
#iptables -A OUTPUT -o eth0 -d 88.191.254.9 -p tcp --destination-port 25 -j ACCEPT

#SMTP sortant, mails directement expédiés à la machine destinatrice (MX)
iptables -A OUTPUT -o eth0 -p tcp --destination-port 25 -j ACCEPT

#SMTP entrant (les MX gérés par Dedibox)
iptables -A INPUT -i eth0 -s 88.191.254.8 -p tcp --destination-port 25 -j ACCEPT
iptables -A INPUT -i eth0 -s 88.191.254.9 -p tcp --destination-port 25 -j ACCEPT 

#ou bien: SMTP entrant, par toute machine tierce (dangereux)
#iptables -A INPUT -i eth0 -p tcp --destination-port 25 -j ACCEPT
 
#Proxy Web (Free)
iptables -A OUTPUT -o eth0 -p tcp -d proxy.free.fr/16 \
--destination-port 3128 -j ACCEPT
#Note: l'adresse IP doit correspondre à celle du proxy Web déclaré dans /etc/environment

#Service de sauvegarde Dedibox
iptables -A OUTPUT -o eth0 -p tcp -d dedibackup.dedibox.fr \
-m multiport --destination-port ftp-data,ftp -j ACCEPT
 
#ouverture d'un port TCP
#iptables -A INPUT -i eth0 -p tcp --destination-port 80 -j ACCEPT

#Accès illimité, de votre adresse sûre (domicile?). DANGER! (knock?)
iptables -A INPUT -i eth0 -s AdresseIPLocale -j ACCEPT
iptables -A OUTPUT -o eth0 -d AdresseIPLocale -j ACCEPT
#Si plusieurs machines accèderont à la Dedibox chacune d'elles sera
#déclarée par une copie des deux précédentes lignes, où
#AdresseIPLocale sera remplacé par son adresse IP.


Lire les commentaires, amender le script (éléments en bleu), en tester les composantes en invoquant directement 'iptables' sur la ligne de commande (prendre garde à ne pas s'"enfermer à l'extérieur"!).

Puis invoquer ce script afin de mettre en place les règles iptables. Si la session SSH se bloque... réamorcer la Dedibox (logiciel) et corriger le script puis réessayer.

Modifier le fichier 'interfaces' en y ajoutant la ligne ci-après graissée:


iface eth0 inet static
        pre-up pre-up /etc/fw_d1 || false

Attention: si le script '/etc/fw_d1' est déficient le firewall ne fonctionnera pas et s'il l'est au point de renvoyer un code d'erreur l'interface réseau eth0 ne sera pas établie, interdisant tout accès à votre Dedibox sur laquelle vous devrez réinstaller le système d'exploitation.

Cas de FTP

Sur la Dedibox il faudra, avant d'employer un client FTP, invoquer sudo modprobe ip_conntrack_ftp.

Pour s'en dispenser, par exemple si des programmes ou des utilisateurs non habilitables sudo doivent employer FTP, placer une ligne ip_conntrack_ftp dans '/etc/modules' ou bien compiler les IPtables directement dans le noyau, plutôt qu'en tant que modules.

Priorités des flux (QoS)


#iptables -t mangle -A OUTPUT -p tcp -m multiport \
   --dport 22,53,80,123,389,443,11211,3128 \
       -j TOS --set-tos Minimize-Delay
iptables -t mangle -A OUTPUT -p udp \
       -j TOS --set-tos Minimize-Delay


Accès au serveur Web

Pour accéder via l'Internet au serveur Web animé par la Dedibox il conviendra de configurer le navigateur de sorte qu'il n'emploie pas le proxy habituel.

Squid côté client

Voici les règles destinées au 'squid.conf' (section des ACL) de votre site client, le contraignant à accéder directement à la Dedibox (sans employer ses mandataires pairs, si la configuration du firewall de la Dedibox ne les autorise pas à y accéder), donc vous affranchissant d'une configuration de tous vos logiciels clients Web.


acl dedibox1 dst Numéro IP de votre Dedibox

always_direct allow dedibox1
never_direct deny dedibox1
cache_peer_access localhost allow dedibox1

Test: réamorcer la Dedibox, invoquer iptables -L pour vérifier les règles iptables

Amélioration possible:

Effet: les règles de filtrage de paquets IP (firewall) sont en place. Ne pas oublier cela, car la machine Dedibox se trouve ainsi incapable d'interagir avec certaines machines ou par certains protocoles.

Configuration logicielle: préservation de la liste des .deb

Objectif: préserver la liste des paquets Debian installés

Pré-requis: étapes précédentes

Actions

Placer dans '/etc/cron.daily' un nouveau script contenant:


#! /bin/sh

apt-show-versions -b > /etc/paquets_debian.txt

La liste des paquets Debian installés se trouvera, quotidiennement mise à jour, dans le fichier '/etc/paquets_debian.txt'.

Préservation: sauvegarde de fichiers

Dedibox propose une approche.

Objectif: réduire le risque de perte de données

Pré-requis: étapes précédentes

Dirvish et rdiff-backup

Nous sauvegarderons sur une autre machine et emploierons pour cela les programmes:

Dirvish 
qui sauvegarde en créant une copie strictement identique en optimisant:
  • lors du transfert entre la Dedibox et la machine de sauvegarde (effectué par le programme rsync)
  • durant le stockage, en utilisant des liens durs (commande ln) donc en ne stockant chaque fichier qu'une seule fois sur la machine de sauvegarde tout en produisant des jeux de sauvegarde immédiatement exploitables (par copies de fichiers)
rdiff-backup 
qui fonctionne de façon semblable et produit des jeux de sauvegarde plus compacts mais non directement exploitables (seul rdiff-backup peut y accéder).

Des paquets Debian des deux logiciels existent: les installer (apt-get update ; apt-get install dirvish rdiff-backup).

Dresser liste des noms des répertoires de la Dedibox qui devront être sauvegardés. Associer chacun d'eux à un nom logique, selon une convention arbitraire mais mnémotechnique. Exemple: '/var/www/' sera associé au nom logique www. Le choix du nom logique est réellement arbitraire, '/var/www/' pourrait être associé au nom logique webdata, toutefois un nom raisonnablement court et dépourvu de caractère accentué ou d'espacement est recommandé car il servira à nommer un répertoire.

Nous recommandons de sauvegarder /etc/ ainsi que tous vos répertoires de données.

Créer, sur une autre machine constamment connectée à l'Internet et elle-même périodiquement sauvegardée sur support amovible, un répertoire qui abritera toutes les sauvegardes effectuées par Dirvish. C'est ce que l'auteur de ce logiciel appelle la bank. Exemple: /home/nat/data/sauvegarde/dirvish/

Dans la bank Dirvish créer un répertoire réservé aux données de la Dedibox considérée. Exemple: '/home/nat/data/sauvegarde/dirvish/sd-2617.dedibox.fr/'. Il sera possible d'en créer autant que nécessaire.

Sous ce répertoire créer un répertoire par nom logique. Les sauvegardes du répertoire correspondant s'y trouveront et l'auteur de Dirvish l'appelle vault (chambre forte). Voici deux exemples: /home/nat/data/sauvegarde/dirvish/sd-2617.dedibox.fr/www/, /home/nat/data/sauvegarde/dirvish/sd-2617.dedibox.fr/mysql/.

Note: chaque nom logique est associé à l'espace de noms d'une seule Dedibox sauvegardée, il est donc possible de les réutiliser. Exemple: /home/nat/data/sauvegarde/dirvish/sd-2617.dedibox.fr/mysql/ coexistera avec /home/nat/data/sauvegarde/dirvish/monautremachine.com/mysql/

Pour configurer Dirvish modifier le fichier '/etc/dirvish/master.conf' de sorte qu'il contienne:

bank:
   NomDuRépertoireDeLaBank
xdev: 0
numeric-ids: 1
permissions: 1
image-default: %Y%m%d-%H:%M
exclude:
   lost+found/
   .nfs*
   .PasDeSauvegarde
zxfer: 1
log: bzip2
index: none
image-perm: 0700
Runall:
   NomIPDedibox/NomRépertoireUn HeureDeDébutDeSauvegarde
   NomIPDedibox/NomRépertoireUn AutreHeureDeDébutDeSauvegarde
expire-default: +1 year
expire-rule:
#       MIN HR    DOM MON       DOW  STRFTIME_FMT
        *   *     *   *         1    +3 months
        *   10-20 *   *         *    +4 days

Où:

  • NomDuRépertoireDeLaBank est le nom
  • NomIPDedibox/NomRépertoireUn est le nom IP de la Dedibox à sauvegarder suivi d'un nom logique. C'est le nom d'un répertoire de la bank où se trouveront des sauvegardes du répertoire de la Dedibox correspondant au nom logique fourni. Exemple: sd-2617.dedibox.fr/www
  • NomIPDedibox/NomRépertoireDeux est un autre répertoire réservé aux sauvegardes d'un répertoire d'une Dedibox donnée. Exemple: /home/nat/data/sauvegarde/dirvish/sd-2617.dedibox.fr/mysql/.
  • HeureDeDébutDeSauvegarde est l'heure après laquelle la sauvegarde peut commencer

Dans chaque répertoire correspondant à un nom logique créer un répertoire nommé dirvish/. Exemple: /home/nat/data/sauvegarde/dirvish/sd-2617.dedibox.fr/mysql/dirvish/. Créer dans chacun de ces répertoires un fichier nommé default.conf et y placer:

client: NomIPDedibox
tree: NomLogique

Exemple (cas du répertoire /etc/ de notre Dedibox):

client: sd-2617.dedibox.fr
tree: /etc

Amorcer chaque sauvegarde en invoquant, en tant que root, dirvish --vault machine/vault --init

Le paquet Debian de Dirvish abrite le fichier '/etc/cron.d/dirvish', qui invoquera périodiquement Dirvish. Tout ne fonctionnera que si la machine de sauvegarde est de temps à autres suffisamment allumée et connectée à l'Internet.

Si les sauvegardes encombrent on modifiera le paramétrage de l'expiration.

En ce qui concerne rdiff-backup il convient de créer des répertoires d'accueil (par exemple ~/data/sauvegarde/rdiff-backup/sd-2617.dedibox.fr/etc/) puis un script périodiquement invoqué par cron. En voici un exemple:

rdiff-backup root@d1::/etc ~/data/sauvegarde/rdiff-backup/sd-2617.dedibox.fr/etc
rdiff-backup root@d1::/var/www ~/data/sauvegarde/rdiff-backup/sd-2617.dedibox.fr/var/www

Sauvegarde d'un jeu de fichiers cohérent

Certaines sauvegardes de fichiers ne doivent commencer qu'après avoir obtenu de l'application qui les gère la production d'une version cohérente. C'est par exemple le cas des bases de données, dont on ne souhaite pas sauvegarder une version en cours de modification.

Dirvish peut requérir cela. Voici, par exemple, un fichier dirvish.conf paramétrant une sauvegarde de bases de données MySQL:

client: sd-2617.dedibox.fr
tree: /var/mysql_backup
pre-client: mysqlhotcopy --noindices --regexp /./././ --allowold /var/mysql_backup

Dans le cas de rdiff-backup il faudra invoquer la commande adéquate juste avant la sauvegarde.

Procédure: paramétrage visant à ajouter un répertoire à sauvegarder

Dirvish:

  • s'il s'agit d'une nouvelle machine créer un répertoire à son nom IP complet (nom de machine et de domaine) sous le répertoire de la bank Dirvish. Le nom du répertoire de la bank se trouve dans /etc/dirvish/master.conf (paramètre bank).
  • décider de son nom logique (qui ne doit pas déjà exister, pour la machine à sauvegarder considérée)
  • créer un répertoire (nommé grâce au nom logique) sous le répertoire (dans la bank) de la machine sauvegardée
  • dans '/etc/dirvish/master.conf' ajouter une ligne à la section Runall (s'inspirer de l'existant)
  • sous ce dernier répertoire créer un répertoire nommé dirvish/ et y placer un fichier nommé default.conf puis amorcer (lire ci-dessus)

rdiff-backup: créer les répertoires, mettre au point une commande en l'invoquant et en testant le résultat, puis la placer dans le script.

Saturation d'un espace de sauvegarde sous quota

Le service de sauvegarde dont vous disposez n'offre pas un espace de stockage infini. Vous pouvez décider d'y copier vos plus récents fichiers de sauvegarde ou de le saturer, de sorte qu'il abrite toujours autant de données que possible.

Un utilitaire nommé packit sera utile. Le placer, par exemple, dans le répertoire '/usr/local/bin/'. Il est encodé à la mode MS-Windows (retours chariots...), le convertir à l'encodage Unix en invoquant: dos2unix packit-0.2.pl ou bien, ici équivalent, par: tr -d '\r' < packit-0.2.pl > pkkt ; mv pkkt packit-0.2.pl. Puis le rendre exécutable par chmod a+rx packit-0.2.pl. Invoquer packit -h afin d'obtenir de l'aide. Des programmes équivalents plus ergonomiques existent (non testés): File Sift (Python) et File Grouper (Java).

Sauvegarde grâce au service Dedibox (FTP)

Accéder (Web) à la console Dedibox, cliquer (à gauche) sur Service de sauvegarde (beta) puis configurer le service. ftpsync automatisera les transferts.

Test: ne pas négliger de chiffrer, par exemple grâce à GnuPG, les fichier de sauvegarde et de périodiquement tester leur restauration.

Amélioration possible: s'entendre avec un autre locataire de Dedibox de sorte qu'elles se sauvegardent réciproquement. Exemple: chaque Dedibox réservera un répertoire (sous quota, accessible via un rsyncd) à l'autre. Merci de m'écrire si intéressé.

Test

Test: explorer (cd, ls...), en tant que root, le vault de Dirvish et jouer avec l'option -verify-at-time de rdiff-backup (ou tenter une restauration).

Effet

Effet: risque de perte de donnée quasi nul.

Liens externes

Assistance officielle Dedibox