Home

Awesome

Gérez votre calendrier et vos contacts avec Baïkal

sabre.io/baikal

Sommaire


Introduction

Ce guide permet l'installation et la configuration de votre propre serveur de calendrier (CalDAV) et de contacts (CardDAV) avec Baïkal.

Baïkal permet d'accéder de manière transparente à vos contacts et calendriers depuis n'importe quel appareil. Il est compatible avec iOS, Mac OS X, DAVx<sup>5</sup> sur Android, Mozilla Thunderbird et toute autre application compatible CalDAV et CardDAV.

Protégez votre vie privée en hébergeant vous-même vos calendriers et vos contacts.

Crédits

Ce guide a été écrit à partir des sources suivantes :

Prérequis

Pour suivre ce guide vous aurez besoin

Dans la suite du guide, il est considéré que le nom de domaine est domaine.fr et le sous-domaine avec l'enregistrement pointant vers votre machine est cal.domaine.fr


Installation

Devenir root

sudo -i

Mise à jour du cache d'APT et du système

apt update && apt upgrade -y

Installer un système de gestion de base de données

Installation de MariaDB

apt install mariadb-server -y

Installer un serveur web

Installation d'Apache2

apt install apache2 -y

Vérification

Rendons nous sur http://cal.domaine.fr/, vous devriez voir la page par défault d'apache.

Apache2 default

HTTPS

Pour activer HTTPS sur votre site Web, vous devez obtenir un certificat SSL/TLS auprès d'une autorité de certification (CA). Nous utiliserons dans ce guide Let's Encrypt comme autorité de certification car cela est gratuit et simple d'utilisation. Afin d'obtenir un certificat pour votre domaine auprès de Let's Encrypt, vous devez démontrer que vous possèdez le domaine.

Certbot est un outil permettant la gestion de certificats Let's Encrypt, automatisant la génération d'un certificat et réalisant la preuve de votre possession du serveur web.

Installation de Certbot

apt install certbot -y

Génération d'un certificat

certbot certonly --standalone

Test de renouvellement automatique

certbot renew --dry-run

Le certificat devra être renouvellé tous les 3 mois, pour cela saississez la commande certbot renew

Vérification

Rendons nous sur https://cal.domaine.fr/, vous devriez voir une icone de cadenas dans la barre URL.

HTTPS

Aide : Certbot ou Let's Encrypt

Installer PHP et les modules PHP

apt install php php-mysql php-dom -y

Télécharger Baïkal

Nous installerons le serveur dans le dossier /srv

Source : The Linux Documentation Project

cd /srv

Aller à github.com/sabre-io/Baikal/releases/latest et télécharger la dernière version de l'archive ZIP.

Latest version

Téléchargement en ligne de commande pour la version 0.10.1

wget https://github.com/sabre-io/Baikal/releases/download/0.10.1/baikal-0.10.1.zip

Installer unzip pour décompresser l'archive

apt install unzip -y

Extraction de l'archive

unzip baikal-0.10.1.zip
rm baikal-0.10.1.zip

Modification récursive du propriétaire

chown -R www-data:www-data /srv/baikal

Point d'attention sécurité


Configuration

Configuration de MariaDB

Lancer le script de configuration initiale

mysql_secure_installation

Point d'attention sécurité

ATTENTION : Choisissez un bon mot de passe

Aide : mysql_secure_installation

Connection au serveur mysql

mysql -u root -p

Créer une base de donnée baikal et un utilisateur baikal

CREATE DATABASE baikal;

CREATE USER 'baikal'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON baikal.* TO 'baikal'@'localhost';

FLUSH PRIVILEGES;

ATTENTION : Choisissez un bon mot de passe

CTRL+D pour quitter

Configuration d'Apache

Création d'un fichier de configuration dédié au site Baïkal

nano /etc/apache2/sites-available/baikal.conf

Exemple de configuration :

<VirtualHost *:80>

    ServerName cal.domaine.fr
    Redirect permanent / https://cal.domaine.fr/
    
</VirtualHost>

<VirtualHost *:443>

    DocumentRoot /srv/baikal/html
    ServerName cal.domaine.fr

    RewriteEngine on
    # Generally already set by global Apache configuration
    # RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteRule /.well-known/carddav /dav.php [R=308,L]
    RewriteRule /.well-known/caldav  /dav.php [R=308,L]

    <Directory "/srv/baikal/html">
        Options None
        # If you install cloning git repository, you may need the following
        # Options +FollowSymlinks
        AllowOverride None
        # Configuration for apache-2.4:
        Require all granted
        # Configuration for apache-2.2:
        # Order allow,deny
        # Allow from all
    </Directory>

    <IfModule mod_expires.c>
        ExpiresActive Off
    </IfModule>

    SSLEngine on
    SSLCertificateFile    /etc/letsencrypt/live/cal.domaine.fr/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/cal.domaine.fr/privkey.pem

</VirtualHost>

Vous trouverez ce fichier de configuration ici => conf/baikal.conf

Il ne vous reste plus qu'a remplacer (CTRL+H) les 4 occurences de cal.domaine.fr par votre sous-domaine.

Activer les modules nécessaires

a2enmod alias
a2enmod expires
a2enmod rewrite
a2enmod ssl

Désactiver les sites par défaut et activer le site baikal

a2dissite *
a2ensite baikal.conf

Redémarrer le serveur web

systemctl restart apache2

Si vous n'avez pas correctement installé de certificat SSL, une erreur peut survenir, référez vous à cette partie du guide.

Configurer Baïkal

Il est maintenant temps de se connecter à votre domaine, ici https://cal.domaine.fr/, avec un navigateur web pour réaliser la configuration initiale.

Configuration initiale

Saisie d'un mot de passe d'administration

ATTENTION : Choisissez un bon mot de passe


Connection à la base de donnée avec l'utilisateur baikal

Connection base de donnée

On utilise ici l'identifiant et le mot de passe de l'utilisateur mysql baikal saisis dans cette partie.

Tout est prêt !

Utilisation

On peut maintenant se connecter avec le compte admin sur la page d'administration https://cal.domaine.fr/admin ou en cliquant sur le bouton Login

Connection admin

On utilise ici l'identifiant et le mot de passe d'administration saisis dans cette partie.

Panneau de contôle

Panneau de contrôle

Accès à la liste des utilisateurs

Liste des utilisateurs

Création d'un utilisateur

Création d'un utilisateur

ATTENTION : Choisissez un bon mot de passe

Point de vigilance sécurité, attention à la méthode de hashage utilisée par Baïkal

Liste des utilisateurs

Liste des utilisateurs

Paramètres des carnets d'adresses (Nom affiché du carnet et description)

Carnet d'adresses

Paramètres des calendriers (Nom affiché du calendrier, couleur, description et options)

Calendrier

C'est finit !

Connecter un client iOS

Etape 1

Etape 2

Etape 3

Etape 4

Etape 5

Etape 6

On utilise ici l'identifiant et le mot de passe d'un utilisateur créé dans cette partie.

Sauvegarde de la base de données

Passage en root

sudo -i

Arrêt du serveur web

systemctl stop apache2.service

Sauvegarde de la base baikal dans le dossier courant

mysqldump baikal | gzip > baikal.sql.gz

Compression avec gzip

Démarrage du serveur web

systemctl start apache2.service

Restauration

Passage en root

sudo -i

Décompression du fichier de backup

gunzip baikal.sql.gz

Supposé dans le dossier courant

Création de la base de données baikal, puis restauration des données dans la base

mysql -e "CREATE DATABASE baikal";
mysql baikal < baikal.sql

Mise à jour de Baïkal

Se référer à sabre.io/baikal/upgrade

ATTENTION : Faire une sauvegarde de la base de données

Passage en root

sudo -i

Arrêt du serveur web

systemctl stop apache2.service

Déplacement dans le dossier /srv

cd /srv

Déplacement (sauvegarde) du dossier baikal initial

rm -r /backup
mkdir -p /backup
mv baikal /backup/baikal.bak

Téléchargement de la nouvelle version

wget https://github.com/sabre-io/Baikal/releases/download/0.10.1/baikal-0.10.1.zip

Décompression de l'archive

unzip baikal-0.10.1.zip

Suppression des dossiers config et Specific de la nouvelle version

rm -rf baikal/config baikal/Specific

Restauration des dossiers config et Specific à partir de la sauvegarde

cp -r /backup/baikal.bak/config baikal/
cp -r /backup/baikal.bak/Specific baikal/

Modification des droits

chown -R www-data:www-data baikal/

Redémarrage du serveur web

systemctl start apache2.service

Il ne reste plus qu'à retourner sur la page d'administration https://cal.domaine.fr/admin

Mise à jour

Comme nous avons déjà fait une sauvegarde, il suffit de cliquer sur Start Upgrade.

Fin de la mise à jour

On supprime l'archive

rm -r /srv/baikal-0.10.1.zip

Après avoir vérifié que la synchronisation est toujours en cours et que les entrées sont toujours là, on peut supprimer la sauvegarde du dossier

rm -r /backup/baikal.bak/

La mise à jour est terminé !

Améliorer la sécurité du serveur

La sécurité informatique est de votre responsabilité, les quelques notes ci-dessous vous donnent des outils pour améliorer la sécurité de votre serveur, il vous appartient cependant de vous renseigner si vous souhaitez aller plus loin.

Installation de ufw et fail2ban

apt install ufw fail2ban -y

Politique UFW

ufw allow 80/tcp
ufw allow 443/tcp
ufw default deny incoming
ufw default allow outgoing
ufw enable

Attention à SSH, ne coupez pas la branche sur laquelle vous êtes 🍃

Exemple pour le port 22 : ufw limit 22/tcp

Activer fail2ban

systemctl enable fail2ban
systemctl start fail2ban

Edition de /etc/sysctl.conf

Edition de /etc/sysctl.conf

Prévenir l'usurpation d'adresse IP

cat <<EOF > /etc/host.conf
order bind,hosts
multi on
EOF

Afficher la liste des ports en écoute

netstat -tunlp

Questions et contributions

N'hésitez pas à poser vos questions en soumettant une issue !

Toute contribution est également la bienvenue en réalisant une pull request.

Enjoy !