====== 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 : [[http://fr.wikipedia.org/wiki/Port_knocking|Sur Wikipedia]] [[http://doc.ubuntu-fr.org/port-knocking|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- (où 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//*.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-, lisible avec la commande 'rpm -q --scripts', par exemple ''rpm -q --scriptps selinux-policy-minimum'.