Backup chiffré avec duplicity sur HubiC

EDIT 24/02/2015 : ‘Il n’est plus nécessaire d’utiliser cloudfiles comme backend pour duplicity. À la place, il faut utiliser un backend spécial hubic intégré à duplicity récemment » voir le commentaire de blankoworld

EDIT 02/2015 : suppression du « DeprecationWarning » dans le log.

EDIT 17/02/2014 : suite à des changements sur Hubic.com, Gu1 à mis à jour python-cloudfiles-hubic. J’ai donc mis à jour mon script en conséquence

Hubic GUI avec duplicityMon ADSL est depuis peut chez OVH. De ce fait je bénéficie d’un compte hubiC avec un espace de stockage d’1To. Quelle aubaine pour des sauvegardes ! Mais bon donner mes mails, mes sites, mes documents administratifs à un tiers… bof bof. Il faudrait un minimum de chiffrage !

Et bien comme disait les autres nuls : « Hassan Cehef c’est possible » avec duplicity et python-cloudfiles-hubic !

python-cloudfiles-hubic est nécessaire car duplicity n’intègre pas nativement le service cloud « HubiC » pour une sombre histoire de protocole d’authentification non standard de la part d’OVH (détail par l’auteur)

Installation

On commence par le plus simple (duplicity) :

aptitude install duplicity

Maintenant python-cloudfiles-hubic :

aptitude install python-setuptools git
cd /usr/src
git clone https://github.com/Gu1/python-cloudfiles-hubic.git
cd python-cloudfiles-hubic
python setup.py  install

Utilisation

Dans vos paramètre sur hubic.com dans votre menu « Vos application » il va falloir ajouter une application :

  • Nom : cequevousvoulez
  • Domaine de redirection : http://localhost/

Quand l’application est créer récupérer le « client id » ainsi que le « client secret » dans l’interface

screenshot.62

Quelques petits tests pour la prise en main :

# Désactiver le bash_history (c'est pénible avec les mots de passes)
unset HISTFILE
# Les variables 
export CLOUDFILES_USERNAME=toto@toujours.lui
export CLOUDFILES_APIKEY=je.vais.pas.vous.donner.le.mot.de.passe.de.toto
# CLOUDFILES_AUTHURL="hubic|client id|client secret|http://localhost/"
export CLOUDFILES_AUTHURL="hubic|api_hubic_XXXX|YYYYY|http://localhost/"
# Sauvegarde
duplicity /root cf+http://default
# Observer l'état
duplicity collection-status cf+http://default
# Liste les fichiers distants 
duplicity list-current-files cf+http://default
# Test la restauration d'un fichier 
duplicity  --file-to-restore .bash_alias cf+http://default /tmp/bash_alias_recup

Rendez-vous ensuite dans votre interface hubiC. Et là normalement il y a plein de fichier duplicity-BLABLA-blabla.bla ! On supprime tout ! (c’était juste pour les tests)

Il ne semble pas possible d’écrire dans un sous répertoire. Mais, comme je l’ai signalé dans mon commentaire, il semble possible d’écrire dans un autre « container » sur hubiC (autre que default). Il ne sera visible qu’après modification de l’URL. Exemple si vous avez écrit dans le conteneur backup rendez vous sur l’URL : https://hubic.com/home/browser/#backup

Le script

Voici mon script :

#!/bin/bash

###################################
## Backup sur HubiC avec duplicity
# Script sous licence BEERWARE
# Version 0.4.1 02/2015
###################################

set -eu

##### Paramètres

# Utilisateur Hubic
HUBICUSER="leuserdevotrehubic"
# Mot de passe HubiC
HUBICPASSWORD="lemotdepassedevotrehubic"
# Application client id Hubic
HUBICAPPID="api_hubic_XXXXX"
# Application client secret Hubic
HUBICAPPSECRET="YYYYYY"
# Application domaine de redirection Hubic
HUBICAPPURLREDIRECT="http://localhost/"
# Liste à sauvegarder (voir le man duplicity avec le filelist)
DUPLICITYFILELIST="/etc/backup-`hostname`.filelist"
# Passphrase pour le chiffrement
PASSPHRASE="VotrePassPhraseDeOufQueYaQueVousEtVousSeulQuiSavez:-p"
# Fréquence des sauvegardes complètes
FULLIFOLDERTHAN="1W"
# Rétention des sauvegardes
RETENTION="2M"
# Log d'erreur
LOGERROR="/var/tmp/backup-hubic-error.log"
# Bin de duplicity
DUPLICITY_BIN="/usr/bin/duplicity"
# Email pour les erreurs (0 pour désactiver)
EMAIL="toto@mondomaine.com"
# Envoyer un rapport par email sur l'état des backup
RAPPORT=1
# Log d'erreur
exec 2> ${LOGERROR}

##### Début du script

function cleanup {
	echo "exit..."
	unset CLOUDFILES_USERNAME
	unset CLOUDFILES_APIKEY
	unset PASSPHRASE
        grep -v "has been deprecated" ${LOGERROR} > ${LOGERROR}.tmp
        mv ${LOGERROR}.tmp ${LOGERROR}
	if [ "`stat --format %s ${LOGERROR}`" != "0" ] && [ "$EMAIL" != "0" ] ; then
		cat ${LOGERROR} | mail -s "$0 - Error" ${EMAIL}
	fi
}
trap cleanup EXIT

# Gentil avec le système
ionice -c3 -p$$ &>/dev/null
renice -n 19 -p $$ &>/dev/null

if ! [ -f ${DUPLICITYFILELIST} ] ; then
	echo "Aucun fichier filelist : ${DUPLICITYFILELIST}"
	exit 1
fi

export CLOUDFILES_USERNAME=${HUBICUSER}
export CLOUDFILES_APIKEY=${HUBICPASSWORD}
export CLOUDFILES_AUTHURL="hubic|${HUBICAPPID}|${HUBICAPPSECRET}|${HUBICAPPURLREDIRECT}"
export PASSPHRASE

# Backup 
${DUPLICITY_BIN} --full-if-older-than ${FULLIFOLDERTHAN} / cf+http://default --include-globbing-filelist ${DUPLICITYFILELIST} --exclude '**'

# Suppression des vieux backups
${DUPLICITY_BIN} remove-older-than ${RETENTION} cf+http://default --force

# Rapport sur le backup
if [ "$RAPPORT" != "0" ] && [ "$EMAIL" != "0" ] ; then
        ${DUPLICITY_BIN} collection-status cf+http://default | mail -s "$0 - collection-status" ${EMAIL}
fi

unset CLOUDFILES_USERNAME
unset CLOUDFILES_APIKEY
unset PASSPHRASE

exit 0

A noter que mes bases de données sont dumpées à plat de façon indépendante du script de backup distant (par mysql_dump.sh)

Exemple de fichier filelist :

/etc
/var/backups/mysql
/var/chroot/bind9/etc/bind
/var/lib/mysql
/var/lib/awstats
/var/lib/mailman
/var/spool/cron
/var/vmail
- /var/www/mercereau.info/wp-content/cache/
- /var/www/default
/var/www
/home
- /root/.cpan
- /root/.cache
- /root/.npm
/root
/opt

Attention : les fichiers et répertoires à exclure doivent apparaître avant l’inclusion d’un répertoire parent. En effet, duplicity s’arrête à la première règle qui matche un chemin donné pour déterminer s’il doit l’inclure ou l’exclure. (sources)

Il n’y a plus qu’a le lancer en tâche cron :

44 4 * * *  /usr/local/bin/backup-to-hubic.sh

Ressources

Formation paille : Maison mûr porteur / Nebraska

Au mois d’août dernier, dans le cadre d’un DIF j’ai suivi une formation chez André de Bouter de (lamaisonenpaille.com) sur les maison en paille de type Nebraska. Formation très intéressante et enrichissante. André, le formateur, est une pointure en construction paille. Il a du recule (depuis 1998) et de multiple expérience à travers le monde…

Au menu de la formation : la paille, les murs, la lisse, les enduits en terre, les ouvertures, la peinture à l’argile, la chaux, les adobes, le torchis, les sols en terre…

Si la technique nebraska ne vous dit rien, je vous suggère cette petite vidéo :

Notes de formations

Je partage mes notes de formation. C’est une prise de note rapide, avec beaucoup de manques, certainement des bêtises :

Mise à jour : A noter une belle contribution de Thierry qui a commenté mes notes de l’époque. Voici son document, lisez le, c’est pertinent !

Conclusion personnelle

La technique du nebraska est d’une fausse simplicité, et les contraintes qu’elle engendre pour de gros bâtis (type maison) la rendent peu viables.

  • Pour protéger la paille de la pluie la toiture aurait besoin d’être mise avant toute chose ce qui est possible en la posant sur de gros poteaux de bois (par exemple).
  • Les façades très exposées à la pluie ont besoin d’un bardage bois (c’est le plus résistant) du coup pourquoi ne pas prendre appui sur celui ci ? Du coup on revient à une ossature bois…

Pour le moment le poteau poutre me semble le plus simple pour bâtir une maison pour moi, les compétences du charpentier sont par contre indispensables mais elles nous permettent :

  • d’être hors d’eau pour les murs en pailles ;
  • d’avoir une continuité possible dans le mur en paille (pour les enduits et les ponts thermiques c’est mieux) – dans le cas ou les poteaux sont à l’intérieur de la maison..
  • de pouvoir envisagé un étage plus facilement ;

Ceci dit, pour réaliser un bâti de ~30 m², je choisirai sans hésiter la technique de la paille porteuse.

Le gros point noir de la construction paille : l’eau.

Ma grosse interrogation : la VMC, André la préconise mais d’autres sons de cloche ont été émis jusqu’à mes oreilles, je reste toujours dubitatif… Je pense passer la tuyauterie pour la VMC sans l’acheter dans un premier temps et effectuer des mesures de contrôle de la qualité de l’air & d’envisager l’achat d’une VMC si besoin…

Mon projet en l’état de mes connaissances

Pour la maison cela sera du poteau poutre accompagné par un charpentier. André nous a livré une bonne technique qui m’a séduit particulièrement : Mettre les poteaux à l’intérieur du bâti & entre le mur de paille et le poteau mettre des panneaux de fibre de bois / liège / fermacell ce qui a pour intérêt de ne pas créer de pont thermique et de pouvoir faire mourir l’enduit sur le panneau de fibres sans être obligé de passer de l’enduit sur le poteau (ce qui ne fonctionne pas). La lisse est solidaire du poteau.

Ce choix ouvre la possibilité de comble aménageable (charpente voir lire « petite botte de paille » p 155) pour de futures chambres pour de futurs enfants.

Du coup ça nous ferait une surface au sol plutôt moyenne ~70m².

La cave est partiellement creusée par l’extraction de la terre nécessaire au enduit / cloisons… cette cave serait sous le garage qui ne serait au début peut être qu’un préau & monté par la suite.

Des cloisons en adobe au RDC donne une bonne isolation acoustique mais lourdes pour l’étage. Le torchis léger banché est donc à envisager pour l’étage.

Évidement tous les murs seront en paille & enduit de terre, avec de la chaux pour l’extérieur. Peut être un bardage pour la face la plus exposée & de toute façon de grands débords de toit.

Comme disant André : « la façade extérieure on la fait pour les voisins… »

Petit bureau en bois de palette

SuiBureau en bois de palettete de mes aventures en palette, cette fois-ci un meuble d’intérieur. A savoir un bureau pour l’ordinateur. Comme vous pouvez le constater ci-contre la simplicité est de rigueur dans la conception (un plateau – 4 pieds). Mais la petite touche fantaisie, qui fait la différence, c’est le « bardage » bois de longueur différente repris sur le plateau du bureau.

J’avais à ma disposition 2 belles palettes d’un bois très clair et pas trop abîmé, parfait pour un intérieur. J’ai commencé par tout démonter puis poncer. C’est le premier meuble en palette que je fais où je suis obligé de démonter toute la palette (faute de place). C’est dommage cela perd de son charme, mais le résultat est plutôt sympa alors…

J’ai commencé par le plateau puis les pieds relier par des travers. J’ai incorporé 2 petits rangements sur les travers du bas (pour le linutop notamment). Le plateau a ensuite été vissé aux pieds.

Le bardage est en deux morceaux et n’est pas fixé au mur (je suis locataire). Une planche horizontale maintient toutes les planches du bardage verticale. La planche horizontale est ensuite simplement glissé entre la traverse et le plateau, l’appui sur le mur suffit à le maintenir.

Fabriquer un canapé de jardin en palette

canape-palette-finAprès mes débuts avec mon petit composteur en palette je me suis lancé dans la fabrication d’un « canapé de jardin » en vue de me faire un salon de jardin avec table basse… (ça sera plus tard)

Le banc de jardin c’est un classique en palette. Beaucoup de modèle ici, ou avec plan. Je m’en suis fortement inspiré, mais avec des nuances. Et pour cause, un ami ayant suivi un de ces plan sur le web, m’a rapporté que la stabilité du banc double n’était pas au rendez-vous (même si le banc supporte 2 personnes assises) « Mon canapé » lui, est très stable, on peut sauter dessus sans le faire bouger d’un brin !

Petit comparatif entre mon modèle et les modèles d’internet :

  • Avantage : Plus solide, prend moins d’espace en profondeur ;
  • Inconvénient : Certainement plus long à fabriquer, plus de visseries, 2 palettes utilisées ;

Oui ça fait plus d’inconvénient que d’avantage tout ça… Maintenant si c’était à refaire pour le même canapé double je resterais sur cette technique. Par contre, pour un fauteuil simple (1 personne) j’utiliserais ce modèle sur plan.

Débuter en bricolage de palette : Un composter

Bricoler en palette c’est donner une seconde vie à un déchet industriel et cela vous permet d’avoir de la matière première gratuite. Partant de là les possibilités n’ont de limites que celles de votre imagination. Voici 2 sites pour vous inspirez (il y en a des flopées d’autres) :

Trouver palette

La palette est juridiquement un « emballage de transport » mais quand elle est sur un trottoir c’est déchet (source) il n’y a donc plus qu’à se pencher. Cependant attention à ne pas prendre des palettes consignées (label UE) sinon ça n’est plus du recyclage…

Vous pouvez donc en trouver partout, le plus sûr c’est de faire le tour des zones industrielles/commerciales.

Démonter les palettes

C’est la partie la moins drôle de l’histoire selon moi, suivant ce que vous voulez faire il va vous falloir découper certaines palettes pour récupérer des planches. C’est un élément important à prendre en considération lors de votre conception (pour les fainéants comme moi : moins de travail possible c’est le mieux)

La première méthode que j’ai trouvée consistait à taper sur les « cubes » reliant les planches :

Cette méthode fonctionne certainement mais arrivé devant mes palettes elle s’avéra impossible à mettre en œuvre : ma palette n’était pas du tout construite de cette façon (les cubes étant remplacés par de larges traverses…)

Les planches des palettes que j’ai récupérées était dans un piteuse état (bien fendu) il m’était compliqué d’utiliser des méthodes d’arrachements (type pied de biche) sans casser la moitié d’entre elles – de plus je me suis aperçu que mes palettes étaient équipées de clous anti-arrachements

J’ai donc imaginé ma méthode qui consiste à percer 2 trous de chaque côté du clou afin d’en retirer doucement la tête en écartant doucement avec un pied de biche. Cela permet de réutiliser les clous sans avoir à les redresser, par contre ça fait de sacrés trous dans les planches ! Mais bon pour un composteur ça ira bien…

J’ai quand même (pour mes prochains bricolages en palette) trouvé une méthode simple qui n’abîme pas les planches mais qui laisse le clou où il est : palette-decoupeet oui Il fallait y penser… C’est rapide et sans surprise !

Le composteur

Comme première expérience, un composteur en palette me paraît être une bonne chose : c’est un cube, donc apriori un truc on ne peut plus simple :

  • Les 2 palettes de côté & la palette du fond n’ont pas subit de démontage  (travail en moins), elles ont par contre été découpées en longueur. Ces palettes ont été choisies car l’intervalle entre les planches était suffisamment grand pour combler avec d’autres planches de palette ;
  • La palette avant comportera une trappe faite de chutes de bois pour alimenter simplement le composteur ;
  • Le toit est fait de planches de palettes démontées (note : une étanchéité à l’eau complète n’est pas souhaitée) Il ne sera pas fixé mais le retour de toiture sera de dimension exacte afin de le faire glisser en force (le poids faisant le reste) ;

A noter que 2 rangs de planches ont été démontés sur chacune des palettes debout afin d’enfouir les traverses dans le sol. Sauf pour la porte de devant qui devra pouvoir se retirer pour qu’à l’occasion on puisse pelleter facilement le composte.

Bon bricolage et n’oublier pas de partager !

WordPress & fail2ban : stopper la brute-force « POST /wp-login.php »

Edit : azerttyu, dans son commentaire signale une solution plus propre (bien que celle-ci fonctionne)

WordPress étant très populaire il est (malheureusement) de fait très attaqué.. La principale (hors SPAM sur les commentaires) est faite par brute-force sur la page wp-login.php. Je l’avais déjà remarqué, mais j’ai récement eu des problèmes d’indisponibilités suite à plusieurs attaques venant de multiple adresse IP (l’attaque passant donc de brute-force à DDOS) J’ai donc dû réagir et pour ce faire j’ai configuré fail2ban pour bloquer les IP’s faisant plus de 6 tentatives de connexions sur tous les sites wordpress du serveur.

Configuration de fail2ban

Note : mon installation de fail2ban est existante et fonctionne déjà pour le FTP & le SSH

Créer le fichier /etc/fail2ban/jail.d/apache-wp-login.conf  :

> [apache-wp-login]
> 
> enabled = true
> port    = http,https
> filter  = apache-wp-login
> logpath = /var/log/apache2/un.autre.blog.wordrepp/access.log
>         /var/log/apache2/mercereau.info/access.log
> maxretry = 6

Puis créer la définition de la regex « apache-wp-login » dans le fichier /etc/fail2ban/filter.d/apache-wp-login.conf

[Definition]
failregex = ^<HOST> -.*POST .*wp-login.php HTTP.*
ignoreregex =

Pour finir : un restart du service fail2ban & vous n’avez plus qu’à tester en faisant plus de 6 tentatives de mot de passe sur la page votreblog/wp-admin/

$ service fail2ban restart
$ tail -f /var/log/fail2ban.log
2013-09-05 16:33:39,559 fail2ban.actions: WARNING [apache-wp-login] Ban XX.XX.XX.XX

Pour information, le lendemain 47 IP ont été bloquées grâce à ce système…

$ fail2ban-client status apache-wp-login
Status for the jail: apache-wp-login
|- Filter
| |- Currently failed: 7
| |- Total failed: 59966
| `- File list: /var/log/apache2/mercereau.info/access.log
`- Actions
|- Currently banned: 0
|- Total banned: 4128
`- Banned IP list:

Si comme moi vous gérez un hébergement mutualiser vous pouvez ajouter un script qui toutes les nuits scan votre /var/www à la recherche de wp-login.php et ajout le log dans fail2ban. Ce script est adapté à l’architecture d’ISPconfig :

#!/bin/bash

# Détection des wordpress sur le serveur
# Ajout des logs du site en question dans fail2ban
# Fonctionne avec l'arbo du panel ISPconfig3
# A mettre en tâche planifié

fail2banConf='/etc/fail2ban/jail.d/apache-wp-login.conf'

echo -n "[apache-wp-login]
enabled = true
port    = http,https
filter  = apache-wp-login
maxretry = 8
logpath = " > $fail2banConf

find /var/www/clients -name wp-login.php | while IFS=$'\n' read f ; do
    clientId=`echo $f | cut -d"/" -f5`
    siteId=`echo $f | cut -d"/" -f6`
    # Test si le lien symbolique n'est pas mort
    readlink=`readlink /var/www/clients/$clientId/$siteId/log/access.log`
    ls /var/www/clients/$clientId/$siteId/log/${readlink} &>/dev/null
    if ! (($?)) ; then
		echo "	/var/www/clients/$clientId/$siteId/log/access.log " >> $fail2banConf
    fi
done

/etc/init.d/fail2ban restart >/dev/null

Vous pouvez aussi faire la même chose pour bloquer wp-xmlrpc (qui est très sollicitée en brute force. Dans le script d’automatisation je télécharge les IP utilisé par JetPack (non pas que j’aime ce plugin mais certain de mes utilisateurs l’utilise et c’est bloquant pour xmlrpc…

#!/bin/bash

# Détection des wordpress sur le serveur
# Ajout des logs du site en question dans fail2ban
# Fonctionne avec l'arbo du panel ISPconfig3
# A mettre en tâche planifié

# https://wpchannel.com/wordpress/tutoriels-wordpress/lutter-attaques-ddos-xml-rpc-php-fail2ban/

cd /tmp
wget https://jetpack.com/ips-v4.txt
if ! (($?)) ; then
	ips=`sed ':a;N;$!ba;s/\n/ /g' /tmp/ips-v4.txt`
else 
	ips=''
fi

fail2banConf='/etc/fail2ban/jail.d/apache-wp-xmlrpc.conf'

echo -n "[apache-wp-xmlrpc]
enabled = true
filter = apache-wp-xmlrpc
bantime = 86400
maxretry = 1
port    = http,https
ignoreip = 127.0.0.1/8 ns1.wordpress.com ns2.wordpress.com ns3.wordpress.com ns4.wordpress.com jetpack.wordpress.com $ips 
logpath = " > $fail2banConf

find /var/www/clients -name wp-login.php | while IFS=$'\n' read f ; do
    clientId=`echo $f | cut -d"/" -f5`
    siteId=`echo $f | cut -d"/" -f6`
    # Test si le lien symbolique n'est pas mort
    readlink=`readlink /var/www/clients/$clientId/$siteId/log/access.log`
    ls /var/www/clients/$clientId/$siteId/log/${readlink} &>/dev/null
    if ! (($?)) ; then
		echo "	/var/www/clients/$clientId/$siteId/log/access.log " >> $fail2banConf
    fi
done

/etc/init.d/fail2ban restart >/dev/null

Et le fichier : /etc/fail2ban/filter.d/apache-wp-xmlrpc.conf

[Definition]
failregex = ^ .(GET|POST) /xmlrpc.php .
ignoreregex =

Chantier/formation chez Hervé en Auvergne

En mai 2013 j’ai fait un chantier participatif chez Hervé pendant 3 jours dont 1 journée de formation théorique. Hervé étant un professionnel de l’éco-construction ce fût très enrichissant !

Là-bas j’ai pût monter mon premier mur en paille poteau poutre, faire du branchage paille pour une correction thermique sur un mur en pierre, remplir la toiture végétalisée, fabriquer des BTC… et le plus important : faire de belle rencontres humaines !

Pour plus d’info : http://www.naturel-home.fr/formation_autoconstructeurs_chantier_participatif/

En continuant à utiliser le site, vous acceptez l’utilisation des cookies (au chocolat) Plus d’informations

Les cookies sont utilisés à des fin de statistique de visite du blog sur une plateforme indépendante que j'héberge moi même. Les statistiques sot faites avec un logiciel libre. Aucune information n'est redistribué à google ou autre. Je suis seul autorisé à lire ces informations

Fermer