Aller au contenu principal

🔒 Sécurité

info

Lorsque vous réfléchissez et discutez de la sécurité, que ce soit dans le contexte de YunoHost ou de tout autre système, gardez à l'esprit que la sécurité n'est pas un état binaire, mais une pratique continue. Le terme "sécurité" n'a essentiellement aucun sens sans préciser ce contre quoi nous nous protégeons exactement. Les 'menaces' à prendre en compte dépendent de votre contexte et peuvent aller des attaques automatisées de robots parcourant Internet à des acteurs étatiques sophistiqués comme la NSA, en passant par les vulnérabilités de la chaîne d'approvisionnement (par exemple, les dépendances logicielles compromises) ou les risques élémentaires tels que vos propres utilisateurs utilisant des mots de passe trop simples, ou votre pire ennemi de l'école primaire il y a 20 ans essayant de pirater votre serveur ...

YunoHost est développé dans un souci de sécurité, en recherchant un bon compromis entre sécurité et facilité d'utilisation. Voici une liste non exhaustive des aspects liés à la sécurité que le projet met en œuvre :

  • un pare-feu basé sur nftables pour limiter le trafic entrant aux ports concernés ;
  • fail2ban, un logiciel qui rejette automatiquement le trafic provenant d'adresses IP malveillantes qui tentent de forcer SSH et d'autres services ;
  • l'utilisation des recommandations de Mozilla pour NGINX, Postfix, Dovecot, les chiffrements SSH, etc. ;
  • la vérification que les mots de passe/phrases de passe des utilisateurs ne sont pas trop simples lors de leur définition ;
  • le hachage des mots de passe des utilisateurs (SHA512 salé dans LDAP par exemple) ;
  • être vigilant sur les permissions des fichiers/répertoires UNIX sur l'ensemble du système ;
  • les applications sont généralement exécutées à l'aide d'un utilisateur dédié et avec des capacités restreintes ;
  • supprimer automatiquement les informations sensibles des journaux d'exploitation de YunoHost et lors de leur partage avec Yunopaste ;
  • ...

En outre, le projet a des objectifs à moyen terme afin de mettre en œuvre :

info

Pour discuter des failles de sécurité dans YunoHost, contactez l'équipe de sécurité du projet.

Conseils de sécurité de base

La sécurité n'est pas une configuration ponctuelle, c'est une pratique active et continue. Voici quelques pratiques de base que vous devriez mettre en œuvre :

attention

L'utilisation de mots de passe stupidement simples est sans doute la principale raison pour laquelle les serveurs sont "piratés". L'utilisation de mots de passe/phrases de passe raisonnablement complexes par vous-même et vos utilisateurs est la base de toute bonne sécurité.

  1. En tant qu'administrateur, oubliez les mots de passe traditionnels. Utilisez des phrases de passe raisonnablement complexes. Renseignez-vous sur les gestionnaires de mots de passe.
  2. Maintenez votre serveur et vos applications raisonnablement à jour. Envisagez d'utiliser l'application unattended upgrades pour les mises à jour automatiques ;
  3. Sachez que chaque application que vous installez constitue une "surface d'attaque" supplémentaire. Idéalement, vérifiez la réputation en matière de sécurité de chaque application que vous installez. Ne vous contentez pas d'installer des applications au hasard pour ensuite les oublier. Désinstallez les applications que vous n'utilisez plus ;
  4. ne créez des comptes que pour les personnes en qui vous avez une certaine confiance, en particulier celles qui utilisent des mots de passe/phrases de passe décents et qui ont une bonne hygiène de sécurité en général ;
  5. Consultez régulièrement le forum et les réseaux sociaux (par exemple, le compte Mastodon de YunoHost) pour rester informé lorsque des vulnérabilités sont découvertes ou que des correctifs importants sont publiés.

Les sections suivantes décrivent les moyens possibles pour renforcer davantage la sécurité de votre serveur.

Authentification via une clé SSH

Par défaut, l'authentification SSH utilise le mot de passe d'administration. Il est conseillé de désactiver ce type d'authentification et de le remplacer par un mécanisme à clé.

Sur votre client :

ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub <username@your_yunohost_server>
astuce

Si vous rencontrez des problèmes d'autorisations, définissez username comme propriétaire du répertoire ~/.ssh avec chown. Attention, pour des raisons de sécurité, ce répertoire doit être en mode 700.
Si vous utilisez Ubuntu 16.04, vous devez exécuter ssh-add pour initialiser l'agent SSH.

Saisissez votre mot de passe administrateur et votre clé sera copiée sur votre serveur.

Sur votre serveur, la modification du fichier de configuration SSH pour désactiver l'authentification par mot de passe est gérée par un paramètre système :

sudo yunohost settings set security.ssh.ssh_password_authentication -v no
danger

Ne fermez jamais votre connexion SSH actuelle avant d'avoir vérifié que vos modifications fonctionnent. Testez votre nouvelle configuration en ouvrant un nouveau terminal ou une nouvelle fenêtre. Ainsi, vous pourrez annuler vos modifications si quelque chose ne fonctionne pas.

Utilisation d'un port personnalisé pour SSH

Pour empêcher les tentatives de connexion SSH par des robots qui scannent Internet à la recherche de serveurs sur lesquels SSH est activé, vous pouvez modifier le port SSH. Cette opération est gérée par un paramètre système qui se charge de mettre à jour la configuration SSH et Fail2Ban.

Notez que changer de port reste utile même si vous avez désactivé l'authentification par mot de passe, car cela réduit considérablement le bruit provenant des tentatives de "brute force" dans les journaux SSH.

attention

Si vous modifiez manuellement quoi que ce soit dans la configuration du serveur SSH (/etc/ssh/sshd_config), le mécanisme regen-conf de YunoHost ne mettra plus automatiquement à jour ce fichier. Pour cette raison, utilisez toujours les outils d'administration YunoHost pour apporter des modifications aux fichiers de configuration du système !

sudo yunohost settings set security.ssh.ssh_port -v <new_ssh_port_number>

Pour les prochaines connexions SSH, vous devez ajouter l'option -p suivie du numéro de port SSH.

ssh -p <new_ssh_port_number> admin@<your_yunohost_server>
danger

Ne fermez jamais votre connexion SSH actuelle avant d'avoir vérifié que vos modifications fonctionnent. Testez votre nouvelle configuration en ouvrant un nouveau terminal ou une nouvelle fenêtre. Ainsi, vous pourrez annuler vos modifications si quelque chose ne fonctionne pas.

Durcissement du chiffrement utilisé par NGINX, SSH, Dovecot, Postfix

La configuration TLS par défaut pour les services offre généralement une bonne compatibilité avec les anciens appareils. Vous pouvez ajuster cette politique pour des services spécifiques tels que SSH et NGINX. Par défaut, la configuration NGINX suit les recommandations de compatibilité intermédiaire de Mozilla. Vous pouvez choisir de passer à la configuration 'moderne' qui utilise des recommandations de sécurité plus récentes, au détriment d'une compatibilité réduite, ce qui peut poser problème pour vos utilisateurs et visiteurs utilisant des appareils plus anciens. Vous trouverez plus de détails sur la compatibilité sur cette page.

La modification du niveau de compatibilité n'est pas définitive et peut être annulée si elle ne convient pas à votre environnement.

Sur votre serveur, modifiez la politique pour NGINX.

sudo yunohost settings set security.nginx.nginx_compatibility -v modern

Sur votre serveur, modifiez la politique pour SSH.

sudo yunohost settings set security.ssh.ssh_compatibility -v modern

Désactivation de l'API YunoHost

L'administration de YunoHost est accessible via une API HTTP, qui est l'API utilisée par l'administrateur web. Cela peut constituer une surface d'attaque supplémentaire et inutile si vous ne prévoyez pas de l'utiliser. Dans ce cas, vous pouvez désactiver complètement le service correspondant via la ligne de commande :

attention

Cela désactivera complètement l'API de YunoHost et le panneau d'administration web qui en dépend. Ne continuez que si vous êtes à l'aise avec l'utilisation exclusive de la ligne de commande à partir de maintenant.

sudo systemctl disable yunohost-api
sudo systemctl stop yunohost-api

Comme yunohost-api est désormais désactivé et ne fonctionne plus, le Diagnostic signalera une erreur. Cette erreur peut être ignorée à l'aide de :

sudo yunohost diagnosis ignore --filter services service=yunohost-api