Sécurité sur un serveur expert

Cette page a pour but de vous décrire l'accès à votre serveur expert nouvellement créé, les services en écoute sur celui-ci à la création, ainsi que vous fournir des informations sur la manière de le sécuriser un minimum.

Cette page est en cours d'édition.

Après la création, un serveur "nu"

L'accès se fait donc par SSH avec l'utilisateur configuré lors de la création et le mot de passe correspondant. Cet utilisateur est capable de gagner les droit super-utilisateur soit 'root' en tapant la commande 'su -'.

Puisque le mot de passe de l'utilisateur est le même que celui du super-utilisateur, il convient de les changer grâce à la commande 'passwd'.

L'agent Gandi FIXME

Best practices

SSH : l'accès par échange de clé

Au lieu d'utiliser un mot de passe pour l'utilisateur système lorsque vous vous connectez en SSH, vous pouvez créer un couple de clés privée/publique qui vous serviront à vous connecter.

Sur votre ordinateur, créez les clés :

ssh-keygen -t rsa -b 2048

Ensuite, envoyez la clé publique sur le serveur distant :

scp .ssh/id_rsa.pub user@ip_du_serveur:~/.ssh/authorized_keys

Si le répertoire '.ssh' n'existe pas préalablement sur le serveur virtuel, je vous suggère de le créer puis d'envoyer la clé publique.

Lorsque vous vous connecterez en SSH (ssh user@ip_du_serveur), le serveur ne vous demandera alors pas de mot de passe, la clé vous authentifiant.

SSH : la clé Gandi

Une clef SSH est aussi incluse dans les serveurs expert pour permettre à notre équipe technique d'accéder au serveur expert *si l'autorisation nous est donnée* et si l'urgence ou le problème ne permet pas une résolution de votre côté de manière simple.

Vous pouvez la désactiver dans le fichier /etc/default/gandi

SSH : l'écoute sur un autre port ou le port-knocking

Cette technique permet d'éviter partiellement les attaques par brute-force, le service SSH n'étant ouvert que si vous tapez d'abord sur un autre port défini par vos soins.

Il sera indisponible si le visiteur n'a pas encore effectué d'action sur un port précis, SSH ne pourra alors être attaqué par brute-force ou autre méthode.

Je vous invite à vous reporter aux documentations sur Internet qui expliquent cette technique :

Sur Wikipedia Sur Ubuntu

Outils de sécurité (pare-feu, IDS, ...)

Plusieurs outils à base d'Iptables (règles du pare-feu Netfilter/Linux) peuvent assurer la sécurité et vous rapporter les tentatives de connexion frauduleuses, notez qu'Iptables peut être géré en ligne de commande directement :

  • Les pare-feus : Shorewall, Ufw, Arno-iptables-firewall, Dtc..
  • Les systèmes empêchant les attaques par brute force : Fail2ban..

Tous ces programmes ne prennent pas en compte IPv4 et IPv6 sur une même interface, un pare-feu spécifique pour IPv6 est à prévoir (Shorewall6 par exemple).

Sur les systèmes Unix/BSD, Packet Filter (PF) est le pare-feu usuel.

Vous devez accepter les requêtes de type “ping” pour que le protocole IPv6 soit fonctionnel sur votre serveur virtuel.

Remontées / Reporting

Logwatch/logcheck : reporting quotidien par email - parsing des journaux du serveur
Rkhunter/Chkrootkit : vérification de la présence de rootkits sur le serveur
Ninja/Tiger : reporting système (permissions et modifications des fichiers système)
Debsecan : reporting sur les failles connues des paquets installés sur le serveur FIXME

Activation de SELinux sur CentOs supérieure à 6.0

L'activation de SELinux sur CentOs 6.x a été testé par nos équipes avec un kernel 2.6.32 et 3.2

Vous devez dans un premier temps activer SELinux dans les paramètres avancés du disque, en vous rendant sur la page principale de gestion du disque en question sur le site de gandi.net.

Vous devez alors indiquez dans les champs suivants :

selinux : Activer selinux security : selinux

Puis validez la modification. À noter que le serveur doit être redémarré afin que les changements soit pris en compte. Vous pourrez le vérifier sur votre serveur en exécutant la commande :

# cat /proc/cmdline
console=hvc0 nosep loglevel=8 selinux=1 security=selinux ro root=/dev/xvda1

Puis, ajoutez les lignes suivantes dans le fichier '/etc/fstab' :

none    /selinux    selinuxfs    defaults    0  0

Installez ensuite les packages suivants :

  • libselinux
  • selinux-policy
  • selinux-policy-<type> (où <type> est minimum, targeted …)

SELinux devrait être activé à partir de là.

Si vous redémarrez votre serveur, vous devrez effectuer des étapes supplémentaires.

Il faudra utiliser semodule pour l'installation, par exemple :

# packages="execmem.pp.bz2 unconfined.pp.bz2 unconfineduser.pp.bz2"
# semodule -n -r oracle-port -b base.pp.bz2 -i $packages -s \
       targeted 2>&1 | grep -v "oracle-port"

La liste des paquets disponibles se trouve dans le fichier '/usr/share/selinux/<type>/*.pp.bz2'.

Vous pouvez également charger les polices en utilisant la commande 'load_policy'.

Si besoin, vous pouvez corriger avec 'fixfiles'. Vous pouvez vérifier le statut de SELinux avec la commande 'sestatus'.

Vous pouvez disposer de plus d'information dans les scripts des paquets selinux-policy-<type>, lisible avec la commande 'rpm -q –scripts', par exemple ''rpm -q –scriptps selinux-policy-minimum'.

Dernière modification: le 11/06/2015 à 09:51 par Gilles L. (Gandi)