Sauvegarde Rsync sur un serveur kimsufi

Avant de poser une question, voyez si on n'y a pas déjà répondu pour vous !

Modérateur : Mods GNU/Linux

Avatar de l’utilisateur
Malekal_morte
Site Admin
Site Admin
Messages : 86890
Inscription : 10 sept. 2005 13:57
Contact :

Sauvegarde Rsync sur un serveur kimsufi

Message par Malekal_morte » 17 mai 2014 20:43

L'autre jour mon disque dur a presque rendu l'âme, clapclapclap et gros plantage...
Du coup, je compte me mettre en place des sauvegardes par rsync sur un kimsufi qui traîne...

Rsync permet la synchronisation de données, c'est à dire qu'il va faire en sorte qu'un dossier locale d'une machine soit identique à un dossier distant.
Le premier rsync va donc envoyer toutes les données, les rsync suivants vont ajouter, modifier ou supprimer les fichiers qui ont été touchés sur le dossier local.
Il faut donc mettre en place des sauvegardes rotatives du dossier sur le serveur de synchronisation notamment pour la récupération de fichiers supprimés.

Cette page vous explique comment ceci en place ; notamment dans le cas où le poste client, comme moi, a une IP dynamique.

Pour les paranos, il est possible de chiffrer les fichiers avec rsyncrypto.
Ceci ne sera pas abordé dans cette page.


Installer Rsync

Partie serveur, cela ne devrait pas poser de problèmes, il y a pas mal de tuto sur le net.

Rsync : Partie Serveur

On créé un user sans mot de passe et avec lequel on ne peux pas se conencter :
adduser sauvegarde --shell /bin/false --disabled-password
Dans mon cas les rsync iront dans le dossier /home
En effet, sur les machines OVH, cette partition a la taille maximale.

Ensuite créez les dossiers qui accueilleront les rsync.
Tous les dossiers doivent contenir un dossier current.
Par exemple dans mon cas, je souhaite sauvegarder mon home.

Je vais créer un dossier /home/sauvegarde/home/current
Par exemple, si vous souhaitez sauvegarder des mp3, vous pouvez créez un dossier /home/sauvegarde/mp3/current

Mettre bien les droits pour l'utilisateur sauvegarde
chown -R sauvegarde.sauvegarde /home/sauvegarde/
chmod 770 -R /home/sauvegarde/
On intalle rsync :
aptitude install rsync
Editez le fichier /etc/default/rsync afin que le daemon se lance,
mettre RSYNC_ENABLE à true

Lancez le daemon :
/etc/init.d/rsync start
Starting rsync daemon: rsync!
Vérifiez que ce dernier est bien lancé et écoute les ports :
netstat -lpn|grep -i rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 5308/rsync
tcp6 0 0 :::873 :::* LISTEN 5308/rsync
Créez le fichier /etc/rsyncd.conf

Voici un exemple, on configue à l'intérieur les dossiers des rsync.
host allow= permet de filtrer l'accès par IP.
Dans le cas d'une ip dynamique mettre *
max connections = 2
log file = /var/log/rsync.log
timeout = 300

auth users = sauvegarde
secrets file = /etc/rsyncd.secrets

uid = sauvegarde
gid = sauvegarde

[home]
path = /home/sauvegarde/home/current/
hosts allow=* <== si vous avez une ip fixe pour le client, la mettre à la place de *
hosts deny = *
comment = svg ppbo
read only = false
Créez ensuite un fichier /etc/rsyncd.secrets
Ce dernier va contenir le mot de passe de l'utilisateur sauvegarde.
Le contenu est de la forme :
sauvegarde:monmotdepasse
On met les droits restrictifs sur les fichiers :
chown root.root /etc/rsyncd.*
chmod 700 /etc/rsyncd.*

Un peu de sécurité...

Voila le daemon rsync est installé et tourne sur le serveur.
il faut filtrer l'accès, par exemple, ne serait que dans le cas d'une vulnérabilité 0-day.

Si les clients ont des IPs fixes, c'est très simple, il suffit de créer des règles iptables en autorisant ces Ips.
Les policies étants certainement en DROP.
/sbin/iptables -A INPUT -s {IP} -p tcp -m state --state NEW,ESTABLISHED,RELATED --dport 873 -j ACCEPT
/sbin/iptables -A OUTPUT -d {IP} -p tcp -m state --state ESTABLISHED,RELATED --sport 873 -j ACCEPT
Dans mon cas, ce n'est pas possible, comme je l'ai déjà dit, puisque le client a une ip dynamique.
J'ai donc opté dans l'utilisation de knockd.
knockd permet de créer des règles iptables à la volée après une séquence de requêtes prédéfinie sur des ports.
Un peu comme Gandalf pour ouvrir la porte de la mine de la Moria (ou pour les plus anciens, alibaba et sa grotte :p).

A faire sur le poste client et serveur, installer knockd :
aptitude install knockd
Sur le serveur, knockd doit tourner en daemon, pour cela, on modifie /etc/default/knockd :
START_KNOCKD=1
ensuite on modifie /etc/knockd.conf en créant sa séquence, exemple :
(attention, bien mettre -I INPUT pour l'open)
[options]
UseSyslog

[openrsync]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 873 -j ACCEPT
tcpflags = syn

[closerync]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 873 -j ACCEPT
tcpflags = syn
Ensuite, on créé une règle iptables qui DROP les connexions sur le service rsync (ou on met les policies en DROP).
Celle-ci peux être ajouté dans /etc/rc.local ou incorporé dans un script firewall maison.
/sbin/iptables -A INPUT -p tcp --dport 873 -j DROP
Lorsque l'on fait toctoc depuis le client, une règle Iptables se créée avant le DROP, ce qui permet d'être prise en compte :
iptables -L -n -v
Chain INPUT (policy ACCEPT 468 packets, 71601 bytes)
pkts bytes target prot opt in out source destination
1131 1627K ACCEPT tcp -- * * 83.114.53.75 0.0.0.0/0 tcp dpt:873
32 1920 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:873
puis le client lance la séquence pour supprimer la règle.

Autre élément à prendre en compte, rsync écoute en IPv6, vous pouvez interdire les connexions ipv6 entièrement comme ceci :
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP
ou désactiver l'IPv6 sur la machine - exemple : https://wiki.debian.org/DebianIPv6


Rsync : Partie Cliente

Nous avons terminé avec la partie serveur, passons au client.


GNU/Linux

Installez Rsync :
aptitude install rsync
Voici un script qui permet de synchroniser un dossier.
Vous pouvez partir de ce dernier et le modifier comme vous le souhaitez.

Ce script va vous envoyer un mail pour chaque rsync et en cas d'erreur. Réglez l'adresse email.
Vous pouvez limiter la vitesse afin de prévenir la bande passante (variable limit)
Dans export mettre le mot de passe que vous avez configuré pour l'utilisateur sauvegarde.

Enfin et surtout, réglez les ports knock pour l'ouverture et fermeture.
#!/bin/bash
mail="adresse@domain.tld"
host="host.kimsufi.com"
limit=100
export RSYNC_PASSWORD=asfDK5ds_*

knock -v $host port1 port2 port3

if [ -f /tmp/rsync.pid ] ;
then
echo "une synchronisation est deja en cours... annulation"
echo "Une synchronisation est deja en cours... la synchro a ete annulee" > /tmp/rsync_mail.txt
mail -s "synchro `hostname` - Probleme!" $mail < /tmp/rsync_mail.txt
rm -f /tmp/rsync_mail.txt
else
touch /tmp/rsync.pid

echo `date` -- Synchro de `hostname` sur $home >> /tmp/rsync_mail.txt
echo >> /tmp/rsync_mail.txt
echo >> /tmp/rsync_mail.txt

echo "Synchro home" >> /tmp/rsync_mail.txt
echo >> /tmp/rsync_mail.txt
echo >> /tmp/rsync_mail.txt
rsync -vraz --stats --bwlimit=$limit --delete /home/malekalmorte sauvegarde@$host::home >> /tmp/rsync_mail.txt 2>> /tmp/rsync_mail.txt


if [[ `cat /tmp/rsync_mail.txt` =~ "rsync error" ]]
then
mail -s "synchro `hostname` - ERREUR" $mail < /tmp/rsync_mail.txt
else
mail -s "synchro `hostname`" $mail < /tmp/rsync_mail.txt
fi

rm -f /tmp/rsync_mail.txt
rm -f /tmp/rsync.pid
fi

knock -v $host port1 port2 port3
Le fichier comportant un mot de passe bien mettre des des accès restrictif sur le chemin en question avec un chmod 770
ensuite il suffit de lancer le script, le rsync devrait se faire.

Il faudra ajouter une entrée cron pour lancer le script selon la fréquence des sauvegardes que vous souhaitez mettre en place.
Voir Tutorial Cron : https://www.malekal.com/2010/11/12/tutor ... -gnulinux/

Windows

Cette partie sera survolée car je n'ai pas trouvé malheureusement de client sympa que l'on puisse lancer en ligne de commandes pour knock.
Deux projets pour des clients sous Windows :
http://sourceforge.net/projects/knockknock/
http://sourceforge.net/projects/winknocks/

En ce qui concerne la synchronisation, vous pouvez utiliser DeltaCopy ou Syncrify
Cela fonctionne bien.

Avec DeltaCopy, on lance le client et on configure celui-ci, n'oubliez pas de mettre les infos de connexion, mot de passe dans l'onglet Authentification.

Image

Un lancement manuelle, ça fonctionne.
Image

Il ne reste plus qu'à créer une tâche planifiée qui va lancer le rsync à au moment souhaité.
Image


Sauvegarde rotative

Enfin vous devez mettre en place des sauvegardes rotatives, cette partie est très vivement conseillé comme expliqué dans l'introduction.

Vous pouvez vous inspirer de ce script.
Ce dernier va énumérer les dossiers current du fichier rsyncd.conf
Il va faire une copie des dossiers current afin d'obtenir une sauvegarde statique à un instant T.
Par exemple, si vous souhaitez donc avoir un retour sur les 3 dernires jours, vous devez mettre en place un cron qui va lancer le script une fois par jour.
#!/bin/bash
DIR=($(ls -d $1/*))
KEEP=2
DATE=`date --date=yesterday "+%Y-%m-%d"`
MAIL="mail@domain.com"
REP="/home/sauvegarde/"

echo "$DATE - Lancement des sauvegardes incrementales....." > /tmp/rapport_incr.txt
echo >> /tmp/rapport_incr.txt

echo >> /tmp/rapport_incr.txt
echo "################### SAVE-ROTATE DU $DATE ####################"
echo

for line in `cat /etc/rsyncd.conf |grep current| grep -Eo "\/.*current"|sed 's/current//g'`
do
# arborescence :
# /home/backup/xxxx/xx-xx-xx
# /home/backup/xxxx/current

# calcule date du jour
echo -n "Sauvegarde du dossier "
echo -n `echo $line | cut -d / -f 5`
echo " en cours..."

echo "Sauvegarde incrementale de $line vers $line/$DATE" >> /tmp/rapport_incr.txt
# supprime les vieilles sauvegardes
ls -d $line/2* | sort | head --lines=-$KEEP | xargs rm -rf

# créé le répertoire pour les backups de la veille s'il n'existe pas
if [ -d $DATE ]; then
echo "Erreur: le dossier de sauvegarde existe deja" >> /tmp/rapport_incr.txt
echo
continue
fi
mkdir $line/$DATE >> /tmp/rapport_incr.txt 2>> /tmp/rapport_incr.txt

# copie (hard links) les donné
cp -al $line/current/* $line/$DATE >> /tmp/rapport_incr.txt 2>> /tmp/rapport_incr.txt

echo
echo >> /tmp/rapport_incr.txt
echo >> /tmp/rapport_incr.txt

done

echo "Etat des disques..." >> /tmp/rapport_incr.txt
df -H|grep svgd >> /tmp/rapport_incr.txt

mail -s "Sauvegarde incrementale..." $MAIL < /tmp/rapport_incr.txt
rm -f /tmp/rapport_incr.txt

Conclusion

Voila avec ceci vous devriez ne pas perdre de données :)
Si vous avez des questions, n'hésitez pas à créer un sujet dans la partie Linux du forum.
Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas

Sécuriser son ordinateur (version courte)

Tutoriels Logiciels - Tutoriel Windows - Windows 10

Stop publicités - popups intempestives
supprimer-trojan.com : guide de suppression de malwares

Partagez malekal.com : n'hésitez pas à partager sur Facebook et GooglePlus les articles qui vous plaisent.


Répondre

Revenir vers « Tutoriels et annonces »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités