BitTorrent Sync - Monter son serveur personnel dans le cloud

BitTorrent Sync - Monter son serveur personnel dans le cloud

BitTorrent Sync est une solution de stockage et de synchronisation de fichiers de type Dropbox dont Michel vous avait déjà parlé dans cet article. Dans ce tutoriel, nous allons voir comment on peut installer son serveur BitTorrent Sync dans le cloud, vous verrez que c’est relativement facile, et finalement bon marché, et surtout diablement efficace!

Le cout de ce projet est de 108$ (72$ pour un VPS aux USA) par année. C’est le coût du serveur VPS que nous allons louer, pour ce prix vous aurez une capacité de stockage de 250 GB

Nous allons procéder en plusieurs étapes:

  1. Location d’un VPS
  2. Configuration de Debian
  3. Installation et configuration de BitTorrent Sync
  4. Installation et configuration du client BitTorrent Sync
  5. Un peu de sécurité

1. Location d’un VPS

La première étape fondamentale de notre projet et de louer un serveur VPS qui servira à héberger nos données dans le cloud. Ainsi, ou que vous soyez, vous aurez toujours accès à vos fichiers sans vous souciez si votre ordinateur ou votre NAS est bien resté allumé à la maison .

Il existe une multitude de société proposant à la location des VPS, j’ai personellement retenu Backupsy pour leur excellent rapport qualité/prix/fiabilité/performance. En visitant leur site vous pourrez en quelques minutes faire le choix de votre VPS. Dans le cadre de projet j’ai retenu la configuration suivante:

  • Storage: 250 GB
  • RAM: 512 MB
  • Bandwidth: 1000 GB
  • OS: Debian Squeeze (32 Bit)
  • Datacenter: United Kingdom

Le choix de la capacité de stockage aura naturellement un lien direct sur le cout du serveur, mais également l’emplacement du datacenter.  Les datacenter aux USA sont un tier moins cher, mais habitant en Suisse, j’ai volontairement choisi de rester en Europe pour des questions de performances.

Lors de la commande, il vous sera demandé de choisir un hostname, il s’agit là du nom du serveur que vous voulez lui donner. Notez également le mot de passe (Root Password) qui vous est communiqué sur cette même page, il vous sera nécessaire pour se connecter sur le serveur une fois son installation terminée. Il vous est ensuite demandé de choisir le système d’exploitation, j’ai retenu ici Debian 6 (Squeeze) pour sa stabilité et car il est bien moins gourmand que Debian 7 (Wheezy) en terme de RAM.

Lors du Checkout, n’oubliez surtout pas d’utiliser le code promotionnel “40PERCENT”, grâce à celui-ci, vous obtiendrez une réduction de 40% sur le total de votre facture, dans notre exemple on passe de 180$ $ 108$ en choisissant un paiement annuel, et comme dirais ma grand-mère, c’est toujours mieux dans notre poche que dans celle des autres!

Une fois votre paiement validé, votre serveur devrait être disponibles en quelques minutes, vous pouvez alors passer à l’étape 2.

2. Configuration de Debian

Durant cette étape, nous allons préparer notre serveur et y installer tous les composants nécessaire à son bon fonctionnement, mais aussi veiller à sa maintenance et surtout, sa sécurité.

2.1 Connectez-vous en SSH sur votre serveur, sous Windows vous pouvez télécharger PuTTY, sous Mac ou Linux, il suffit simplement d’entrer cette commande:

ssh root@ip_of_your_server

Une fois connecté, changez votre mot de passe qui vous a été attribué lors de l’installation, pour cela, utilisez la commande:

passwd

2.2 On vérifie qu’il est bien à jour avec la commande:

apt-get update && apt-get upgrade -y

2.3 On installe les paquets nécessaires:

apt-get install ssmtp ntp ntpdate cron-apt

2.4 On configure l’envoi de mails depuis le serveur, on édite le fichier  /etc/ssmtp/ssmtp.conf

nano /etc/ssmtp/ssmtp.conf

Dans notre exemple on utilise un compte gmail pour envoyer les email, votre fichier devrait alors ressembler à quelque chose comme ceci:

root=postmaster
UseTLS=YES
UseSTARTTLS=YES
mailhub=smtp.gmail.com:587
AuthMethod=LOGIN
[email protected]
AuthPass=your_password
hostname=server.domain.com

2.5 On configure la mise à jour automatique du serveur, on édite le fichier /etc/cron-apt/config

nano /etc/cron-apt/config

On modifie ces deux lignes dans le fichier:

MAILTO="[email protected]"
MAILON="always

3. Installation et configuration de BitTorrent Sync

3.1 On ajoute le repository pour BitTorrent Sync

gpg --keyserver pgp.mit.edu --recv-keys 6BF18B15
gpg --armor --export 6BF18B15 | apt-key add -
echo deb http://debian.yeasoft.net/btsync squeeze main contrib non-free >> /etc/apt/sources.list.d/btsync.list
echo deb-src http://debian.yeasoft.net/btsync squeeze main contrib non-free >> /etc/apt/sources.list.d/btsync.list

3.2 On installe BitTorrent Sync

apt-get update && apt-get install btsync

On laisse les options par défaut, sauf en ce qui concerne le port à utiliser, là vous pouvez choisir entre 1000 et 65534.

On édite le fichier de configuration /etc/btsync/debconf-default.conf:

nano /etc/btsync/debconf-default.conf

Le fichier devrait ressembler à ceci:

{
"device_name": "server.domain.com",
"storage_path" : "/var/lib/btsync",
"listening_port" : 12345,
"check_for_updates" : false,
"use_upnp" : false,
"download_limit" : 0,
"upload_limit" : 0,
"disk_low_priority" : true,
"lan_encrypt_data" : true,
"lan_use_tcp" : false,
"rate_limit_local_peers" : false,
"folder_rescan_interval" : 600,
"webui" :
{
"listen" : "0.0.0.0:8888",
"login" : "admin",
"password" : "password"
}
}

Votre serveur est maintenant opérationnel ! Vous devriez normalement pouvoir accéder à son interface web depuis votre navigateur favori sur cette adresse:

http://ip.du.serveur:8888

4. Installation et configuration du client BitTorrent Sync

L’installation du client est très simple, il vous suffit simplement de le télécharger depuis le site de l’éditeur BitTorrent. Il existe pour pratiquement tous les systèmes, y compris les smartphones.

Une fois l’installation terminé, ajouter simplement un dossier que vous voulez synchroniser, laissez BitTorrent Sync générer une clé unique, elle devrait ressembler à quelque chose comme ça " A2KA7DNXFZGJCAGRDUX73CAGVAZYLU52X". Cette clé sera ensuite utilisée sur votre serveur pour synchroniser votre dossier.

btsync_add_folder_client

Connectez-vous sur votre serveur, puis créé les répertoires dans lesquels seront stockés vos fichiers. Par principe, la racine de votre dossier devrait être “/home”. Créons par exemple un dossier “photos”:

mkdir /home/photos

Connectez-vous sur l’interface web de votre serveur et ajouter le dossier “photos” pour qu’il se synchronise.

Cliquez sur “Add Folder”, ajouter votre clé générée et sélectionnez le répertoire que nous venons de créer: “/home/photos”

btsync_add_folder_server

Si tout c’est passé correctement, vous devriez voir le statut de votre serveur comme suit:

btsync_status_folder

5. Un peu de sécurité

Maintenant que tout fonctionne correctement, il faut penser à sécuriser notre serveur, car ne l’oubliez pas, celui-ci est directement connecté sur Internet et donc plus vulnérable aux diverses attaques!

Pour nous aider dans cette tâche, nous allons utiliser fail2ban et iptables. Le premier est un utilitaire qui bloque l’adresse IP d’une tentative échouée de connexion, le second est simplement un firewall qui va fermer tous les ports non utilisés.

Installons fail2ban:

apt-get install fail2ban

On copie le fichier initial de configuration et on l’édite:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local

Modifiez les lignes suivantes:

bantime  = 86400
maxretry = 2
destemail = [email protected]

[ssh]
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 2

On redémarre le service fail2ban pour appliquer les changements:

service fail2ban restart

On passe maintenant à la partie firewall, on commence par créer un fichier avec toutes nos règles:

nano /etc/init.d/firewall

Le fichier doit centenaire ceci:

#!/bin/sh

### BEGIN INIT INFO
# Provides: custom firewall
# Required-Start: $remote_fs $syslog $network
# Required-Stop: $remote_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: firewall initscript
# Description: Custom Firewall
### END INIT INFO

# Réinitialise les règles
iptables -t filter -F
iptables -t filter -X

# Bloque tout le trafic
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Autorise les connexions déjà établies et localhost
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# ICMP (Ping)
# iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# FTP
# iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT
# iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT

# SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT

# DNS
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# HTTP
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
# iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

# HTTPS
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
# iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

# Mail SMTP
# iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
# iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
# iptables -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

# NTP (horloge du serveur)
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

# iperf
# iptables -t filter -A INPUT -p udp --dport 5001 -j ACCEPT
# iptables -t filter -A INPUT -p tcp --dport 5001 -j ACCEPT

# iptables -t filter -A OUTPUT -p udp --dport 5001 -j ACCEPT
# iptables -t filter -A OUTPUT -p tcp --dport 5001 -j ACCEPT

# BitTorrent Sync Web Interface
iptables -t filter -A INPUT -p tcp --dport 8888 -j ACCEPT

# BitTorrent Sync Protocol
iptables -t filter -A INPUT -p udp --dport 12345 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 12345 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 12345 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 12345 -j ACCEPT
# BitTorrent Sync Tracker
iptables -t filter -A INPUT -p udp --dport 3000 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 3000 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 3000 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 3000 -j ACCEPT

N’oubliez pas de changer les valeurs de ports à la rubrique “BitTorrent Sync Protocol” en fonctions de vos choix lors de l’installation du serveur BitTorrent Sync.

On rend ensuite le fichier executable:

chmod +x /etc/init.d/firewall

On met à jour la liste des services qui doivent démarrés automatiquement avec le serveur:

update-rc.d firewall defaults

On démarre le service:

service firewall restart

L’installation est maintenant terminée! Maintenant que vous savez installer un serveur BitTorrent Sync, rien ne vous empêche d’en deployer plusieurs dans différents coin du monde pour bénéficier d’un maximum de performance et de redondance.