Table des matières
Installer "à la main" Yunohost v2.7.x sur une base Debian 8 Jessie minimale | en cours de relecture
“YunoHost est un outil qui vous permet d’installer et d’utiliser facilement votre propre serveur.” […] “YunoHost vous permet par défaut de gérer vos adresses mail et de messagerie instantanée via des interfaces simples d’utilisation et de manière sécurisée. Vous pourrez également étendre les fonctionnalités via des apps installables en un click.”
Plus de détail sur le site de l'éditeur https://doc.yunohost.org/#/index_fr
Prérequis
- disposer d'une clé USB d'au moins 1 Go vierge ;
- disposer d'une connexion à internet via la box ou le routeur afin de pouvoir y connecter votre machine (réelle ou virtuelle) ;
- disposer d'un nom de domaine pointant vers l'adresse IP publique de votre Box/routeur. (cf no-ip.org, dyndns, …) ou alors bénéficier d'un de ceux mis à disposition par Yunohost : https://yunohost.org/#/dns_fr
<note warning> La clé USB utilisée sera formatée. Veuillez enregistrer son contenu sur un autre support avant de commencer les manipulations. </note>
Récupération de l'image iso Debian 8 Jessie
Pour une machine en 32 bits il faut se rendre ici https://cdimage.debian.org/cdimage/archive/8.10.0/i386/iso-cd/ et télécharger cette image https://cdimage.debian.org/cdimage/archive/8.10.0/i386/iso-cd/debian-8.10.0-i386-netinst.iso
Pour une machine en 64 bits il faut se rendre ici https://cdimage.debian.org/cdimage/archive/8.10.0/amd64/iso-cd/ et télécharger cette image https://cdimage.debian.org/cdimage/archive/8.10.0/amd64/iso-cd/debian-8.10.0-amd64-netinst.iso
Rendre la clé USB bootable
Il existe plusieurs solutions pour rendre un support USB bootable afin de lancer l'installeur par le réseau dont :
- Etcher : https://etcher.io/ (interopérable)
- UNetbootin : https://unetbootin.github.io/ (interopérable)
- Multisystem : http://liveusb.info/dotclear/ (pour Debian/Ubuntu)
Installation de Debian 8 Jessie minimale
Suivre les indication à l'écran.
<note tip> Pour sélectionner, il faut utiliser les flèches du clavier ou la touche tabulation. Pour valider, il faut utiliser la touche “Entrée” du clavier. Pour cocher/décocher, il faut utiliser la barre espace du clavier. </note>
<note important> N'indiquez pas de nom de domaine (laisser vide et valider), et pour la plupart des cas simples, n'indiquez pas de serveur mandataire (laisser vide et valider). </note>
<note warning> Choisissez des mots de passe forts pour l'administrateur et l'utilisateur qui seront créés durant l'installation. </note>
L'installation devra être minimale. Pour cela, seuls les “serveur SSH” ainsi que les “Utilitaires usuels du système” sont nécessaires.
Récupération des adresses IP locale et IP publique
Connaître son adresse IP locale
hostname -I
Connaître son adresse IP publique
curl ifconfig.me
<note warning> Vérifier que la version de Debian sera bien mise à jour sur la base Jessie car YunoHost n'est pas encore compatible avec Debian Stretch.
⇒ Remplacer stable par jessie dans le fichier /etc/apt/sources.list
sed -i 's|stable|jessie|' /etc/apt/sources.list
⇒ Remplacer stretch par jessie dans le fichier /etc/apt/sources.list
sed -i 's|stretch|jessie|' /etc/apt/sources.list
<note> Si vous passez par l'édition manuelle du fichier avec l'éditeur nano :
nano /etc/apt/sources.list
alors pour enregistrer
Ctrl+o
et pour quitter
Ctrl+x
</note>
</note>
Vérifier les mises à jour, nettoyer, installer git et enlever Apache
Mettre à jour
apt update && apt --assume-yes dist-upgrade
Nettoyer
apt-get autoremove && apt-get autoclean
Installer git et dialog pour pouvoir cloner le script d'installation et avoir des boîtes de dialogue convivial durant l'exécution du script
apt install git dialog
Enlever Apache
apt-get autoremove apache2.2
Installation de YunoHost
<note tip> Le script d'installation ne peut pas être lancé avec l'utilisateur standard. Il faut être “root”. </note>
Passer en root :
su # entrer le mot de passe choisi lors de l'installation
Cloner le script d’installation de YunoHost dans le répertoire temporaire, s'y rendre et lancer le script d'installation
git clone https://github.com/YunoHost/install_script /tmp/install_script cd /tmp/install_script ./install_yunohost
Lancer la post-installation
yunohost tools postinstall
Post-installation de YunoHost
Configurer git
git config --global user.email "moi@ndd.tld" git config --global user.name "Votre Nom"
Redémarrer le serveur
reboot
Pour mémoire
L'adresse d'administration de votre YunoHost est https://monserveur.org/yunohost/admin/ et l'adresse du portail de votre YunoHost est https://monserveur.org/.
<note> Pour régénérer les services :
yunohost service regen-conf
</note>
<note> Pour mettre à jour la liste des applications YunoHost :
yunohost app fetchlist
</note>
<note> Pour mettre à jour les applications YunoHost :
yunohost app upgrade
</note>
<note> Pour faire une sauvegarde :
mkdir /home/yunohost.backup/archives yunohost backup create
</note>
<note> Pour récupérer une sauvegarde depuis son serveur vers le /home de son ordinateur (avec 1234 comme port SSH ; avec IP_ou_NDD comme adresse IP [locale ou pas] ou NDD son Nom De Domaine ; avec $USER son nom d'utilisateur ; avec aaaammjj-hhmmss comme par exemple 20161002-084907 [nom de la sauvegarde YunoHost]) :
scp -P 1234 root@IP_ou_NDD:/home/yunohost.backup/archives/aaaammjj-hhmmss.tar.gz /home/$USER scp -P 1234 root@IP_ou_NDD:/home/yunohost.backup/archives/aaaammjj-hhmmss.info.json /home/$USER
Sur le même principe que précédemment, envoyer une sauvegarde depuis le /home de son ordinateur vers son serveur (s'assurer que le dossier archive existe bien sinon lancer une première sauvegarde ou bien en dernier recours créer le dossier en root : mkdir /home/yunohost.backup/archives) :
scp -P 1234 /home/$USER/aaaammjj-hhmmss.info.json root@IP_ou_NDD:/home/yunohost.backup/archives scp -P 1234 /home/$USER/aaaammjj-hhmmss.tar.gz root@IP_ou_NDD:/home/yunohost.backup/archives
Pour restaurer une sauvegarde :
yunohost backup restore nom_de_la_sauvegarde
Sources pour la sauvegarde :
</note>
<note> Pour que lors de la sauvegarde les fichiers de NextCloud soient sauvegardés en plus des paramètres de l'application en elle-même, il faut éditer le fichier /etc/yunohost/apps/nextcloud/settings.yml et supprimer le “1” de la variable backup_core_only :
nano /etc/yunohost/apps/nextcloud/settings.yml backup_core_only: '1' devient backup_core_only: ''
</note>
<note> Pour refuser l'accès d'une application à un utilisateur :
yunohost app removeaccess app -u user # et par extension : yunohost app removeaccess app1 app2 app3 -u user1 user2 user3 # pour faire l'inverse : yunohost app addaccess app -u user
Source : https://forum.yunohost.org/t/refuser-lacces-dune-application-a-un-utilisateur/3266/2 </note>
Vous pouvez aussi contribuer à ce projet ici https://doc.yunohost.org/#/contribute_fr.
<note> A vous de tester et bidouiller </note>
Pour aller plus loin ...
<note importante> Les sections suivantes sont destinées aux utilisateurs avancés car de mauvais réglages et/ou paramétrages peuvent, à minima, altérer la sécurité mise en place par défaut des applications et du serveur Yunohost, voire engendrer de plus gros soucis. </note>
Cloner le script d'installation YunoHost et procéder à directement l'installation de la version testing de YunoHost
<note important> Réservé à des utilisateurs avancés sachant ce qu'ils font. </note>
Pour passer directement à la version 'testing' de YunoHost (sans passer par l'installation de la version stable) :
git clone https://github.com/YunoHost/install_script /tmp/install_script cd /tmp/install_script && ./install_yunohost -d testing
Mettez à jour votre instance :
apt-get update && apt-get dist-upgrade
Indiquez le dépôt testing en lieu et place du dépôt stable dans le sources.list YunoHost :
echo 'deb http://repo.yunohost.org/debian/ jessie stable testing' > /etc/apt/sources.list.d/yunohost.list
Mettez à jour votre instance (à nouveau) avec les dépôts testing :
apt-get update && apt-get dist-upgrade
Source en rapport : https://forum.yunohost.org/t/yunohost-2-5-0-beta-call-for-beta-testers-and-translators/2243
Pour revenir en arrière et repasser en mode stable
Indiquez le dépôt stable à la place du dépôt testing :
echo 'deb http://repo.yunohost.org/debian/ jessie stable' > /etc/apt/sources.list.d/yunohost.list
Mise à jour de l'instance :
apt-get update && apt-get dist-upgrade
<note important> N.B.: Votre version ne reviendra à la version stable qu'à la publication de nouveaux paquets stables. </note>
Source : https://forum.yunohost.org/t/yunohost-2-5-0-beta-call-for-beta-testers-and-translators/2243
Être averti par mail lors d'une connexion ssh au serveur :
Il faut installer mailutils pour que la fonction mail du script fonctionne :
apt-get install mailutils
Ensuite, il faut créer, ou éditer s'il existe, le fichier /etc/ssh/sshrc.
sudo nano /etc/ssh/sshrc
Entrer lignes suivantes en adaptant à minima l'adresse mail de réception :
#!/bin/sh # source: http://blog.uggy.org/post/2009/06/05/... DATE=`date "+%d.%m.%Y--%Hh%Mm"` IP=`echo $SSH_CONNECTION | awk '{print $1}'` REVERSE=`dig -x $IP +short` echo "Connexion de $USER sur $HOSTNAME IP: $IP ReverseDNS: $REVERSE Date: $DATE " | mail -s "Connexion de $USER sur $HOSTNAME" moi@mon.domaine.ndd.net
Ensuite, redémarrer ssh :
/etc/init.d/ssh restart
ou
service ssh restart
Être averti par SMS lors d'une connexion ssh au serveur :
<note tip> Pour les “Free-Mobilonautes”, il est aussi possible d'être averti en plus par un SMS. Il suffit d'ajouter au fichier précédent le script suivant (à adapter avec l'identifiant et la clé de l'API après avoir activé l'option de notification par SMS sur le panel client Free https://mobile.free.fr/moncompte/ ) : </note>
#!/bin/sh # # Script d'envoi de notification SMS via l'API Free Mobile # https://github.com/C-Duv/freemobile-smsapi-client # # Auteur: DUVERGIER Claude (http://claude.duvergier.fr) # # Nécessite: sed, sh et wget # # Possible usages: # send-notification.sh "All your base are belong to us" # echo "All your base are belong to us" | send-notification.sh # uptime | send-notification.sh ## ## Configuration système ## # Caractère de fin de ligne (http://en.wikipedia.org/wiki/Percent-encoding#Character_data) NEWLINE_CHAR="%0D" # Valeurs possibles : %0A, %0D et %0D%0A # URL d'accès à l'API SMSAPI_BASEURL="https://smsapi.free-mobile.fr" # Action d'envoi de notification SMSAPI_SEND_ACTION="sendmsg" ## ## Configuration utilisateur ## # Login utilisateur / identifiant Free Mobile (celui utilisé pour accéder à l'Espace Abonné) USER_LOGIN="1234567890" # Clé d'identification (générée et fournie par Free Mobile via l'Espace Abonné, "Mes Options" : https://mobile.free.fr/moncompte/index.php?page=options) API_KEY="s0me5eCre74p1K3y" # Texte qui sera ajouté AVANT chaque message envoyé MESSAGE_HEADER="Notification :${NEWLINE_CHAR}" # Texte qui sera ajouté APRÈS chaque message envoyé MESSAGE_FOOTER="${NEWLINE_CHAR}--${NEWLINE_CHAR}Le serveur de la maison" ## ## Traitement du message ## MESSAGE_TO_SEND="" if [ "$1" ]; then # Message en tant qu'argument de la ligne de commande MESSAGE_TO_SEND="$1" else # Message lu de STDIN while read line do MESSAGE_TO_SEND="$MESSAGE_TO_SEND$line$NEWLINE_CHAR" done MESSAGE_TO_SEND=$(echo $MESSAGE_TO_SEND | sed 's/'$NEWLINE_CHAR'$//') # Retire le dernier saut de ligne fi FINAL_MESSAGE_TO_SEND="$MESSAGE_HEADER$MESSAGE_TO_SEND$MESSAGE_FOOTER" # Assemble header, message et footer ## ## Appel à l'API (envoi) ## # echo "Will send the following to $USER_LOGIN:" #DEBUG # echo "$FINAL_MESSAGE_TO_SEND" #DEBUG # --insecure : Certificat de $SMSAPI_BASEURL ne fourni pas d'informations sur son propriétaire # --write-out "%{http_code}" --silent --output /dev/null : Renvoi le code réponse HTTP uniquement HTTP_STATUS_CODE=$(curl --insecure --get "$SMSAPI_BASEURL/$SMSAPI_SEND_ACTION" --data "user=$USER_LOGIN" --data "pass=$API_KEY" --data "msg=$FINAL_MESSAGE_TO_SEND" --write-out "%{http_code}" --silent --output /dev/null) # Codes réponse HTTP possibles # 200 : Le SMS a été envoyé sur votre mobile. # 400 : Un des paramètres obligatoires est manquant. # 402 : Trop de SMS ont été envoyés en trop peu de temps. # 403 : Le service n'est pas activé sur l'espace abonné, ou login / clé incorrect. # 500 : Erreur côté serveur. Veuillez réessayez ultérieurement. if [ "$HTTP_STATUS_CODE" -eq 200 ]; then # echo "API responded with 200: exiting with 0" #DEBUG exit 0 else echo "Error: API responded with $HTTP_STATUS_CODE" exit 1 fi
cron
Pour programmer des tâches, comme par exemple une mise à jour suivi d'une mise à niveau de l'installation, vous pouvez utiliser cron.
Plus de détail ici : http://doc.ubuntu-fr.org/cron
fail2ban
Cela permet de bannir les adresses ip essayant de se connecter “furieusement”. Il est a priori installé par défaut sur Yunohost.
sudo apt-get install fail2ban
Ensuite, il faut éditer le fichier de configuration afin de donner une adresse mail afin d'envoyer les rapports de ban.
sudo nano /etc/fail2ban/jail.conf
findtime = 3600 bantime = 86400
destemail = votre@email.com
Toujours dans ce même fichier, rechercher la ligne qui commence par action = afin de rajouter mwl après le _ afin d'avoir un rapport complet.
action =%(action_mwl)s
Ensuite, toujours dans le même fichier, afin d'avoir les rapports sur les principaux services, il faut remplacer false par true dans les parties suivantes :
- ssh ;
- ssh-ddos ;
Apparemment, il y a beaucoup de brute-force sur sasl, il est donc préférable de commenter cette règle failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [A-Za-z0-9+/]*={0,2})?$ et appliquer celle-ci failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed: \w :
nano /etc/fail2ban/filter.d/sasl.conf #failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [A-Za-z0-9+/]*={0,2})?$ failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed: \w
D'autres réglages sont disponibles ici : http://doc.ubuntu-fr.org/fail2ban
changer le port d'écoute ssh
Editer /etc/ssh/sshd_config :
sudo nano /etc/ssh/sshd_config
Le numéro de port d'écoute est par défaut le 22. En choisir un au delà du numéro 1024, par exemple : 12345.
Ensuite, il faut éditer le fichier de configuration de fail2ban pour lui dire d'écouter le port 12345 au lieu du port 22.
sudo nano /etc/fail2ban/jail.conf
Dans la section #JAIL au chapitre [ssh] et [ssh-ddos], il faut changer :
port = ssh par port = 12345
Ensuite, il faut redémarrer le pare-feux, désactiver l'ancien port dans le pare-feux (a priori le 22), redémarrer le service ssh et recharger le service fail2ban :
yunohost firewall reload yunohost firewall disallow 22 sudo service ssh restart sudo fail2ban-client reload
Source : https://yunohost.org/#/security_fr
Installation de logwatch
Si vous souhaitez avoir un historique de ce qui s'est passé sur le serveur la veille, il suffit d'installer logwatch :
sudo apt-get install logwatch sudo mkdir /var/cache/logwatch
Avant de modifier le fichier de configuration, en faire une copie :
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/
Ensuite faire les modifications ici :
nano /etc/logwatch/conf/logwatch.conf
Par exemple, l'envoi des rapports sur une adresse électronique et/ou modifier le niveau de détail du résumé généré :
MailTo = moi@mon.domaine.ndd Detail = Med
Pour lancer logwatch en console :
sudo logwatch
Pour aller plus loin dans la configuration : http://doc.ubuntu-fr.org/logwatch#configuration